我想问一下XML xsd schema中是否可以声明依赖属性......
示例:
<xsd:simpleType name="packCategories">
<xsd:restriction base="xsd:byte">
<xsd:minInclusive value="0"/>
<xsd:maxInclusive value="4"/>
</xsd:restriction>
</xsd:simpleType>
<xs:element name="pack">
<xs:complexType>
<!-- elements go here -->
<xs:attribute type="packCategories" name="category" use="required"/>
<xs:attribute type="xs:string" name="explanation" use="optional"/>
</xs:complexType>
</xs:element>
这里的一切似乎都很好,但是,如果category属性等于4,我希望解释属性为MANDATORY。这可能吗?也许有元素呢?
答案 0 :(得分:2)
如果您使用的是XML Schema 1.0 ,则无法在架构中表达此类约束,但您可以使用Schematron或在应用程序级别进行检查。
如果你正在使用XML Schema 1.1 ,你可以specify co-occurrence constraints通过XPath 2.0使用xs:assert
,如下所示:
<xs:element name="pack">
<xs:complexType>
<!-- elements go here -->
<xs:attribute type="packCategories" name="category" use="required"/>
<xs:attribute type="xs:string" name="explanation" use="optional"/>
<xs:assert test="@explanation or @packCategories != 4"/>
</xs:complexType>
</xs:element>