Связывание нескольких отдельных микроданных вместе?


Я добавляю schema.org семантические наценки, и хотел бы связать несколько из них в совершенно разных частях веб-страницы вместе.

Это работает, когда я указываю их как родителя/ребенка:

<div itemscope itemtype="http://schema.org/ExerciseAction">
  <span itemprop="distance">11 km</span>
  <div itemprop="event" itemscope itemtype="http://schema.org/Event">
      <span itemprop="name">first event</span>
      <span itemprop="startDate">2001-01-01</span>
  </div>
</div>

Однако я не знаю, как связать их, когда они разделены горой HTML:

<div itemscope itemtype="http://schema.org/Event">
      <span itemprop="name">some event</span>
      <span itemprop="startDate">2002-02-02</span>
</div>

<!-- 
   ....
   zillion other HTML stuff
   ...
 -->

<div itemscope itemtype="http://schema.org/ExerciseAction">
      <span itemprop="distance">22 km</span>
</div>

Я думаю, мне следует использовать "itemref" или что-то в этом роде, чтобы связать связанные области, но я не могу заставить это работать. Просмотр подобных вопросов не помог в это дело.

ОБНОВЛЕНИЕ: обратите внимание, что я специально ищу решение, которое работает с помощью какой-либо ссылки и НЕ работает с помощью вложенности любого типа. Кроме того, порядок второго (нерабочего) примера должен оставаться прежним (первое событие, второе действие). (Для этого есть несколько причин, находящихся вне моего контроля).

В частности, "это работает" определяется как, по крайней мере, инструмент расширенных фрагментов Google, показывающий, что элементы связаны друг с другом (как это делается для этого первого рабочий пример)

Author: Community, 2013-09-02

4 answers

Вы можете использовать атрибут itemref.

Из Микроданных ( Примечание рабочей группы W3C) спецификация:

  • 4.2 Основной синтаксис:

    Свойства, которые не являются потомками элемента с атрибутом itemscope, могут быть связаны с элементом с помощью атрибута itemref. Этот атрибут принимает список идентификаторов элементов для обхода в дополнение к обходу дочерних элементов с помощью itemscope атрибут.

  • 5.2 Предметы: itemref:

    Элементы с атрибутом itemscope могут иметь указанный атрибут itemref, чтобы предоставить список дополнительных элементов для обхода, чтобы найти пары имя-значение элемента.


РЕДАКТИРОВАТЬ: Это должно работать в соответствии с требованиями, указанными в вопросе:

<div itemprop="event" itemscope itemtype="http://schema.org/Event" id="event001">
  <span itemprop="name">first event</span>
  <span itemprop="startDate">2001-01-01</span>
</div>

<!-- zillion other HTML stuff -->

<div itemscope itemtype="http://schema.org/ExerciseAction" itemref="event001">
  <span itemprop="distance" id="entfernung">11 km</span>
</div>

РЕДАКТИРОВАТЬ 2 (согласно дополнительному требованию): Если родительский элемент указывает другой элемент (например, WebPage в body), приведенное выше решение не работает, потому что тогда свойство event также применялось бы к WebPage, что было бы неверно.

Для этого нет четкого решения.

Уродливым исправлением было бы добавление другого элемента (с itemscope), но без какого-либо типа (без itemtype) в качестве родителя Event. Таким образом, свойство event будет применяться к этому нетипизированному элементу, а не к WebPage.

<body itemscope itemtype="http://schema.org/WebPage">

  <div itemscope> <!-- dummy item -->
    <div itemprop="event" itemscope itemtype="http://schema.org/Event" id="event001">
      <span itemprop="name">first event</span>
      <span itemprop="startDate">2001-01-01</span>
    </div>
  </div>

  <!-- zillion other HTML stuff -->

  <div itemscope itemtype="http://schema.org/ExerciseAction" itemref="event001">
    <span itemprop="distance" id="entfernung">11 km</span>
  </div>

</body>
 9
Author: unor, 2020-06-16 10:32:57

Если я правильно понял ваш вопрос, просто не закрывайте этот раздел.

<div itemscope itemtype="http://schema.org/Event">
  <span itemprop="name">some event</span>
  <span itemprop="startDate">2002-02-02</span>


<!-- ....zillion other HTML stuff... -->

    <div itemscope itemtype="http://schema.org/ExerciseAction">
      <span itemprop="distance">22 km</span>
    </div>
</div>

Пока соответствующий тег не найден, все, что находится внутри этого начального div, все равно будет считаться частью этого начального div, в этом случае Событием.

 1
Author: riseagainst, 2013-09-02 15:40:27

@Guisasso правильно, вы просто не закрываете элемент. Но, с другой стороны, вы не ограничиваетесь использованием схемы только в элементах DIV и использованием промежутков, как это предлагается (простые примеры). Если вся страница посвящена событиям, связанным с событиями, и это по всему сайту, то, возможно, имеет больше смысла использовать элемент body, который означает, что ваш шаблон, если он у вас есть, автоматически обрабатывает открытие и закрытие схемы. Таким образом, ваши статьи просто заполняют это содержимое, в то время как шаблон устанавливает его.

Например:

<body itemscope itemtype="http://schema.org/Event">
   <article>
       <h1 itemprop="name">Some Event</h1>
       <span itemprop="startDate">2002-02-02</span>
       <p itemprop="description">I am the super awesome event infromation</p>
       <div itemscope itemtype="http://schema.org/ExerciseAction">
           <span itemprop="distance">22 km</span>
       </div>
   </article>
</body>

Или вы можете использовать его в элементе MAIN или ARTICLE, если вы используете HTML5.

 1
Author: Simon Hayter, 2013-09-02 16:12:43

Я также перешел к свойству additionalType, которое можно использовать следующим образом

<div itemscope itemtype="http://schema.org/Event">
      <span itemprop="name">some event</span>
      <span itemprop="startDate">2002-02-02</span>


<!-- 
   ....
   zillion other HTML stuff
   ...
 -->

  <div itemprop="additionalType" itemscope itemtype="http://schema.org/ExerciseAction">
      <span itemprop="distance">22 km</span>
  </div>
</div>

Хотя это помогает решить мою основную проблему (невозможность изменить порядок действий/событий в отношениях между ребенком и родителем), это не помогает решить другую проблему (невозможность вложить эти дивы), и это своего рода запутанность (не дает той же семантики, что и исходный рабочий пример). Тем не менее, это полезно, поскольку позволяет связывать schema.org типы элементов, для которых не предназначены элементы связывание, чтобы вы могли связать, например, книгу со спортивным событием или чем-то еще.

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

 1
Author: Matija Nalis, 2013-09-03 17:56:00