Collegando insieme diversi microdati <div> s?


11

Sto aggiungendo markup semantici di schema.org e vorrei collegare insieme alcuni dei quali si trovano in parti della pagina Web abbastanza diverse.

Questo funziona quando li specifico come genitore / figlio:

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

Tuttavia, non so come collegarli quando sono separati da una montagna di 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>

Immagino che dovrei usare "itemref" o qualcosa per collegare ambiti correlati, ma non riesco a farlo funzionare. Guardare domande simili non ha aiutato in questo caso.

AGGIORNAMENTO: nota che sto specificatamente cercando una soluzione che funzioni tramite un qualche tipo di riferimento e NON funzioni tramite annidamento di alcun tipo. Inoltre, l'ordinamento del secondo esempio (non funzionante) deve rimanere lo stesso (Evento prima, Esercizio per secondo). (Ci sono diverse ragioni per questo al di fuori del mio controllo).

In particolare, "funziona" è definito come almeno lo strumento rich snippet di google che mostra che gli elementi SONO collegati tra loro (come nel caso del primo esempio funzionante)

Risposte:


9

È possibile utilizzare l' itemrefattributo.

Dalle specifiche sui microdati ( nota del gruppo di lavoro W3C ):

  • 4.2 La sintassi di base :

    Le proprietà che non sono discendenti dell'elemento con l' itemscopeattributo possono essere associate all'elemento usando l' itemrefattributo. Questo attributo accetta un elenco di ID di elementi da sottoporre a ricerca per indicizzazione oltre a eseguire la ricerca per indicizzazione dei figli dell'elemento con l' itemscopeattributo.

  • 5.2 Articoliitemref ::

    Gli elementi con un itemscopeattributo possono avere un itemrefattributo specificato, per fornire un elenco di elementi aggiuntivi da sottoporre a ricerca per trovare le coppie nome-valore dell'elemento.


EDIT : questo dovrebbe funzionare secondo i requisiti menzionati nella domanda:

<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 (per ulteriore requisito ): Se un elemento genitore specifica un altro elemento (ad esempio, una WebPagesulla body), la soluzione di cui sopra non lavoro perché allora la eventproprietà sarebbe ugualmente validi per la WebPage, che non sarebbe corretto.

Non esiste una soluzione chiara per questo.

Una brutta soluzione sarebbe l'aggiunta di un altro elemento (con itemscope) ma senza alcun tipo (senza itemtype) come genitore di Event. In questo modo, la eventproprietà verrà applicata a questo elemento non tipizzato, non a 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>

Potresti dare un esempio che funzionerebbe sopra? Ho provato per ore e non sono riuscito a farlo funzionare (convalidandolo, ad esempio, lo strumento rich snippet di Google ). Tutto quello che ho potuto fare è far sì che includa diverse altre coppie nome = valore che sono state duplicate in un altro ambito di oggetti e avevano lo stesso nome - come menzionato in una domanda simile ; ma non sono riuscito a includere un altro oggetto - che è la domanda)
Matija Nalis

@MatijaNalis: ho aggiunto lo snippet alla mia risposta.
unor,

Grazie, era quasi esattamente quello che stavo cercando! Li collega insieme come desiderato in quell'esempio HTML standalone semplificato. Sfortunatamente, lo strumento rich snippet di Google genera un errore in un esempio più complesso con "Errore: la pagina contiene un" evento "di proprietà che non fa parte dello schema". (l'intera pagina ha più div parent, la problematica è ad esempio schema.org/Webpage )
Matija Nalis

Qualche idea su come risolverlo? La rimozione di itemprop = "event" da schema.org/Event non aiuta, in quanto non collega insieme gli itemcopes ...
Matija Nalis,

@MatijaNalis: ho aggiunto un altro frammento, ma probabilmente questo non risolve questo problema. Immagino che dovresti smontare il WebPagemarkup genitore e usarlo anche itemreflì, in modo che non includa i tipi di oggetto (non correlati) come figli. Probabilmente dovrebbe essere un'altra domanda.
unor

1

Se capisco correttamente la tua domanda, non chiudere quel div.

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

Finché il tag corrispondente non viene trovato, qualunque cosa sia all'interno di quel div iniziale sarà comunque considerata parte di quel div iniziale, in quel caso, un Evento.


Sfortunatamente, non posso usare l'annidamento di alcun tipo (nel progetto originale, molto più complesso, sono in sottotampi piuttosto diversi di cui ognuno deve essere chiuso in una struttura HTML), né cambiare l'ordine (visualizzare i motivi tra le altre cose). Ho aggiornato la domanda per chiarirlo. Inoltre, tieni presente che la tua risposta non verrà convalidata poiché ExerciseAction non può essere figlio di Evento (è possibile solo il contrario) e quindi non è necessario per collegarli insieme.
Matija Nalis,

@MatijaNalis L'unico motivo per cui non è stato convalidato è perché ho copiato il testo che hai fornito nella tua domanda. L'errore si verifica perché l'evento è impostato per iniziare in passato, 2002-02-02. Se aggiornato a una data futura, funziona. Inoltre, so che ora hai aggiornato la tua domanda mostrando che non vuoi nidificare di alcun tipo, ma solo per farti sapere, purché la seconda parte di dati che inserisci per "Evento" originale non sia all'interno del " ExerciseAction "div, funzionerà comunque. Ad esempio, sposta "startDate" dalla mia risposta a dopo il div di chiusura "ExerciseAction" e continuerà a funzionare.
riseagainst

1

@Guisasso ha ragione, non basta chiudere l'elemento. Ma in un'altra nota non sei limitato all'utilizzo dello schema solo all'interno degli elementi DIV e all'uso degli span come suggerisce (semplici esempi). Se l'intera pagina riguarda cose relative agli eventi e questo si trova in tutto il sito, potrebbe essere più sensato utilizzare l'elemento body, il che significa che il tuo modello se ne hai uno si occupa automaticamente dell'apertura dello schema e della chiusura. In questo modo i tuoi articoli riempiono semplicemente quel contenuto mentre il modello lo imposta.

Per esempio:

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

Oppure potresti usarlo nell'elemento MAINo ARTICLEse stai usando HTML5.


vedi il commento a Guisasso, la tua risposta non funziona per gli stessi motivi. Ho aggiornato la domanda per chiarire le mie esigenze.
Matija Nalis,

1

Ho anche eseguito la proprietà additionalType , che potrebbe essere utilizzata come segue

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

mentre questo mi aiuta con il mio problema principale (non essere in grado di riordinare la relazione bambino-genitore Esercizio / Azione), non aiuta con altri problemi (non essere in grado di annidare quei div), ed è un po 'kludgy (non produce il stesso semantico dell'esempio di lavoro originale). Tuttavia, è utile in quanto consente il collegamento dei tipi di elemento schema.org che non hanno elementi previsti per il collegamento, quindi è possibile collegare ad esempio Book a SportsEvent o altro.

Sto rispondendo a me stesso nel caso in cui aiuti qualcun altro con un problema simile, in quanto non mi aiuta davvero (anche se potrebbe essere un resort all'ultimo sangue se non succede nulla di meglio)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.