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

RDF

11.7. Отладка: вывод документа RDF

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

Документы RDF, особенно сгенерированные автоматически, часто разбиты на строки не самым удобным для чтения образом; в них не всегда используются отступы, чтобы отразить уровень вложенности тегов. Авторы документов для своих целей могут добавлять дополнительные пробелы или переводы строк. Можно просмотреть документ RDF как чистый, иерархически организованный XML-документ без лишних пробелов и переводов строк. Для этого нужно изменить расширение файла на .xml (или создать символическую ссылку на него с таким расширением) и загрузить файл в окно Навигатора.

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

Автоматическое построение графа произвольного RDF-документа (подобного тому, который показан на рисунке 11.5) – непростая задача. Не так сложно написать программу для рисования графа, структура которого проста или известна заранее. Такой граф может быть отображен при помощи версии Mozilla с включенной поддержкой SVG – вы можете работать с объектной моделью (DOM) документа SVG, чтобы динамически изменять граф. Действительно сложная задача – написать универсальную программу, которая гарантированно строила бы граф произвольного RDF- документа в виде, удобном для восприятия. Здесь существуют определенные теоретические ограничения, это сложная задача, и не следует пытаться решить ее за ограниченный промежуток времени. Страница RDF на сайте Консорциума WWW (http://www.w3.org) содержит обширный перечень программных инструментов для работы с RDF.

Если вы не знаете точно, в каком состоянии находится ваше хранилище фактов (например, вы многократно модифицировали его из своей программы), существует легкий способ записать его текущее состояние на диск. Для этого используется код, приведенный в листинге 11.20.

// подготовка ..
var Cc = Components.classes;
var Ci = Components.interfaces;
var comp = Cc["@mozilla.org/rdf/rdf-service;1"]
var iface = Ci.nsIRDFService;

var svc = comp.getService(iface);
var ds = svc.GetDataSource("file:///C|/tmp/test.rdf");
var rds = ds.QueryInterface(Ci.nsIRDFRemoteDataSource);

// .. обычная работа с хранилищем фактов ..

function dumpRDF()
{
  // чтобы произошла запись в файл, должно быть 
  сделано хотя бы одно изменение
  var sub = svc.GetResource("urn:debug:subject");
  var pred = svc.GetResource("DebugProp");
  var obj = svc.GetResource("urn:debug:object");
  ds.Assert(sub, pred, obj, true);
  rds.Flush(); // записать в файл
}
Листинг 11.20. Запись текущего состояния хранилища фактов на диск.

Этот код создает источник данных RDF на основе файла C:/tmp/test.rdf. Функция dumpRDF() может быть вызвана в любой момент после завершения загрузки источника (это можно проверить при помощи флага rds.loaded или используя объект-наблюдатель). Функция dumpRDF() всего лишь добавляет один факт к хранилищу фактов и записывает текущее состояние хранилища в исходный файл. Иными словами, файл синхронизируется с состоянием хранилища в памяти. Факт добавляется для того, чтобы состояние хранилища гарантированно изменилось, и произошла запись на диск. При просмотре файла этот факт будет выглядеть примерно следующим образом:

<RDF:Description about="urn:debug:subject">
  <DebugProp resource="urn:debug:object"/>
</RDF:Description>

DebugProp и debug – простые строки, не имеющие специального значения.

11.8. Итоги

Системы обработки фактов отличаются от обычных систем обработки данных. Для их понимания необходимо усвоить целый ряд новых терминов: факт, кортеж, триплет, субъект, предикат, объект, хранилище фактов. Кроме того, существует и терминология, специфичная для RDF: описание, ресурс, свойство, значение, контейнер, URL, URN. RDF представляет собой не самое простое приложение XML, однако он основан на продуманных концепциях.

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

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

После всех сложностей RDF уместной была бы какая-нибудь легкая тема. В следующей лекции мы рассмотрим систему оверлеев и chrome Mozilla. Для практической работы с ними достаточно лишь тегов XML и XUL. Однако, исключительно для полноты картины, мы рассматриваем и элементы RDF, лежащие в основе этих механизмов.

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