xsd:强制在元素集中出现单个属性值
xsd: Enforce single occurrence of attibute value in set of elements
我是 xsd 文件领域的新手,遇到了一个问题。
我有一个这样的 xml 文件:
<config version="1.6">
<properties>
<parameter name="path">Hello</parameter>
<parameter name="name">World</parameter>
<parameter name="run">13</parameter>
<parameter name="rate">37</parameter>
</properties>
</config>
我已经创建了一个 xsd 来验证具有 'name' 属性的参数列表:
<xs:element name="config" type="configType"/>
<xs:complexType name="parameterType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="name"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="propertiesType">
<xs:sequence>
<xs:element type="parameterType" name="parameter" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="configType">
<xs:sequence>
<xs:element type="propertiesType" name="properties"/>
</xs:sequence>
<xs:attribute type="xs:float" name="version"/>
</xs:complexType>
此外,我还需要确保恰好存在一个属性名称为“path”的参数元素。遗憾的是无法更改输入 xml.
你有什么想法吗?
编辑:删除了 xsd 1.1 标签,因为您的工具“XML Check”不支持 xsd 1.1
如果您按照标签的建议使用 XSD 1.1,那很简单:
<xs:assert test="count(parameter[@name='path'])=1"/>
我是 xsd 文件领域的新手,遇到了一个问题。 我有一个这样的 xml 文件:
<config version="1.6">
<properties>
<parameter name="path">Hello</parameter>
<parameter name="name">World</parameter>
<parameter name="run">13</parameter>
<parameter name="rate">37</parameter>
</properties>
</config>
我已经创建了一个 xsd 来验证具有 'name' 属性的参数列表:
<xs:element name="config" type="configType"/>
<xs:complexType name="parameterType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="name"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="propertiesType">
<xs:sequence>
<xs:element type="parameterType" name="parameter" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="configType">
<xs:sequence>
<xs:element type="propertiesType" name="properties"/>
</xs:sequence>
<xs:attribute type="xs:float" name="version"/>
</xs:complexType>
此外,我还需要确保恰好存在一个属性名称为“path”的参数元素。遗憾的是无法更改输入 xml.
你有什么想法吗?
编辑:删除了 xsd 1.1 标签,因为您的工具“XML Check”不支持 xsd 1.1
如果您按照标签的建议使用 XSD 1.1,那很简单:
<xs:assert test="count(parameter[@name='path'])=1"/>