如何创建一个XML Schema,当另一个存在时,需要一个属性存在?

时间:2013-11-13 18:31:47

标签: xml xsd

假设我有一个像这样的XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<Books>
  <Book
    Title="Animal Farm"
    Author="George Orwell"
    />
</Books>

是否可以为此XML文件创建一个XSD,其中说:如果Book元素具有Title属性,那么Author属性也必须存在?请注意,我不是要求基于属性值的限制,只是属性名称。

1 个答案:

答案 0 :(得分:1)

在XSD 1.0 中,您必须在应用程序级别强加该约束。

在XSD 1.1 中,您可以使用xs:assert强加约束:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Books">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Book" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:attribute name="Title"/>
            <xs:attribute name="Author"/>
            <xs:assert test="not(@Title) or @Author"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>