如何编写xsd模式,以便它将验证以下xml:
<myElement>
<dogs>
<dog> .... </dog>
<dog> .... </dog>
....
</dogs>
<cats>
<cat> .... </cat>
<cat> .... </cat>
....
</cats>
</myElement>
在我的情况下,所有这些类型都已准备就绪,我的意思是元素:myElement, dog, cat
,我遇到问题的是创建两个列表:cats
和dogs
。怎么做?
答案 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模式中的“箭头”。如果需要,将内容与它们的使用位置分开定义也会使后期的重构变得更容易。