Терминология RDF

Обзор терминологии RDF в различных примерах

3. Терминология RDF

Введение

Предыдущий раздел иллюстрировал типичную разметку RDFa. Хотя для создания RDFa-разметки глубокое понимание RDF не обязательно, разработчикам систем, обрабатывающих RDF-вывод, необходимо разбираться в концепциях RDF. Далее представлены базовые понятия. Для углублённого изучения обратитесь к:


3.1 Утверждения (Statements)

Структурированные данные в RDFa представляют собой коллекцию утверждений — минимальных единиц информации, оформленных по определённым правилам для упрощения обработки. Даже сложные метаданные можно обрабатывать, разбивая их на такие утверждения.

Пример неструктурированных данных:

Альберт родился 14 марта 1879 года в Германской империи. Его фото доступно 
по адресу http://en.wikipedia.org/wiki/Image:Albert_Einstein_Head.jpg.  

Для машины этот текст неинтерпретируем. В формате утверждений та же информация выглядит так:

Альберт родился 14 марта 1879 года
Альберт родился в Германской империи
Альберт имеет фото http://en.wikipedia.org/...

3.2 Триплеты (Triples)

RDF формализует утверждения как триплеты — структуры из трёх компонентов:

  1. Субъект (Subject)

    • Объект, о котором делается утверждение.
    • В примерах: «Альберт».
  2. Предикат (Predicate)

    • Свойство субъекта.
    • В примерах: «родился», «имеет фото».
  3. Объект (Object)

    • Значение свойства.
    • В примерах: дата, место, URL фото.

Пример триплетов в RDF:

<Albert> <wasBornOn> "March 14, 1879" .  
<Albert> <wasBornIn> <German_Empire> .  
<Albert> <hasPhoto> <http://.../Albert_Einstein_Head.jpg> .  

Особенности:

  • RDFa поддерживает интернационализированные символы (Unicode) во всех компонентах триплета.
  • Субъекты и предикаты обычно выражаются IRI, объекты — IRI или литералы (строки/числа).

3.3 Ссылки на IRI

Разбиение сложной информации на управляемые части помогает уточнить данные, но не исключает неоднозначности. Например, о каком именно “Альберте” идёт речь? Если другая система содержит дополнительные факты об “Альберте”, как определить, что они относятся к тому же человеку? Как сопоставить предикаты “родился в” и “место рождения” из разных систем? RDF решает эти проблемы, заменяя расплывчатые термины на ссылки IRI.

Уникальные идентификаторы

Хотя IRI чаще всего используются для идентификации веб-страниц, в RDF они служат уникальными идентификаторами концепций. Например, вместо неоднозначной строки “Альберт” можно использовать IRI из DBPedia:

Пример 15

<http://dbpedia.org/resource/Albert_Einstein> 
   имеет имя 
   "Альберт Эйнштейн".
<http://dbpedia.org/resource/Albert_Einstein> 
   родился 
   "14 марта 1879".
<http://dbpedia.org/resource/Albert_Einstein> 
   родился в 
   <http://dbpedia.org/resource/German_Empire>.
<http://dbpedia.org/resource/Albert_Einstein> 
   имеет фотографию 
   <http://.../Albert_Einstein_Head.jpg>.

Идентификация объектов

IRI также используются для однозначного определения объектов (третья часть триплета). Фотография уже имеет IRI, но можно аналогично идентифицировать и “Германскую империю”. Строковые значения (литералы) выделяются кавычками:

Пример 16

<http://dbpedia.org/resource/Albert_Einstein> 
   <http://xmlns.com/foaf/0.1/name> 
   "Альберт Эйнштейн".
<http://dbpedia.org/resource/Albert_Einstein> 
   <http://dbpedia.org/property/dateOfBirth> 
   "14 марта 1879".

Унификация предикатов

IRI устраняют неоднозначность предикатов, объединяя синонимы (“место рождения”, “birthplace”, “Lieu de naissance”) под одним идентификатором:

Пример 17

<http://dbpedia.org/resource/Albert_Einstein>
   <http://dbpedia.org/property/birthPlace>
   <http://dbpedia.org/resource/German_Empire>.

Ключевые преимущества:

  1. Устранение неоднозначностей — IRI точно идентифицируют сущности
  2. Межсистемная совместимость — разные источники могут ссылаться на одни и те же концепции
  3. Поддержка многоязычия — один IRI может представлять понятие на любом языке

Особенности реализации:

  • Литералы (строки, числа) всегда заключаются в кавычки
  • Веб-адреса (URL) и другие IRI обрамляются угловыми скобками
  • Использование общепринятых словарей (FOAF, DBpedia) улучшает связанность данных

3.4 Простые литералы (Plain Literals)

Хотя для субъектов и предикатов всегда используются IRI-идентификаторы, объект в триплете может быть как IRI, так и литералом. В примерах имя Эйнштейна представлено простым литералом — строкой без указания типа или языка:

Пример 18

<http://dbpedia.org/resource/Albert_Einstein>
  <http://xmlns.com/foaf/0.1/name> "Альберт Эйнштейн".

Литералы с указанием языка

Для текстов на естественных языках используется тег языка. Например, название Германской империи на разных языках:

Пример 19

<http://dbpedia.org/resource/German_Empire>
  rdfs:label "German Empire"@en;
  rdfs:label "Deutsches Kaiserreich"@de;
  rdfs:label "Германская империя"@ru.

3.5 Типизированные литералы (Typed Literals)

Для специальных значений (даты, числа и т.д.) в RDF предусмотрен механизм указания типа литерала. Типизированный литерал формируется путём добавления IRI типа данных после литерала с использованием символов ^^. Обычно используются типы данных из спецификации XML Schema:

Пример 20

<http://dbpedia.org/resource/Albert_Einstein>
  <http://dbpedia.org/property/dateOfBirth> 
    "1879-03-14"^^<http://www.w3.org/2001/XMLSchema#date>.

Ключевые особенности:

  1. Строковые литералы

    • Простые текстовые значения без дополнительной информации
    • Могут включать указание языка (@"ru")
  2. Типизированные значения

    • Числа: "42"^^xsd:integer
    • Даты: "2023-05-15"^^xsd:date
    • Логические значения: "true"^^xsd:boolean
  3. Стандартные типы данных

    • Используются XSD-типы (xsd:string, xsd:dateTime и др.)
    • Позволяют однозначно интерпретировать значения

Практическое применение:

# Числовое значение
<http://example.org/product/123> 
  ex:weight "2.5"^^xsd:decimal.

# Дата и время
ex:event ex:startTime "2023-05-15T19:00:00"^^xsd:dateTime.

# Булево значение
ex:user ex:isActive "true"^^xsd:boolean.

3.6 Turtle (Синтаксис Turtle)

RDF не имеет единого обязательного формата представления триплетов, поскольку ключевыми концепциями являются сами триплеты и использование IRI, а не конкретный синтаксис. Однако существует несколько способов выражения триплетов, включая RDF/XML, Turtle и, конечно, RDFa. В документации часто используется синтаксис Turtle благодаря его компактности.

Пример с префиксами:

@prefix dbp: <http://dbpedia.org/property/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

<http://dbpedia.org/resource/Albert_Einstein>
  foaf:name "Альберт Эйнштейн" .
<http://dbpedia.org/resource/Albert_Einstein>
  dbp:birthPlace <http://dbpedia.org/resource/German_Empire> .

Расширенный пример:

@prefix dbr: <http://dbpedia.org/resource/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

dbr:Albert_Einstein
  foaf:name "Альберт Эйнштейн";
  dbp:dateOfBirth "1879-03-14"^^xsd:date;
  foaf:depiction <http://example.org/einstein.jpg> .

Специальные обозначения:

  • <> - обозначает текущий обрабатываемый документ
  • Префиксы используются только для удобства записи, в итоговых триплетах всегда полные IRI

3.7 Графы

Совокупность триплетов называется графом. Все триплеты, генерируемые согласно этой спецификации, содержатся в выходном графе, создаваемом процессором RDFa.

3.8 Компактные выражения URI (CURIEs)

Для сокращённой записи IRI в разметке RDFa использует механизм CURIEs. Подробное описание - в разделе “Обработка CURIE и IRI”.

Важно: CURIEs используются только в разметке и примерах, в итоговых триплетах всегда присутствуют полные IRI.

3.9 Фрагменты разметки и RDFa

При переносе фрагментов разметки между документами (например, через копирование или инструменты) следует учитывать:

  1. Обработка изолированных фрагментов вне контекста полного документа не определена
  2. Разработчикам инструментов следует предусматривать передачу необходимого контекста
  3. Авторам фрагментов нужно учитывать их поведение в составе полного документа

3.10 Описание RDFa в терминах RDF

Краткое соответствие между RDFa и RDF:

Компонент RDF Эквивалент в RDFa
Субъект @about
Предикат @property, @rel, @rev
Объект (IRI) @resource, @href, @src
Объект (литерал) @content или содержимое элемента
Тип данных @datatype
Язык @xml:lang или аналоги

Пример соответствия:

<div about="#albert" 
     property="foaf:name" 
     content="Альберт Эйнштейн" 
     datatype="xsd:string">

Генерируемый триплет:

<http://example.org/doc#albert> 
  <http://xmlns.com/foaf/0.1/name> 
  "Альберт Эйнштейн"^^xsd:string .