我无法弄清楚这段代码有什么问题:
<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>
我做错了什么?
答案 0 :(得分:1)
它被称为唯一粒子归因(UPA),它基本上说解析器必须知道它在模型中的位置而不向前看。在这种情况下,标签名称在您选择的选项之间是相同的,解析器将不知道要应用的模型。
你的问题基本上是根据外部条件来控制属性的使用(必需与可选),这里是tiles元素的计数。 XSD 1.0无法实现这一点。带有XSD 1.0的Schematron是一种选择;其他人可能会建议XSD 1.1,因为对它的支持相当低,所以在这里找到可行的解决方案还为时过早。