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>