我有两个 xsd 文件。第一个文件是common.xsd
,另一个是node.xsd
. 两者node.xsd
和common.xsd
共享相同targetNamespace
。common.xsd
引用使用属性element
中定义的。但是,不包括在using或. 但是我使用这些 xsd 文件验证的 XML 通过了验证(尝试了所有角落用例)。node.xsd
ref
node.xsd
common.xsd
include
import
我想知道这怎么可能。这是因为它们共享相同的命名空间吗?在 XSD中引用一个element
不包括/导入的合法吗?
编辑:
简化的代码片段(实际的 xsd 要复杂得多,出于更大的原因,它们以这种格式编写):
常见的.xsd
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:my="my-namespace"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
targetNamespace="my-namespace"
elementFormDefault="qualified">
<xsd:element name="common" type="my:commonType" />
<xsd:complexType name="commonType">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element ref="my:node"/>
<!-- few other elements -->
</xsd:choice>
</xsd:complexType>
</xsd:schema>
节点.xsd
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:my="my-namespace"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
targetNamespace="my-namespace"
elementFormDefault="qualified">
<xsd:include schemaLocation=common.xsd"/>
<xsd:element name="node" type="my:nodeType"
substitutionGroup="my:common" />
<xsd:complexType name="nodeType">
<xsd:complexContent>
<xsd:extension base="my:commonType">
<!-- some 5-7 attributes -->
<xsd:anyAttribute/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:schema>
这些 xsd 让我可以在其自身内多次嵌套元素。例如
<my:node>
<my:node />
<my:node>
<my:node />
</my:node>
</my:node>
您可以观察到my:node
在common.xsd
不包括node.xsd
. (好奇这甚至是如何工作的。)