我要做的是,声明一个名为“data”的父元素,它们具有这些元素的10个子元素是有条件的。
我的XSD是:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" elementFormDefault="qualified" attributeFormDefault="unqualified" vc:minVersion="1.1">
<xs:element name="data" >
<xs:complexType>
<xs:sequence>
<xs:element name="sub_data" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:all >
<xs:element ref="A"/>
<xs:element ref="B" minOccurs="0" maxOccurs="1"/>
<xs:element ref="C"/>
<xs:element ref="D"/>
<xs:element ref="E"/>
<xs:element ref="F"/>
<xs:element ref="G"/>
<xs:element ref="H"/>
<xs:element ref="I"/>
<xs:element ref="J"/>
<xs:element ref="K"/>
<xs:element ref="L"/>
<xs:element ref="M"/>
<xs:element ref="N"/>
<xs:element ref="element_group"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="status"/>
</xs:complexType>
</xs:element>
<xs:element name="O" type="xs:string" substitutionGroup="element_group">
<xs:element name="P" type="xs:string" substitutionGroup="element_group">
<xs:element name="Q" type="xs:string" substitutionGroup="element_group">
</xs:schema>
要求是:
<data>
的一部分,这意味着从<A>
到{{1确切地说是四, 从<Q>
到<A>
可以合并其中任何一个,但最终的数量只有四个,请帮帮我。
现在我无法在<Q>
中设置maxOccures
,在设置maxOccures后没有编译xsd。
答案 0 :(得分:1)
处理此问题的最简单方法可能是使用XSD 1.1并在父级上使用断言来指定必须有完全(或最多)四个子级。你还需要让所有组中的每个孩子都可选,因为它们中的13个不会出现。
最好的方法可能是重新设计XML,以便更好地使用模式语言而不是对抗它。但是,很难就此提出建议,因为你的例子足够抽象,不清楚为什么要强加你提到的要求。