Контейнеры и коллекции

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

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

- rdf:Bag («портфель», неупорядоченное множество);

- rdf:Seq (последовательность);

- rdf:Alt (набор альтернатив).

Bag-контейнер представляет собой неупорядоченную группу ресурсов или литералов (с возможностью повторений), для которой не вводится порядковых отношений между элементами.

Пример RDF-графа, использующего понятие контейнера типа Bag, приведен на рис. 3.4. Этот граф описывает ситуацию «Студенческая группа состоит из трех студентов с именами Helena, Andy и Serg».


Рис. 3.4. Пример RDF-модели, использующей контейнер Bag

В приведенном на рис. 3.4 графе контейнер (как целое) описывает пустой узел, на который (как на объект) ссылается свойство «https://www.etu.ru/ students#gr232». Для указания принадлежности некоторых сущностей (элементов) к контейнеру в RDF используется специальное обозначение свойств ресурса-контейнера, имеющее общий вид «rdf:_n», где n – произвольное десятичное положительное целое, большее нуля. Обязательным при этом является определение свойства «rdf:type», задающего тип контейнера.

С использование RDF/XML графа на рис. 3.4 может быть описан следующим XML-документом:

# Пример 3

<?xml version=”1.0”?>

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

xmlns:s="https://www.etu.ru/students#">

<rdf:Description rdf:about="https://www.etu.ru/gr232">

<s:info>

<rdf:Bag>

<rdf:li resource="https://www.etu.ru/students/Helena"/>

<rdf:li resource="https://www.etu.ru/students/Andy"/>

<rdf:li resource="https://www.etu.ru/students/Serg"/>

</rdf:Bag>

<s/:info>

</rdf:Description>

</rdf:RDF>

В тексте примера 3 используется предопределенный RDF-элемент «rdf:li», обработка которого (при интерпретации RDF-документа) и обеспечивает генерацию описаний вида «rdf:_n» для соответствующих дуг графа, изображенных на рис. 3.4.

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

Второй вид контейнеров – последовательности «rdf:Seq», которые определяют группы линейно упорядоченных элементов (возможно, повторяющихся), представляющих собой ресурсы или литералы.

Последним, третьим типом контейнеров являются наборы альтернатив «rdf:Alt». Эти наборы представляют собой неупорядоченные группы ресурсов или литералов, среди которых не могут встречаться повторения. При этом результатом обработки набора альтернатив всегда является выбор одного из элементов контейнера (альтернативы). Особенностью «rdf:Alt» является то, что элемент, соответствующий свойству «rdf:_1», имеет предопределенное назначение и считается «альтернативой по умолчанию».

Вторым видом базовых структур данных в RDF являются коллекции. Коллекция представляет собой фактически линейную списочную структуру, связывающую (через специальные свойства пустых узлов-субъектов) в единую последовательность различные триплеты. В отличие от контейнеров, в которых один ресурс-субъект (обозначающий контейнер в целом) был связан различными свойствами с различными объектами, коллекции связывают узлы одними и теми же стандартными свойствами, определяющими порядок следования элементов. На рис. 3.5 изображен RDF-граф, описывающий ситуацию из примера на рис. 3.4 с использованием коллекции.

 
 


Рис. 3.5. Пример RDF-модели, использующей коллекцию

Как видно из рисунка, в RDF-графе отсутствуют явные указания на то, что в модели использована коллекция. Здесь все элементы коллекции (студенты Helena, Andy и Serg) являются объектами одного и того же предопределенного свойства (предиката) – «rdf:first» и имеют в качестве субъекта своего триплета пустой узел, который связывается со следующим аналогичным пустым узлом другим предопределенным свойством «rdf:rest». Агрегирование всех элементов в единую структуру данных происходит за счет того, что все пустые узлы, формирующие основной список, неявно (без отображения в графе) получают зарезервированное в RDF свойство «rdf:type», значение которого становится равным предопределенному символу «rdf:List». Признак окончания списка задается в коллекциях с использованием другого предопределенного символа – «rdf:nil».

XML-описание графа, приведенного на рис. 3.5, может быть реализовано в следующем виде:

# Пример 4

<?xml version="1.0"?>

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

xmlns:s="https://www.etu.ru/students#">

<rdf:Description rdf:about="https://www.etu.ru/gr232">

<s:info rdf:parseType="Collection">

<rdf:Description rdf:about="https://www.etu.ru/students/Helena"/>

<rdf:Description rdf:about="https://www.etu.ru/students/Andy"/>

<rdf:Description rdf:about="https://www.etu.ru/students/Serg"/>

<s/:info>

</rdf:Description>

</rdf:RDF>

В тексте примера 4 для указания на необходимость обработки неявного описания свойств «rdf:type» пустых узлов списка используется специализированный RDF-атрибут «rdf:parseType». В общем случае этот атрибут может использоваться при необходимости указать, что содержимое соответствующего RDF-элемента должно обрабатываться специальным образом (т. е. нестандартной процедурой). Характерным примером использования «rdf:parseType» является прямое включение в RDF-нотации текстов на языке XML. Для этого используется запись «rdf:parseType=”Literal”», которая указывает на то, что содержимое элемента следует воспринимать как обычный XML-текст. Этот текст может выступать в качестве описания значения свойства (объекта) для RDF-триплета. В RDF-графе подобная ситуация отображается путем указания предопределенного литерала «rdf:XMLLiteral» в качестве значения свойства «rdf:type».


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



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