如何仅对某些元素限制验证

时间:2019-05-27 05:25:37

标签: xml xsd xsd-validation

我有一个xsd,其中定义了一些元素,下面给出一个例子,

<xs:complexType name="carType">
        <xs:complexContent>
            <xs:extension base="vehicleType">
                <xs:all>
                    <xs:element name="mode">
                        <xs:complexType>
                            <xs:choice>
                                <xs:element name="off"/>
                                <xs:element name="driving"/>
                            </xs:choice>
                        </xs:complexType>
                    </xs:element>
                    <xs:element ref="speed" minOccurs="0"/>
                    <xs:element ref="properties"/>
                </xs:all>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:element name="CarA" type="carType" substitutionGroup="vehicleType"/>
<xs:element name="CarB" substitutionGroup="vehicleType"/>

如果有任何XML包含CarA和CarB以外的元素,我想跳过验证。

<CarC>
    <myCarType/>
</CarC>

当前我正在获取'cvc-elt.1:找不到元素'CarC'的声明。'

1 个答案:

答案 0 :(得分:1)

这取决于您用来调用架构验证器的API。查找选项“松散验证”。如果使用Saxon s9api接口,则可以通过设置SchemaValidator.setLax(true)来调用宽松验证。当然,您选择的模式处理器很可能不提供此选项。

松散验证的意思是“如果架构包含相关元素的声明,则针对该声明进行验证;否则将内容视为有效。”