是的,絕對可以,使用xsi:type(這可能不是你想要的!)。 例如下面的xsd;
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<xs:element name="data">
<xs:complexType>
<xs:choice>
<xs:element ref="elemParent" minOccurs="1" maxOccurs="unbounded"/>
</xs:choice>
</xs:complexType>
</xs:element>
<xs:element name="elemParent" type="ctBase"></xs:element>
<xs:complexType name="ctNoAttChildReq">
<xs:complexContent>
<xs:extension base="ctBase">
<xs:sequence>
<xs:element name="elemKid" type="xs:string"></xs:element>
<xs:element name="elemKidAdditional" type="xs:string" minOccurs="0"></xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ctAttNoChild">
<xs:complexContent>
<xs:extension base="ctBase">
<xs:attribute name="attReq" use="required"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="ctBase" abstract="true">
<xs:sequence/>
</xs:complexType>
你有任何一個屬性或一個或更多的孩子一個實例,但你必須有XSI:類型的實例,它可能會或可能不會是一個表明,塞。這種類型的
<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="file:///C:/Xsds/StackOverflow_2070316_WIP.xsd">
<elemParent attReq="Yo!" xsi:type="ctAttNoChild"/>
<elemParent xsi:type="ctNoAttChildReq">
<elemKid>Adam</elemKid>
</elemParent>
<elemParent xsi:type="ctNoAttChildReq">
<elemKid>Eve</elemKid>
<elemKidAdditional>Sid</elemKidAdditional>
</elemParent>
答案不適合我滿意的。你的陳述背後的推理是什麼? – 2010-01-15 11:00:45
XML模式類型與您的OO編程類型非常相似。您可以創建複雜類型,並且可以限制元素和屬性的元素類型的順序以及可以分配哪種類型的值的限制。這就是所有的xsd可以爲你做的。你想要的是一些限制,跨越多個元素/屬性,這是xsd根本無法實現的。你必須編寫自己的代碼來驗證這一點。 – affan 2010-01-15 14:51:52
我也認爲這是不可能的,而且這是一個非常好的答案(如果它是正確的):-) – 2010-01-15 15:21:16