我希望能够在下面介绍的 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>