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

RDF

11.5. Примеры RDF

В этом разделе представлено несколько примеров практического применения RDF, иллюстрирующих использование синтаксиса и концепций этого языка.

11.5.1 Менеджер загрузок: использование URL

Менеджер загрузок классического браузера представляет собой наглядный пример использования документа RDF для хранения информации о ресурсах Internet. Менеджер загрузок, который доступен в Mozilla начиная с версии 1.2.1, используется для того, чтобы отслеживать процесс загрузки файлов. Его можно активизировать в разделе Навигатор | Загрузки диалогового окна настроек Mozilla ( пункт меню Правка | Настройки ).

Интерфейс Менеджера загрузок состоит из единственного окна XUL, а данные о загрузках хранятся в файле RDF. Окно открывается при сохранении web-документа в локальной файловой системе, например, при помощи пункта меню Навигатора Файл | Сохранить как. Кроме того, Менеджер загрузок можно открыть в любой момент при помощи пункта меню Инструменты | Менеджер загрузок. Файл RDF называется downloads.rdf и находится в каталоге профиля пользователя. Код Менеджера загрузок находится в файле comm.jar в chrome. В основе графического интерфейса этого компонента лежит тег XUL <tree>.

Чтобы пронаблюдать работу программы с файлом RDF, следует открыть окно Менеджера загрузок и удалить все записи, выделив их и нажав на кнопку "Удалить из списка". Откройте файл downloads.rdf в любом текстовом редакторе. Вы увидите, что файл содержит лишь декларации пространств имен и пустой контейнер <Seq>, как показано в листинге 11.12.

<?xml version="1.0"?>
<RDF:RDF
  xmlns:NC="http://home.netscape.com/NC-rdf#"
  xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
  <RDF:Seq about="NC:DownloadsRoot">
  </RDF:Seq>
</RDF:RDF>
Листинг 11.12. "Пустой" файл downloads.rdf

Затем откройте любую страницу на удаленном сервере, например http://www.mozilla.org. Сохраните страницу в локальном файле и, когда сохранение будет полностью завершено, перезагрузите файл downloads.rdf в текстовом редакторе. Вы увидите, что к файлу были добавлены тег <Description> с содержимым, а также элемент коллекции <Seq>. Тег <Description> содержит восемь фактов о загруженном файле. Примечательно, что эти факты записаны с помощью различных видов нотации. Субъект факта с тегом <Description> одновременно является объектом в коллекции <Seq>. Эта коллекция позволяет найти все записи о файлах, включенные в документ.

Файл downloads.rdf после загрузки одного документа показан в листинге 11.13.

<?xml version="1.0"?>
<RDF:RDF
  xmlns:NC="http://home.netscape.com/NC-rdf#"
  xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>
  <RDF:Seq about="NC:DownloadsRoot">
    <RDF:li resource="C:\tmp\test_save.html"/>
  </RDF:Seq>
  <RDF:Description about="C:\tmp\test_save.html"
      NC:Name="test_save.html"
      NC:ProgressMode="none"
      NC:StatusText="Finished"
      NC:Transferred="1KB of 1KB">
    <NC:URL resource="http://www.mozilla.org/"/>
    <NC:File resource="C:\tmp\test_save.html"/>
    <NC:DownloadState NC:parseType="Integer">1</NC:DownloadState>
    <NC:ProgressPercent NC:parseType="Integer">100</NC:ProgressPercent>
  </RDF:Description>
</RDF:RDF>
Листинг 11.13. Файл downloads.rdf после завершения загрузки одного файла.

При использовании Microsoft Windows локальные пути записываются с префиксом C: (или другим именем диска). Это расширение синтаксиса URL, используемое компанией Microsoft, поддерживается Mozilla. Такая запись эквивалентна префиксу file:///C| / и, с точки зрения Mozilla, допустима в составе URL.

Попробуйте сохранять другие страницы, наблюдая изменения в файле. Также можно, закрыв окно Менеджера загрузок, аккуратно удалить из файла один из элементов контейнера <Seq> и соответствующий тег <Description>. Затем следует вновь открыть окно и посмотреть на результат.

Менеджер загрузок мог бы быть реализован без использования RDF. Этот формат был выбран для хранения данных, поскольку платформа Mozilla включает развитую поддержку работы с ним. Поэтому чтение и сохранение данных в таком формате не представляет сложности для разработчика и не требует написания большого количества кода.

11.5.2 Использование URN для простых данных

RDF может использоваться не только для хранения информации о web- ресурсах, представляемых своими URL, но и при работе с обычными данными. Какой смысл в использовании RDF для обычных данных? Инфраструктура поддержки RDF, предоставляемая платформой Mozilla, позволяет объединять данные, хранимые в документах RDF, и динамически обновлять их. Эти объединенные данные могут одновременно использоваться в разных местах приложения или даже в нескольких приложениях. Кроме того, инфраструктура платформы обеспечивает автоматический анализ синтаксиса содержимого RDF и выполнение различных операций с ним. Разработчику приложения нет необходимости самостоятельно выполнять операции низкого уровня. Наконец, RDF лежит в основе системы шаблонов Mozilla, которая обеспечивает автоматическое отображение содержимого RDF.

11.5.2.1 Сводка типов, поддерживаемых реализацией RDF на платформе Mozilla

Выше мы уже обсуждали некоторые типы, используемые в документах RDF. Платформа Mozilla поддерживает следующие типы:

Типы литералов: Literal, Resource, Integer, Date, Blob. Тип XMLLiteral не поддерживается.

Типы компонентов фактов: Property, Bag, Seq, Alt. Тип List не поддерживается.

Типы фактов: тип Statement не поддерживается.

Типы, используемые для реификации: типы subject, predicate и object не поддерживается.

Тип Blob используется для хранения массива бинарных данных. Этот тип нельзя указать из скрипта JavaScript – это расширение Mozilla, которое может быть использовано только из кода на C/C++. Литералы типа Blob используются, в частности, в почтовом клиенте Mozilla для представления файлов, вложенных в почтовые сообщения.

Типы, поддерживаемые в документах RDF, указываются при помощи атрибута type тега <Description>, что эквивалентно использованию встроенного тега-предиката <rdf:type>.

Платформа Mozilla не поддерживает типов RDF Shema. Как правило, разработчику приложений следует хранить свои данные в файле RDF в виде простых строк XML и выполнять необходимые преобразования в коде приложения.

11.5.2.2 URN.

До сих пор при обсуждении идентификаторов в этой лекции мы использовали в качестве примеров только URL. Этот формат идентификатора полезен при хранении информации о web-сайтах и других ресурсах Internet. Однако если приложение должно работать с простыми данными, вместо URL рекомендуется использовать URN.

Строго говоря, идентификаторы в RDF должны иметь формат URI, а не URL. URI (универсальный идентификатор ресурса) может быть либо URL (универсальным указателем ресурса), либо URN (универсальным именем ресурса).

URL связывает ресурс с точкой доступа к нему (адресом) и методом доступа, например протоколом HTTP. Ресурс, доступный по указанному адресу, например web-страница, может меняться со временем. URN, с другой стороны, представляет собой всего лишь имя какого-нибудь понятия, которое предполагается неизменным. Если понятию соответствует объект реального мира, URN удобно использовать для обозначения этого объекта.

С точки зрения программиста, URN представляет собой имя переменной или, точнее, константы – неизменного фрагмента данных. Хотя предполагается, что URN должны быть уникальными в глобальном масштабе, можно назначать собственные имена при условии, что они используются только внутри вашего приложения, – точно так же, как можно назначать любые IP-адреса и имена доменов в локальной сети, не взаимодействующей с Internet. Механизм регистрации URN описан в документе RFC 2611. Платформа Mozilla использует короткие URN, что удобно для разработчиков. Эти имена имеют следующий синтаксис:

urn:{namespace}:{name}

Как {namespace}, так и {name} представляют собой строку. Строка {namespace} не может иметь значения "URN", а также содержать двоеточие (:). Строка {name} может содержать любые символы ASCII, включая двоеточие, что поначалу может показаться странным. Точный синтаксис URN описан в документе RFC 2141, согласно которому строка пространства имен {namespace} может содержать алфавитно-цифровые символы ASCII и нечувствительна к регистру символов, а имя {name} может также содержать знаки пунктуации и тоже нечувствительно к регистру. Существуют некоторые ограничения на допустимые знаки пунктуации. URN не могут быть "относительными". В Mozilla строка {name} является необязательной. Вот два примера корректных URN:

urn:myapp:runstate
urn:myapp:perfdialog:response

Во втором URN часть {name} выглядит так, как если бы она содержала второе пространство имен, вложенное в первое, и собственно имя. С точки зрения формального синтаксиса это лишь видимость – перед нами обычное имя, содержащее символ двоеточия. Однако программисты могут использовать этот пример для того, чтобы упорядочить большое количество URN, разбив их на категории. Таким способом можно создать любое необходимое количество уровней.

URN, используемые в документе RDF, превращают его из описания web- ресурсов, рассматриваемых в глобальном контексте, в документ для хранения локальной информации произвольного характера.

Вот пример факта, записанного на языке RDF с использованием URN:

<Description about="urn:mozilla:skin:modern/1.0" 
 chrome:author="mozilla.org"/>

Здесь chrome: представляет собой префикс пространства имен XML, "mozilla.org" – литерал, а "skin:modern/1.0" – имя сущности, на которую в данном случае указывает URN. Хотя эта запись представляет собой факт, а не простые данные, то же самое можно легко выразить при помощи простой конструкции на JavaScript:

mozilla["skin:modern/1.0"].author = "mozilla.org";

Или, чуть более подробно:

urn.mozilla.skin["modern/1.0"].chrome.author = "mozilla.org";

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

Существует специальная схема URL (ей соответствует префикс протокола "data:" ), предназначенная для представления обычных данных в виде URL и описанная в документе RFC 2397. Может показаться, что это удобный способ именования ресурсов, основанный на их содержании. Однако такие URL не могут использоваться в RDF, по крайней мере, в качестве идентификаторов, поскольку они не являются уникальными. Их следует избегать.

11.5.3. Пример URN: типы MIME

Типы MIME, наряду с расширениями файлов, используются в классическом браузере для того, чтобы передавать полученные документы внешним приложениям для отображения или обработки. Например, для просмотра документа Microsoft Word с расширением .doc в системе Microsoft Windows будет вызвано приложение winword.exe. Типы MIME конфигурируются в разделе настроек Правка | Настройки | Навигатор | Вспомогательные приложения.

Как и Менеджер загрузок, система настройки типов MIME имеет интерфейс пользователя, и хранит данные о типах в специальном файле RDF. Интерфейс представляет собой специальную панель диалога настроек, а файл называется mimeTypes.rdf и находится в каталоге профиля пользователя. Исполняемый код этой системы находится в архиве comm.jar в каталоге chrome, в файлах, имеющих префикс pref-application.

Эту подсистему Mozilla можно изучать так же, как и Менеджер загрузок. Разница между ними в том, что модель данных RDF для типов MIME использует URN, а не URL. Эти данные представляют собой набор фактов, субъектами которых являются URN, образующие иерархию. Пример такой иерархии для конфигурации всего лишь двух типов представлен в листинге 11.14.

urn:mimetypes
urn:mimetypes:root
urn:mimetypes:text/plain
urn:mimetypes:application/octet-stream
urn:mimetypes:handler:text/plain
urn:mimetypes:handler:application/octet-stream
urn:mimetypes:externalApplication:text/plain
urn:mimetypes:externalApplication:application/octet-stream
Листинг 11.14. Иерархия URN для двух типов MIME

Поскольку URN представляют собой всего лишь имена, их видимая "иерархия" не имеет никакого значения с точки зрения обработки данных. Она предназначена не для программы, а для человека, читающего документ RDF. Однако существует и реальная иерархия – состоящая из фактов. Если построить иерархию фактов, описанных в файле mimeTypes.rdf, увидим, что факты образуют простую иерархию с некоторыми перекрестными ссылками. Эта иерархия во многом аналогична расширению объектной модели документа (DOM) window.navigator.mimeTypes, используемому web-разработчиками. Фактически, источником данных для этого массива служит файл mimeTypes.rdf.

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

11.5.4. Области применения RDF

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

Согласно спецификации RDF, основная область его применения – библиотечные каталоги (и вообще каталоги информационных ресурсов). Такие каталоги нуждаются в формальной и одновременно гибкой общепринятой модели данных, поскольку каталоги все больше подключаются к Internet и взаимодействуют друг с другом.

Наиболее известным результатом деятельности в этом направлении является так называемое "Дублинское ядро" (Dublin Core). Оно представляет собой модель данных, предназначенную для описания любых публикаций, включая ресурсы Internet, и признанную библиотечной отраслью. В терминологии RDF Дублинское ядро представляет собой набор предикатов для описания информационных ресурсов. См. также информацию на сайте http://www.purl.org.

Еще одна область применения RDF, согласно спецификации, – "управление содержимым". Под этим подразумевается процесс добавления к содержимому информации о его оценке, на основе которой могут приниматься управленческие и другие решения. Простые примеры "информации об оценке содержимого" – уровни секретности и возрастные рейтинги. RDF предоставляет очевидную возможность связать такую информацию о содержимом с его URL, формулируя соответствующие факты. Используя эту информацию, программная система может принять решение об отображении содержимого в зависимости от уровня доступа или возраста пользователя.

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

Область, в которой RDF к настоящему времени достиг определенных успехов, – работа с информационными иерархиями. Поддерживаемый добровольцами каталог web-ресурсов http://www.dmoz.org хранит как классификатор ресурсов, так и отдельные URL в одном большом RDF-файле.

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

На этом мы заканчиваем обсуждение примеров применения RDF.

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