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