2013-02-01 98 views
0

我正在創建一個XSD/CAM原型來建模磁盤文件系統。我正在使用免費的CAM軟件和Windows記事本(當我遇到CAMed軟件中的錯誤時)。在我的原型中,我有一個名爲「Hold」的元素。保持通知文件系統保持(不刪除)目錄,文件等,因爲它是應用程序需要的。 (將Hold視爲硬鏈接。)在原型中,Hold元素可以是多個元素的子元素,而不僅僅是一個,但在所有情況下都是相同的。通常,我只是簡單地將Hold元素複製並粘貼到它所屬的每個父級(例如目錄,文件等)中,但是,CAMed軟件沒有這種功能,我不想手動複製和粘貼在記事本中的XML(然後我會有許多副本來更新和管理。)CAMed/XSD:定義屬於許多父元素的元素

是否可以指定一個元素可以屬於多個父級,而不需要複製原始元素定義?謝謝!

回答

0

當然。定義名爲Hold的頂級元素。 ('頂層'是指該聲明顯示爲xs:schema的子元素,並且對於特定的複雜類型不是本地的。)然後從複合類型中引用該元素聲明,其中Hold應出現在該類型聲明中。

所以你保留的聲明將是這樣的:

<xs:element name="Hold" type="HoldType"/> 
<!--* HoldType left as exercise for the reader ... *--> 

和你的類型的目錄,文件等的聲明將涉及持有,使用XS的ref屬性:元素元素,而不是使用名稱屬性聲明一個局部保持元件:

<xs:type name="DirectoryType"> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"> 
    <xs:element name="blort" type="xs:gYear"/> 
    <xs:element name="farble" type="Farble"/> 
    <xs:element ref="cadwallader"/> 
    <xs:element ref="Hold"/> 
    </xs:choice> 
<xs:complexType> 

這裏,元素的blort'和「farble」是局部聲明,而「保持」和「卡德瓦拉德」是供給到頂層聲明引用別處。

+0

哇,這很容易!在我通過CAMed導出最終的XSD之後,我會繼續努力。非常感謝! – user2033836