Для ясности речь идет только об особом способе написания 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; др
Избегать rdf:ID
.Используйте rdf:about
и rdf:resource
во многом как href, первый для субъекта, второй для объектов.
Дополнительно
Забыл упомянуть, что rdf:ID
может использоваться для элемента свойства, но он делает что-то, что вы можете найти неожиданным: он ограничивает тройку.Избегайте rdf:ID
.