SID как часть структуры интеграции приложений

Предприятия с набором уже внедренных программных приложений в рамках стратегии миграции на новые приложения иногда выполняют миграцию существующих баз данных в SID-подобные структуры. Эта стратегия не яв­ляется необходимой с точки зрения функциональной совместимости прило­жений: в этом плане соответствие требованиям SID обеспечивается в первую очередь путем представления данных приложений через программный ин­терфейс приложения (API) с SID-подобной структурой. В этом разделе дает­ся краткий обзор использования SID как элемента структуры интеграции приложений. На рис. 3.19 показаны три основных этапа использования SID как элемента стратегии интеграции приложений.

Первый шаг состоит в том, чтобы адаптировать XML-схемы SID (XSD) и использовать их для разработки специфичных XSD. Пример фрагмента XSD для сущности Party (Сторона) SID представлен на рис. 3.20. Здесь изображе­на сущность Party с ее атрибутами и сущность LanguageAbility (Языковые возможности) с ее атрибутами, которыми может обладать и Party (Сторона), а также здесь изображена сущность Language (Язык) (с его атрибутами), к которой относится LanguageAbility (Языковые возможности).

XML-схемы SID

Рис. 3.19. SID как часть структуры интеграции приложений

<xs:complexType па: "Party" m_x: "false">

<xs:sequence>

<xs:element .-m* ="partyld" n.="0"/>

<xs: element name. "validFor" typo-*"SIDBusCm:TimePeriod" minOccurn "0"/> <xs:element :.otrie="LanguageAbility" mtnOctu: -="0"/>

<xs:element ="PartyRo 1 e" minOccu • f="0"/>

</xs:sequence>

</xs:complexType>

<xsrcomplexType г H="LanguageAbility <xs: sequcr. ce>

<xs:element .-rne="readingProficiency" nOn-jj <xs:element tn~="writi ngProficiency" .="0"/>

<xs:element n. tm-:- "speakingProiiciency" "0"/>

<xs: element -:i-="iisteningProficiency" ="0"/>

<xs :eJ ernent - i =" Language" ="0"/>

<xs :element r. amc:= "Party" mi.-.Occur.: "0"/>

</xs:sequence>

</xs:comp exType>

<xs :conplexType nar «- "Language" mix* cl "false">

<xs:sequence>

<xs:element .. i^.="alphabetKame" nOcci - rs="0"/>

<xs :element : erne. "dialectNames" nOcnu-n "0"/>

<xs:element - м -"OfficiailyUsedinCountry" -"0"/>

<xs: el ernent n^="DefinesPartyName" . :="0"/>

<xs:element г. іпк "AbilityTnLanguage" mi-0-cur "0"/>

<xs : element -^"UsedToExpressPartyldentification" r. in ■ r ~"0"/> </xs:sequenee>

</xs:comp'exType>

Рис. 3.20. Пример XSD SID сущности Party

Обратите внимание, что все элементы определены как обнуляемые (nillable), и это означает, что атрибуты и связи элемента могут быть необя­зательными (опциональными) в зависимости от значения и наличия пер­спективы. Это может противоречить атрибутам и связям в рамках модели SID. Причина этого станет более понятной при обсуждении так называемой полезной нагрузки сообщения (message payload). Значение опциональности
характеристик атрибутов и связей может изменяться в процессе определения полезной нагрузки сообщений (см. ниже в этом же разделе).

SID — это структурная модель, поэтому можно ожидать ее дальнейшего расширения. Например, можно использовать SID для разработки расшире­ний, предназначенных для описания специфических сущностей конкретно­го приложения. На рис. 3.21 представлен пример расширения XSD сущности SID Party.

<xs:complexType n-"?ar~y">

<xs:complexContent>

<хз:extension i :--="SIDBusCm:Party">

<xs:sequence>

<xs: element na:ne="Application5pecificExtensions"/> </xs:sequence>

</xs:extension>

</xs: cor:plexContent>

</xs:complcxTyoe>

<xs : complexType r. - :n-r="LanguageAbility">

<xs : coir. plexCor. tent>

<xs : extension і: ="SIDBusCm: LanquageAbi 1 і ly">

<xs:sequence>

<xs: element n-imc:=//ApplicationSpecificExtensions,//> </xs:sequence>

</xs:exiension>

</xs:complexContent>

</xs:complexType>

<xs: complexType i ="Language">

<xs:complexContent>

<xs : extension.;•?• -"SIDBusCm: Language">

<xs:sequence>

<xs: element name="ApplicationSpecificExtensions,//> </xs:sequence>

</xs:extension>

</xs:com? lexContent>

</xs:complexTyoe>

Рис. 3.21. Расширение SID XSD для конкретного приложения

Заметим, что атрибут «extention» (расширение) в XML используется для включения сущности SID в расширение, специфичное для конкретного при­ложения. Схемы SID XSD не должны изменяться при разработке расширений для конкретных приложений. Если вы собираетесь использовать будущую версию SID XSD, эти расширения нужно будет пересматривать. Кроме того, база ограничений (restriction base) объектов SID может применяться для определения другого набора SID-подобных схем, которые содержат только обязательные (для данного приложения) атрибуты и связи.

База ограничений подразумевает копирование атрибутов базовой сущ­ности (в данном примере — Party). Ненужные атрибуты и связи могут быть

удалены. Типы оставшихся атрибутов и связей в дальнейшем можно изме­нить, тем самым еще более ограничивая атрибуты и связи в базовой сущнос­ти. Например, у атрибута с минимальным набором экземпляров в базовой сущности, равным нулю, количество экземпляров в расширенной под конк­ретное приложение сущности может быть изменено на единицу (атрибут станет обязательным). Еще пример: атрибут validFor (Действительно для) сущности Party в расширении можно сделать обязательным. Более подроб­ную информацию относительно пользования базами расширений и ограни­чений можно найти на сайте W3C. org.

Третий шаг состоит в использовании расширения SID XSD, специфици­рованного для конкретного приложения как базиса, описания полезной на­грузки сообщения для программного интерфейса приложения (API), что показано на рис. 3.22.

Полезная нагрузка сообщения использует расширенные схемы SID XSD как базу ограничений XML. Это позволяет далее выделять нужные атрибуты и связи из полного набора вариантов, определенных в первоначальных схемах SID XSD. Например, в приведенном выше примере XSD атрибуты partylD и validFor были изменены в соответствии с требованиями (мини­мальное число экземпляров равно 1), которые обязательны как минимум для одной LanguageAbility. Таким образом, для операции, которая создает Party, требуются значения для partylD, validFor и как минимум для одной LanguageAbility.

Комментарии закрыты.