我在很多地方搜索过命名空间,但没有得到满意的答案
用于以下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>
对于上面的代码,以下是我的理解。如果我错了,请纠正我。我也有同样的问题:
xmlns:xs="http://www.w3.org/2001/XMLSchema"
是存储我在当前文档中使用的所有元素和数据类型的定义的地方。
targetNamespace="http://www.example.org/schema
实际上是将存储当前文件的包名称。
xmlns="http://www.w3.org/2001/XMLSchema"
:不知道这是什么
** xmlns:tns**
与targetNamespace相同。那我们为什么单独使用呢?
第一行和第三行的用途
答案 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绑定到目标名称空间。