在使用xsd的子级中,将xml属性限制为仅等于特定值1次
我想对.xsd模式中的属性实现一个限制 我有在使用xsd的子级中,将xml属性限制为仅等于特定值1次,xml,xsd,Xml,Xsd,我想对.xsd模式中的属性实现一个限制 我有default属性(布尔值),它在所有子级中应该有正好1true值。属性不是必需的,匹配它的意思应该与falsevalue相同 有效: 一个 两个 三 有效: 一个 两个 三 无效: 一个 两个 三 无效:(默认值为true的元素不应至少为1) 一个 两个 三 那么问题是: 是否可以使用.xsd实现这样的限制 如果是,如何操作?如果您使用的是XML模式1.1,则可以通过XPath 2.0使用xs:assert如下(未测试): 如果您
default
属性(布尔值),它在所有子级中应该有正好1true
值。属性不是必需的,匹配它的意思应该与false
value相同
有效:
一个
两个
三
有效:
一个
两个
三
无效:
一个
两个
三
无效:(默认值为true的元素不应至少为1)
一个
两个
三
那么问题是:
是否可以使用.xsd实现这样的限制
如果是,如何操作?如果您使用的是XML模式1.1,则可以通过XPath 2.0使用xs:assert如下(未测试):
如果您使用的是XML Schema 1.0,您不能在模式中表达这样的约束,但可以在应用程序级别使用或检查它。我认为您不能在纯XML Schema 1.0中表达这一点,您需要XML Schema 1.1断言或类似schematron的东西。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="1.1">
<xs:element name="Parent">
<xs:complexType>
<xs:sequence>
<xs:element name="Child" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="default" type="xs:boolean">
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:assert test="count('./Child[@default = true]') = 1"/>
</xs:complexType>
</xs:element>
</xs:schema>