Xml 只要有';不止一个元素

Xml 只要有';不止一个元素,xml,xsd,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> 我做错了什么?它被称为唯一粒子属性(Unique Par

我不知道这个代码有什么问题:

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

我做错了什么?

它被称为唯一粒子属性(Unique Particle Attributes,UPA),它基本上说解析器必须知道它在模型中的位置,而无需预先考虑。在这种情况下,如果您选择的选项之间的标记名相同,解析器将不知道应用哪个模型


您的问题基本上是基于外部条件(这里是tiles元素的计数)来控制属性的使用(必需与可选)。这在XSD1.0中根本不可能实现。XSD1.0的Schematron是一种选择;其他人可能会建议使用XSD 1.1,因为对它的支持率很低,所以在这里找到一个可行的解决方案还为时过早。

它被称为唯一粒子属性(Unique Particle Attributes,UPA),它基本上说解析器必须知道它在模型中的位置,而无需预先考虑。在这种情况下,如果您选择的选项之间的标记名相同,解析器将不知道应用哪个模型

您的问题基本上是基于外部条件(这里是tiles元素的计数)来控制属性的使用(必需与可选)。这在XSD1.0中根本不可能实现。XSD1.0的Schematron是一种选择;其他人可能会建议使用XSD1.1,但由于对XSD1.1的支持率很低,因此在这里找到可行的解决方案还为时过早

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