以W3C的車輛XSD作爲一個例子:XML和XSD - 使用元素名稱作爲替換的xsi的:類型多態性
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://cars.example.com/schema"
xmlns:target="http://cars.example.com/schema">
<complexType name="Vehicle" abstract="true"/>
<complexType name="Car">
<complexContent>
<extension base="target:Vehicle"/>
...
</complexContent>
</complexType>
<complexType name="Plane">
<complexContent>
<extension base="target:Vehicle"/>
<sequence>
<element name="wingspan" type="integer"/>
</sequence>
</complexContent>
</complexType>
</schema>
,和 'meansOfTravel' 的以下定義:
<complexType name="MeansOfTravel">
<complexContent>
<sequence>
<element name="transport" type="target:Vehicle"/>
</sequence>
</complexContent>
</complexType>
<element name="meansOfTravel" type="target:MeansOfTravel"/>
根據這個定義,你需要使用XSI指定您的實例的類型:類型,像這樣:
<meansOfTravel>
<transport xsi:type="Plane">
<wingspan>3</wingspan>
</transport>
</meansOfTravel>
我只想李柯以acheive一個「類型的名字」 - 映射「元素的名稱」,使這可能是與剛剛
<meansOfTravel>
<plane>
<wingspan>3</wingspan>
</plane>
</meansOfTravel>
唯一的辦法來代替我能做到這一點到現在爲止是擺明:
<complexType name="MeansOfTravel">
<sequence>
<choice>
<element name="plane" type="target:Plane"/>
<element name="car" type="target:Car"/>
</choice>
</sequence>
</complexType>
<element name="meansOfTravel" type="target:MeansOfTravel"/>
但這意味着我必須在'MeansOfTravel'複雜類型中列出所有可能的子類型。如果你調用元素'plane',是否沒有辦法讓XML解析器假定你的意思是'Plane'?或者我必須明確選擇?我只想讓我的設計保持乾爽 - 如果您有任何其他建議(比如團體等) - 我全都是耳朵。
謝謝你,這看起來很整潔。除了擴展參數外,還有其他的好處嗎?我在問,因爲看起來很忙,我想知道如果選擇是更合理的選擇沒有雙關語意思)考慮可讀性 – 2010-06-01 16:10:56
如果整個模式都在你的控制之下,我會選擇其中的一種方式,它使得使用數據綁定生成的類容易閱讀,並避免引入所有這些全局元素。 – xcut 2010-06-01 17:06:10
好的。選擇它,再次感謝。 – 2010-06-01 18:27:33