XML的XSD 1.1架构,其中多个元素具有相同的名称和diff类型

时间:2018-12-20 11:44:59

标签: xml xsd xsd-1.1

我们如何使用XSD 1.1为下面的XML编写XSD模式,因为使用XSD 1.0我遇到了一些问题,因为我们使用的元素名称与diff类型(属性名称和类型)相同,这在XSD 1.0和I中是无效且含糊的认为在XSD 1.1中可能有某种方法(可能是替代方法/断言)来解决此问题。

<?xml version="1.0" encoding="UTF-8"?>
<SETTINGS>
    <CLEANING amount="40"/>
    <CLEANING name="abcd"/>
    <CLEANING value="0.01"/>
</SETTINGS>

不幸的是,我们不能更改XML格式(它包含具有diff属性类型的多个元素),我们需要为此XML编写XSD模式,但要限制属性值。

根据下面的注释,如下所示创建了架构,但是在验证以上xml时仍然出现错误。

<!-- Created with Liquid Studio 2018 (https://www.liquid-technologies.com) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

    <xs:element name="SETTINGS" type="settingsType"/>

    <xs:element name="CLEANING" type="cleaningType">
        <xs:alternative type="amountType" test="exists(@amount)"/>
        <xs:alternative type="nameType" test="exists(@name)"/>
        <xs:alternative type="valueType" test="exists(@value)"/>
    </xs:element>

    <xs:complexType name="settingsType">
        <xs:sequence>
            <xs:element ref="CLEANING" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>


    <!-- Base type -->
    <xs:complexType name="cleaningType">
    </xs:complexType>


    <!-- Type amount -->
    <xs:complexType name="amountType">
        <xs:complexContent>
            <xs:extension base="cleaningType">
                <xs:attribute name="amount" type="xs:integer" use="required"/>
                <xs:anyAttribute />
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <!-- Type name -->
    <xs:complexType name="nameType">
        <xs:complexContent>
            <xs:extension base="cleaningType">
                <xs:attribute name="name" type="xs:string" use="required"/>
                <xs:anyAttribute />
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <!-- Type value -->
    <xs:complexType name="valueType">
        <xs:complexContent>
            <xs:extension base="cleaningType">
                <xs:attribute name="value" type="xs:float" use="required"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

</xs:schema>

错误 严重性位置文件名消息

7:66 schema.xsd s4s-elt-must-match.1:“ CLEANING”的内容必须匹配(注释?,(simpleType | complexType)?((唯一| key | keyref)*))。从以下位置开始发现了一个问题。

4:24 sample.xml cvc-complex-type.3.2.2:不允许在元素“ CLEANING”中显示属性“ name”。

0 个答案:

没有答案