如果没有属性,我如何限制param元素的基数? 我希望它的最大出现次数为1(它在应用级别表现为默认参数) 所以这是有效的
<xml>
<param>value</param>
<param id="1">value</param>
<param id="2">value</param>
<param id="3">value</param>
</xml>
但这不是
<xml>
<param>value</param>
<param>value2</param>
<param id="1">value</param>
<param id="2">value</param>
<param id="3">value</param>
</xml>
到目前为止,我尝试了
一个param xs的定义:没有指定attirbute的元素和另一个带有指定属性的元素,包含在xs:choice中。但它不允许我使用两个具有相同名称的元素
答案 0 :(得分:1)
如果您正在设计架构,那么最好让<param>
具有不同的名称,因为它毕竟是。在 XSD 1.0 中,具有相同名称的元素应包含代表相同的类型。如果它具有固定值的id
属性,则可以使用唯一性约束(这也会影响其他param
元素)限制具有相同id
的任何元素。这也会将其发生限制为0或1。
如果您无法更改XML,则可以选择使用具有 XSD 1.1 支持的解析器。在XSD 1.1中,您可以使用alternative types来获取相同的元素。您还可以使用assertions使用XPath强制执行规则,例如在父节点的上下文中使用count(param[not(@id)]) <= 1
之类的测试:
<xs:complexType>
<xs:sequence>
<xs:element name="param" maxOccurs="unbounded">...</xs:element>
</xs:sequence>
<xs:assert test="count(param[not(@id)]) le 1" />
</xs:complexType>