Java 在XSDSchema 1.0验证中,是否有任何选项可用于检查元素是否具有任何属性?
在XSD文件中,对于一个元素,有几个属性是可选的。Java 在XSDSchema 1.0验证中,是否有任何选项可用于检查元素是否具有任何属性?,java,xml,xsd,schema,xsd-1.0,Java,Xml,Xsd,Schema,Xsd 1.0,在XSD文件中,对于一个元素,有几个属性是可选的。 需要验证中列出的任何属性是否在输入XML文件中可用。在XSD 1.0中,可以使用xs:key来确保元素至少有一个属性。例如: <xs:element name="elem"> <xs:complexType> <xs:attribute name="a" type="xs:int" use="optional" /> <xs:attribute name="b"
需要验证中列出的任何属性是否在输入XML文件中可用。在XSD 1.0中,可以使用xs:key来确保元素至少有一个属性。例如:
<xs:element name="elem">
<xs:complexType>
<xs:attribute name="a" type="xs:int" use="optional" />
<xs:attribute name="b" type="xs:int" use="optional" />
<xs:attribute name="c" type="xs:int" use="optional" />
<xs:attribute name="d" type="xs:int" use="optional" />
</xs:complexType>
<xs:key name="attributePresent">
<xs:selector xpath="." />
<xs:field xpath="@*" />
</xs:key>
</xs:element>
例如,如果要保证元素中至少存在一个b或c属性,则可以使用
<xs:field xpath="@b | @c" />
您想做什么?如果我理解得很好,您可能会定义一个模式,告诉我这样的内容:“对于这个元素foo-e
,我希望设置以下属性之一foo-att-1
或foo-att-a2
或foo-att-a3
”?是的,您是对的。我们可以在XMLSchema1.1中使用xs:assert语句实现这一点。但需求在1.0中。在这种情况下,我担心使用纯模式是不可能的。我建议您另外添加一些规则……因为Schematron和XSD1.1的断言约束非常通用,所以可以很安全地说它们适合您。但是,如果您提供希望有效的XML和希望无效的XML的具体示例,我们可能会找到一个可接受的XSD1.0解决方案来解决您的特定问题。不过,您必须更准确地说明这一点,这样才有可能。只有在只指定了一个属性的情况下才有效——如果指定了多个属性,则验证失败。示例XML:
xmllint生成:元素元素:模式有效性错误:元素“{mynamespace}elem”,属性“b”:键标识约束“{mynamespace}attributePresent”字段的XPath“@*”计算结果为具有多个成员的节点集。
使用获得相同结果。