Терминология 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 формализует утверждения как триплеты — структуры из трёх компонентов:
-
Субъект (Subject)
- Объект, о котором делается утверждение.
- В примерах: «Альберт».
-
Предикат (Predicate)
- Свойство субъекта.
- В примерах: «родился», «имеет фото».
-
Объект (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>.
Ключевые преимущества:
- Устранение неоднозначностей — IRI точно идентифицируют сущности
- Межсистемная совместимость — разные источники могут ссылаться на одни и те же концепции
- Поддержка многоязычия — один 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>.
Ключевые особенности:
-
Строковые литералы
- Простые текстовые значения без дополнительной информации
- Могут включать указание языка (
@"ru"
)
-
Типизированные значения
- Числа:
"42"^^xsd:integer
- Даты:
"2023-05-15"^^xsd:date
- Логические значения:
"true"^^xsd:boolean
- Числа:
-
Стандартные типы данных
- Используются XSD-типы (
xsd:string
,xsd:dateTime
и др.) - Позволяют однозначно интерпретировать значения
- Используются XSD-типы (
Практическое применение:
# Числовое значение
<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
При переносе фрагментов разметки между документами (например, через копирование или инструменты) следует учитывать:
- Обработка изолированных фрагментов вне контекста полного документа не определена
- Разработчикам инструментов следует предусматривать передачу необходимого контекста
- Авторам фрагментов нужно учитывать их поведение в составе полного документа
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 .