是否可以将以下XML文档类表示为XML模式:
示例实例:
<root>
<message type="S">Order saved</message>
<order number="4711"/>
</root>
<root>
<message type="S">3 countries selected</message>
<country value="ES">Spain</country>
<country value="FR">France</country>
<country value="IT">Italy</country>
</root>
我的想法是使用一个xs:element
和xs:any
的序列,如下所示:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="message" maxOccurs="1">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type"></xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:any processContents="skip" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
但是,包含两个“消息”子项的文档将会通过(因为第二个“message”元素将符合xs:any)。
答案 0 :(得分:1)
您可以约束与xs:any匹配的元素名称。在XSD 1.0中,您可以说明了哪些名称空间被接受,在XSD 1.1中您可以更具体:实际上有一个显式关键字notQName =“## definedSibling”,它完全符合您的要求。 Saxon和Xerces目前支持XSD 1.1。