Создание IEPD NIEM: Часть 2. Сопоставление модели с NIEM и создание подмножества NIEM

Проектирование системы обмена XML-информацией между государственными учреждениями США

В первой статье этого цикла был описан процесс создания UML-модели системы обмена XML-информацией, которая должна быть реализована в соответствии с Национальной моделью обмена информацией (National Information Exchange Model – NIEM). В настоящей статье делается следующий шаг – сопоставление модели с NIEM для определения того, какие готовые части системы обмена NIEM можно использовать. Кроме того, вы научитесь создавать подмножество модели NIEM для включения в IEPD.

Присцилла Уолмсли, управляющий директор, Datypic

Фото Присциллы УолмслиПрисцилла Уолмсли (Priscilla Walmsley) работает управляющим директором и старшим консультантом компании Datypic. Она специализируется на технологии, архитектуре и реализации XML. В последнее время Присцилла работает с Министерством юстиции США (через Trusted Federal Systems) над системой IEPD LEXS нa базе NIEM. Она – автор книг Definitive XML Schema (Prentice Hall, 2001 г.) и XQuery (O'Reilly Media, 2007 г.). Кроме того, она является соавтором учебника Web Service Contract Design and Versioning for SOA (Prentice Hall, 2008 г.). С Присциллой можно связаться по адресу: pwalmsley@datypic.com.



01.11.2010

9 марта 2010 г. Добавлены ссылки на третью часть этого цикла в разделах "Введение", "Заключение" и "Ресурсы".

Теперь, когда вы создали UML-модель своей системы обмена (см. Часть 1), следующим шагом будет ее сопоставление с моделью NIEM для определения того, какие части NIEM можно использовать в своих сообщениях. Такое сопоставление чаще всего выполняется в таблице, называемой шаблоном сопоставления компонентов (Component Mapping Template – CMT). CMT полезен по нескольким причинам.

  • В нем содержится подробное, читабельное определение вашей модели системы обмена информацией с местом для комментариев и дополнительной документации.
  • Он явно показывает, какие части модели используют готовые компоненты NIEM, а за какими надо обращаться к документации пакета обмена информацией (Information Exchange Package Documentation – IEPD).
  • Он служит удобным планом действий при разработке подмножества модели NIEM.

Создание шаблона сопоставления компонентов

Часто используемые сокращения

  • CMT: Component Mapping Template (CMT)
  • IEPD: Information Exchange Package Documentation
  • NIEM: National Information Exchange Model
  • SSGT: NIEM Schema Subset Generation Tool
  • UML: Unified Modeling Language
  • XML: Extensible Markup Language

Обычно CMT создаются в Microsoft® Office Excel® или другой системе электронных таблиц, такой как Calc из OpenOffice.org. Но эти шаблоны можно создавать в любом табличном формате. Для CMT не существует обязательного формата, но обычно в нем, как минимум, присутствуют следующие столбцы:

  • Исходный тип. Имя класса в модели UML.
  • Исходное свойство. Имя свойства в модели UML.
  • Тип данных. Тип данных свойства.
  • Описание. Краткое описание типа или свойства.
  • Мощность. Допустимое количество свойств.
  • Индикатор расширения. Совпадает ли модель с компонентом из модели NIEM.
  • XPath. Путь к элементу в сообщении XML.

Некоторые организации, использующие NIEM, добавляют в CMT дополнительные столбцы с описанием деталей NIEM. В третьей статье этого цикла мы подробно рассмотрим процесс расширения NIEM.

Запись модели в шаблон CMT

На первом шаге нужно вписать свою UML-модель в первые пять столбцов таблицы CMT. В первой статье этого цикла была приведена UML-диаграмма для простого примера с заявлением об угоне зарегистрированного транспортного средства. Исходя из этой диаграммы классов UML – она снова показана на рисунке 1 – составлен приведенный в таблице 1 класс TheftLocation в формате CMT. Описания опущены ради экономии места в таблице, но по ссылке, приведенной в разделе Загрузка, можно получить полный пример CMT.

Рисунок 1. UML-диаграмма модели из Части 1
Готовая UML-модель (с классом TheftReport)
Таблица 1. Представление типа и свойств в CMT
Исходный типИсходное свойствоТип данныхОписаниеМощность
TheftLocation...
TheftLocationAddressString...0..1
TheftLocationCityString...0..1
TheftLocationStateString...0..1
TheftLocationZipCodeString...0..1
TheftLocationCountyCodeCountyCode...0..1

В столбце Тип данных используются имена простых типов из XML-схемы. Для кодовых таблиц указывается только имя, а допустимые значения перечисляются в другой вкладке электронной таблицы. Мощность показывает минимальное и максимальное количество включений, причем знак * соответствует неограниченному числу включений.

Каждой ассоциации должна соответствовать строка в CMT вместе со строками для указания типов, участвующих в ассоциации. В таблице 2 показано CMT-представление ассоциации Theft/TheftLocation.

Таблица 2. Представление ассоциации в CMT
Исходный типИсходное свойствоТип данныхОписаниеМощность
Theft / TheftLocation Assn
Theft / TheftLocation AssnTheftReference...1..1
Theft / TheftLocation AssnTheftLocationReference...1..1

Типы ролей обозначаются ссылками от роли к типу, который играет эту роль. Тип роли Witness (свидетель) в таблице 3 содержит ссылку на Person, обозначенную RoleOfPerson.

Таблица 3. Представление роли в CMT
Исходный типИсходное свойствоТип данныхОписаниеМощность
Witness
WitnessAccountString...0..1
WitnessRoleOfPersonReference...1..1

Поиск эквивалентов в NIEM

Следующая задача при отображении системы обмена состоит в определении того, где модель перекликается с NIEM, и записи таких элементов в CMT. NIEM нужно использовать как можно больше, чтобы добиться максимального взаимодействия с другими приложениями NIEM. IEPD не будет адаптирована к NIEM, если она добавляет новые компоненты, когда в модели NIEM уже существуют семантически эквивалентные компоненты. Но не следует и "втискивать" данные в NIEM, если они явно не подходят. В третьей статье этого цикла будет показано, как добавлять к модели новые компоненты.

Поскольку модель NIEM очень велика, просматривать схемы вручную в поисках совпадающих компонентов нерационально. К счастью, есть несколько интерактивных инструментов для поиска компонентов в модели NIEM (см. раздел Ресурсы):

  • NIEM Wayfarer. Используя этот инструмент, можно искать компоненты NIEM и просматривать модель по странице на каждый компонент.
  • Schema Central. Этот инструмент обладает аналогичными возможностями, что и NIEM Wayfarer, но работает с разными XML-словарями, а не только с NIEM.
  • NIEM Schema Subset Generation Tool (SSGT). Этот инструмент применяется для поиска и навигации по модели NIEM более наглядным графическим способом. А когда нужные компоненты найдены, его дополнительные возможности можно использовать для создания подмножества NIEM.

Используйте один из этих инструментов для поиска всех компонентов CMT, которые, возможно, уже существуют в NIEM. Например, при поиске термина Vehicle в Schema Central вы увидите страницу результатов поиска, приведенную на рисунке 2.

Рисунок 2. Страница результатов поиска Schema Central
Страница результатов поиска Schema Central

Если щелкнуть на nc:Vehicle, отображается страница, представленная на рисунке 3. Она содержит некоторые общие характеристики элемента, за которыми следует полный список возможных дочерних элементов.

Рисунок 3. Страница элементов Schema Central
Страница элементов Schema Central

Все компоненты NIEM имеют префикс пространства имен: nc означает ядро NIEM – пространство имен, в котором находятся самые фундаментальные типы. Существует также пространство имен для каждого из доменов, например j для Justice (правосудие). Свободно используйте компоненты NIEM из любого домена, если они семантически эквивалентны вашей модели. Для системы обмена данными, связанными с иммиграцией, не обязательно использовать элемент из домена иммиграции.

Рекомендации по поиску в модели NIEM

Какие бы инструменты вы ни использовали, поиск в модели можно облегчить, приняв во внимание следующие советы.

  • Часто легче начинать с поиска на самом верхнем уровне типов/классов (в нашем примере – Theft, Property, Location и т.п.), а затем искать подходящие свойства.
  • Не забывайте искать синонимы. Если не находится License Plate (номерной знак), ищите Registration.
  • Если вы не можете найти конкретный компонент, ищите более общий. Вот некоторые из наиболее общих типов NIEM: Person, Organization, Location, Activity и Item. Например, если не удается найти Theft Location, можно выбрать более общий тип Location и использовать nc:Location. Если отсутствует специальный тип для Theft, рассмотрите возможность использования более общего типа nc:Activity.
  • Ищите не просто имена. Если распространить круг поиска на описания и перечисления, это может привести вас к нужному типу.

На первый взгляд, поиск компонентов в модели NIEM может стать утомительным делом, но при более близком знакомстве с системой имен и характером структур модели NIEM задача облегчается.

Запись компонентов NIEM в CMT

Если вы нашли эквивалентный компонент NIEM, запишите его в столбец XPath CMT. Как правило, используются простые выражения XPath – имена элементов и/или атрибутов, разделенные слэшем (/). Имена типов в XPath не включаются. Используйте префиксы пространства имен, такие как nc:, потому что имена элементов не обязательно уникальны между пространствами имен.

В таблице 4 приведено отображение XPath для TheftLocation. Примечание. В целях форматирования длинные отображения XPath делятся в таблице на несколько строк. Как правило, отображения представляют собой одну строку символов без пробелов.

Таблица 4. Отображения XPath для TheftLocation
Исходный типИсходное свойство...Ext?XPath
TheftLocation...nc:Location
TheftLocationAddress...Nnc:Location/nc:LocationAddress /nc:StructuredAddress
/nc:LocationStreet /nc:StreetFullText
TheftLocationCity...Nnc:Location/nc:LocationAddress /nc:StructuredAddress
/nc:LocationCityName
TheftLocationState...Nnc:Location/nc:LocationAddress /nc:StructuredAddress
/nc:LocationState USPostalServiceCode
TheftLocationZip...Nnc:Location/nc:LocationAddress /nc:StructuredAddress
/nc:LocationPostalCode
TheftLocationCountyCode...Y

В XPath нужно включать достаточное количество шагов, чтобы однозначно идентифицировать его. Например, недостаточно просто поместить nc:StreetFullText в строку Address. Иногда к элементу NIEM может вести несколько путей, и для точности необходим полный путь.

В нашем примере свойство CountyCode, которое означает код страны, в NIEM не нашлось, так что для него потребуется расширение. Поэтому в столбце Ext? мы указываем Y, а XPath пока оставляем пустым. В третьей статье этого цикла мы рассмотрим процесс заполнения полей XPath для расширений.

Полное отображение модели NIEM для примера с заявлением об угоне можно получить в разделе Загрузка.


Создание подмножества NIEM

Определившись с компонентами NIEM, которые будут использоваться в системе обмена, нужно создать подмножество модели NIEM, которое принимает форму набора документов XML-схем. Так как полная модель NIEM велика и пространна, чтобы точнее проверить систему обмена, необходимо подмножество NIEM. Подмножество NIEM ограничивает множество допустимых элементов и атрибутов, количество их включений, а иногда и их допустимые значения. Создание подмножества NIEM ускоряет и процесс проверки XML-сообщений, так как схемы становятся значительно меньше.

Подмножества NIEM можно создавать с помощью NIEM SSGT. Начальная страница SSGT, представленная на рисунке 4, разделена на две части. В правом окне осуществляется поиск и навигация по модели, а в левом накапливается подмножество компонентов по мере их добавления.

Рисунок 4. Главная страница SSGT
Главная страница SSGT

Основываясь на CMT, вы ищете компоненты, которые нужно добавить в подмножество. Используя SSGT, можно искать свойства (имена элементов или атрибутов), типы, ассоциации или другие компоненты. Так как имена элементов в CMT уже есть, имеет смысл искать свойства. Пример результатов поиска приведен на рисунке 5.

Вы можете спросить, почему сопоставление и выделение подмножества компонентов – это два отдельных шага, если эти задачи можно решать в одном и том же инструменте (SSGT). Конечно, используя SSGT, сопоставление и создание подмножества можно выполнить одновременно. Тем не менее многие пользователи, работающие с NIEM, считают, что сопоставление легче производить с помощью NIEM Wayfarer или Schema Central, которые более точно отображают фактическую (неформатированную) структуру типов. Для навигации в SSGT требуется более глубокое знание NIEM (и больше нажатий кнопок), поэтому переход к SSGT, когда есть готовый шаблон CMT, где перечислено все, что вам нужно из NIEM, упрощает составление подмножества.

Рисунок 5. Страница результатов поиска SSGT
Страница результатов поиска SSGT 'personname' property

Добавление свойств в подмножество

Когда нужный компонент NIEM выделен, нажмите кнопку Add, чтобы добавить его к подмножеству. Он появится на левой панели NIEM Schema Subset, как показано на рисунке 6.

При добавлении свойства его тип добавляется автоматически. Например, если добавить nc:PersonName, в подмножество автоматически добавляется и nc:PersonNameType. Компоненты, выбранные явно, выделяются на левой панели жирным шрифтом и помечаются флажком, а зависимые компоненты не выделяются.

Рисунок 6. Подмножество SSGT
Подмножество SSGT

По умолчанию SSGT не добавляет дочерние свойства типа. Например, если добавить nc:PersonName, он не включит свойства nc:PersonGivenName и nc:PersonSurName. Их нужно добавить в подмножество отдельно. Это нужно делать в контексте nc:PersonName, чтобы сохранить отношения "родительский-дочерний", например, между nc:PersonName и nc:PersonGivenName. Разверните дерево nc:PersonName в результатах поиска SSGT и нажмите Add рядом с nc:PersonGivenName, как показано на рисунке 7.

Рисунок 7. Добавление дочернего элемента с использованием SSGT
Добавление дочернего элемента с использованием SSGT

Если найти PersonGivenName отдельно и добавить его из результатов поиска, элемент добавится, но не как дочерний по отношению к nc:PersonName.

На рисунке 7 показано также, что при добавлении свойства типа можно указать мощность. Стрелка вниз рядом с кнопкой Add открывает выпадающее меню, которое показывает возможные значения мощности. Значение по умолчанию – от 0 до бесконечности.

Если свойство включено по наследству, оно не отображается в иерархии SSGT по умолчанию. Например, раскрытие nc:Vehicle в результатах поиска SSGT не приведет к автоматическому отображению nc:ItemDescriptionText, который соответствует свойству Property Description. Чтобы увидеть эти унаследованные свойства, нажмите кнопку show inheritance (рядом с nc:VehicleType) и разверните тип, который содержит нужное свойство – в данном случае nc:ItemType, как показано на рисунке 8.

Рисунок 8. Добавление унаследованного свойства с помощью SSGT
Добавление унаследованного свойства с помощью SSGT

Абстрактные элементы и подмножество

Модель NIEM, как правило, использует абстрактные элементы и группы подстановок XML-схемы. Например, существует несколько способов указания цвета элемента. В NIEM есть абстрактный элементnc:ItemColor, – который не может присутствовать в экземпляре XML. Вместо него надо подставить один из нескольких элементов, таких как nc:VehicleColorPrimaryCode или nc: ItemColorDescriptionText. В терминологии XML-схемы nc:VehicleColorPrimaryCode и nc:ItemColorDescriptionText называются членами группы подстановки, главой которой служит nc:ItemColor.

Абстрактные элементы несколько усложняют создание подмножества, так как требуют добавления в него не только самих абстрактных элементов, но и элементов подстановки. SSGT помечает все абстрактные элементы словом abstract и позволяет развертывать их, отображая элементы подстановки, как показано на рисунке 9.

Рисунок 9. Добавление элементов подстановки с помощью SSGT
Добавление элементов подстановки с помощью SSGT

Большинство типов, относящихся к датам, содержит также абстрактный элемент nc:DateRepresentation, который заменяется на nc:Date, nc:DateTime и т.п. Легко ошибиться, просто добавив связанное с датой свойство вроде nc:ActivityDate вместо того, чтобы развернуть его и выбрать nc:DateRepresentation, а затем nc:Date, чтобы добавить соответствующие дочерние элементы.

Тонкая настройка подмножества

Создав подмножество, его можно отредактировать на левой панели SSGT. Любой компонент можно удалить, установив флажок рядом с ним, а затем нажав кнопку Delete. Можно удалять также допустимые значения кодовых таблиц, разворачивая соответствующие простые типы на левой панели. По умолчанию в подмножество включены все значения кодовой таблицы простого типа.

Мощность можно изменить, нажав кнопку Edit Cardinality в верхней части левой панели. Это дает вам еще одну возможность решить, как много отдельных свойств должно присутствовать в родительском типе.

На данный момент ваше подмножество NIEM не обязано быть идеальным. Часто составление подмножества NIEM – это итерационный процесс. Вы можете сохранить подмножество и редактировать его по мере необходимости на заключительных стадиях разработки IEPD.

Генерирование подмножества NIEM

Чтобы сгенерировать подмножество, нажмите кнопку Generate Documents в правом верхнем углу страницы. Это вызывает открытие окна, аналогичного показанному на рисунке 10, в котором перечислены некоторые параметры процесса. Выберите Save Subset Schema to a file и укажите папку, в которой оно будет сохранено.

Рисунок 10. Генерирование подмножества с помощью SSGT
Генерирование подмножества с помощью SSGT

Создается файл архива, называемый Subset.zip, который содержит папку niem с подмножеством NIEM. В нем имеется схема для каждого пространства имен, из которого вы выбрали элементы в SSGT, плюс несколько стандартных схем, которые прилагаются ко всем подмножествам.

В схемы включены только выбранные типы, и эти типы содержат только выбранные свойства. Например, хотя в полной модели NIEM nc:PersonNameType имеется семь возможных дочерних элементов и все они имеют мощность 0..*, схема вашего подмножества будет содержать только те из них, что перечислены в листинге 1.

Листинг 1. Тип nc:PersonNameType в подмножестве NIEM
<xsd:complexType name="PersonNameType">
  <xsd:complexContent>
    <xsd:extension base="s:ComplexObjectType">
      <xsd:sequence>
        <xsd:element ref="nc:PersonGivenName" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="nc:PersonSurName" minOccurs="0" maxOccurs="1"/>
     </xsd:sequence>
   </xsd:extension>
  </xsd:complexContent>
</xsd:complexType>

Подмножество содержит также XML-документ с именем wantlist.xml, в котором перечислены все компоненты, добавленные в подмножество, с указанием их мощности. Wantlist полезен, если впоследствии потребуется внести изменения: достаточно повторно загрузить wantlist в SSGT, отредактировать подмножество и заново сгенерировать его. В листинге 2 показана часть файла wantlist.

Листинг 2. Часть файла wantlist подмножества NIEM
<w:WantList w:release="2.1" w:product="NIEM" ...>
  <w:Element w:name="j:Person" w:isReference="false"/>
  <w:Element w:name="j:Witness" w:isReference="false"/>
   ...
  <w:Type w:name="j:PersonType" w:isRequested="false">
    <w:ElementInType w:minOccurs="0" w:maxOccurs="1"
      w:name="j:PersonAugmentation" w:isReference="false"/>
 </w:Type>
 <w:Type w:name="j:WitnessType" w:isRequested="false">
   <w:ElementInType w:minOccurs="0" w:maxOccurs="1"
     w:name="j:WitnessAccountDescriptionText" w:isReference="false"/>
 <w:ElementInType w:minOccurs="1" w:maxOccurs="1"
     w:name="nc:RoleOfPerson" w:isReference="true"/>
 </w:Type>
   ...
</w:WantList>

Заключение и следующие шаги

В этой статье показано, как сопоставить UML-модель системы обмена информацией с моделью NIEM, используя CMT. Затем описан процесс создания подмножества NIEM с помощью NIEM SSGT. В третьей статье этого цикла мы рассмотрим пока не заполненные строки CMT-расширения. Будут описаны различные подходы к расширению NIEM, и мы проследим процесс создания схем Exchange и Extension.


Загрузка

ОписаниеИмяРазмер
Component Mapping Template (CMT)niem2mapping.zip62 KБ
Подмножество NIEMniem2subset.zip11 KБ

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=XML
ArticleID=559983
ArticleTitle=Создание IEPD NIEM: Часть 2. Сопоставление модели с NIEM и создание подмножества NIEM
publish-date=11012010