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>
誰も私がこれを行う方法を知っていましたか?