複数の分離したMicrodata <div>をリンクしますか?


11

schema.orgのセマンティックマークアップを追加しています。それらのいくつかは、Webページのまったく異なる部分にあるいくつかを一緒にリンクしたいと考えています。

これは私がそれらを親/子として指定すると機能します:

<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」などを使用して関連するスコープをリンクする必要があると思いますが、機能しません。この場合、同様の質問を調べても役に立ちませんでした。

更新:ある種の参照を介して機能し、どのタイプのネストを介しても機能しないソリューションを具体的に探していることに注意してください。また、2番目の(機能しない)サンプルの順序は同じままである必要があります(最初にイベント、2番目にExerciseAction)。(私の制御の外にそれにはいくつかの理由があります)。

具体的には、「機能する」とは、少なくとも最初に機能する例と同様に、アイテムが相互にリンクされていることを示すGoogleリッチスニペットツールとして定義されます。

回答:


9

itemref属性を使用できます。

ミクロW3Cワーキンググループ注)仕様:

  • 4.2基本的な構文

    itemscope属性を持つ要素の子孫ではないプロパティは、itemref属性を使用してアイテムに関連付けることができます。この属性は、属性を持つ要素の子のクロールに加えて、クロールする要素のIDのリストを取り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追加要件ごと):親要素が別のアイテム(たとえばWebPagebody)を指定する場合、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リッチスニペットツールで検証しています)。同様の質問で述べたように、私ができることは、別のitemscopeで複製され、同じ名前を持ついくつかの他のname = valueペアを含めることです。しかし、私は別のitemscopeを含めることができませんでした-これは問題です)
Matija Nalis

@MatijaNalis:スニペットを回答に追加しました。
13

ありがとう、それは私が探していたものとほぼ同じでした!単純化されたスタンドアロンHTMLの例では、必要に応じてそれらをリンクしています。残念ながら、Googleリッチスニペットツールは、「エラー:ページにスキーマの一部ではないプロパティ「イベント」が含まれています」というより複雑な例でエラーをスローします。(全体のページにはより多くの親divがあり、問題のあるのはたとえばschema.org/Webpageです
Matija Nalis

それを修正する方法はありますか?削除にitempropは、「イベント」=それはリンクが...その後、一緒にitemscopesしないよう、schema.org/Eventからは助けをしません
マティヤNalis

@MatijaNalis:私は別のスニペットを追加しましたが、これはおそらくこの問題を解決しません。親WebPageマークアップを分解してitemrefそこで使用し、(無関係な)アイテムタイプを子として含めないようにする必要があると思います。おそらく別の質問になるはずです。
2013

1

私があなたの質問を正しく理解した場合、その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>

一致するタグが見つからない限り、その最初のdiv内にあるものはすべて、その最初のdivの一部と見なされます。この場合、イベントです。


残念ながら、私はどのような種類の入れ子も使用できません(元の非常に複雑なプロジェクトでは、それぞれが非常に異なるサブテンプレートにあり、それぞれが閉じたHTML構造である必要があります)。また、順序を変更することもできません(表示の理由など)。それを明確にするために質問を更新しました。また、ExerciseActionをEvent ODにすることはできないため(リバースのみ可能)、回答を検証できないため、それらをリンクするために必要なitempropがないことに注意してください。
Matija Nalis 2013

@MatijaNalis検証されなかった唯一の理由は、質問で提供されたテキストをコピーしたためです。このエラーは、イベントが過去に開始するように設定されているために発生します(2002-02-02)。将来の日付に更新された場合、機能します。また、元の「イベント」に入力したデータの2番目の部分が「」内にない限り、どのような種類のネストもしたくないことを示す質問を更新したことを知っています。 ExerciseAction "div、それでも動作します。たとえば、「startDate」を私の回答から「ExerciseAction」終了divの後に移動しても、引き続き機能します。
2013

1

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

または、HTML5を使用している場合は、MAINor ARTICLE要素で使用できます。


ギサッソへのコメントを見てください。あなたの答えは同じ理由でうまくいきません。ニーズを明確にするために質問を更新しました。
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の子と親の関係を並べ替えることができない)には役立ちますが、他の問題(それらのdivをネストできない)には役立ちません。元の作業例と同じ意味)。ただし、リンクの目的の要素を持たないschema.org itemtypesをリンクできるので便利です。たとえば、BookをSportsEventなどにリンクできます。

それは本当に私を助けていないので、それが同様の問題を抱えている他の誰かを助けるためにここで自分に答えています(何もうまくいかない場合は最後の手段のリゾートかもしれませんが)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.