Ответ 1
Чтобы быть понятным, речь идет только о конкретном способе написания rdf: RDF/XML. Другие синтаксисы не содержат этих различий.
С этим отказом от ответственности:
То, что мы пытаемся сделать, это написать инструкции формы:
subject predicate object
и, в частности:
subjectURI predicate objectURI
Итак, как мы вводим URI субъекта и объекта в RDF/XML?
-
rdf:about
устанавливает субъект URI оператора, который может быть абсолютным (http://example.com/
) или разрешен относительно BASE документа (например,/foo/bar
,#frag
). (Какhref
в html) -
rdf:resource
устанавливает URI объекта в оператор, еще раз абсолютный или относительный. -
rdf:ID
задает объект URI, но он может быть только внутри этого документа. Идентификатор можно использовать только один раз. Очень нравится<a name="baz">
илиid="baz"
в html.
rdf:ID
обескуражен, так как
- вы можете заменить его
rdf:about
илиrdf:resource
фрагментом#baz
и - это может вызвать проблемы xml, если вы используете один и тот же идентификатор более одного раза.
То есть он избыточный и потенциальный источник ошибок.
В ретроспективе обычно должен быть только один атрибут для указания URI, так как из-за синтаксиса RDF/XML видно, является ли что-то субъектом или объектом:
<ex:Foo ...> - subject
<ex:prop ... /> - property then object
</ex:Foo>
<ex:Foo ...> - subject
<ex:prop> - property
<ex:Bar ... /> - subject (and implictly an object chaining from previous)
...
(эмпирическое правило: нечетные строки rdf:about
, четные строки, rdf:resource
)
и использование как rdf:about
, так и rdf:resource
для элемента почти всегда является ошибкой (вы либо находитесь в позиции предмета, либо в позиции объекта).
TL;DR
Избегайте rdf:ID
. Используйте rdf:about
и rdf:resource
так же, как href, первый для объекта, последний для объектов.
Дополнительные
Забыл упомянуть, что rdf:ID
можно использовать в элементе property, но он делает что-то неожиданное: он обновляет тройку. Избегайте rdf:ID
.