2

我正在尝试制作一个 XML 模式——因为我认为这是一个困难的结构。假设我在一个'members'-tag 中有这些 XML 成员。

<member name="any_name" tab="any_tab" class="any_class">
    <summary>Summary</summary>
</member>

<member name="any_name" tab="any_tab">
    <type class="class_name">
        <member name="Name">
            <summary>Summary</summary>
        </member>
    </type>
</member>

在这种情况下,只需要成员的名称属性。

我希望能够验证这两种结构。为此,我尝试定义两个 complexType:

<xs:complexType name="normalmember">
        <xs:sequence>
            <xs:element name="summary" minOccurs="1" />
        </xs:sequence>
        <xs:attribute type="xs:string" name="name" use="required"/>
        <xs:attribute type="xs:string" name="tab" use="optional"/>
        <xs:attribute type="xs:string" name="class" use="optional"/>
</xs:complexType>

<xs:complexType name="typemember">
    <xs:sequence>
        <xs:element ref="typememberinfo" />
    </xs:sequence>
    <xs:attribute type="xs:string" name="class" use="required" />
</xs:complexType>

我的问题是我无法在同一范围内定义两个具有不同类型的“成员”元素:

    <xs:element name="members">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="member" type="normalmember"></xs:element>
            <xs:element name="member" type="typemember"></xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

如何制作能够验证这两种结构的 XML 模式?

4

1 回答 1

2

这是不可能的,这条规则被称为“元素声明一致”。

模型组的元素声明一致规则(http://www.w3.org/TR/xmlschema-1/#cos-element-consistent)排除了不一致的元素声明,如以下两个相互冲突的元素定义,即不能同一组中的“int”和“string”:

    (example-1)
<xs:complexType name="example-1">   
     <xs:sequence>
         <xs:element name="a" type="xs:int"/>
         <xs:element name="whatever"/>
         <xs:element name="a" type="xs:string"/>   
     </xs:sequence> 
</xs:complexType>
于 2013-06-24T12:00:41.890 回答