2011-08-20 30 views
0

有AppData元素包含一個抽象元素Document。XSD:如何用具體的抽象類型實現聲明元素?

<xs:element name="AppData"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element ref="tns:Document"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:element name="Document" type="tns:TDocument" abstract="true"/> 

<xs:complexType name="TDocument"> 
    <xs:sequence> 
     <xs:any namespace="##any" processContents="lax"/> 
    </xs:sequence> 
</xs:complexType> 

也有文獻的兩個不同的實例中的元素:

<xs:element name="Rq3" type="tns:Y" substitutionGroup="smev:Document"/> 
<xs:element name="Rq4" type="tns:Z" substitutionGroup="smev:Document"/> 

<xs:complexType name="Y"> 
    <xs:complexContent> 
     <xs:restriction base="smev:TDocument"> 
      <xs:sequence> 
       <xs:element ref="rq3:Doc"/> 
      </xs:sequence> 
     </xs:restriction> 
    </xs:complexContent> 
</xs:complexType> 

<xs:complexType name="Z"> 
    <xs:complexContent> 
     <xs:restriction base="smev:TDocument"> 
      <xs:sequence> 
       <xs:element ref="rq4:Doc"/> 
      </xs:sequence> 
     </xs:restriction> 
    </xs:complexContent> 
</xs:complexType> 

而挑戰是定義應用程序數據元素相應於文獻(RQ3)的具體實例的類型:

架構屏幕截圖:http://i54.tinypic.com/ab74ls.png

如何爲以下xml(包含Rq3的AppData)定義類型:

<x:MessageData> 
    <x:AppData> 
     <rq3:Doc>...</rq3:Doc> 
    </x:AppData> 
</x:MessageData> 

請提出解決方案。

回答

0

如果我正確地理解了這個問題,您希望爲MessageData定義一個元素聲明,允許它包含AppData子項,前提是AppData的子項必須是rq3:Doc元素而不是其他某個成員組(例如rq4:Doc)。那是對的嗎?

這有點棘手,因爲當你說rq3:Doc可以替代Doc時,這意味着它在任何地方都是可以替代的,而不僅僅是在選定的地方可以替代。對於AppData-within-MessageData的本地定義,其類型比全局AppData元素的限制性更好。

+0

是的,你的理解是正確的。感謝您的幫助,我決定不使用替換,並將包含TAppDataBase definiton的模式包含到實現MessageData的許多類型的新模式中。 – il86

相關問題