Структурированные данные › Микроданные и Json-LD › Идентификаторы объектов › Идентификатор фрагмента

Мне было интересно, лучше/правильнее ли ссылаться на объекты, используя формат идентификатора фрагмента - в основном, вставляя хеш перед именем

[url] + # + [name] => http://example.com/page/#webPage

ИЗМЕНИТЬ:

Следуя доброму ответу всегда щедрого и замечательного @Unor, я добавил это редактирование, чтобы попытаться ограничить объем моего запроса и прояснить основную проблему, к которой я подхожу. Я также удалил большую часть исходного вопроса (около 95%), который (оглядываясь назад), как мне кажется, отвлекает от: 1. моего основного вопроса; и 2. польза для будущих читателей.

Вот моя проблема вкратце:

Действительна ли практика ручного ввода хеша в начале значений itemid микроданных и значений @id json-ld?

Вот моя проблема, выраженная более подробно:

Можно ли вставить символ HASH (#) в значения itemid микроданных и значения @id json-ld, чтобы создать действительные результирующие URI с правильным и допустимым использованием идентификатора фрагмента?

Итак, если это на веб-странице:

<div itemscope itemtype="http://www.schema.org/Person" itemid="#joe"></div>

Или, если это также есть на веб-странице:

{"@context":"http://schema.org",
"@type":"Person",
"@id":"#Joe"}

Я понимаю, что они будут прочитаны, чтобы создать такой uri (предполагая относительное построение потребителем, как это делает инструмент проверки структурированных данных Google):

http://www.example.com/page#joe

Это ури:

  1. действительный uri; а также

  2. правильно ли используется идентификатор фрагмента (HASH)?


person TBB    schedule 10.11.2015    source источник
comment
Я не уверен, что именно вы имеете в виду с помощью инструмента Google (возможно, это должен быть отдельный вопрос, если он важен), но я полагаю, вы имеете в виду, что инструмент генерирует URI для элементов с атрибутом id? Насколько я знаю, это неправильно (т. е. не то, что указано в Microdata/RDFa), и я понятия не имею, почему они это делают.   -  person unor    schedule 11.11.2015


Ответы (1)


Рекомендуется разрешать получение описания объекта при запросе URI (см. Классные URI для Semantic Web: 1. Будьте в Интернете).

Используя Hash URI, вы получаете следующие функции бесплатно:

  • http://example.com/flower представляет собой документ о цветке
  • http://example.com/flower#this представляет цветок
  • → При извлечении http://example.com/flower#this вы получаете документ об этом

Используя URI с косой чертой, вы должны самостоятельно реализовать перенаправление (с кодом состояния 303):

  • http://example.com/flower представляет собой документ о цветке
  • http://example.com/flower/this представляет цветок
  • → При получении http://example.com/flower/this вы получаете 303-перенаправление на URI о (см. пример )

Поэтому, не зная больше о вашем бэкэнде, я бы предложил использовать Hash URI, потому что его обычно проще настроить.

(Я не уверен, что именно вы имеете в виду под «сущностью веб-страницы», но просто чтобы убедиться: Hash URI должен быть для «реального объекта», а не для документа.)


Изменить (для вашего обновленного вопроса):

Да, вы можете указать Hash URI в itemid и @id (пример), указав только компонент фрагмента (начиная с #).

Таким образом, в документе с URL-адресом http://example.com/foobar эти четыре оператора генерируют один и тот же хэш-URI (http://example.com/foobar#this):

<article itemscope itemtype="http://voc.example.net/Example" itemid="#this">
</article>

<article itemscope itemtype="http://voc.example.net/Example" itemid="http://example.com/foobar#this">
</article>

<script type="application/ld+json">
{
  "@context": "http://voc.example.net/",
  "@type": "Example",
  "@id": "#this" 
}
</script>

<script type="application/ld+json">
{
  "@context": "http://voc.example.net/",
  "@type": "Example",
  "@id": "http://example.com/foobar#this" 
}
</script>

(И да, ваш пример URI действителен; вот какие символы может содержать компонент фрагмента.)

Примечания:

  • Фрагмент чувствителен к регистру, поэтому ваши itemid="#joe" и "@id":"#Joe" разрешаются в разные URI (j против J).
  • Если не указывать абсолютный Hash URI, вы должны убедиться, что URL-адрес текущего документа является каноническим. Например, косая черта в конце имеет значение (/page/#joe против /page#joe); компонент запроса имеет значение (страница /page?foo=bar создаст Hash URI /page?foo=bar#joe, а не /page#joe); есть ли у хоста www. или нет; схема URI имеет значение (http против https); и т.п.
person unor    schedule 10.11.2015
comment
Unor на помощь... снова! Я отредактирую вопрос, чтобы прояснить некоторые моменты, которые вы определили. - person TBB; 11.11.2015
comment
Привет @unor. Я отредактировал вопрос. Если вы можете обновить свой ответ в свете этого разъяснения, я был бы очень рад отметить его как правильный. - person TBB; 11.11.2015
comment
@TBB: я добавил раздел о том, как указать Hash URI в itemid/@id. Это отвечает на ваш обновленный вопрос, или я что-то неправильно понимаю? - person unor; 12.11.2015
comment
Это отвечает на мой вопрос. Я отметил ваш ответ как правильный. Еще раз спасибо за ваш огромный вклад здесь! - person TBB; 17.11.2015