targetNamespace和xmlns:target之间有什么区别?

时间:2010-11-08 18:46:58

标签: xsd

targetNamespace的功能是什么?

<schema xmlns="http://www.w3.org/2001/SchemaXML"
        targetNamespace="http://www.example.com/name"
        xmlns:target="http://www.example.com/name">

我理解xmlns="http://www.w3.org/2001/SchemaXML定义了Schema XML命名空间。

我也理解xmlns:target="http://www.example.com/name"如果我使用前缀“target”创建自己的模式,则为我自己的词汇定义名称空间。它充当URI http://www.example.com/name的代理或占位符。

这似乎足以定义命名空间参与者所需的边界和词汇表。那么为什么我需要targetNamespace属性来复制http://www.example.com/name命名空间?

3 个答案:

答案 0 :(得分:42)

在这里回答得非常好:targetNamespace and xmlns without prefix, what is the difference?

重申:

  • targetNamespace="" - 由于当前的XML文档是架构,因此该属性定义了此架构要定位或验证的命名空间。

  • xmlns="" - 为所有未加前缀的元素定义当前文档中的默认命名空间(即yada:中没有<yada:elementName>

  • xmlns:target="" - 此处您只是使用前缀target:定义自己的命名空间,这与前两个特殊情况无关。

答案 1 :(得分:6)

targetNamespace为其他xml和xsd文档声明一个名称空间,以引用此模式。在这种情况下,目标前缀引用相同的命名空间,您可以在此模式定义中使用它来引用在同一模式定义中定义的其他元素,属性,类型等。

答案 2 :(得分:2)

xmlns:target="http://www.example.com/name"中的前缀“target”并不特别。架构处理器如何知道您希望它成为架构的目标命名空间? targetNamespace就是这样 - 它声明了模式组件所属的命名空间。

N.B。并非架构文档中的所有内容都进入targetNamespace。注意“schema”元素上的“elementFormDefault”和“attributeFormDefault”属性,以及“element”和“attribute”元素上的属性“form”。