如何:使用属性,基本类型和子元素创建complexType?

时间:2013-06-17 15:43:22

标签: xml xsd xml-validation complextype

我希望能够在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>

0 个答案:

没有答案