Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在XSDSchema 1.0验证中,是否有任何选项可用于检查元素是否具有任何属性?_Java_Xml_Xsd_Schema_Xsd 1.0 - Fatal编程技术网

Java 在XSDSchema 1.0验证中,是否有任何选项可用于检查元素是否具有任何属性?

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"

在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" 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“@*”计算结果为具有多个成员的节点集。
使用
获得相同结果。