0

我有一个如下所示的 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>必须每个都只出现一次,并且可以以任何顺序出现
  • 我无法控制 XML。它是由一些第三方软件提供给我的。
  • 我必须使用 XSD 1.0。
  • 这是一个简化的例子。我正在查看 20 个左右的独特<node#>s,因此该解决方案必须能够很好地扩展。

我正在尝试设计一个 XSD 文件来验证此 XML,但无济于事。问题是我本质上是在查看一个<xs:all>块(对于我<node#>的 s),然后是一个<xs:sequence>or<xs:choice>maxOccurs="unbounded"(对于我<line>的 s),但似乎没有有效的方法可以使用 XSD 1.0 执行此操作。

4

1 回答 1

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。

于 2014-04-25T20:17:33.417 回答