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

joj*_*o10 40 xsd

什么是targetNamespace功能?

<schema xmlns="http://www.w3.org/2001/SchemaXML"
        targetNamespace="http://www.example.com/name"
        xmlns:target="http://www.example.com/name">
Run Code Online (Sandbox Code Playgroud)

据我所知,它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命名空间的属性呢?

Sha*_*aun 47

在这里回答得很好:targetNamespace和没有前缀的xmlns,有什么区别?

重述:

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

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

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

  • `this属性定义了这个模式要定位的命名空间.我觉得这很混乱.架构是"定位"命名空间?因此,如果我使用`targetNamespace ="google.com"制作架构,我刚刚在Google上创建了一个命名空间?那又怎样?它会搞砸其他人的模式吗?另外,使用什么前缀? (6认同)

s_t*_*v_e 7

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


Kev*_*vin 3

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

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