Xml 如何:创建具有属性、基类型和子元素的complexType?

Xml 如何:创建具有属性、基类型和子元素的complexType?,xml,xsd,xml-validation,complextype,Xml,Xsd,Xml Validation,Complextype,我希望能够在以下3种不同的情况下验证xml元素“trace”。 我可以得到要验证的限制和属性,我可以得到要验证的属性和子元素,但我不能得到所有三个来验证。即,案例2是问题所在;simpleContent的complextypes似乎不能包含序列或选项。非常感谢你的帮助 案例1 <trace level="info" ref="my_string"/> 案例2 <trace level="info">

我希望能够在以下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>
ipsum
我的模式

<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>


事实上,我发现这个问题已经存在,但解决方案并不理想。幸运的是,我找到了一个解决方案,它非常简单:“complexType”有一个属性,“mixed”,对于这样的情况,它可以而且应该设置为true。更多信息请点击编辑。这里有三种不同的结构。为什么要给它们取相同的名字?不幸的是,我不能更改XML,它是给定的。