所有元素都必须具有一组属性

时间:2015-04-03 12:45:19

标签: xml xsd xsd-validation

我需要确保XML文档的所有元素(名称不感兴趣)都包含一组特定的属性。

xs:any不允许这样做:

<xs:any processContents="lax">
  <xs:complexType>
     <xs:attribute name="count1" type="nonNegativeInteger" use="required"/>
     <xs:attribute name="count2" type="nonNegativeInteger" use="required"/>
  </xs:complexType>
</xs:any>

我该怎么做?

1 个答案:

答案 0 :(得分:1)

XSD无法制作关于属性使用的全局声明。

对于初学者,xs:any必须出现在另一个命名元素的内容模型中。然后,一旦声明使用xs:any可能发生任何元素,您就无法通过xs:attribute声明进一步约束其属性。

在XSD 1.1中,您可以使用xs:assert来声明有关特定元素的属性的要求,但不能全面说明所有元素的要求。

如果您的XSD确实有常规定义的命名元素,您可以使用xs:attributeGroup声明常用属性并在每个元素声明中显式引用它们。

否则,请考虑使用XSLT,Schematron或其他语言而不是XSD来强制执行此类约束。