Опубликован: 10.12.2007 | Уровень: специалист | Доступ: платный
Лекция 11:

RDF

11.4.2 <RDF>

Тег <RDF> является корневым элементом всего документа RDF, его наличие обязательно. Поскольку документы RDF, как правило, содержат теги из нескольких пространств имен, традиционно в этом теге определяется префикс для пространства имен RDF

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

Для этого тега не определено никаких специальных атрибутов. В нем могут встречаться лишь декларации пространств имен XML, добавляющие словари (дополнительные наборы тегов) для использования в документе. Эти декларации играют ту же роль, что и указание DTD (определение типа документа) в документе HTML. В таблице 11.3 перечислены все пространства имен, которые используются в RDF-документах платформы Mozilla.

Таблица 11.3. Пространства имен, образующие словарь RDF платформы Mozilla
URL пространства имен Префикс xmlns Где определено Использование
http://www.w3.org/1999/02/22-rdf-syntax-ns# RDF http://www.w3.org Базовая поддержка RDF
http://home.netscape.com/WEB-rdf# Web Код Mozilla Закладки и метки времени
http://www.mozilla.org/rdf/chrome# Chrome Код Mozilla Управление пакетами chrome и оверлеями
http://home.netscape.com/NC-rdf# nc Код Mozilla Общего назначения
http://www.mozilla.org/LDAPATTR-rdf# ldapattr JavaScript, на основе свойств LDAP Поддержка LDAP в почтовом клиенте
http://www.mozilla.org/inspector# ins JavaScript Инспектор DOM

За исключением первой строки таблицы, ни одному из указанных URL не соответствует реальный документ. URL, содержащие "netscape", являются наследием Netscape Communicator 4.x. Префиксы представляют собой рекомендации, основанные на существующих соглашениях. Из перечисленных префиксов в различных компонентах Mozilla наиболее широко используются web, chrome и nc. Чтобы использовать пространство имен, нужно знать ключевые слова (теги), предоставляемые этим пространством. Эти ключевые слова обсуждаются ниже в разделе "Теги предикатов". Разработчик приложений может добавлять к RDF-документам любые другие пространства имен, включая в документ дополнительные декларации xmlns.

Содержимым тега <RDF> являются теги-потомки. Его непосредственными потомками могут быть тег <Description> и теги- контейнеры <Seq> <Bag> <Alt>.

11.4.3 <Description>

Тег <Description> является основой всего языка RDF. Этот тег представляет один или несколько фактов и может содержать любое количество тегов-потомков, в том числе ни одного. Каждый тег-потомок является предикатом (свойством RDF). Каждый тег-потомок выражает один факт, субъект которого указан в теге <Description>. В листинге 11.8 представлены два факта, выраженные с помощью одного тега <Description>.

<факт субъект="...">
  <свойство1 ...>объект1</свойство1>
  <свойство2 ...>объект2</свойство2>
</факт>
Листинг 11.8. Два факта, определенные с помощью одного тега RDF <Description>

Этот фрагмент записан на псевдокоде, а не на синтаксически корректном RDF. Вместо термина предикат мы использовали свойство, поскольку эти термины взаимозаменяемы. Из этого примера видно, почему в терминологии RDF говорят о свойствах – факт здесь определяет два свойства субъекта. Более строгое утверждение состоит в том, что перед нами сокращенная запись двух различных фактов с одним и тем же субъектом.

В RDF роль тега <fact> из этого примера играет тег <Description>, который по сути является контейнером. Он, однако, отличается от прочих контейнеров RDF тем, что не имеет никакой специальной семантики и содержит пары предикат/свойство, а не субъекты или объекты.

Тег <Description> имеет следующие специальные атрибуты.

ID about type

Каждый тег <Description> должен иметь атрибут ID или атрибут about. Если тег не имеет ни одного из этих атрибутов, считается, что соответствующий факт имеет анонимный субъект. Этот субъект для внешнего мира невидим (для него невозможно определить уникальный URL), а в рамках данного документа он считается неопределенным термом.

Считается, что атрибут ID имеет имя, которое совпадает с его значением. Это имя можно добавить к URL документа RDF, чтобы получить уникальный URL для факта как целого. Одновременно этот же URL рассматривается как URL субъекта данного факта. Использование атрибута ID тега <Description> имеет смысл в том случае, если у этого тега есть ровно одно свойство. Субъект факта, определенного с использованием атрибута ID, доступен для внешнего мира (как и в предыдущем абзаце, речь идет не о физической доступности документа, а о возможности адресации факта и его субъекта).

Атрибут about определяет субъект факта. Его значением должен быть полный URL. Если атрибут about используется вместо атрибута ID, факт как целое не имеет собственного URL и недоступен из внешнего мира.

Атрибут type указывает тип объекта факта (в терминологии RDF – значения свойства ресурса). Как правило, объектом/значением является содержимое XML, заключенное в открывающий и закрывающий теги элемента- свойства. Атрибут type указывает, какого рода этот объект. Если этот атрибут присутствует, его значение должно быть корректным URI. Mozilla никак не обрабатывает атрибут type в документах RDF; он не связан ни с какой схемой данных. Следует заметить, что атрибут type вместе со своим значением фактически образует пару свойство-значение (предикат- объект). Как мы увидим ниже, в RDF определен тег-предикат type ; атрибут type может рассматриваться как сокращенная запись этого предиката.

Mozilla не поддерживает следующие специальные атрибуты тега <Description>:

aboutEach aboutEachItem bagID

Два первых атрибута не рекомендованы к применению последними версиями спецификации RDF. Атрибут bagID используется для реификации фактов; Mozilla не поддерживает эту функциональность.

11.4.3.1 Сокращенная нотация

Тег <Description> и его содержимое могут быть записаны как единственный тег <Description> без всякого содержимого. Это можно сделать, записав предикат и объект как атрибут XML тега <Description> и значение этого атрибута соответственно.

Следующий фрагмент RDF выражает единственный факт, свидетельствующий о том, что Спот принадлежит Тому:

<Description about="www.test.com/#Том">
  <ns:Владелец>Спот</ns:Владелец >
</Description>

В данном случае субъект и предикат представлены с помощью URL; объект представлен с помощью литерала. Предикат принадлежит пространству имен XML с префиксом ns. Это пространство было декларировано в начале документа, поэтому полный URL предиката нельзя установить на основании одного лишь данного фрагмента. Сокращенная запись того же фрагмента выглядит следующим образом:

<Description about="www.test.com/#Том" ns:Владелец="Спот"/>

Обратите внимание на префикс пространства имен перед атрибутом. Эта возможность предусмотрена спецификацией XML, но не слишком часто используется на практике. Сокращенная запись допустима лишь в том случае, когда объект/значение является литералом, а не URI.

11.4.4 Теги предикатов/свойств

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

RDF определяет атрибуты XML, которые можно добавлять к тегам свойств. Эти атрибуты влияют на любой тег-свойство, к которому они добавлены, подобно тому, как добавление атрибута observes превращает любой тег в элемент-наблюдатель. Доступны следующие специальные атрибуты:

ID parseType

Атрибут ID имеет то же назначение, что и в теге <Description>. Если родительский тег <Description> содержит более чем один тег-предикат (т.е. представляет несколько фактов), атрибут ID может быть добавлен к тегам-предикатам, чтобы однозначно идентифицировать отдельные факты.

Атрибут parseType является указанием для синтаксического анализатора RDF. Он отличается от предиката type, обсуждаемого в следующем разделе, и указывает, каким образом должна интерпретироваться текстовая строка, представляющая значение/объект. Атрибут parseType может принимать следующие значения:

Literal Resource Integer Date

Два первых значения предусмотрены спецификацией RDF. Literal – значение атрибута по умолчанию, оно подразумевает, что значение является произвольной строкой. Resource означает, что строка значения представляет URI. Значения Integer и Date являются дополнениями Mozilla и указывают, что строка должна интерпретироваться как 32-битное целое со знаком и как дата соответственно. Предполагается, что дата может быть в любом из нескольких форматов, однако не все из них поддержаны полностью. Самый надежный вариант – использовать формат UTC, выдаваемый командой UNIX date(1), но в полученной строке заменить "UTC" на "UT" или "GMT". Значение атрибута Date не должно содержать символов Unicode, выходящих за пределы набора ASCII.

11.4.4.1 Существующие предикаты

В RDF определен предикат type, соответствующий атрибуту type тега <Description>. Использование этого атрибута является сокращенным вариантом следующей записи:

<rdf:type>value</rdf:type>

В данном случае rdf является префиксом пространства имен RDF. Предикат type может применяться к субъектам любых фактов. Такое использование позволяет расширить базовую систему типов RDF с помощью либо фактов, определенных приложением, либо схемы RDF (RDF Schema), если приложение поддерживает такую функциональность. В приложениях на основе Mozilla эти возможности используются редко.

Пространства имен, перечисленные в таблице 11.3, также обеспечивают дополнительные наборы предикатов. Поскольку предикаты, по сути, являются элементами данных, сами по себе эти имена ничего не "делают".

В "Команды" "Команды" было сказано, что платформа Mozilla определяет множество команд, но все они связаны с тем или иным приложением – Навигатором, Компоновщиком или почтовым клиентом. То же самое справедливо и для предикатов. В файлах RDF, создаваемых Mozilla, используется множество предикатов, но все они связаны с конкретными фрагментами прикладного кода.

Полного списка этих предикатов не существует ни в документации, ни даже в исходном коде. Чтобы ввести новый предикат, разработчику достаточно добавить его в файл RDF, а его обработку – к исходному коду. Поэтому поиск предикатов, используемых Mozilla – задача для самостоятельного исследования. Некоторые примеры таких предикатов приведены в "Оверлеи и Chrome" "Оверлеи и chrome".

Вновь создаваемое приложение на платформе Mozilla должно иметь формально описанную модель данных и/или словарь, перечисляющий возможные предикаты. Разработчик может использовать существующие предикаты Mozilla в качестве образца или отправной точки для составления собственного словаря, но ему нет необходимости задействовать уже существующие имена.

Существующим схемам данных нужно строго следовать лишь в том случае, когда приложение должно создавать или изменять файлы RDF в уже существующих форматах. Для знакомства с этими форматами можно изучить существующие файлы, созданные классическим браузером или другими приложениями Mozilla. Более сложный, но и более надежный способ – изучение исходного кода этих приложений.

11.4.4.2 Сокращенная нотация

Теги-предикаты могут иметь атрибут resource. Он аналогичен атрибуту about тега <Description>, но указывает на объект факта (значение свойства). При использовании атрибута resource тег-предикат может не иметь содержимого XML, а значением атрибута resource должен быть не литерал, а корректный URI, указывающий на объект. Полная форма записи может быть, например, такой:

<ns:Владелец parseType="Resource">www.test.com/#Spot</ns:Владелец>

Тогда ее сокращенная форма имеет следующий вид:

<ns:Владелец rdf:resource="www.test.com/#Spot"/>

Это применение атрибута resource не представляет трудностей для понимания. Однако данный атрибут имеет и более сложное применение.

В простом случае, рассмотренном только что, значение атрибута resource участвует лишь в одном факте, на объект которого оно указывает. Однако этот же объект может быть субъектом другого факта. В данном случае применимо следующее весьма запутанное правило: если в теге-предикате встречается атрибут resource, а также другие пары атрибут-значение, эти пары интерпретируются так же, как если бы они принадлежали тегу <Description>, субъектом которого (значением атрибута about ) был бы URI, являющийся значением атрибута resource тега-предиката. Иными словами, внутри тега-предиката одного факта могут быть определены другие, вложенные факты, причем объект объемлющего факта является субъектом вложенных фактов.

Все это весьма сложно и запутанно, и не стоит тратить усилий на изучение всех тонкостей, если только вы не разрабатываете сложное и амбициозное приложение. Этот вариант сокращенной записи был предложен для того, чтобы уменьшить количество вложенных тегов в документе RDF. Предполагается, что его использование делает документ более удобным для восприятия, но это утверждение представляется спорным. Более подробная информация о различных вариантах сокращенной записи RDF содержится в разделе 2.2.2 описания синтаксиса RDF (спецификация 1999 г.).

Дмитрий Гуменюк
Дмитрий Гуменюк
Россия, Звенигород
Konstantin Grishko
Konstantin Grishko
Россия, Москва, Московский финансово-промышленный университет "Синергия", Москва