Россия, Звенигород |
RDF
В этой лекции излагаются основы RDF – формата представления информации, который широко используется платформой Mozilla. RDF является приложением XML, принятым в качестве спецификации Консорциумом WWW (W3C). Это одна из наиболее непривычных технологий, лежащих в основе Mozilla, однако при правильном применении RDF оказывается мощным и удобным инструментом.
Немногие приложения могут делать что-либо полезное, не получая информации извне, и приложения Mozilla не составляют исключения. RDF – удобный способ передачи и хранения небольших количеств информации, предназначенной для неоднократного использования. Платформа Mozilla располагает средствами обработки информации в формате RDF и сама частично основана на этом формате. В той или иной степени от него зависит функционирование большинства приложений, входящих в состав пакета Mozilla.
Эта лекция посвящена, прежде всего, концепциям, лежащим в основе RDF, и его синтаксису. Это весьма обширная тема сама по себе, поэтому конкретные вопросы поддержки RDF в рамках платформы Mozilla занимают в данной лекции немного места. Эту лекцию следует рассматривать как введение в RDF, подобно тому, как "Скрипты" "Сценарии" представляет собой введение в JavaScript. Конкретные применения RDF подробно рассматриваются в следующих лекциях – в "Оверлеи и Chrome" "Оверлеи и chrome", "Шаблоны" "Шаблоны" и в "Объекты XPCOM" "Объекты XPCOM".
Для того чтобы понять смысл многих компьютерных технологий, часто достаточно беглого взгляда. Однако эта стратегия не работает при встрече с действительно новыми и необычными подходами. В этом случае приходится притормозить и заняться систематическим изучением материала. RDF – одна из таких технологий и одновременно ключ к разнообразным функциям Mozilla, которые кажутся простыми для понимания.
Итак, что же такое RDF? Начнем с того, что существуют различные виды информации. Одна из классификаций подразделяет информацию на содержимое, данные и факты. Каждая из этих трех категорий обрабатывается по-разному. Содержимое обрабатывается как целое – отобразить эту HTML- страницу, воспроизвести этот музыкальный файл и т.п. Данные обрабатываются по отдельным фрагментам – добавить запись к базе данных, отсортировать список объектов. Информация в форме фактов реже встречается в информационных технологиях. Факты можно рассматривать как элементы данных, имеющие форму утверждений. Факты используются обычными людьми в повседневной жизни, учеными, а также специалистами в области, называемой инженерией знаний. Следующие утверждения представляют собой простые примеры фактов.
Я ходил в магазин. Луна состоит из зеленого сыра. Том, Дик и Гарри – братья. Эта функция никогда не используется. Каждый человек должен найти собственный путь в жизни.
Неважно, являются ли эти утверждения истинными. Неважно, каков их источник, и согласен ли с ними хоть кто-нибудь. Важно то, что их можно записать некоторым универсальным способом (в данном случае – на русском языке). Записывая факты, мы перемещаем их из своего сознания туда, где их можно зафиксировать в соответствии с определенными правилами или формальными спецификациями, что позволяет в дальнейшем работать с фактами различными способами. Только после того, как факты зафиксированы, можно заняться выяснением их истинности или значимости. В практическом разделе этой лекции мы познакомимся с некоторыми приемами моделирования – одного из подходов к выявлению и фиксации фактов.
Окружающий мир, включая сферу информационных технологий, насыщен "фактоподобной" информацией. Однако подавляющее большинство сведений не представлено в форме, удобной для обработки фактов. Лишь немногие программисты в своей практике сталкиваются со специализированными системами обработки фактов, однако код любого из них содержит множество подразумеваемых фактов. Эти подразумеваемые факты используются для решения других задач. Напротив, RDF целенаправленно разработан как формат для фиксации фактов.
Примером крайне примитивной и тривиальной системы хранения "фактоподобной" информации, не использующей формата RDF, может служить файл закладок классического браузера, находящийся в каталоге профиля пользователя. Вот пример записи в таком файле:
<A HREF="http://www.mozilla.org/" ADD_DATE="961099870" LAST_VISIT="1055733093" ICON="http://www.mozilla.org/images/mozilla-16.png" LAST_CHARSET="ISO-8859-1"> The Mozilla Organization </A>
Этот фрагмент содержит ряд сведений об указанном URL: дату его добавления к списку закладок, дату последнего посещения и т.д. Атрибуты XML, в которых хранится эта информация, могут рассматриваться как простые данные или как описание фактов. Хотя для описания фактов можно использовать простой XML (или архаичный псевдо-HTML, как в этом примере), лучше использовать специализированное приложение XML с определенным синтаксисом. Как раз таким приложением является RDF. Файл закладок не использует RDF для обеспечения обратной совместимости.
Многие специалисты называют информацию такого рода метаданными. Предполагается, что этот термин позволяет разграничить информацию (в данном случае – содержимое web-документа, на который указывает URL) и "информацию об информации" (описание документа и самого URL), которая и называется метаданными. На практике, если программист пишет код для работы с файлом закладок, единственной интересной для него информацией являются так называемые метаданные – содержание этого файла. С его точки зрения метаданные оказываются обычными данными, с которыми он должен работать. То, что для одного человека является метаданными, для другого – просто данные. Таким образом, при изучении RDF концепция метаданных может лишь запутать и без того сложную тему.
Говоря коротко, термин "метаданные" часто используется без необходимости. С точки зрения программиста единственным элементом RDF, который заслуживает звания метаданных, является информация о типах. Все остальное следует рассматривать как простые данные или, точнее, простые факты. С точки зрения самого формата RDF нет какой-то отдельной категории фактов, имеющих статус "метафактов".
RDF имеет свою терминологию. Вот пример факта, выраженного средствами RDF:
<Description about="file:///local/writing/" open="true"/>
Говоря попросту, эта строка утверждает, что папка /local/writing/ открыта. Более строгая интерпретация в терминах RDF такова: "Существует субъект (или ресурс) с именем file:///local/writing/, имеющий предикат open, значением (объектом) которого является анонимная строка литералов "true"". Это довольно неуклюжий язык, и сейчас нам предстоит разобраться, что все это означает.
Наконец, следует сказать, что RDF не является визуальным языком. Mozilla не может непосредственно отобразить документ RDF подобно документам XUL или HTML. Для отображения данных RDF необходимо подключить файл или другой источник данных к элементам управления XUL. При этом собственно обработка HTML происходит внутри платформы незаметно для пользователя, а иногда и без участия программиста. Центральным понятием в контексте обработки RDF на платформе Mozilla является понятие источника данных.
На схеме в начале этой лекции показано, что поддержка RDF пронизывает всю платформу от инфраструктуры, скрытой от пользователя, до графического интерфейса. Часть инфраструктуры составляют компоненты XPCOM, которые разработчик приложений может использовать для работы с данными RDF. Существует удобная библиотека, которая облегчает работу с этими компонентами. Мы будем называть ее RDFlib, хотя, строго говоря, она является частью библиотеки JSLib. Технология RDF образует связующее звено между прикладной и интерфейсной частями платформы. Это возможно благодаря тому, что как XUL, так и компоненты объектной модели приложения (AOM) непосредственно поддерживают работу с форматом RDF. Системы шаблонов и оверлеев, созданные для более эффективной работы XUL, также основаны на RDF.
К сожалению, производительность работы с RDF в версиях Mozilla 1.x оставляет желать лучшего. Не используйте RDF для работы с данными, состоящими из миллионов записей; это – не СУБД. Однако для небольших наборов данных производительность более чем удовлетворительна.