我不得不创建一个复合XML文档,它结合了两个词汇表中的元素和属性。我需要为复合文档创建一个组合模式,并确认复合文档通过验证。我将两个词汇文档合二为一。我不确定如何创建组合架构。
<!--Vocabulary1S
-->
<reg:smartphones xmlns:reg="http://example.com/smartphones/vocab"
reg:schemaLocation="http://example.com/smartphones/vocab/ns vocab1schema.xsd">
<reg:choices>Smart Phones
<reg:phones>
<!-- skip-->
<!--Vocabulary2 -->
<plu:smartphones xmlns:plu="http://example.com/smartphones/vocab"
plu:schemaLocation="http://example.com/smartphones/vocab/ns vocab2schema.xsd">
<plu:pluschoices>Plus Size Choices
<plu:bigphones>
<plu:bigphone>
<!-- not complete code, end of doc-->
<!--start of combined schema Vocab1Schema -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:cc="http://example.com/smartphones/vocab/ns"
targetNamespace="http://example.com/smartphones/vocab/ns"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="SmartPhones">
<!-- Vocab2Schema -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://example.com/smartphones/vocab/ns"
elementFormDefault="qualified" attributeFormDefault="unqualified"
>
<xs:element name="SmartPhones">
<xs:complexType mixed="true">
如果您的两个模式文档包含具有相同targetNamespace的定义,那么您可以简单地使用创建组合模式
<xs:schema targetNamespace="...">
<xs:include schemaLocation="schema1.xsd"/>
<xs:include schemaLocation="schema2.xsd"/>
</xs:schema>
如果您的定义存在冲突,则会出现错误,例如,如果两个模式文档包含“SmartPhones”元素的冲突定义。如果它们有这样的冲突,就无法组合这两个模式(或者在同一个实例文档中引用它们);您必须首先将其中一个实例文档和一个模式转换为不同的命名空间。