XSD强制使用XML中的一个或两个元素

时间:2018-03-26 11:23:19

标签: xml xsd xsd-validation

使用以下XSD,我想在我的XML中强制执行: 1. D Element可用 2.或E元素将F作为其子元素。并且F元素具有带H值的G属性。 3.或满足1和2条件

但我无法找到任何方法来实现它。 请帮我解决一下这个。提前谢谢。

.selectize-control .selectize-dropdown {
  position: static !important;
}

谢谢, 阿卡什

1 个答案:

答案 0 :(得分:0)

您需要的验证类型是动态行为。 XSD无法进行此类验证。但是,还有另一个标准Schematron可以执行动态验证。

  

什么是Schematron?

     

用于对XML文档中是否存在模式进行断言的语言。

以下是使用 Schematron 语言的示例XSD:

<xs:element name="sampleElement" type="sampleElement_Type">
<xs:annotation>
    <xs:appinfo>
        <sch:pattern name="Co-occurrence constraint on attribute Title" xmlns:sch="http://purl.oclc.org/dsdl/schematron">
            <!--<sch:rule context="sampleElement">-->
            <xs:attribute name="Attr1" use="required" form="unqualified">
                <xs:simpletype>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="XYZ" />
                        <xs:enumeration value="PQRS" />
                    </xs:restriction>
                </xs:simpletype>
            </xs:attribute>

            <xs:attribute name="Attr2" use="required" form="unqualified">
                <xs:simpletype>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="ABC" />
                        <xs:enumeration value="DEF" />
                    </xs:restriction>
                </xs:simpletype>
            </xs:attribute>
            <sch:rule context="*[@Attr1]">
                <sch:assert test="(@Attr1 = 'XYZ' and @Attr2 = 'ABC')">If the Attr1 is "XYZ" then the Attr2 must be "ABC".</sch:assert>
            </sch:rule>
            <sch:rule context="*[@Attr1]">
                <sch:assert test="(@Attr1 = 'PQRS' and @Attr2 = 'DEF')">If the Attr1 is "PQRS" then the Attr2 must be "DEF".</sch:assert>
            </sch:rule>
        </sch:pattern>
    </xs:appinfo>
</xs:annotation>

此架构声明以下规则:

  1. 如果属性Attr1的值为XYZ,则属性Attr2的值应为ABC
  2. 如果属性Attr1的值为PQRS,则属性Attr2的值应为DEF