Нотация RDF/XML

Под нотацией RDF/XML понимается документ консорциума W3C, регламентирующий описание RDF-графов с использованием языка XML. Принципиальная возможность отображения семантики RDF в терминах XML (что в общем случае является некорректной постановкой задачи строго формального описания семантики одного языка синтаксическими средствами другого языка) определяется следующими основными причинами:

1) язык RDF базируется на формальной (т. е. строго определенной) семантике, описываемой средствами так называемого абстрактного синтаксиса, задающего не конкретный вид элементов и конструкций отображаемого языка, а их модельное представление и способ логической интерпретации. В данном случае описываемый этим синтаксисом язык (т. е. RDF) задает описания логических утверждений (т. е. суждений, декларируемых как истинные) в виде множества триплетов «субъект – свойство (предикат) – объект», образующих в совокупности ориентированный граф. Именно на описание данного графа (т. е. модели данных) и ориентирован абстрактный синтаксис, а сам граф представляет собой формальную семантическую модель некоторого языка. Далее описанная средствами абстрактного синтаксиса семантическая модель данных может быть выражена самыми различными способами – графическими нотациями, формулами формальной математической логики и т. п., т. е. другими синтаксическими формами. В частности, в качестве подобной синтаксической формы для RDF может выступать и XML;

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

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

# Пример 1

<?xml version="1.0"?>

<rdf:RDF xmlns:rdf="https://www.etu.ru/rdf/syntax#"

xmlns:contact="https://www.etu.ru/people/contact#">

<contact:Person rdf:about="https://www.etu.ru/people/AI/contact#me">

<contact:fullName>Alexey Ivanov</contact:fullName>

<contact:mailbox rdf:resource="mailto:AI@etu.ru"/>

<contact:degree>Dr.</contact:degree>

</contact:Person>

</rdf:RDF>

В XML вложению метаданных RDF соответствует специальный элемент rdf:RDF (ограниченный в тексте метками «rdf:RDF» и «/rdf:RDF»). Этот элемент в свою очередь содержит последовательность XML-элементов (которые и образуют в совокупности RDF-документ) двух типов – элементов-узлов и элементов-свойств. Элемент-узел связывается с тэгом «rdf:Description», который в ряде случаев может опускаться или заменяться в целях упрощения записи. В элементы-узлы вкладываются описания элементов-свойств, которые описывают исходящие из узла дуги. Каждый элемент выделяется «операторными скобками» вида «<Х» и «/Х>» (в закрывающей скобке Х может опускаться, если элемент не содержит вложенных описаний, как в строке «<contact:mailbox …/» Примера 1), где Х является идентификатором элемента. Помимо этого внутри скобок могут использоваться описания атрибутов элемента (в примере определениям атрибутов соответствуют предложения «xmlns:rdf=…», «xmlns:contact=…», «rdf:about=…» и «rdf:resource=…». Идентификатор элемента представляет собой URI, который, в общем случае, может состоять из префикса (строки, предшествующей символу «:») и локального имени (остатка строки, расположенного справа от разделителя «:»). Префикс задает пространство имен (namespace), используемое элементом, а локальное имя – непосредственное определение идентификатора в этом пространстве. Наличие именованного префикса позволяет точно указывать область видимости любого идентификатора в RDF- и XML-документах. Так в примере пространству имен «https://www.etu.ru/people/contact#» ставится в соответствие префикс «contact». С учетом введения префиксов в XML-нотации употребляется термин «квалифицированное имя» (qualified name – QName) ресурса, например – «contact:fullName», которому соответствует полная запись URI-ссылки «https://www.etu.ru/people/contact#fullName». Такие имена могут использоваться как равноправные XML-тэги. В RDF механизм префиксов имеет и более глубокое значение. Здесь префикс является основным средством указания словарей, описывающих содержание тех или иных терминов в соответствующем документе, средством определения контекстной зависимости терминов, а также средством разделения общезначимых понятий и понятий, специфичных для приложения, или различных трактовок (интерпретаций) одной и той же сущности разными «участниками общения». Определение префиксов RDF-документа может быть реализовано в виде задания атрибутов «xmlns:…=…» (XML-namespace) элемента «rdf:RDF». Обязательным является определение префикса «rdf:», который задает местонахождение основного словаря – словаря служебных терминов самого языка RDF (в приведенном ранее примере этот префикс описан строкой «<rdf:RDF xmlns:rdf="https://www.etu.ru/rdf/syntax#"»). Аналогичный словарь для языка RDF-словарей (RDFS), являющегося подмножеством RDF, задается префиксом «rdfs:» (RDF Schema).

В тексте примера 1 все описание RDF-графа строится на базе описания одного «родительского» элемента-узла, сопоставленного URI-ссылке «https:// www.etu.ru/people/AI/contact#me», и четырех элементов-свойств этого узла – «#type», «#fullName», «#mailbox» и «#degree». Каждый из элементов-свойств определяет в свою очередь по одному «дочернему» узлу графа, который задает значение соответствующего свойства. Так, литерал «Alexey Ivanov» является значением свойства «#fullName», а ресурс «mailto: AI@etu.ru» – значением свойства «#mailbox». Для описания каждого из свойств (вместе со значением свойства) внутрь XML-элемента, характеризующего «родительский» узел, вкладывается элемент-свойство. Исключение составляет свойство «#type», которое является предопределенным символом RDF и позволяет в данном случае выразить явную спецификацию свойства «#type» (в виде «<rdf:type resource="https://www.etu.ru/people/AI/contact# Person"/>») подстрокой «contact:Person» и заменить стандартный тэг <rdf:Description>, применяемый для описания элементов-узлов, на тэг <contact: Person> (иными словами, заменить описание самостоятельного элемента-свойства на описание тэга в элементе-узле). Характеристика «родительского» узла в примере 1 реализована с использованием зарезервированного атрибута «rdf:about», в котором может быть задан произвольный ресурс, сопоставляемый с узлом RDF-графа. Другой стандартный атрибут «rdf:resource» предназначен для задания значений свойств или атрибутов элементов-узлов в тех случаях, когда эти значения описываются идентификаторами ресурсов (не литералами) и не являются субъектами каких-либо других триплетов.

Характерной особенностью RDF-графов является возможность структуризации данных не только для сущностей (например, информация об Алексее Иванове в рассмотренном ранее примере была структурирована по свойствам «Полное имя», «Адрес e-mail», «Ученая степень», «Тип – сотрудник»), но и для свойств. Пусть в примере (см. рис. 3.2) требуется задать для Иванова обобщенное свойство «Контакты», не имеющее однозначного значения, но имеющее подсвойства – адрес электронной почты и рабочий телефон (контекст предыдущего примера изменен для демонстрации использования обычных URI в качестве идентификаторов ресурсов). Для представления таких ситуаций в RDF-моделях предусмотрен механизм пустых узлов – «анонимных ресурсов» (рис. 3.3).


Рис. 3.3. Пример RDF-графа с пустым узлом

Из рис. 3.3 видно, что абстрактное свойство «Контакты» («contacts») не определяет конкретных объектов-носителей свойства. Определенные значения имеют только подсвойства этого свойства – «mailbox» и «phone». Соответственно, узлу, связанному со стартовым узлом «persons.html» предикатом «contacts», не сопоставляется никакая сущность. Для описания подобных узлов в RDF/XML предусмотрена возможность использования специального атрибута XML-элементов – «rdf:nodeID». XML-текст, реализующий описание RDF-графа на рис. 3.3 приведен ниже.

# Пример 2

<?xml version="1.0"?>

# Описание пространств имен:

<rdf:RDF xmlns:rdf="https://www.etu.ru/rdf/syntax#"

xmlns:people="https://www.etu.ru/people/">

# Описание стартового узла:

<rdf:Description rdf:about = "https://www.etu.ru/people/persons.html">

# Свойство «Фамилия» для стартового узла:

<people:450>Alexey Ivanov</people:450>

# Абстрактное свойство «Контакты» для стартового узла:

<people:contacts rdf:nodeID="abc"/>

</rdf:Description>

# Описание пустого узла:

<rdf:Description rdf:nodeID="abc">

# Описание свойств пустого узла:

<people:mailbox rdf:resource="mailto:AI@etu.ru"/>

<people:phone>346-27-58</ people:phone>

</rdf:Description>

</rdf:RDF>

В приведенном тексте атрибут «rdf:nodeID» сначала используется для присвоения фиктивного имени "abc" пустому узлу в элементе-узле «rdf:Description», а затем – для ссылки на это имя в элементах-свойствах «mailbox» и «phone». Сам идентификатор "abc" будет известен при этом только в пределах текущего RDF-документа. Для определения расширенной области видимости такого идентификатора следует использовать альтернативный атрибут «rdf:ID», который устанавливает «известность» имени в пределах пространства имен, определяемого так называемым базовым URI, т. е. URI стартового RDF-документа, ссылающегося на текущий. Если бы рассматриваемый в примере идентификатор "abc" был приведен в атрибуте «rdf:ID» при значении базового URI «https://www.etu.ru/people», то он бы интерпретировался как «https://www.etu.ru/people#abc» (базовый URI может также явно задаваться в RDF-документе атрибутом «xml:base=…» заголовка элемента «rdf:RDF»). Следует отметить, что необходимость в фиктивной идентификации возникает только в случае множественных подсвойств. Если бы подсвойство «mailbox» свойства «contacts» отсутствовало бы, XML-фрагмент, описывающий соответствующий маршрут в исходном RDF-графе, мог бы выглядеть так:

<rdf:Description rdf:about = "https://www.etu.ru/people/persons.html">

<people:contacts>

<rdf:Description>

<people:phone>346-27-58</ people:phone>

</rdf:Description>

</people:contacts>

</rdf:Description>

Для приведенного XML-текста (т. е. при пустом узле и значении свойства «phone», выражаемом литералом) допускается и более лаконичное описание свойства внутри элемента «rdf: Description»:

<people:contacts people:phone="346-27-58"/>

Таким образом, если в заголовке элемента-узла отсутствуют «rdf:about» и «rdf: nodeID», узел считается пустым. Если же из этого узла исходит несколько дуг RDF-графа, фиктивное именование узла (через атрибут «rdf:nodeID») необходимо, так как иначе невозможно указать на тот факт, что через данный узел проходит несколько путей к подсвойствам.

Резюмируя способы описания субъектов и объектов в RDF-триплетах, можно отметить, что существует 3 основных возможности:

1) описание сущности с использованием атрибута «rdf:about» внутри элемента «rdf:Description» (т. е. элемента-узла);

2) описание сущности в свойстве другой сущности с использованием атрибута «rdf:resource» (если данная сущность соответствует узлу, не имеющему исходящих дуг; в этом случае свойство не имеет XML-элемента, соответствующего его значению, что отображается отсутствием каких-либо символов в описании закрывающей метки тэга, например в строке <people:mailbox rdf:resource="mailto:AI@etu.ru"/>);

3) описание пустого узла в элементе «rdf:Description», который либо не имеет атрибута «rdf:about», либо имеет атрибут «rdf:nodeID» (или «rdf:ID»).

В примерах на рис. 3.2, 3.3 RDF-графы содержали только простые (plain) литералы. Однако синтаксис RDF/XML позволяет использовать и типизированные литералы, в построении которых могут участвовать базовые типы данных, поддерживаемые XML. Например, фрагмент нотации, описывающей (соответствующим литералом) значение свойства «Дата рождения» («people:birthday») с использованием стандартного XML-типа данных date, мог бы иметь следующий вид:

<people:birthday rdf:datatype=

"https://www.etu.ru/xml/XMLSchema#date"> 1970-08-20 </people:birthday>

Такая запись будет интерпретирована как «August 20, 1970» в соответствии с представлением XML-типа «date». Здесь типизированный литерал является совокупностью URI, описывающего стандартный тип данных XML «date» ("https://www.etu.ru/xml/XMLSchema#date"), и обычного литерала «1970-08-20» (RDF не имеет собственных предопределенных неструктурированных типов данных и может использовать помимо UNICODE-строк только стандартные типы XML, хотя в языке имеются средства определения новых типов). В данном случае для определения URI с описанием типа используется специальный атрибут «rdf:datatype» (в графическом представлении RDF-графа данное значение свойства описывалось бы одной строкой вида «"1970-08-20"^^https://www.etu.ru/xml/XMLSchema#date» в прямоугольнике, соответствующем объекту триплета).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: