我遇到嵌套XSD的问题。我有一个MAIN文件,我的文档结构有相同的HEADer(我想保持它分开 - 效果很好)我希望有几个主体,取决于它的内容。 我的问题是如何以正确的方式连接它?
MAIN.XSD:
<xs:schema id="MAIN" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="">
<xs:include schemaLocation="HEAD.xsd"/>
<xs:element name="MAIN">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="HEAD" type="HEADType"/>
<xs:element name="BODY" type="BODYType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
HEAD.XSD:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="HEAD" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="" >
<xs:complexType name="HEADType">
<xs:all minOccurs="1" maxOccurs="1">
<xs:element name="USER">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z_]+"></xs:pattern>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:schema>
我的想法是:
但是,我不认为这是“正确”的方式。
答案 0 :(得分:2)
根据您的描述,您尝试实施的内容通俗地称为“悬挂定义”。
此方法最常见的问题是,当您尝试编辑Main.xsd时,典型的XSD架构编辑器会抱怨缺少定义
你的第一个想法有点令人困惑;仍然,我认为不需要它只是因为第二个是你真正需要做的。我认为虽然separately
指的是不同的文件,但你必须同时加载它们。你将如何做到这一点取决于需要消耗XSD的工具,所以我无法真正帮助你。
假设.NET,如果您在XmlSchemaSet对象中一次加载3个XSD文件(Main,Head和Body_Customer),它将完全按照您的意愿工作。
关于“正确”......这完全取决于您组织中的XSD实践所接受的内容。就我而言,悬空类型是一种完全有效的XSD设计模式。