对于仍然感到困惑的人,请考虑这三个xsds。它们都定义了一个全局类型和一个引用它的全局元素定义。
首先,像上面发布的那样一个xsd。它为模式名称空间使用前缀“ xsd”,并为targetNamespace使用默认名称空间:
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.com/"
xmlns="http://example.com/">
<xsd:element name="aGlobalElement" type="aGlobalType"/>
<xsd:simpleType name="aGlobalType">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
</xsd:schema>
现在是相同的xsd,但为目标名称空间定义并使用名称空间前缀:
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.com/"
xmlns:tns="http://example.com/">
<xsd:element name="aGlobalElement" type="tns:aGlobalType"/>
<xsd:simpleType name="aGlobalType">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>
</xsd:schema>
...最后是使用默认名称空间而不是XML模式名称空间的'xsd'的版本:
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.com/"
xmlns:tns="http://example.com/">
<element name="aGlobalElement" type="tns:aGlobalType"/>
<simpleType name="aGlobalType">
<restriction base="string"/>
</simpleType>
</schema>
大多数模式作者选择第一个或最后一个,因为如果默认名称空间工具可用,那么我们也可以将其用于某些东西。