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

All elements must have a set of attributes

我需要确保 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>

我该怎么做?

XSD 不能对属性使用做出这样的全局声明。

首先,xs:any 必须出现在另一个命名元素的内容模型中。然后,一旦使用 xs:any 声明任何元素都可能出现,就无法通过 xs:attribute 声明进一步限制其属性。

在 XSD 1.1 中,您可以使用 xs:assert 来说明有关特定元素属性的要求,但不是对所有元素一概而论。

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

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