Размышления об XML: Расширение XML-схем при помощи SKOS

Узнайте об использовании понятий предметной области в приложениях XML

Понятия предметной области, представленные в схемах, например категории людей, местоположения и различные объекты, неразрывно связаны с тем, что под ними понимают люди. Этот факт имеет фундаментальное значения для взаимодействия технологий и бизнеса, поэтому явное описание подобных связей – это одна из наиболее важных функций проектировщиков XML-схем. Для этой цели хорошо подходит язык SKOS, который получил широкую известность в качестве компонента DITA. В этой статье будет рассказано о добавлении терминов SKOS в XML-схемы.

Уче Огбуйи (Uche Ogbuji), главный консультант, Fourthought

Photo: Уче ОгбуйиУче Огбуйи (Uche Ogbuji) является консультантом и соучредителем корпорации Fourthought, которая занимается поставкой и консультационными услугами в области XML-решений для корпоративного управления знаниями. Корпорация Fourthought разрабатывает 4Suite, платформу с открытым исходным кодом для XML, RDF и приложений управления знаниями. Огбуйи также является ведущим разработчиком Versa - языка запросов RDF. Специалист по компьютерной технике и писатель, Огбуйи родился в Нигерии, в данной время проживает и работает в г. Боулдер, Колорадо, США. Связаться с ним можно по электронной почте uche@ogbuji.net.



03.06.2009

Главной темой колонки "Размышления об XML" является семантическая прозрачность, другими словами, прояснение смысла конструкций, встречающихся в схемах и документах XML. В предыдущих статьях рассказывалось о восходящем подходе к семантике, при котором понятия и концепции описывались дискретным образом (подобные сборники терминов фактически представляют собой словари) независимо от документов и схем, а затем широко использовались. Компаниями-разработчиками было предпринято немало подобных попыток, причем с разной степенью успеха. Ранее мы уже упоминали о таких словарях как базовый семантический реестр ISO (ISO Basic Semantics Register – BSR), словари RosettaNet, базовые компоненты ebXML (ebXML Core Components), универсальная инфраструктура элементов данных (Universal Data Element Framework – UDEF), ISO 15022, который используется в сфере финансовых услуг и т.д. При этом пока не предпринималось масштабных попыток использования терминологии в качестве главной движущей силы при разработке XML-схем. Как правило, приходится создавать свои собственные специализированные глоссарии.

Часто используемые аббревиатуры

  • DITA: Архитектура типизированной информации Darwin
  • URI: Универсальный идентификатор ресурса
  • W3C: Консорциум World Wide Web
  • XML: Расширяемый язык разметки
  • XSL: Расширяемый язык таблиц стилей
  • XSLT: Преобразования в XSL

Все чаще архитекторы программного обеспечения осознают, что одних словарей недостаточно для гибкой интеграции данных. В документах XML необходимо описывать людей, места и различные объекты, а также всевозможные связи между ними, в частности отношения специализации, принадлежности к типу, синонимы и антонимы. Кроме того, необходимо связывать объекты с географическими местоположениями, важными временными моментами, регламентами и бизнес-правилами. Иногда приходится расширять возможности приложения за пределы изначальной узкой предметной области, подстраиваясь под более общие правила индустрии. Это во-многом объясняет почему технологии семантического Web'a (Semantic Web) настолько хорошо подходят для создания XML-приложений. Знакомство с ними следует начать с наиболее простых вещей, например языка для простой организации знаний (Simple Knowledge Organization System – SKOS), который в настоящий момент находится в последней стадии разработки. К этому моменту он прошел ряд обсуждений и уже достаточно хорошо продуман и реализован. К сожалению, в последних рабочих версиях SKOS был несколько усложнен, поскольку разработчики пытались привязать его к значительно более сложному языку онтологий в Web (Web Ontology Language – OWL). Тем не менее, он по-прежнему очень полезен, особенно если игнорировать некоторые из его загадочных конструкций. По крайней мере, он предоставляет средства для описания смысла отношений между понятиями, позволяя вам сделать первых шаг к обогащению XML-схем.

От понятий к выражениям

Понятия предметной области лучше описывать как можно раньше в процессе разработки. Основные понятия необходимо выделять на этапе анализа требований к новому приложению или интеграции существующих приложений, причем очень важно максимально точно сохранять их смысл в исходном контексте. Одним из способов представления этой информации в виде, понятном для нетехнических специалистов, является формат Turtle языка описания ресурсов (Resource Description Framework – RDF). Тесный контакт между разработчиками и представителями бизнеса является ключом к тому, чтобы максимизировать пользу от информации, представленной в XML. В этой статье будет рассмотрен пример Fluffy Boards – компании-производителя сноубордов, которой необходимо создать формат для представления маркетинговой информации о новой модели сноуборда под названием Cumulus. В листинге 1 показаны описания некоторых важных понятий с использованием синтаксиса Turtle для SKOS.

Листинг 1. Определения ключевых понятий для представления маркетинговой информации о сноубордах (используется формат Turtle для SKOS)
@prefix skos: <http://www.w3.org/2004/02/skos/core#>.
@prefix f: <http://www.fluffyboards.com/vocabulary#>.

f:product
  a  skos:Concept;
  skos:prefLabel "product";
  skos:altLabel "merchandise item";
  skos:definition "Item developed for sale by Fluffy Boards.".

f:snowboard
  a  skos:Concept;
  skos:prefLabel "snowboard";
  skos:altLabel "deck";
  skos:definition "Deck to be mounted with bindings for riding on snow.";
  skos:broader f:product.

f:endorsement
  a  skos:Concept;
  skos:prefLabel "endorsement";
  skos:altLabel "formal thumbs-up";
  skos:definition "Formal statement of approval of the product.";
  skos:broader f:review.

f:review
  a  skos:Concept;
  skos:prefLabel "review";
  skos:altLabel "product opinion";
  skos:definition "Statement of opinion of a product.".

f:customer
  a  skos:Concept;
  skos:prefLabel "customer";
  skos:definition "Person or group engaged by Fluffy Boards in the purchase process.".

Если вас интересует подробное введение в SKOS, то обратитесь по ссылке в разделе Ресурсы, так как мы лишь кратко разберем листинг 1. В первых двух строчках содержатся Turtle-версии объявлений пространств имен. Префикс f будет выступать в качестве проприетарного пространства имен компании Fluffy Boards. Далее определяется понятие f:product, включающее в себя как предпочтительный, так и альтернативный варианты текстовых меток. Краткое но точное описание самого понятия находится в свойстве skos:definition. Свойство skos:broader служит для организации понятий, связанных друг с другом. Например, "person" (человек) – это более общее понятие, чем "boy" (мальчик) и наоборот, "boy" – это более узкое понятие, чем "person". При использовании в схемах документы SKOS чаще представляются в формате XML, однако существует средства автоматической конвертации из Turtle в XML (так называемый формат RDF/XML) и наоборот. Пример того же документа в формате XML приведен в листинге 2.

Листинг 2. Определения ключевых понятий для представления маркетинговой информации о сноубордах (используется формат RDF/XML для SKOS)
<?xml version="1.0"?>
<rdf:RDF xmlns:f="http://www.fluffyboards.com/vocabulary#"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#">
  <skos:Concept rdf:about="http://www.fluffyboards.com/vocabulary#snowboard">
    <skos:prefLabel>snowboard</skos:prefLabel>
    <skos:altLabel>deck</skos:altLabel>
    <skos:definition>Deck to be mounted with bindings for riding on snow.
    </skos:definition>
    <skos:broader>
      <skos:Concept rdf:about="http://www.fluffyboards.com/vocabulary#product">
        <skos:prefLabel>product</skos:prefLabel>
        <skos:altLabel>merchandise item</skos:altLabel>
        <skos:definition>Item developed for sale by Fluffy Boards.</skos:definition>
      </skos:Concept>
    </skos:broader>
  </skos:Concept>
  <skos:Concept rdf:about="http://www.fluffyboards.com/vocabulary#endorsement">
    <skos:prefLabel>endorsement</skos:prefLabel>
    <skos:altLabel>formal thumbs-up</skos:altLabel>
    <skos:definition>Formal statement of approval of the product.</skos:definition>
    <skos:broader>
      <skos:Concept rdf:about="http://www.fluffyboards.com/vocabulary#review">
        <skos:prefLabel>review</skos:prefLabel>
        <skos:altLabel>product opinion</skos:altLabel>
        <skos:definition>Statement of opinion of a product.</skos:definition>
      </skos:Concept>
    </skos:broader>
  </skos:Concept>
  <skos:Concept rdf:about="http://www.fluffyboards.com/vocabulary#customer">
    <skos:prefLabel>customer</skos:prefLabel>
    <skos:definition>Person or group engaged by Fluffy Boards in the purchase process.
    </skos:definition>
  </skos:Concept>
</rdf:RDF>

Использование понятий в схемах

После того, как понятия описаны на полу-формальном языке, например SKOS, все что требуется для их использование в схемах – это лишь ваши творческие способности и способность отличать удачный XML-дизайн от неудачного. Предположим, что в компании Fluffy Boards XML используется в отделе маркетинга для хранения отзывов о каждом сноуборде. Для этого может использоваться схема (стандарт W3C XML Schema ил WXS), показанная в листинге 3.

Листинг 3. Пример схемы, описанной на языке XML Schema W3C
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified" 
      targetNamespace="http://www.fluffyboards.com/marketing/"
      xmlns:f="http://www.fluffyboards.com/vocabulary#"
      xmlns:m="http://www.fluffyboards.com/marketing/"
      xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
      xmlns:skos="http://www.w3.org/2004/02/skos/core#">
  <xs:import namespace="http://www.w3.org/XML/1998/namespace"
    schemaLocation="http://www.w3.org/2000/10/xml.xsd"/>
  <xs:element name="snowboard">
    <xs:annotation>
      <xs:appinfo>
      <skos:Concept rdf:about="http://www.fluffyboards.com/vocabulary#snowboard">
        <skos:prefLabel>snowboard</skos:prefLabel>
        <skos:altLabel>deck</skos:altLabel>
        <skos:broader rdf:resource="http://www.fluffyboards.com/vocabulary#product"/>
      </skos:Concept>

      </xs:appinfo>
      <!-- from skos:Concept/skos:definition -->
      <xs:documentation>Deck to be mounted with bindings for riding on snow.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="name"/>
        <xs:element ref="m:description"/>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="m:review"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute ref="xml:base"/>
      <xs:attribute name="id" use="required" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="review">
    <xs:annotation>
      <xs:appinfo>
      <skos:Concept rdf:about="http://www.fluffyboards.com/vocabulary#review">
        <skos:prefLabel>review</skos:prefLabel>
        <skos:altLabel>product opinion</skos:altLabel>
      </skos:Concept>
      </xs:appinfo>
      <xs:documentation>Statement of opinion of a product.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="m:source"/>
        <xs:element name="content" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="source">
    <xs:annotation>
      <xs:appinfo>
      <skos:Concept rdf:about="http://www.fluffyboards.com/vocabulary#customer">
        <skos:prefLabel>customer</skos:prefLabel>
      </skos:Concept>
      </xs:appinfo>
      <xs:documentation>Person or group engaged by Fluffy Boards in the purchase process
      </xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:element name="description">
    <xs:complexType>
      <xs:attribute name="purpose" use="required" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

Конструкции, позаимствованные из SKOS, выделены жирным шрифтом. Обратите внимание на импорт файла xml.xsd – благодаря этому можно использовать атрибут xml:base. Помимо аннотаций SKOS существует еще одно решение из мира Semantic Web, которое полезно при проектировании XML-схем, а именно – использование URI в качестве идентификаторов. XML Base позволяет сокращать URI, избегая при этом неоднозначности. Элемент snowboard связывается с абстрактным одноименным понятием при помощи специального выражения в аннотации схемы. Кроме того, в элементе xs:documentation используется описание понятия в SKOS, что облегчает интеграцию с приложениями для обработки схем. Учтите, что совершенно необязательно должно поддерживаться взаимно однозначное соответствие между понятиями в SKOS и конструкциями из словаря XML. Понятия в SKOS могут привязываться не ко всем элементам в XML, и не каждое понятие в SKOS может фигурировать в схеме. С элементом review в XML связано одноименное понятие, а с его дочерним элементом source (источник) – понятие customer (клиент). Таким образом, в схеме устанавливается неявное правило, что источниками отзывов являются клиенты. Хотя подобные правила лучше явно выражать в базах знаний SKOS, даже на этом примере можно видеть, насколько широкие возможности открываются путем возможной привязки понятий к конструкциям в XML.

Пример документа XML

В листинге 4 приведен пример документа XML, являющегося экземпляром схемы в листинге 3.

Листинг 4. Пример документа, соответствующего схеме в листинге 3
<?xml version="1.0" encoding="UTF-8"?>
<snowboard xmlns="http://www.fluffyboards.com/marketing/"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.fluffyboards.com/marketing/ file:listing3.xsd"
 xml:base="http://www.fluffyboards.com/marketing/"
 id="boards/cumulus">
    <name>Cumulus</name>
    <description purpose="unsolicited-blurb"/>
        <review>
            <source>Uche Ogbuji</source>
            <content>The Cumulus floats in powder like a dream.  My favorite snowboard.
            </content>
        </review>
</snowboard>

Автоматизация связей

Одним из недостатков подхода, описанного в предыдущем разделе, является дублирование информации в схемах, что может приводить к потере согласованности при обновлении. Его можно устранить, используя в схемах ссылки на информацию о понятиях (концептуальную информацию). При этом в случае необходимости можно автоматически добавлять концептуальную информацию в схему. В листинге 5 приведен модифицированный вариант схемы из листинга 3, в которой используются ссылки вместо копирования понятий из SKOS.

Листинг 5. Пример схемы, ссылающейся на документ SKOS
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified" 
      targetNamespace="http://www.fluffyboards.com/marketing/"
      xmlns:f="http://www.fluffyboards.com/vocabulary#"
      xmlns:m="http://www.fluffyboards.com/marketing/"
      xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
      xmlns:owl="http://www.w3.org/2002/07/owl#"
      xmlns:skos="http://www.w3.org/2004/02/skos/core#">

  <xs:import namespace="http://www.w3.org/XML/1998/namespace"
    schemaLocation="http://www.w3.org/2000/10/xml.xsd"/>

  <xs:annotation>
    <xs:appinfo>
      <owl:imports rdf:resource="fluffy-marketing.skos"/>
    </xs:appinfo>
  </xs:annotation>

  <xs:element name="snowboard">
    <xs:annotation>
      <xs:appinfo>
        <skos:Concept rdf:about="http://www.fluffyboards.com/vocabulary#snowboard"/>
      </xs:appinfo>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="name"/>
        <xs:element ref="m:description"/>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="m:review"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute ref="xml:base"/>
      <xs:attribute name="id" use="required" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="review">
    <xs:annotation>
      <xs:appinfo>
        <skos:Concept rdf:about="http://www.fluffyboards.com/vocabulary#review"/>
      </xs:appinfo>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="m:source"/>
        <xs:element name="content" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="source">
    <xs:annotation>
      <xs:appinfo>
        <skos:Concept rdf:about="http://www.fluffyboards.com/vocabulary#customer"/>
      </xs:appinfo>
    </xs:annotation>
  </xs:element>

  <xs:element name="description">
    <xs:complexType>
      <xs:attribute name="purpose" use="required" type="xs:anyURI"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

Обратите внимание на элемент owl:imports, который используется для формального включения понятий SKOS в схему. Легкость обхода ссылок и автоматического включения концептуальной информации в схему (т.е. фактически преобразования схемы из краткой формы в листинге 5 в полную форму в листинге 3) можно продемонстрировать на примере небольшой XSLT-страницы, выполняющей данную функцию. Страница, показанная в листинге 6, не отличается особой надежностью, в частности она не обрабатывает ни простые (rdf:ID,xml:base), ни сложные конструкции RDF, поэтому вам понадобится более совершенное решение, если вы собираетесь интенсивно использовать SKOS при проектировании XML-схем. Тем не менее, идея совершенно ясна, более того, данная страница вполне справляется с примерами к этой статье.

Листинг 6. Страница XSLT для разрешения ссылок на понятия SKOS в XML-схеме
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:owl="http://www.w3.org/2002/07/owl#"
  xmlns:skos="http://www.w3.org/2004/02/skos/core#"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
>

  <xsl:variable name="skosfile"
      select="document(/xs:schema/xs:annotation/xs:appinfo/owl:imports/@rdf:resource)"/>
  
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="skos:Concept">
    <xsl:variable name="uri" select="@rdf:about"/>
    <xsl:copy>
      <xsl:apply-templates select="$skosfile//skos:Concept[@rdf:about=$uri]/*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="xs:annotation">
    <xsl:variable name="concept" select="xs:appinfo/skos:Concept/@rdf:about"/>
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
    <xsl:if test="$concept">
      <xs:documentation>
        <xsl:value-of
            select="$skosfile//skos:Concept[@rdf:about=$concept]/skos:definition"/>
      </xs:documentation>
    </xsl:if>
  </xsl:template>

  <xsl:template match="skos:definition"/>

</xsl:stylesheet>

Заключение

Связывание понятий, определенных в SKOS, с конструкциями в более мощных языках описания, например RELAX NG и Schematron (кстати, мне лично они нравятся больше, чем XML Schema) оказывается еще проще чем в WXS. В обоих этих языках можно вставлять элементы SKOS везде, где требуется, благодаря использованию выделенного пространства имен. Какой бы язык вы ни использовали, вы сможете проектировать схемы, который будут понятны всем, как людям так и приложениям, причем безо всякой магии. Главным преимуществом является появление некой "точкой опоры" – то, от чего люди могут оттолкнуться, решая задачи интеграции информации или повышения качества данных. Кроме того, можно использовать аннотации схем в системах, предоставляющих общий доступ к информации, например wiki, облегчая тем самым участие в совместных проектах для всех заинтересованных людей, а не только технических специалистов. SKOS, о котором рассказывалось в этой статье, представляет собой хороший язык для описания подобного обмена информацией. В целом, прочитав статью вы узнали о связывании понятий предметной области с элементами XML-схем.

Ресурсы

Научиться

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

Обсудить

Комментарии

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=394045
ArticleTitle=Размышления об XML: Расширение XML-схем при помощи SKOS
publish-date=06032009