2013-06-24 180 views
2

我試圖製作一個XML模式 - 在我看來,這是一個困難的結構。假設我在「成員」標籤中包含這些XML成員。具有不同屬性和元素的相同元素名稱的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> 

只有成員的名稱屬性是必需的在此上下文中。

我希望能夠驗證這兩個結構。要做到這一點,我試圖定義了兩個複雜類型的:

<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模式?

回答

2

這是不可能的這個規則被稱爲「元素聲明一致」。

對模型組 (http://www.w3.org/TR/xmlschema-1/#cos-element-consistent)元素聲明一致規則排除了像元素的以下兩個相互矛盾的 定義 不一致元素聲明,即不能同時一個「INT」,並且在 「串」同組:

(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> 
相關問題