只要有多个元素,就需要属性

时间:2012-04-15 15:07:39

标签: xml xsd

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

<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>

我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

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