如何跨多个元素共享注释

How to share an annotation across multiple elements

我的 XSD(摘录)中有这个:

<xs:choice maxOccurs="unbounded" minOccurs="0">
  <xs:element name="int1">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="baseStructMember">
          <xs:attribute name="min" type="xs:byte" use="optional" />
          <xs:attribute name="max" type="xs:byte" use="optional" />
          <xs:attribute name="step" type="xs:byte" use="optional">
            <xs:annotation>
              <xs:documentation xml:lang="en">
                *** Description of the step goes here. ***
              </xs:documentation>
            </xs:annotation>
          </xs:attribute>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="int2">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="baseStructMember">
          <xs:attribute name="min" type="xs:short" use="optional" />
          <xs:attribute name="max" type="xs:short" use="optional" />
          <xs:attribute name="step" type="xs:short" use="optional" />
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="int4">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="baseStructMember">
          <xs:attribute name="min" type="xs:int" use="optional" />
          <xs:attribute name="max" type="xs:int" use="optional" />
          <xs:attribute name="step" type="xs:int" use="optional" />
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
</xs:choice>

我想为 step 属性添加注释。如您所见,我在 int1 中添加了它。所有 step 属性(也在 int2int4... 中)属于不同类型,但具有相同的含义,因此注释应该相同。

有什么方法可以在所有 step 属性中共享一个注释?

或者在外部定义 step,连同注解并重用它(就像 attributeGroup),但允许不同的属性类型?

正如 lexicore 所建议的,这对于实体是可能的。这是任何 XML 文档的特征,不仅 XSD.

需要在 DTD 部分中定义实体。在我的例子中,我的 XSD 文件的开头如下所示:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE xs:schema [
  <!ENTITY Doc-Step "*** Description of the step goes here. ***">
]>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" ...

从现在开始,Doc-Step可以像&Doc-Step;一样在文档中的任何地方使用,并且会被XML解析器替换为合适的字符串:

<xs:attribute name="step" type="xs:byte" use="optional">
    <xs:annotation>
        <xs:documentation xml:lang="en">&Doc-Step;</xs:documentation>
    </xs:annotation>
</xs:attribute>

由于 @Doc-Step; 可以在多个地方使用,因此可以重复使用文档。另一个不错的功能是它允许在一个地方收集所有文档字符串 - 非常适合维护。