Rob*_*ben 3 xml xsd xsd-validation
我试过了所有的 <xs:all>, <xs:choice>, and <xs:sequence>
这些都不能令我满意.
有谁知道你会如何验证这样的东西.
<Menu>
<SubMenu>
<MenuItem .. />
<MenuItem .. />
<MenuItem .. />
</SubMenu>
<MenuItem .. >
<MenuItem .. >
</Menu>
Run Code Online (Sandbox Code Playgroud)
其中,在<Menu>标签下
<SubMenu>和/或<MenuItem>可以以任何顺序出现任意次数(0-n).但至少其中一个必须至少发生一次.
忽略SubMenu标记内的验证.
非常感谢这件事的任何帮助.
如果我已正确理解您的要求,那么您可以将模型短语称为"SubMenu或MenuItem之一,后跟零个或多个SubMenu或MenuItem元素".这可以很容易地表达为两个选择的序列:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- whatever your element needs to be modelled as here -->
<xs:element name="MenuItem">
<xs:complexType>
<xs:attribute name="text"/>
</xs:complexType>
</xs:element>
<!-- only modelling the structure of the child elements here -->
<xs:element name="SubMenu">
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs="1" maxOccurs="1">
<xs:element ref="MenuItem"/>
<xs:element ref="SubMenu"/>
</xs:choice>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="MenuItem"/>
<xs:element ref="SubMenu"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Menu">
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs="1" maxOccurs="1">
<xs:element ref="MenuItem"/>
<xs:element ref="SubMenu"/>
</xs:choice>
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element ref="MenuItem"/>
<xs:element ref="SubMenu"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
你可以使用Menu和SubMenu的共享全局类型更干净地建模,但这种方式我希望相对明显.