說明我的問題的最佳方式是發佈我目前擁有的xsd
的一些片段;它會讓你更容易理解我的問題。在枚舉列表上實現XOR
這是我目前xsd
文件的一些片段:
<xs:element name="RiskAnalysis">
<xs:complexType>
<xs:sequence>
<xs:element ref="RiskRating" maxOccurs="unbounded"/>
</xs:sequence>
...
...
</xs:complexType>
</xs:element>
<xs:element name="RiskRating">
<xs:complexType>
...
<xs:attribute name="RatingType" use="required">
<xs:simpleType>
<xs:restriction base="xs:NMTOKEN">
<xs:enumeration value="LocationNeighbourhood"/>
<xs:enumeration value="Land"/>
<xs:enumeration value="Improvements"/>
<xs:enumeration value="Environmental"/>
<xs:enumeration value="MarketSegment"/>
<xs:enumeration value="ReducedValue"/>
<xs:enumeration value="RecentMarket"/>
<xs:enumeration value="LocalEconomy"/>
<xs:enumeration value="MarketVolatility"/>
<xs:enumeration value="Other"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
...
</xs:complexType>
</xs:element>
我遇到的問題是,我需要限制我的xsd
,這樣我創建元素之間的RiskRatings
的XOR其中RatingType
是ReducedValue
和RecentMarketValue
,但我想不出辦法做到這一點。
它最好通過示例所描述的,因此這裏的一些樣品RiskAnalysis
元素(xsd
僞代碼)我可能得到:
可接受的(即既不的ReducedValue
或RecentMarket
傳遞英寸):
<RiskAnalysis>
<RiskRating RatingType="Land" />
<RiskRating RatingType="Other" />
</RiskAnalysis>
可接受的(即只ReducedValue
傳遞。):
<RiskAnalysis>
<RiskRating RatingType="Land" />
<RiskRating RatingType="Other" />
<RiskRating RatingType="ReducedValue" />
</RiskAnalysis>
可接受的(即只RecentMarket
傳遞):
<RiskAnalysis>
<RiskRating RatingType="Land" />
<RiskRating RatingType="Other" />
<RiskRating RatingType="RecentMarket" />
</RiskAnalysis>
Unacceptaple,應該拋出一個架構驗證錯誤(即。既RecentMarket
和ReducedValue
傳遞):
<RiskAnalysis>
<RiskRating RatingType="Land" />
<RiskRating RatingType="Other" />
<RiskRating RatingType="RecentMarket" />
<RiskRating RatingType="ReducedValue" />
</RiskAnalysis>
任何人有任何想法,我會怎麼做呢?