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.