Как поделиться аннотацией между несколькими элементами

У меня есть это в моем 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 атрибуты (также в int2, int4...) разных типов, но имеют одинаковое значение, поэтому аннотация должна быть одинаковой.

Есть ли способ, которым я мог бы поделиться одной аннотацией по всем step атрибуты?

Или определить step внешне, вместе с аннотацией и ее повторным использованием (как с attributeGroup), но учитывают разные типы атрибутов?

1 ответ

Решение

Как предполагает лексикора, это возможно с сущностями. Это особенность любого 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; может использоваться в нескольких местах, что позволяет повторно использовать документацию. Еще одна приятная особенность заключается в том, что она позволяет собирать все строки документации в одном месте - отлично подходит для обслуживания.

Другие вопросы по тегам