ГОСТ Р 70317—2022
8.3.2 Подход к реализации для разделения необязательных классов
UML-модель для реализации XML-схемы использует следующий шаблон для классов, которые
являются типом данных для значений свойств: если тип значения свойства — это класс, реализуемый в
таком же пакете UML, как и владеющий класс, изменения отсутствуют. Если тип значения свойства
является классом, который реализован в другом пакете UML, то в настоящем стандарте (абстрактный
шаблон, показанный на рисунке 4) пространства имен разделяются путем введения абстрактного клас са
в пакет абстрактных классов в UML-модели реализации. Конкретный класс, реализующий абстракт ный
класс, определяется в пакете для пространства имен реализации как специализация абстрактного класса,
создавая зависимость между пакетом реализации, содержащим класс, и пакетом абстрактных классов.
Затем этот шаблон UML реализуется с использованием правил кодирования (см. [3]J для аб страктных
классов. Введение абстрактного класса не изменяет семантику реализуемой модели, но по зволяет
определять новые версии конкретного реализующего класса без влияния на схему, использу ющую
абстрактный класс. Таблица 6 представляет собой список классов по ГОСТ Р 57668 в UML для реализации
XML настоящего стандарта, которые используют этот шаблон.
В нижеприведенном списке подробно описаны шаги для кодирования и представлен абстрактный
класс, позволяющие разделить схему пространства имен XML.
а)Абстрактный класс и тип свойства определены в пакете пространства имен XML абстрактных
общих классов, который обозначен аббревиатурой пространства имен "асп". Это пространство имен
определяет все абстрактные классы, которые используются для связывания модулей в автономном
режиме. При этом пакет абстрактного класса представлен в UML-модели реализации и является ис
ключительно артефактом реализации. Экземпляры документов XML не будут содержать элементы из
этого пакета.
Пример 1
—
Шаг а) определяет абстрактный класс (в данном примере с именем acn:AbstractClass2)
(см. [3]).
<schema xmlns:acn=
http://standards.iso.org/iso/19115/-3/acn/l.0
... />
<element abstract="true" name="AbstractClass2" substitutionGroup="gco:AbstractObject"
type="acn:AbstractClass2_Type"/>
ccomplexType abstract="true" name="AbstractClass2_Type">
<complexContent>
<extension base="gco:AbstractObject_Type">
<sequence/> <!-- без содержимого -->
</extension>
</complexContent>
</complexType>
+property
ns1::Class1ns2::Ciass2
0..*
Примечание — Свойства внутри класса 2 не показаны.
Рисунок 4 — Пример необязательного свойства, имеющего тип свойства класса
Пример 2
—
На шаге а) реализация типа свойства со значением, заданным абстрактным классом
согласно примеру 1 (см. [3]).
<complexType name=" AbstractClass2_PropertyType">
<sequence minOccurs="0">
<element ref=" acn:AbstractClass2"/>
</sequence>
<attributeGroup ref="geo:ObjectReference"/>
<attribute ref="gco:nilReason"/>
</complexType>
b)Другое пространство имен (обозначенное аббревиатурой "ns1" в примере 3) содержит класс,
который имеет необязательное свойство (кардинальность 0..1 или 0..*), которое задается абстрактным
классом, определенным выше. Пространство имен XML, реализующее этот класс, должно импортиро
вать пространство имен, содержащее определения совместно используемых абстрактных элементов
[аббревиатура "сап", приведенная в примерах 1 и 2 перечисления а)].
26