如何将2种模式与复合词汇文档结合在一起

时间:2019-03-26 03:23:36

标签: xml xsd schema

我必须创建一个复合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">

1 个答案:

答案 0 :(得分:0)

如果您的两个模式文档包含具有相同targetNamespace的定义,那么您可以使用以下方式简单地创建组合模式

<xs:schema targetNamespace="...">
  <xs:include schemaLocation="schema1.xsd"/>
  <xs:include schemaLocation="schema2.xsd"/>
</xs:schema>

如果定义冲突,例如两个架构文档包含“ SmartPhones”元素的定义冲突,则会给您一个错误。如果它们有这样的冲突,则无法组合这两种模式(或在同一实例文档中引用它们)。您必须首先将一个实例文档和一个架构转换为另一个名称空间。