我是XML模式的新手,并希望重用特定的复杂类型,并且它在多个XSD文件中全局关联简单类型。下面是我想在全球范围内使用的一大堆代码:
<element name="Operational">
<complexType>
<sequence>
<element name="Status" type="StatusType"/>
<element name="Description" type="string"/>
</sequence>
</complexType>
</element>
.
.
.
<simpleType name="StatusType">
<restriction base="string">
<enumeration value="Success"/>
<enumeration value="Error"/>
<enumeration value="Warning"/>
<enumeration value="Other"/>
</restriction>
</simpleType>
如果可能的话,你能告诉我吗?如果是这样,我怎么能这样做,以便我可以引用/调用这个复杂类型(和相关的StatusType声明)?
提前致谢!
答案 0 :(得分:1)
是的,这是可能的。您可能需要阅读的构造是XSD include
元素。
如果在名称空间NS1的XSD架构文档(我们称之为'operational.xsd')中声明了Operational元素及其StatusType,那么同一名称空间的其他模式文档可以使这些声明成为模式的一部分。通过包含对operational.xsd的引用来定义。在简单的情况下,我们可能会:
<!--* don't do this at home, at least not this way ... *-->
<xsd:schema xmlns:xsd="..."
xmlns:tns="NS1"
targetNamespace="NS1" >
<xsd:include schemaLocation="operational.xsd"/>
<xsd:element name="e" type="tns:StatusType"/>
<xsd:complexType name="t">
<xsd:sequence>
<xsd:element ref="tns:Operational"/>
</xsd:sequence>
</xsd:complexType>
<!--* these aren't useful declarations, they just
* illustrate the syntax. *-->
</xsd:schema>
在多个地方多次包含同一模式文档是创建互操作性问题的好方法,因此实际上应该避免使用上面说明的简单模式,而不是更冗长但更不容易出错:
这有助于确保不会导入或包含多次特定架构文档,从而消除了XSD处理器中的大量错误以及处理器之间的互操作性问题。