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 を作成するように制限する必要があることですが、これを行う方法が思いつきません。RiskRatingsRatingTypeReducedValueRecentMarketValue
例で説明するのが最も適切です。したがって、ここにいくつかのサンプル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>
誰も私がこれを行う方法を知っていましたか?