具有不同属性和元素的相同元素名称的XML模式

时间:2013-06-24 10:38:03

标签: xslt xsd

我正在尝试制作一个XML Schema - 在我看来,这是一个困难的结构。假设我在一个'成员'标签中有这些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>

在此上下文中只需要成员的name-attribute。

我希望能够验证这两种结构。为此,我尝试定义两个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>

我的问题是我不能在同一范围内定义两个具有不同类型的'member'元素:

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

1 个答案:

答案 0 :(得分:2)

这个规则不可能被称为“元素声明一致”。

  

元素声明模型组的一致规则   (http://www.w3.org/TR/xmlschema-1/#cos-element-consistent)排除   不一致的元素声明,如下面两个冲突   元素的定义,即不能同时是“int”和a   “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>