Как разделить аннотацию между несколькими элементами - PullRequest
0 голосов
/ 28 июня 2018

У меня есть это в моем 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 Ответ

0 голосов
/ 02 июля 2018

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

...