2013-12-20 73 views
0

我想问一下,如果它在XML XSD架构申报相关的属性可能...XML架构属性的依赖关系

例子:

<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。这可能吗?也许与元素呢?

回答

2

如果您使用的是XML Schema 1.0,您不能在模式中表达这样的约束,但您可以使用Schematron或在应用程序级别检查它。

如果你正在使用XML Schema 1.1,您可以通过XPath 2.0中使用specify co-occurrence constraintsxs: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>