Xsd 在枚举列表上实现XOR

Xsd 在枚举列表上实现XOR,xsd,xor,xsd-validation,Xsd,Xor,Xsd Validation,说明我的问题的最好方法是发布我目前拥有的xsd的一些片段;这会让你更容易理解我的问题 下面是我当前的xsd文件的一些片段: <xs:element name="RiskAnalysis"> <xs:complexType> <xs:sequence> <xs:element ref="RiskRating" maxOccurs="unbounded"/> </xs:sequence> ... ... &l

说明我的问题的最好方法是发布我目前拥有的
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>
可接受(即仅传入
ReducedValue
):

不可接受,应抛出架构验证错误(即传入的
RecentMarket
ReducedValue
):


有人知道我该怎么做吗?

单靠XSD是不可能的


解决方案:您只需要使用主机代码来评估这个部分。调用XSD验证的主机程序,如C#、CPP、JAVA等。。。能够验证此类条件。

最简单的方法是消除模式中隐含的域分析中的不一致性:一方面,为了验证的目的,您希望对RecentMarket类型和ReducedValue类型的风险评级进行不同的处理,另一方面,您为它们提供了相同的元素类型,这意味着出于验证目的,它们应该被视为相同的元素类型。相同的?还是不同?选择

考虑到元素类型RecentMarketRating、ReducedValueRating和OtherRiskRating,解决您的问题很简单。给定一种调用它们的XML编码,主要选项是执行验证的非XSD代码、XSD 1.1和使用条件类型赋值或断言,或者除XSD 1.0之外的Schematron

<RiskAnalysis>
     <RiskRating RatingType="Land" />
     <RiskRating RatingType="Other" />
</RiskAnalysis>
<RiskAnalysis>
     <RiskRating RatingType="Land" />
     <RiskRating RatingType="Other" />
     <RiskRating RatingType="ReducedValue" />
</RiskAnalysis>
<RiskAnalysis>
     <RiskRating RatingType="Land" />
     <RiskRating RatingType="Other" />
     <RiskRating RatingType="RecentMarket" />
</RiskAnalysis>
<RiskAnalysis>
     <RiskRating RatingType="Land" />
     <RiskRating RatingType="Other" />
     <RiskRating RatingType="RecentMarket" />
     <RiskRating RatingType="ReducedValue" />
</RiskAnalysis>