[構造化データ初級者向け] schema.orgとMicrodata、RDFaって何が違うの?

[対象: 中級]

この記事では、構造化データを実装するときに利用する、schema.orgやMicrodata、RDFaなどの役割とその違いについて、構造化データの初級者にわかりやすいように簡潔に説明します。

セマンティックの専門家が読むと「正しくは〜だ」とツッコミが入るかもしれませんが、僕たちは専門家ではありません。
SEOのために構造化データを利用するぶんには十分な理解が得られるはずです。

まず次の2つの質問を見てください。

Q1: 「schema.org」と「RDFa」ってどっちがいいの?
Q2: 「Microdata」と「RDFa」ってどっちがいいの?

Q1は答えられない質問です。
答えられないというのは、「どちらがいいか甲乙つけがたい」からではなくて質問として成り立っていないからです。

対して、Q2は「Microdataを勧める」または「RDFaを勧める」と答えることができます。

schema.orgはボキャブラリー

schema.orgは、モノゴトが持つ意味を表現するために定義された「ボキャブラリー(vocabulary)」です。

たとえば、人物は「Person」で表しましょうとか、人物に与えられた名前は「name」で表しましょうとか、モノゴトやそのモノゴトが持つ情報に意味を与えるための固有の“ラベル”です。

schema.orgは、どういったものにどういったボキャブラリーを割り当てるかを定義した、ボキャブラリーの集合です(文脈によっては、そのボキャブラリーを定義した組織の名称を表すこともある)。

セマンティックの世界にはさまざまなボキャブラリーがあります。

  • ECサイトで使うためのボキャブラリーを定義した、GoodRelations
  • 人物の情報を表すためのボキャブラリーを定義した、FOFA (Friend of a Friend)
  • ニュース関連の情報を表すためのボキャブラリーを定義した、rNews
  • 幅広いジャンルをカバーするボキャブラリーを定義した、 Data-Vocabulary.org

最後のData-Vocabulary.orgは、schema.orgの登場によってその役割をschema.orgに引き継いでいます。
GoodRelationsは、そのボキャブラリーほとんどが現在はschema.orgに移植されています。

MicrodataやRDFaはシンタックス

一方、MicrodataやRDFaはシンタックス(syntax)です。

シンタックスは、ボキャブラリーよりももっと普段使わない言葉ですね。
「記述方法」、「書き方のルール」とここでは理解してください。

schema.orgやFOAFが定めたボキャブラリーをどのようにして記述するかのフォーマットです。
僕たちの場合は、HTMLドキュメントのなかにどんな形式で書き込むか、その書き方になります。

有名なシンタックスには次のようなものがあります。

  • Microdata
  • RDFa
  • RFDa Lite
  • JSON-LD

Microdataは、HTML5の一部として作成された仕様です。
コーディングする人には馴染み深いかもしれません。

RDFaは、構造化データをマークアップするシンタックスとして幅広く使われていて拡張性にも富んでいます。

RDFa Liteは、RDFaの“サブセット”です。
RDFaは、機能的に優れているのですが複雑で高度です。
RDFaをもっと使いやすく簡素化したのが、RDFa Liteになります。

JSON-LDは、他のシンタックスとは異なり、Linked Dataを送信するための仕組みです。
JavaScriptの記述方法を使っていますが、JavaScriptではありません。
まして、構造化データのマークアップのために作られらものでもありません。
これ以上の説明は難しくなるのでやめておきます(知らなくても困りません)。

現在schema.orgは、MicrodataとRDFa、JSON-LDの3つのシンタックスを公式にサポートしています。
※補足: 厳密にはRDFaではなくRDFa Liteになります。

ところで、microformatsは少し変わっていて、ボキャブラリーとシンタックスの両方の機能を兼ね備えています(これも厳密に言えば正確な説明でないが深くは考察しない)。

schema.orgと異なるシンタックスを組み合わせる

ボキャブラリーとシンタックスの違いを踏まえたうえで、schema.orgのボキャブラリーを異なるシンタックスで記述した具体例を見てみましょう。

schema.orgでは、人物を示すボキャブラリーとして次が定義されています(これはほんのごく一部)

  • 人物: Person
  • 人物に与えられた名前: name
  • 人物の写真: image
  • 人物のホームページ: url

ちなみに、モノゴト(上では「人物」)が持つ情報をプロパティ(property、属性値)と呼ぶことがあります。

上で挙げたschema.orgの人物のボキャブラリーを、MicrodataとRDFa、JSON-LDを用いて記述します。

schema.org + Microdata

<div itemscope itemtype="http://schema.org/Person">
<span itemprop="name">鈴木謙一</span>
<img src="//www.suzukikenichi.com/images/suzukik.jpg" itemprop="image" />
<a href="http://www.suzukikenichi.com/blog/" itemprop="url">海外SEO情報ブログ</a>
</div>

schema.org + RDFa (RDFa Lite)

<div vocab="http://schema.org/" typeof="Person">
<span property="name">鈴木謙一</span>
<img src="//www.suzukikenichi.com/images/suzukik.jpg" property="image" />
<a href="http://www.suzukikenichi.com/blog/" property="url">海外SEO情報ブログ</a>
</div>

schema.org + JSON-LD

<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Person",
"name": "鈴木謙一",
"image": "http://www.suzukikenichi.com/images/suzukik.jpg",
"url": "http://www.suzukikenichi.com/blog/"
}
</script>

どれも、セマンティックの仕組みのうえで意味することは同じです。
表現方法が違うだけです。

まとめ

schema.orgとMicrodata、RDFaの役割と違いを理解できたでしょうか?

schema.orgは「ボキャブラリー」、たいしてMicrodataとRDFaは「シンタックス」です。

「schema.org」と「RDFa」ってどっちがいいの?

これは比較の対象がそろっていないおかしな質問だと今は気付くはずです。

たとえて言うと、ボキャブラリーは料理のメニューです。
天丼やミートソースやカレーライスです。

シンタックスは、料理を食べるのに使う道具です。
箸やフォーク、スプーンです。

「天丼とミートソースはどっちが好き?」は答えられる質問です。

でも「天丼とフォークはどっちが好き?」は答えられない質問ですよね。

「schema.orgを、MicrodataとRDFaのどっちで記述したらいいですか?」

これは、成り立つ質問です。

「カレーライスを、スプーンとフォークのどっちで食べますか?」に相当します。

カレーライスをフォークで食べる人はいないと思いますが、質問としては成り立ちますよね。

変な例えなので、かえって混乱したらスルーしてください。w

どの組み合わせがいいのかという問題については、ボキャブラリーとしてschema.orgを利用するのであれば、発足当初からサポートしていた「schema.org + Microdata」になるでしょうか。

サンプルも多いのでわからないことがあっても調べやすいと思います。

ただ個人的には、「schema.org + JSON-LD」をこれからは使いたくなります。
該当箇所に直接マークアップするMicrodataやRDFaとは異なり、1か所で管理できるのでメンテナンスやトラブルシューティングがしやすいのがメリットです。

そういう理由もあるのか、schema.orgもGoogleも最近はJSON-LDを押しているように僕は感じています。