我有一个类似于以下内容的XML文件:
<root>
<node1></node1>
<node2></node2>
<node3></node3>
<line>
<line1></line1>
<line2></line2>
<line3></line3>
</line>
<line>
<line1></line1>
<line2></line2>
<line3></line3>
</line>
</root>
以下是我的限制:
<node1>
,<node2>
,<node3>
必须每次都出现一次,并且可能会出现在
任何订单<node1>
,<node2>
,<node3>
必须全部发生在开头之前
<line>
元素<line>
元素的任意数量,但必须至少有一个<line1>
,<line2>
,<line3>
中的<line>
元素必须每次都出现一次,并且可以按任意顺序出现
<node#>
,所以解决方案必须很好地扩展。我正在尝试设计一个XSD文件来验证这个XML,但无济于事。问题是我实际上在查看<xs:all>
块(对于我的<node#>
s),然后是<xs:sequence>
或<xs:choice>
块maxOccurs="unbounded"
(对于我的<line>
s,但似乎没有有效的方法可以使用XSD 1.0。
答案 0 :(得分:1)
只有六个可能的(1,2,3)序列以任何顺序出现一次,因此将它们全部枚举是可行的。当然这不会扩展,但它可能对你有用。那将是
(1((2,3)|(3,2)) | 2((1,3)|(3,1)) | 3((1,2)|(2,1))
使用“,”表示序列和“|”可供选择。
您唯一的其他选项不是XSD 1.0。例如。 XSD 1.1或schematron。