Microdata は machine-understandable ではない

no extension

長年(といっても10年足らずだけど)RDF を使ってたおかげで Semantic Web について考える際にはどうしても「主語-述語-目的語」の Triple で考える癖がついてしまってるのだが,その発想が Microdata の理解を妨げているらしいと気がついた。 そこでちょっとアプローチを変えてみることにした。 その上で RDF/RDFa と Microdata を比較・考察してみる。

勝手に「Microdata 用語」

Microdata に関する色々なページを回ってみるが,体系的にきちんとした説明をしているところはほぼない。 「W3C のドキュメントを見ろ」と言われそうだが,こちらも「使い方」以上の説明がない。 (ところで Microdata に関する「勧告(Recommendation)」レベルのドキュメントってあるの?)

そこでこちらで勝手に「用語」を設定して整理してみることにする。 もちろんここで言う「用語」はこのページでしか通用しない。ゴメンペコン。

Microdata を理解するには「オブジェクト指向(object-orientation)」で考えると分かりやすい。 また Microdata のデータ構造は HTML 記述の制約を受ける。 したがって Microdata による記述の範囲は,最大でもそのページの内部に限られる。 なぜなら Microdata は DOM(Document Object Model)に組み込まれている(予定だ)からだ。

itemscope 属性(値なし)をセットされた要素およびその子要素は item と呼ばれる。 item の type は itemtype 属性で指定する。 つまり item と type は is-a 関係である,と言える。 違う言い方をするなら, item は instance object で type は class object である,とも言える。 実際, schema.org を見ると type 同士も is-a 関係による hierarchical 構造を持っているのがわかる。 (この辺は Semantic Web における ontology 研究の成果かねぇ

item 内では「名前-値」の組合せで構成された property を設置することができる。 property 名は item の type によって使える名前が決まっていて itemprop 属性で指定する。 property 値には literal 以外に item を指定することができる(したがって property 値は構造を持つ)。 property 値についても対応する property 名によって expected type が決められているが(他所のサイトの例示等を見る限り)強い制約ではないようである。

item と property は常に has-a 関係である。

item 自身には「名前」がない。 何故かというと Microdata には property 以外に item 同士を関連付ける手段がないため,識別(identification)のための「名前」は不要なのである。 (itemref 属性および itemid 属性については後述)

大雑把な説明はここまで。 ここでいったん「用語」を整理しておこう。

用語内容
item Microdata における instance object の単位
type Microdata における class object の単位
property item の内容を示す情報。「名前-値」の組合せ(連想配列)で表現する
property 名property の名前
property 値property の(名前に対する)値。 literal または item の表現をとる
literal 特定の書式を持った文字列表現(例:日付 "2014-09-02")
is-a 関係 両オブジェクトが「継承」関係であることを示す(例: He is-a man.)
has-a 関係 両オブジェクトが「包含」関係であることを示す(例: She has-a book.)
applicationMicrodata を読み込み解釈(parse)し利用するプログラムまたはサービス。
parser も application の一種
勝手に「Microdata 用語」

こうしてみると, Microdata は(Microformats から fork した)RDFa よりも Microformats に近いと言える。

itemref は property を include する

itemref 属性で ID(id 属性で指示(indication)する)を指定すると,対象の ID で示された要素(およびその子要素)内に記述された property を構造ごと取り込み(include), item 内の property として再構成する。 これは結構危険な機能である。

まず itemref 属性による指定を忘れると,どの item にも属さない「孤独な property」が存在する可能性がある。 この状態で parser がどう反応するか試してみた。 Google Structured Data Testing Tool では単純に itemprop 属性を無視するようだ。 property 値が item の場合は,その item はどこにも属さない独立した item として認識される。 一方 The W3C Markup Validation Service ではガッツリ怒られた。

もうひとつは itemref 属性による指定が循環する可能性である。 A → B → C → A と指定すると include が循環して無限ループになる。 さすがにこれがどうなるかは試してない。 まさか今時これで stack overflow するバカな parser はないと思うけど。

Microdata は itemid を参照しない

item には itemid 属性を使って(ページの外部という意味での)グローバルな ID を指示(indication)できる。 ただしこの ID を参照する手段は Microdata 自身には存在しない。

property 値(literal 表現)として指定することは可能かもしれないが,たとえ全く同じ文字列であっても property 値と itemid 属性で示した ID が同じであると Microdata 自身は保証しない。 また異なる item に同じ ID を指示することが可能なので, itemid 属性を item の識別(identification)手段として用いることもできない。

じゃあ何のためにこの機能があるかというと, application 側でこの ID に対応する item を検索するためにある(と思われる)。

Microdata vs. RDFa

Microdata と RDFa の決定的な違いは, RDFa がネット上のあらゆるリソース(= URI)をノードとしたゆるやかな「網(web)」を構成するのに対し, Microdata はページ内の hierarchical な「構造(structure)」を構成する。 しかも Microdata を読む application は,構造化データのうち自身に必要な項目を読むだけで,そこにある意味を「理解」しているわけではない。 何故なら(それは application がヘボいのではなく)もともと Microdata は application にとって制御情報にすぎないからだ。

(たとえば,ある item の type に http://schema.org/Person を指定した際, itemprop='name' を含む property がないと Google Structured Data Testing Tool がエラーを吐く。 givenNamefamilyName では「名前」と見なしてくれないのだ。 これだけを見ても,いかに世の application が「意味」を「理解」する気がないかが分かる)

たとえば Google なんかは「世界中の情報をグラフ化する」という社是があるんだから,ページ単位でしかデータを構成できない Microdata よりネット上のあらゆるノードを横断する RDFa を支持すべきだろう,となりそうだが実際にはそうならなかった(RDFa も「読める」程度にはサポートしているが)。 理由は政治的なものも含めて色々あるだろうが,おそらく最も大きな理由は RDF が(Google 等のサービス・プロバイダにとって)uncontrollable だからではないだろうか。 それに比べれば hierarchical な構造を持つ Microdata は御しやすい。 ならば, Microdata は machine-understandable というよりは machine-controllable である,とするべきだ。

サービス・プロバイダ(の application)にすり寄っていかざるを得ない SEO(Search Engine Optimization)業者にとっても RDFa を支持する理由はない。 少なくとも OGPTwitter Cards なんかよりは Microdata のほうがよほど「冴えたやり方」と言える。

(それでも全部対応せざるを得ないのが SEO の悲しさだが。 どっかにも書いたのだが, SEO ってやればやるほど虚しくなるよね。 サービス・プロバイダの提示するジコチューな仕様に振り回されるだけ。 SEO 屋さんって自分の仕事をどう思ってるのかねぇ)

Microdata が machine-controllable であることは SEO 以外のメリットもあって(というか,こちらが本命だと思うが),それはブラウザの拡張機能やスマートフォン・タブレットなどの携帯端末で動作する application と相性がいいということだ。 今までもそうだったが,これからもっともっと Web は(application との連携により)programmable になる。 そのための要素技術として Microdata は必須の要件になっていくと思う(DOM API も含めてちゃんと Recommendation が出ればだけど)。

これまで述べたように Microdata と RDFa とでは出自も目的も構造もまるで異なる。 競合する規格ではないということだ。 まぁ個人的には,世の中がもうすこしだけ semantics に興味を持っていただければと思うわけだが,需要がないということなんだろうなぁ。

参考

RDFa については拙文RDFa 入門をどうそ。いくつか間違いがあったのでそのうち修正する。

(あとはこの hReview なんだよなぁ。どうにかしたいがどうにかなるのだろうか)