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