如何使用xsd命名空间

时间:2016-04-12 10:54:59

标签: xml xsd namespaces

我在很多地方搜索过命名空间,但没有得到满意的答案

用于以下xsd文件

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           targetNamespace="http://www.example.org/schema" 
           xmlns="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">

           <xs:element name="product"/>

</xs:schema>

对于上面的代码,以下是我的理解。如果我错了,请纠正我。我也有同样的问题:

  1. xmlns:xs="http://www.w3.org/2001/XMLSchema" 是存储我在当前文档中使用的所有元素和数据类型的定义的地方。

  2. targetNamespace="http://www.example.org/schema 实际上是将存储当前文件的包名称。

  3. xmlns="http://www.w3.org/2001/XMLSchema" :不知道这是什么

  4. ** xmlns:tns**与targetNamespace相同。那我们为什么单独使用呢?

  5. 第一行和第三行的用途

1 个答案:

答案 0 :(得分:2)

首先,两个声明:

xmlns:xs="http://www.w3.org/2001/XMLSchema"  
xmlns="http://www.w3.org/2001/XMLSchema"

表示两个名称前缀为&#34; xs&#34;和未加前缀的名称,表示其含义在W3C XSD规范中定义的名称。这使您可以选择撰写<xs:element>或仅<element>。宣布两者并没有特别的理由;一直使用一种形式或另一种形式更好。

属性targetNamespace="http://www.example.org/schema"表示此模式正在定义名称空间http://www.example.org/schema中的元素(可能还有属性)的结构,这可能是您作为设计控件的名称空间(我通过它意思是,你不应该使用那个特定的命名空间,除非在一个例子中,因为它不是你的命名空间。)

看到像

这样的声明很常见
xmlns:tns="http://www.example.org/schema"

将前缀(在本例中为&#34; tns&#34;)绑定到架构的目标命名空间。如果您有一个模式组件引用同一目标名称空间中的另一个模式组件(例如引用类型的元素声明),则有两种方法:

(1) <xs:element name="e" type="t"/>

这适用于&#34; xs&#34;前缀绑定到&#34; http://www.w3.org/2001/XMLSchema&#34;默认命名空间与目标命名空间相同。

(2) <element name="e" type="tns:t"/>

当默认命名空间为&#34; http://www.w3.org/2001/XMLSchema&#34;而且&#34; tns&#34; prefix绑定到目标名称空间。