说明我的问题的最好方法是发布xsd
我目前拥有的一些片段;它会让你更容易理解我的问题。
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>
我遇到的问题是我需要限制我的方法,以便为is和的元素之间xsd
创建一个 XOR ,但我想不出一种方法来做到这一点。RiskRatings
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>
不接受并且应该抛出模式验证错误(即两者 RecentMarket
并ReducedValue
传入):
<RiskAnalysis>
<RiskRating RatingType="Land" />
<RiskRating RatingType="Other" />
<RiskRating RatingType="RecentMarket" />
<RiskRating RatingType="ReducedValue" />
</RiskAnalysis>
有人知道我会怎么做吗?