我有一個包含以下類型,基本上保持元素的列表對應於遊戲的mods,其被設計的模式:限制一個XML Schema元素包含一個更具體的類型
<xs:complexType name="OrderedModTemplateType">
<xs:sequence minOccurs="1" maxOccurs="1">
...
<xs:element name="Mods" type="mods:ModsType" minOccurs="1">
<xs:key name="modKey">
<xs:selector xpath="Mods"/>
<xs:field xpath="@id"/>
</xs:key>
</xs:element>
</xs:sequence>
...
</xs:complexType>
的ModsType類型,其正是擁有MODS的名單,看起來是這樣的:
<xs:complexType name="ModsType">
<xs:sequence>
<xs:element name="Mod" type="ModType" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
這是ModType類型,ModsType預計作爲其子:
<xs:complexType name="ModType">
<xs:sequence minOccurs="0" maxOccurs="1">
...
</xs:sequence>
...
<xs:anyAttribute/>
</xs:complexType>
我想創建一個更具體的OrderedModTemplateType,與上面發佈的完全相同,不同之處在於Mods元素中的Mod元素將被要求爲更具體的派生類型的Mod,具體地,Fallout3ModType:
<xs:complexType name="Fallout3ModType">
<xs:complexContent>
<xs:extension base="mods:ModType">
<xs:attribute name="requiresFose" type="xs:integer" default="0" />
<xs:attribute name="foseVersion" type="xs:string" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
所以,我知道我可以通過指定XSI使用類型Fallout3ModType的國防部元素:在元素類型,但如果我想要的元素只包含類型Fallout3ModType的元素,但無特定沒有類型,例如就像ModType(這是默認接受的類型)?
我不希望有這樣做:
<Mods>
<Mod xsi:type="Fallout3ModType" ...>
...
</Mod>
<Mod xsi:type="Fallout3ModType" ...>
...
</Mod>
</Mods>
我可以延長ModsType到Fallout3ModsType,只接受Fallout3ModType,而不是僅僅ModType的國防部元素?如果是這樣,然後我可以使用類似:
<Mods xsi:type="Fallout3ModsType">
<Mod ...>
...
</Mod>
<Mod ...>
...
</Mod>
</Mods>
或者,我可以採用某種擴展OrderedModTemplateType有型Fallout3ModsType代替ModsType的MODS的元素嗎?在這種情況下,我可以使用新的類型,以在XML使用簡單:
<Mods>
<Mod ...>
...
</Mod>
<Mod ...>
...
</Mod>
</Mods>
我真的搞清楚,如果我要對這個正確的方式,或者如果我失去了一些東西掙扎...
更新
這似乎驗證,但我有一種感覺這是不對的:
<xs:complexType name="Fallout3ModsType">
<xs:complexContent>
<xs:extension base="mods:ModsType">
<xs:sequence>
<xs:element name="Mod" type="Fallout3ModType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
這是不是可以埃森Tially定義另一個單獨的Mod元素,它與原始的Mod元素的類型不同?如果這是合法的,那麼解析器如何知道我所指的是哪個元素,而不會深入探究嵌套元素?
或者,我是否正確地重寫了更具體類型的類型?我懷疑它......
更新2 刪除了一些與問題無關的模式信息。它還有點長,對不起...
沒有什麼錯類型的擴展名。關於基類型的限制,我認爲你正在尋找[abstract element](http://www.w3.org/TR/xmlschema-0/#abstract) – 2011-04-04 19:14:21