首先,我知道有一个类似的线程试图回答相同的问题。但对我来说不幸的是,这并不能消除混乱。
所以这又是一个问题:
为什么我们需要在 xml 模式文档中指定 targetNamespace?
我们可以在一个 instanceDocument 中定义多个命名空间并将这些命名空间关联到相应的模式文档。targetNamespace 的需求在哪里出现?
首先,我知道有一个类似的线程试图回答相同的问题。但对我来说不幸的是,这并不能消除混乱。
所以这又是一个问题:
为什么我们需要在 xml 模式文档中指定 targetNamespace?
我们可以在一个 instanceDocument 中定义多个命名空间并将这些命名空间关联到相应的模式文档。targetNamespace 的需求在哪里出现?
targetNamespace 是将分配给您正在创建的模式的命名空间。它是实例用来访问它声明的类型的命名空间。在以下代码中,模式将分配给命名空间http://www.somewebsite.com/Something
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.somewebsite.com/Something/Foo">
...
</schema>
在 XML 文档实例中,您通过 xmlns 属性声明将要使用的名称空间。例如:
<purchaseOrder xmlns="http://www.somewebsite.com/Something/Foo"
xmlns:addr="http://www.somewebsite.com/Something/Foo/addr">
<accountName>Shanita</accountName>
<accountNumber>123456</accountNumber>
<addr:street>20 King St</addr:street>
</purchaseOrder>
这里的默认命名空间是http://www.somewebsite.com/Something/Foo
,它引用了之前创建的模式。此命名空间适用于声明它的元素及其子元素,除非它们带有前缀。在示例中,所有元素都属于默认命名空间,除了addr:street
. 既然是前缀,就属于addr命名空间( xmlns:addr="http://www.somewebsite.com/Something/Foo/addr
")