1

是否可以将以下 XML 文档类表示为 XML 模式:

  • 根元素“root”恰好包含一个元素“消息”作为第一个子元素
  • 随后,可能有任意进一步的子元素,但没有进一步的“消息”元素

示例实例:

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

但是随后,包含两个“消息”子级的文档将通过(因为第二个“消息”元素将符合 xs:any)。

4

1 回答 1

1

您可以约束将匹配 xs:any 的元素名称。在 XSD 1.0 中,您可以说接受哪些命名空间,在 XSD 1.1 中,您可以更具体:事实上,有一个明确的关键字 notQName="##definedSibling" 完全符合您的要求。Saxon 和 Xerces 目前支持 XSD 1.1。

于 2012-12-04T16:54:55.287 回答