Microdata / JSON-LD / RDFa を比較する

schema.org のイメージ

Google, Yahoo, Bing(Microsoft) らが共同でメタデータを提唱し、 管理する schema.org では、メタデータを記述するための構文が提唱されています。 Microdata, JSON-LD, RDFa の 3 つです。 ここではそれぞれの構文 (特に Microdata, JSON-LD) を比較します。

Microdata

Microdata は itemscope 属性 や itemprop 属性を使ってマークアップされます。itemscope や itemprop は W3C の提唱するマークアップに含まれます。

これらは meta や link 要素などの不可視な要素にも適用することができます。 また、itemprop が指定された meta や link 要素はフローコンテントやフレージングコンテントとして見なされる ので、head 要素以外の場所でも、meta や link 要素を使って不可視のメタデータを定義(記述)することができます。 言い換えれば、HTML5 の構文に違反しません。

次のコードは Microdata によって著者情報を示した例です。

<span class="author" itemprop="author">
<a href="URL" rel="author" itemprop="url">
<span itemprop="name"> NAME </span>
</a>
</span>

Microdata によるマークアップの例

Why microdata? Why not RDFa or microformats? などにあるように、 schema.org は元々 Microdata をフォーマットとして採用することが前提としていたようです。 したがって schema.org による Microdata の継続的なサポートは期待できそうです。

また Google ウェブマスター向け公式ブログなどでも同じような情報を確認することができます。 RDFa や microformats はこれからもサポートされますが、Web ページにおいては、Google は Microdata を推奨する方針のようです。

microdata マークアップと JSON-LD マークアップとは何ですか? 単一のページやメールに 両方のタイプを使用しないようにしてください。ウェブ コンテンツの場合は microdata の使用を おすすめします。

構造化データ マークアップ支援ツール(2015.06.09) より抜粋

JSON-LD

JSON-LD は script 要素を使ってメタデータを記述する、比較的新しいタイプのフォーマットです。 名前の通り JSON のフォーマットに従ってデータが定義されます。JSON-LD の利点はいくつかあります。

(1) JSON フォーマットなので、各システムでデータを取得・解析しやすいのが最大の特徴です。 多くのシステムが JSON を解析する仕組みを持っていますし、パース(システムが処理できるデータに変換すること)も高速です。

(2) script 要素として記述するため、CSS などの影響を受け難く、既存の HTML ドキュメントに埋め込みやすいという利点があります。

(3) ある1つの種類のデータを示すメタデータを1か所にまとめて記述するため、システムが読めるだけでなく、人間も読みやすいです。 Microdata やその他のメタデータフォーマットは、ある要素の中に記述されたり、その要素がページ中に分散することもあります。

(4) 不可視のメタデータを記述する際には、記述量が少なくて済む = データサイズが小さい、という利点もあります。 (そもそも JSON 自体が軽量なフォーマットですが)

一方で、可視化されたデータと重複する内容をメタデータとして出力すると、冗長なデータとなります。 次の JSON-LD とマークアップはデータが重複した例です。

分かりやすさのために最小のデータによって表現していますが、実用的なシーンでは、より多くのデータが重複するでしょう。

<script type="application/ld+json">
{
"@context" : "http:\/\/schema.org",
"@type": "Article",
"url": "URL",
"author": "NAME",
}
</script>

…

<a href="URL" rel="author"> NAME </a>

冗長になってしまったパターン(NAME/URL)

例えば名前や日付などは冗長になりがちです。 可視化されたデータとして名前を記述し、別途メタデータとしても名前を記述することになります。 また、いずれかのデータが変更されたとき、もう一方のデータも変更するコストがかかります。

HTML と script が交互に記述されるので、多少コードの美しさを多少損なうこともあるでしょう。

昨今では HTML と CSS を分離して管理することが当たり前になっていることを考えれば、 JSON-LD はこれまでのフォーマットの経緯を多少逆行しています。データの形式や目的は未来志向ですが。

個人的にはそこまでするなら、HTML ドキュメントに埋め込まなくても良いんじゃないかなぁとは思います。

RDFa

RDFa は W3C の内容を見る限り XHTML 1.1 や HTML 4 などを対象にメタデータをマークアップすることを目的として検討されてきたようです。 schema.org が推奨する一方で、他の形式と比較して古いメタデータの形式です。

Google は microformats と RDFa に対応してきた経緯がありますが、 Google ウェブマスター向け公式ブログを見る限りでは、 今後は RDFa から別のフォーマットへ移行した方がよさそうです。

利点としては XML でも採用できることでしょうか。 また、似た仕組みの Microdata と比較して、現時点(2015.06)でステータスが勧告 (Recommendation) になっています。

一方で Microdata と比較すると記述方法が複雑で、導入しにくく、見通しが悪いと感じるでしょう。 また多少冗長なように見えます。

microformats について

Google や Yahoo は一部 microformats を構造化データとして採用しています。 microformats は class や rel を用いてメタデータを表現します。

執筆時では HTML5 が最新の HTML ですが、HTML5 においては、rel 属性はそれを使うことができる要素とその値が定められています。 したがって、microformats の仕様は HTML5 の構文に違反します。

また class を使ったメタデータの指定も、メタデータなのか単に class 名なのかが不明瞭であるなどの欠点があります。 microformats についての詳細は「microformats について : 利点と欠点」のページを参照してください。