我需要验证包含随机顺序元素的XML,其中一些必须存在,而某些仅一次。顺便说一句,某些元素可以递归嵌套。
例如,一个房间应该包含一个门以及任意数量的盒子和元素。框可以包含其他框或元素。
示例XML:
<Room>
<Element />
<Box>
<Box>
<Element />
<Box></Box>
<Element />
</Box>
<Element />
</Box>
<Door />
<Element />
</Room>
此示例非常简单,但是在我的情况下,<Room>
中可以包含很多元素。递归不是问题。问题是使<Door>
成为必需,并以不需要的顺序以不需要的同级为准。
UPD :问题是关于XSD 1.0,因为我使用的是.NET,并且没有针对XSD 1.1的免费库
答案 0 :(得分:0)
根据我正在阅读的内容,我认为您可能需要使用架构(XSD)指示器。
查看以下链接以了解更多信息:Schema indicators
来自您的问题:
我需要验证包含随机顺序元素的XML
可能的答案:
使用“全部”指示符(请参见link),您可以指定元素以随机顺序排列。
所有指示器
该指标指定子元素可以以任何顺序出现,并且每个子元素只能出现一次:
来自您的问题:
其中某些必须存在,而某些则必须存在
可能的答案:
如果我正确理解它,则需要指定一个元素存在或可以使用的次数。这称为发生,再次可以在后面的link上找到。您必须按照自己的要求确定minOccurs和maxOccurs。
出现指示器
出现指示器用于定义元素出现的频率。
“ maxOccurs”指示符指定元素可以出现的最大次数:
“ minOccurs”指示符指定元素可以出现的最小次数:
包括示例在内的所有内容都可以在XSD/Schema indicators上找到。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Room" type="Room_T"/>
<xs:complexType name="Room_T">
<xs:all>
<xs:element name="Element" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="Box" type="Box_T" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="Door" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
</xs:all>
</xs:complexType>
<xs:complexType name="Box_T">
<xs:all>
<xs:element name="Element" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="Box" type="Box_T" minOccurs="0" maxOccurs="1"/>
</xs:all>
</xs:complexType>
</xs:schema>
我没有检查上面的代码是否有效,但是我认为它一定可以帮助您入门!