XML - 固定类型的元素列表 - 正确的模式

时间:2017-04-20 10:08:03

标签: xml xsd

如何编写xsd模式,以便它将验证以下xml:

<myElement>
   <dogs>
     <dog> .... </dog>
     <dog> .... </dog>
     ....
   </dogs>

   <cats>
     <cat> .... </cat>
     <cat> .... </cat>
     ....
   </cats>

</myElement>

在我的情况下,所有这些类型都已准备就绪,我的意思是元素:myElement, dog, cat,我遇到问题的是创建两个列表:catsdogs。怎么做?

1 个答案:

答案 0 :(得分:0)

在您的架构中,您可以添加以下内容:

<xs:complexType name="catsType">
    <xs:sequence>
        <xs:element ref="cat" minOccurs="1" maxOccurs="unbounded" />
    </xs:sequence>
</xs:complexType>

<xs:element name="cats" type="catsType" />

这会创建一个名为catsType的复杂类型,表明其内容是一个或多个cat元素的序列。接下来定义名称为cats的元素。然后可以引用此元素,例如在myElement的定义中。或者,您可以在任何位置定义具有所选名称的元素,并声明其类型为catsType

也可以只提供内联定义,如果你不需要在cats元素之外重复使用它就可以了:

<xs:element name="cats">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="cat" minOccurs="1" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

cats元素现在可以像以前一样使用,但定义是本地的。

您决定在线进行什么,以及哪些单独取决于哪些定义或元素出现在多个地方,这也是一种风格问题。我更喜欢通过将定义嵌套太深来避免XML模式中的“箭头”。如果需要,将内容与它们的使用位置分开定义也会使后期的重构变得更容易。