З’єднання декількох відокремлених мікроданих <div> s разом?


11

Я додаю схематичні розмітки 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" або щось для того, щоб зв’язати пов'язані сфери, але я не можу змусити його працювати. Розгляд подібних питань у цьому випадку не допоміг.

ОНОВЛЕННЯ: зауважте, що я спеціально шукаю рішення, яке працює через якесь посилання, і НЕ працює над вкладенням будь-якого типу. Крім того, замовлення другого (неробочого) прикладу має залишатися однаковим (Event first, ExerciseAction second). (Є кілька причин для цього поза моїм контролем).

Зокрема, "це працює" визначається як принаймні інструмент розширених фрагментів Google, який показує, що елементи ARE пов'язані між собою (як це робиться для першого робочого прикладу)

Відповіді:


9

Ви можете використовувати itemrefатрибут.

З специфікацій Microdata ( Примітка робочої групи W3C ):

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

    Властивості, які не є нащадками елемента з itemscopeатрибутом, можна асоціювати з елементом за допомогою itemrefатрибута. Цей атрибут містить список ідентифікаторів елементів для сканування на додаток до сканування дітей елемента з itemscopeатрибутом.

  • 5.2 Елементиitemref ::

    Елементи з itemscopeатрибутом можуть мати itemrefвказаний атрибут для подання списку додаткових елементів для сканування для пошуку пар імен-значень елемента.


EDIT : Це повинно діяти відповідно до вимог, про які йдеться у питанні:

<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>

EDIT 2 (за додатковою вимогою ): Якщо батьківський елемент вказує інший елемент (наприклад, a WebPageon 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>

Чи можете ви навести приклад, який би спрацював, наведений вище? Я годинами намагався і не встиг змусити його працювати (перевіряючи його, наприклад, на інструменті з фрагментами з розширенням Google ). Все, що я міг зробити, це зробити так, щоб він включав кілька інших пар = ім'я = значення, які були дубльовані в іншому предметному аркуші і мали те саме ім'я - як згадувалося в аналогічному питанні ; але мені не вдалося включити ще один предмет - про це питання)
Matija Nalis

@MatijaNalis: Я додав фрагмент до своєї відповіді.
unor

Дякую, це було майже саме те, що я шукав! Це пов'язує їх разом, як хотілося, у цьому спрощеному окремому прикладі HTML. На жаль, інструмент з фрагментами розширених google видає помилку на більш складному прикладі з "Помилка: Сторінка містить властивість" подія ", яка не є частиною схеми." (на всій сторінці є більше батьківських дівок. Проблемним є, наприклад, schema.org/Webpage )
Matija Nalis

Будь-які ідеї, як це виправити? Видалення itemprop = "події" з schema.org/Event не допомагає, оскільки потім не пов'язує itemscopes ...
Matija Nalis

@MatijaNalis: Я додав ще один фрагмент, але це, ймовірно, не вирішує цю проблему. Я думаю, вам також доведеться розділити батьківську WebPageрозмітку і використовувати itemrefтам, щоб вона не включала (непов'язані) типи елементів як дочірні. Мабуть, має бути інше питання.
unor

1

Якщо я правильно розумію ваше запитання, просто не закривайте цю діву.

<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>

Поки відповідний тег не буде знайдений, те, що знаходиться всередині цього початкового діла, все ще буде вважатися частиною цього початкового діла, у цьому випадку - Подія.


На жаль, я не можу використовувати будь-яке вкладення (в оригінальному, набагато складнішому проекті, вони знаходяться в зовсім інших під шаблонах, кожен з яких повинен бути закритою структурою HTML), а також не змінювати впорядкування (відображати причини серед іншого). Я оновив питання, щоб уточнити це. Також зауважте, що ваша відповідь не буде підтвердженою, оскільки ExerciseAction не може бути дочірньою подією (можливий лише зворотний зв'язок), і тому для їх зв’язку не потрібен itemprop.
Matija Nalis

@MatijaNalis Єдиною причиною її не підтвердження було те, що я скопіював текст, який ви надали у своєму запитанні. Помилка трапляється тому, що подія розпочнеться в минулому, 2002-02-02. Оновлений до майбутньої дати, він працює. Крім того, я знаю, що ви зараз оновили своє запитання, показуючи, що ви не хочете вкладати будь-який вид, а просто щоб повідомити вам, якщо друга частина даних, яку ви вводите для оригінальної "події", не знаходиться всередині " ExerciseAction "div, воно все одно спрацює. Наприклад, перемістіть "startDate" з моєї відповіді після завершення діва "ExerciseAction", і він все одно спрацює.
riseagainst

1

@Guisasso правильний, ви просто не закриваєте елемент. Але з іншого боку, ваша схема не обмежується використанням схеми просто в елементах DIV та використанням прольотів, як це передбачає (прості приклади). Якщо на всій сторінці йдеться про матеріали, пов’язані з подіями, і це на всьому сайті, тоді може бути більш сенсом використовувати елемент тіла, що означає ваш шаблон, якщо у вас автоматично відбувається розкриття схеми та закриття. Таким чином ваші статті просто заповнюють цей вміст, поки шаблон задає його.

Наприклад:

<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.


дивіться коментар до Гіссассо, ваша відповідь працює не з тих же причин. Я оновив питання, щоб уточнити свої потреби.
Matija Nalis

1

Я також бігти 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>

хоча це допомагає в моєму первинному випуску (неможливо змінити порядок взаємовідносин дитини-батька ExerciseAction / Event), це не допомагає з іншим випуском (не в змозі вкладати ці диви), і це щось неприємне (не створює такий же семантичний, як оригінальний робочий приклад). Однак він корисний, оскільки дозволяє зв’язувати типи елементів schema.org, які не мають призначених елементів для посилання, тому ви можете зв’язати, наприклад, Book з SportsEvent або будь-яким іншим.

Я відповідаю собі тут на всякий випадок, якщо це допомагає комусь із подібними проблемами, оскільки це не дуже допомагає мені (хоча це може бути курорт останнього канаву, якщо нічого кращого не підійде)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.