Определение синтаксиса CURIE в RDF
6. Определение синтаксиса CURIE
Примечание
Рабочая группа в настоящее время анализирует приведённые ниже правила формирования CURIE с учётом недавних замечаний от RDF Working Group и участников RDFa Working Group. Возможны незначительные изменения в правилах в ближайшем будущем, которые могут оказаться обратно несовместимыми. Однако любые такие несовместимости будут ограничены крайними случаями.
Основные положения
Ключевым компонентом RDF является IRI, но такие идентификаторы обычно длинные и неудобные. Поэтому RDFa поддерживает механизм сокращения IRI, называемый компактными URI-выражениями (CURIE).
При раскрытии CURIE ДОЛЖЕН получаться синтаксически корректный IRI ([RFC3987]). Подробнее см. Обработка CURIE и IRI. Лексическое пространство CURIE определяется правилом curie
, приведённым ниже. Пространство значений — это множество IRI.
CURIE состоит из двух компонентов: префикса и ссылки. Префикс отделяется от ссылки двоеточием (:
). В общем случае префикс можно опустить, создав CURIE, использующий отображение префикса по умолчанию. В RDFa отображение префикса по умолчанию — http://www.w3.org/1999/xhtml/vocab#
. Также можно опустить и префикс, и двоеточие, создав CURIE, содержащий только ссылку, использующую отображение без префикса. Данная спецификация НЕ определяет отображение без префикса. Языки-хосты RDFa НЕ ДОЛЖНЫ определять отображение без префикса.
Примечание
Префикс по умолчанию в RDFa не следует путать с пространством имён по умолчанию, определённым в [XML-NAMES]. Процессор RDFa НЕ ДОЛЖЕН обрабатывать объявление пространства имён по умолчанию в XML-NAMES так, как если бы оно устанавливало префикс по умолчанию.
Общий синтаксис CURIE
Синтаксис CURIE можно описать следующим образом:
prefix ::= NCName
reference ::= ( ipath-absolute / ipath-rootless / ipath-empty )
[ "?" iquery ] [ "#" ifragment ] (как определено в [[!RFC3987]])
curie ::= [ [ prefix ] ':' ] reference
safe_curie ::= '[' [ [ prefix ] ':' ] reference ']'
Примечание
Правилоsafe_curie
не является обязательным, даже в ситуациях, когда значение атрибута может быть CURIE или IRI: IRI, использующий схему, не соответствующую текущим отображениям, нельзя спутать с CURIE. Концепция safe_curie
сохранена для обратной совместимости.
Примечание
Можно определить отображение префикса CURIE таким образом, что оно «перекроет» определённую схему IRI. Например, документ может сопоставить префиксmailto
с http://www.example.com/addresses/
. Тогда атрибут @resource
со значением mailto:user@example.com
может создать триплет с объектом http://www.example.com/addresses/user@example.com
. Более того, возможно (хотя и маловероятно), что в будущем появятся схемы, конфликтующие с отображениями префиксов в документе (например, предлагаемая схема widget
[WIDGETS-URI]). В обоих случаях такое «перекрытие» не изменит способ обработки IRI другими потребителями, но может привести к неверной интерпретации CURIE автора документа. Рабочая группа считает этот риск минимальным.
Контекст обработки CURIE
При обычной обработке CURIE требуется следующая контекстная информация:
- Набор отображений префиксов в IRI.
- Отображение для префикса по умолчанию (например,
:p
). - Отображение для случая без префикса (например,
p
). - Отображение для префикса
_
, который используется для генерации уникальных идентификаторов (например,_:p
).
В RDFa эти значения определяются следующим образом:
- Набор отображений префиксов в IRI предоставляется текущими активными объявлениями префиксов элемента во время разбора.
- Отображение для префикса по умолчанию — текущее отображение префикса по умолчанию.
- Отображение для случая без префикса НЕ определено.
- Отображение для префикса
_
не указано явно, но, поскольку он используется для генерации blank nodes, его реализация должна быть совместима с определением RDF и правилами из Ссылки на Blank Nodes. Документ НЕ ДОЛЖЕН определять отображение для префикса_
. Соответствующий требованиям процессор RDFa ДОЛЖЕН игнорировать любые определения отображений для префикса_
.
Правила преобразования CURIE в IRI
CURIE представляет собой полный IRI. Правила его определения:
- Если CURIE состоит из пустого префикса и ссылки, IRI получается путём конкатенации текущего отображения префикса по умолчанию и ссылки. Если отображение префикса по умолчанию отсутствует, CURIE считается невалидным и ДОЛЖЕН игнорироваться.
- Если CURIE состоит из непустого префикса и ссылки, и для префикса существует активное отображение (сравнение без учёта регистра), то IRI создаётся путём конкатенации этого отображения и ссылки.
- Если для префикса нет активного отображения, значение не является валидным CURIE.
Примечание
См. Общее использование терминов в атрибутах для случаев, когда элементы без двоеточия могут интерпретироваться процессорами RDFa в некоторых типах данных.6.1 Почему CURIE, а не QNames?
(Этот раздел является не нормативным.)
Во многих случаях разработчики языков пытались использовать QNames в качестве механизма расширения [XMLSCHEMA11-2]. QNames действительно позволяют управлять коллекцией имён независимо и могут сопоставлять имена с ресурсами. Однако QNames в большинстве случаев не подходят, потому что:
- Использование QName в качестве идентификаторов в значениях атрибутов и содержимом элементов проблематично, как обсуждается в [QNAMES].
- Синтаксис QNames избыточно строг и не позволяет выразить все возможные IRI.
Пример проблемы: попытка определить коллекцию имён для книг. В QName часть после двоеточия должна быть валидным именем элемента, что делает следующий пример недопустимым:
isbn:0321154991
Это невалидный QName, потому что 0321154991
не является допустимым именем элемента. Однако в данном случае нам и не нужно определять валидное имя элемента — цель использования QName заключалась в ссылке на элемент в частной области видимости (ISBN). Более того, мы хотим, чтобы имена в этой области видимости сопоставлялись с IRI, раскрывающим смысл ISBN. Как видно, определение QNames противоречит этому (довольно распространённому) сценарию.
Данная спецификация решает проблему, вводя CURIE. Синтаксически CURIE являются надмножеством QNames.
Важно
Эта спецификация предназначена для разработчиков языков, а не авторов документов. Любой разработчик языка, рассматривающий использование QNames для представления IRI или уникальных токенов, должен вместо этого рассмотреть CURIE:
- CURIE изначально разработаны для использования в значениях атрибутов. QNames предназначены для однозначного именования элементов и атрибутов.
- CURIE раскрываются в IRI, и любой IRI может быть представлен таким образом. QNames обрабатываются как пары значений, но даже если их объединить в строку, можно представить только подмножество IRI.
- CURIE можно использовать в не-XML грамматиках и даже в XML-языках, не поддерживающих XML Namespaces. QNames ограничены XML-приложениями с поддержкой XML Namespaces.