Развитие технологий Semantic Web: Обработка RDF-графов с помощью XSLT
| Щербак Сергей Сергеевич | |
| Shcherbak Sergey | |
| |
| Род деятельности: |
R&D |
|---|---|
| Роль участника: | |
| Основной раздел: | |
| Круг интересов: | |
| Дата рождения: |
15.12.1979 |
| Место рождения: | |
| Гражданство: | |
| Сайт: | |
| Nickname | |
| Подробнее: | |
| Рябова Н.В. |
Введение
Стремительное развитие компьютерных информационных технологий привело к тому, что сегодня компьютер, помимо выполнения ставших уже традиционными задач обработки числовой и символьной информации, программирования игр, создания компьютерных презентаций и т.п., приобрел совершенно новую, революционную по своей сути функцию - предоставление постоянного входа, своеобразного «окна» в мировое информационное киберпространство. Технологии World Wide Web (WWW) позволяют объединять в Интернет - пространстве гигантское количество пользователей всех уровней, предоставлять им различного вида сервисы и снабжать информацией (правда, не всегда релевантной запросу или даже вовсе нежелательной, так называемый spam в электронной почте). На наших глазах WWW пережила уже два этапа развития: вначале предоставляя информацию в виде вручную сгенерированных HTML-страниц, затем появилась возможность генерировать страницы из баз данных, хранящихся на Web-серверах. Однако оба эти этапа были ориентированы на обработку информации человеком-специалистом и читателей – пользователей компьютеров. Чтобы противостоять неуклонному и неуправляемому расширению «всемирной паутины», которая стала угрожающе запутываться, ведущими учеными и разработчиками в области Computer Science был выдвинут лозунг «превратить информационное Интернет-пространство в пространство знаний». Web следующего, третьего поколения, должна обеспечивать машинную обработку информации с учетом ее семантики (machine accessible semantics).
Новую парадигму Web ее создатели и идеологи назвали Semantic Web [1], делая тем самым акцент на требовании эксплицитного представления семантики в Web, понятного для программных агентов. Росту популярности и широкому распространению технологий Semantic Web способствует разработка и внедрение WWW-консорциумом (W3C) ряда инициатив, связанных со стандартизацией синтаксической и семантической разметки электронных документов, особенно технологий XML и RDF, поддерживающих семантическую совместимость. В связи с этим, в данной работе предлагается технология обработки RDF-графов необходимая для получения интуитивно понятных представлений содержимого RDF графов.
The Resource Description Framework (RDF) является языком общего назначения для представления информации в Web [2]. RDF применяется для того, чтобы предоставить информацию о ресурсах в терминах простых свойств и значений этих свойств. Ресурсом может выступать все что угодно, чему можно приписать некоторый URI(Uniform Resource Identifiers), даже то, что потенциально может быть не доступно через Интернет. Идея описания ресурсов в терминах простых свойств, их значений и применения URI для идентификации ресурсов дает возможность представить информацию о ресурсах в RDF как граф узлов и дуг, представляющих ресурсы, их свойства и значения этих свойств [3].</div>
XML/RDF синтаксис RDF
XML/RDF синтаксис позволяет выразить RDF данные c помощью языка расширяемой разметки XML, что отчасти решает проблему интеграции RDF с Интернет - технологиями и дает возможность применять RDF для обмена метаданными в среде Интернет. Кроме того, XML/RDF-синтаксис RDF позволяет применять для обработки RDF-конструкций технологии, которые разрабатываются для XML, такие как XPath [4], XSLT [5] и др. Согласно [2], RDF-граф, записанный в синтаксисе XML/RDF, представляется в последовательной форме пригодной для машинной обработки. Кроме того, этот синтаксис позволяет различные формы записи одного и того же RDF- графа, различные сокращенные формы записи и т.п.
RDF/RDFS и Semantic Web
Основу Semantic Web[6] составляет модель данных RDF – “объект – атрибут- значение”, что позволяет описывать ресурсы в виде наборов утверждений о свойствах этих ресурсов. Особенность модели данных RDF в том, что все компоненты этой модели идентифицируются с помощью универсальных идентификаторов(URI). Благодаря этой особенности RDF позволяет объединять информацию с различных источников, что может быть весьма полезно для обеспечения совместного использования информации в рамках Web. Терминологическая база, применяемая для описания ресурсов, определяется соответствующей RDF-схемой – иерархией терминов (понятий) предметной области. RDF схемы разрабатываются с помощью языка описания словарей RDF терминов - RDFS [7].
RDF и Protege 2000
Несколько слов о протоколе Open Knowledge Base Connectivity (OKBC)[8]. Этот протокол разработан в Стэндфордском университете для обеспечения единства запросов и создания унифицированного интерфейса для знание-ориентированных систем, основанных на фреймах.
Технология XSLT
Для обработки XML - документов можно применить различные языки программирования, например, Java с использованием низкоуровневых API, таких как SAX или DOM, но наиболее удобным представляется язык XSLT (eXtensible Stylesheet Language – Transformation, который получил статус рекомендации W3C 16 ноября 1999г.) – Расширяемый язык таблиц стилей для трансформации [5]. Одним из преимуществ этого языка является его схожесть с продукционными правилами и относительная схожесть с инструкциями на естественном языке, а главное этот язык позволяет трансформировать структуру XML документов в другое представление и/или формат. Общая схема трансформации документа представлена на рисунках 1 и 2. Для того чтобы трансформировать документ необходимо правила трансформации XSLT применить к документу. Трансформация выполняется с помощью XSLT-процессора. В результате трансформации XSLT- процессор генерирует необходимое представление исходного документа (сериализация документа).
Технология обработки RDF- графов с помощью XSLT
<xsl:apply-templates select="MyLib:&rdf_node;"> <!—тело преобразования-> <xsl:template>
- Вывод значения атрибута узла
- Вывод значений атрибутов дочернего узла
- Вывод значений атрибута подузла узла, который является дочерним узлом текущего узла
- Сортировка по значению атрибута
- Идентификация узлов RDF-графа
- Вывод URI конкретного узла
- Вывод URI подузлов текущего узла
- Вывод rdfs-label узла RDF графа
- Выделение и обработка узла с конкретным значением атрибута
Описание операций с пояснениями к XSLT-шаблонам представлены ниже. Для выполнения XSLT шаблонов представленных в описаниях операций необходимо модифицировать базовый XSLT файл или воспользоваться XSLT-файлами[15].
Процесс преобразования RDF в формат HTML представлен на рис. 4.
Базовый XSLT файл для преобразований RDF – графа
<?xml version="1.0" encoding="windows-1251"?> <!DOCTYPE rdf:RDF [ <!ENTITY rdf_node "node1"> <!--Узел графа, анализ содержимого которого будет проводиться-> <!ENTITY rdf_attr "name"><!-- атрибут узла графа, по которому будет проводиться сортировка узлов графа, [не обязательная сущность]-> ]> <xsl:stylesheet version="2.0" <!-- объявление пространств имен -> <!-- пространство имен XSL> xmlns:xsl="http://www.w3.org/1999/XSL/Transform" <!-- используемые пространство имен RDF и RDFS-> <!-- определяют версии языка RDF/RDFS, которые будут обрабатываться XSLT-процессором-> xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/TR/1999/PR-rdf-schema-19990303#" <!-- Пространство имен, в котором пользователь создает свои RDF описания --> xmlns:MyLib="http://shcherbak.net#"> <xsl:output method="html" encoding="windows-1251"/> <!-- атрибут match=”/” указывает, что это конкретное правило преобразования запускается в самом начале разбора документа с RDF графом-> <xsl:template match="/"> <html> <head> <title>Исследование RDF - графов</title> </head> <body> <!-- применяем шаблонное правило для обработка корневого узла RDF графа -> <xsl:apply-templates select ="//rdf:RDF"/> </body> </html> </xsl:template> <!-- определяем шаблонное правило xsl:template, которое будет активизировано при обработке узла графа "rdf:RDF" -> <xsl:template match="rdf:RDF"> <!-- применяем шаблонное правило, для обработки узла графа, который определен сущностью rdf_node -> <xsl:apply-templates select="MyLib:&rdf_node;"> <!-- Сортировка узлов RDF-графов по атрибуту rdf_attr [необязательная конструкция]-> <xsl:sort select=”MyLib:&rdf_attr;”/> </xsl:apply-templates> </xsl:template> <!-- шаблонное правило, которое будет активизировано для обработки узла графа, который определен сущностью rdf_node -> <xsl:template match="MyLib:&rdf_node;"> <!—инструкции обработки узла графа -> </xsl:template> </xsl:stylesheet>
Вывод значения атрибута узла
Для вывода значения атрибута rdf_attr rdf_node, необходимо воспользоваться следующим шаблонным правилом:
<xsl:template match="MyLib:&rdf_node;"> <xsl:value-of select="@MyLib:&rdf_attr;"/><br/> <!-- Вместо &rdf_attr; может быть любое имя атрибута узла rdf_node-> <!—В случае если значение атрибута превышает 255 символов, Protégé 2000 вместо атрибута генерирует узел с таким же именем, тогда для вывода значения необходимо воспользоваться следующей инструкцией:-> <xsl:value-of select="MyLib:&rdf_attr;"/><br/> </xsl:template>
Вывод значений атрибутов дочернего узла
Для вывода значений атрибутов всех подузлов node2 узла node1, необходимо применить следующее шаблонное правило:
<xsl:template match="MyLib:subsite2"> <xsl:for-each select ="@rdf:resource"> <xsl:variable name="temp" select="."/> <xsl:for-each select ="//MyLib:node2[@rdf:about=$temp]"> Значение атрибута узла node2 <xsl:value-of select="@MyLib:&rdf_attr;"/><br/> </xsl:for-each> </xsl:for-each> </xsl:template>
Описание шаблона:
Для всех подузлов node2 узла node1, rdf:resource которых содержит ссылку(URI) на конкретный узел node2
<xsl:for-each select ="@rdf:resource">
создать переменную temp и сохранить в нее значение текущего узла, т.е. значение rdf:resource, содержащее конкретное URI узла node2.
<xsl:variable name="temp" select="."/>
Для всех узлов rdf_instance rdf:about, которых соответствует rdf:resource rdf_node
<xsl:for-each select ="//ns: node2 [@rdf:about=$temp]">
Вывести значение атрибута(ов)
<xsl:value-of select="@ns:&rdf_attr"/><br/>
Вывод значений атрибута подузла узла, который является дочерним текущего узла
Для вывода значений атрибута rdf_attr всех подузлов node3 узлов node2, которые является подузлами текущих узлов(node1), необходимо применить следующее шаблонное правило:
<xsl:template match="MyLib:subsite2"> <xsl:for-each select ="@rdf:resource"> <xsl:variable name="temp" select="."/> <xsl:for-each select ="//MyLib:node2[@rdf:about=$temp]"> <!--Применяем шаблон для обработки подузла node3 -> <xsl:apply-templates select="MyLib:subsite3"/><br/> </xsl:for-each> </xsl:for-each> </xsl:template>
Шаблон для обработки узла node3
<xsl:template match="MyLib:subsite3"> <xsl:for-each select ="@rdf:resource"> <xsl:variable name="temp" select="."/> <xsl:for-each select ="//MyLib:node3[@rdf:about=$temp]"> <b>Значение атрибута rdf_attr узла node3</b><br/> <xsl:value-of select="@MyLib:&rdf_attr;"/><br/> </xsl:for-each> </xsl:for-each> </xsl:template>
Сортировка по значению атрибута
Для того чтобы отсортировать узлы node1 по атрибуту rdf_attr, необходимо добавить <xsl:sort select="@ns:&rdf_attr;"/> в шаблонное правило обработки узлов node1:
<xsl:template match="rdf:RDF"> <xsl:apply-templates select="MyLib:&rdf_node;"> <!-- Сортировка по возрастанию-> <xsl:sort order=”ascending” select="@MyLib:&rdf_attr;"/> <!-- Сортировка по убыванию-> <xsl:sort order=”descending” select="@MyLib:&rdf_attr;"/> </xsl:apply-templates> </xsl:template>
Идентификация узлов RDF-графа
Чтобы вывести значение URI узла, необходимо в шаблонном правиле определить переменную и инициализировать ее значением атрибута rdf:about, как показано в примере:
<xsl:variable name="temp" select="@rdf:about"/> <xsl:value-of select="$temp"/>
Вывод URI подузлов текущего узла
<xsl:template match="MyLib:&rdf_node;"> Узел <xsl:value-of select="name()"/><br/> <xsl:apply-templates select="MyLib:subsite2"/> </xsl:template> <xsl:template match="MyLib:subsite2"> <xsl:for-each select ="@rdf:resource"> <xsl:text>Значение rdf:resource текущего узла</xsl:text><br/> <xsl:variable name="temp" select="."/> <xsl:value-of select="$temp"/><br/> </xsl:for-each> </xsl:template>
Чтобы вывести значение rdfs-label узла, необходимо добавить следующую инструкцию в шаблонное правило: <xsl:value-of select="@rdfs:label"/><br/> Выделение и обработка узла с конкретным значением атрибута
<xsl:variable name="temp" select ="@MyLib:time"/> <xsl:variable name="temp2" select ="1"/> <xsl:if test= "$temp=$temp2"> <xsl:text>узел найден</xsl:text><br/> </xsl:if>
Алгоритм преобразований RDF - графа с помощью процессора XSLT – Saxon [8]
- Разработать RDF-документ с помощью редактора онтологий Protege .
- Составить файл с описанием требуемого преобразования на XSLT, модифицировав соответствующим образом базовый XSLT файл для преобразований RDF – графа [предлагаемый в работе], или прилагаемые к работе образцы.
- Изменить кодировку RDF файла, генерируемого Protege-2000 c UTF-8 на windows-1251 для платформы Windows, или с UTF-8 на KOI8-R для Linux, иначе XSLT процессор сгенерирует множество ошибок. Для этого открываем файл с расширением .rdf и изменяем <?xml version='1.0' encoding='UTF-8'?> на <?xml version='1.0' encoding='windows-1251'?> (пример для Windows).
- Команда для запуска преобразования c помощью процессора XSLT Saxon версии 7.8: java -jar saxon7.jar -o [имя результирующего файла].htm [имя rdf файла].rdf [имя файла с XSLT преобразованием].xsl
- Пример: java -jar saxon7.jar -o developer.htm PersonalPage.rdf rdf_developer.xsl
- Примечание: предполагается, что rdf файлы, генерируемые Protege-2000 находятся в рабочей директории процессора XSLT, иначе необходимо указывать полные пути к файлам rdf, xslt.
Системные требования
- Любая операционная система, на которой может работать виртуальная машина Java, например, Windows, Linux, FreeBSD.
- Виртуальная машина Java не ниже версии 1.4.2
- Java реализация бесплатно-распространяемого XSLT-процессора Saxon версии не ниже 7.8, “умеющего” работать с шаблонами преобразований XSLT версии 2.
Достоинства технологии
- Описание особенностей обработки RDF-графов, которые позволяют применить мощные механизмы XSLT технологии для трансформации RDF –графов.
- Практическое применение технологии RDF для управления содержимым WEB – сайтов, порталов и др. на основе среды Protege.
- Время, затрачиваемое на написание RDF-преобразования с помощью описанной технологии, приблизительно равно времени, затрачиваемом на написание XML преобразования.</div>
Недостатки технологии
Основные недостатки обусловлены, прежде всего, тем, что основное предназначение XSLT обработка древовидных структур, поэтому иногда бывает сложно выполнить преобразование графа к нужному виду. Кроме того, технология преобразования RDF –графов не избавляет от таких недостатков XSLT технологии, как:
1. Отсутствие средств, позволяющих производить точные математические вычисления; 2. Повышенная сложность и иногда невозможность реализации сложных трансформаций документов;
Выводы
Литература
- Berners-Lee T. Weaving the Web.- Harper, San Francisco, 1999.
- RDF/XML Syntax Specification http://www.w3.org/TR/rdf-syntax-grammar
- RDF Premier http://www.w3.org/TR/rdf-primer/
- Спецификация языка XPath http://www.w3.org/TR/xpath
- Спецификация языка XSLT http://www.w3.org/TR/xslt
- Проект Semantic Web http://www.w3c.org/sw
- Спецификация языка RDFS http://www.w3c.org/rdfs
- Open Knowledge Base Connectivity (OKBC) http://www.ai.sri.com/~okbc/
- Проект Protege http://protege.stanford.edu
- http://smi-web.stanford.edu/projects/protege/protege-rdf/protege-rdf.html
- RDF Schema Support in Protege-2000 http://protege.stanford.edu/doc
- Кэй М. XSLT. Справочник программиста. – Пер. с англ. – СПб.: Символ-Плюс, 2002. – 1016 с.: ил.
- Валиков А.Н. Технология XSLT. – CПб.: БХВ-Петербург, 2002. – 544 с.: ил.
- Shelley Powers. Practical RDF.- O'Reilly, 2003.- 350 c.
- http://ontolib.com
| Уровень публикуемого материала | |
| Рекомендуемый уровень знаний читателя в предметной области : | |
|---|---|
| Обсуждение: | |
| Публикация | |
| Тип публикации: | |
|---|---|
| Оригинал: | |
| УДК: |
519.7:007.52 |
