0

我希望能够在下面介绍的 3 种不同情况下验证 xml 元素“trace”。我可以获取要验证的限制和属性,我可以获取要验证的属性和子元素,但我无法验证所有三个。即情况2是问题;带有 simpleContent 的 complextypes 似乎不能包含序列或选项。非常感谢帮助。

情况1

<trace level="info" ref="my_string"/>

案例2

<trace level="info">
     <string id="my_str">hipster</string>
</trace>

案例3

<trace level="info">ipsum</trace>

我的架构

<xs:complexType name="string" >
    <xs:simpleContent>
        <xs:extension base="xs:string" >
        <xs:attribute name="id" type="xs:string" />
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>


<xs:complexType name="trace">
    <xs:simpleContent>
        <xs:extension base="string">
            <xs:attribute name="level" type="val" />
            <xs:attribute name="ref" type="xs:anyURI" use="optional"/>
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>

*请注意 string 和 xs:string 之间的区别。

编辑:解决方案

我发现验证每种情况的解决方案是将属性“mixed”添加到“complexType”并将其设置为 true。下面的架构中的示例。

<xs:complexType name="string" >
    <xs:simpleContent>
        <xs:extension base="xs:string" >
        <xs:attribute name="id" type="xs:string" />
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>

<xs:complexType name="trace" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="string" type="string" />
    </xs:choice>
    <xs:attribute name="level" type="val" />
    <xs:attribute name="ref" type="xs:anyURI" use="optional"/>
</xs:complexType>
4

0 回答 0