Под нотацией 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» в прямоугольнике, соответствующем объекту триплета).