1

我无法弄清楚这段代码有什么问题:

<xs:choice>
  <xs:element name="tiles" type="tiles" minOccurs="1" maxOccurs="1"/>
  <xs:element name="tiles" type="tiles-with-key" minOccurs="2" maxOccurs="unbounded"/>
</xs:choice>

key只要有多个tiles元素,我就需要一个属性:

<!-- one element, no need for the "key" attribute -->
<tiles>
    ...
</tiles>

<!-- two elements, we need the "key" to differentiate them -->
<tiles key="1">
    ...
</tiles>
<tiles key="2">
    ...
</tiles>

我究竟做错了什么?

4

1 回答 1

1

它被称为唯一粒子属性(UPA),它基本上说解析器必须知道它在模型中的位置而无需向前看。在这种情况下,您选择的选项之间的标签名称相同,解析器将不知道要应用什么模型。

您的问题基本上是根据外部条件控制属性的使用(必需与可选),这里是瓦片元素的计数。这在 XSD 1.0 中根本不可能。带有 XSD 1.0 的 Schematron 将是一种选择;其他人可能会建议 XSD 1.1,因为对它的支持相当低,所以在这里找到可行的解决方案还为时过早。

于 2012-04-15T15:17:49.773 回答