-
Notifications
You must be signed in to change notification settings - Fork 0
CustomizerScript ru
Кастомизация осуществляется с помощью скрипта, представляющего собой XML-схему специальной структуры.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="script"
targetNamespace="http://leksi.net/EDIFACT/script"
elementFormDefault="qualified"
xmlns="http://leksi.net/EDIFACT/script"
xmlns:eu="http://leksi.net/EDIFACT/utility"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xs:import namespace="http://leksi.net/EDIFACT/utility"/>
<xs:annotation>
<xs:appinfo eu:name="messageIdentifier">IFCSUM:D:97B:UN</xs:appinfo>
<xs:appinfo eu:name="suffix">.2</xs:appinfo>
</xs:annotation>
...
</xs:schema>
Приведённые выше элементы являются обязательными для каждого скрипта. Элемент аннотации <xs:appinfo eu:name="messageIdentifier">...</xs:appinfo>
указывает на идентификатор сообщения, которое подвергается кастомизации и записывается точно в том виде, как в сегменте UNH
в EDIFACT формате:
UNA:+.?*'
UNB+UNOZ:1::3+003702011539:30+BTS:30+201027:1155+10122823639495'
UNH+114327495+IFCSUM:D:97B:UN'
BGM+712+SF-01987041+22'
DTM+137:202010271135:203'
Элемент аннотации <xs:appinfo eu:name="suffix">...</xs:appinfo>
задаёт суффикс для кастомизированной схемы. Для приведённого выше примера файл кастомизированной схемы получит имя IFCSUM.2.xsd
и будет расположен в том же каталоге, что и стандартный файл IFCSUM.xsd
.
После аннотации с описанием самого скрипта следуют инструкции редактирования элементов данных.
<xs:complexType name="{ИМЯ_ЭЛЕМЕНТА_ДАННЫХ}">
<xs:simpleContent>
<xs:restriction base="eu:D" [eu:action="clearEnumerations"]>
{СОДЕРЖИМОЕ: обычное содержимое элемента xs:restriction}
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
Указанное выше СОДЕРЖИМОЕ
заменяет соответствующее содержимое в определении исходного типа, кроме элементов xs:enumeration
: для замены следует использовать в элементе xs:restriction
атрибут eu:action="clearEnumerations"
. В противном случае элементы xs:enumeration
добавляются.
Далее следуют инструкции редактирования дерева сегментов и групп сегментов.
<xs:element name="{ИМЯ_СЕГМЕНТА_ИЛИ_ГРУППЫ}" [eu:action="remove" | eu:action="removeUntilNext"]/>
или
<xs:element name="{ИМЯ_ГРУППЫ}">
<xs:conplexType>
<xs:sequence>
<xs:element name="{ИМЯ_СЕГМЕНТА_ИЛИ_ГРУППЫ}" [eu:action="remove" | eu:action="removeUntilNext"]/>
...
</xs:sequence>
</xs:conplexType>
</xs:element>
Первый вариант относится к сегментам, не входящим в группы и любым группам, которые удаляются целиком. Второй - для удаления сегментов из группы.
Атрибут eu:action="remove"
указывает, что содержащий его элемент будет удалён, а атрибут eu:action="removeUntilNext"
означает, что будут удалены содержащий его и все последующие элементы до следующего, исключая его, либо до конца содержимого, если содержащий элемент последний в последовательности.
Ниже приведены ссылки на скрипт и визуализации стандартной и кастомизированной схем.