2012-04-15 60 views
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> 

我在做什么错?

回答

1

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

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

+0

非常明确的解释。非常感谢! – 2012-04-15 16:40:49

相关问题