XML模式属性依赖项

时间:2013-12-20 10:34:42

标签: xml xsd schema

我想问一下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。这可能吗?也许有元素呢?

1 个答案:

答案 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>