ちょっとしたメモ

HTML5+Microdataへの全面移行

この春頃からMicrodataを試してみたりHTML5にかかわる機会が増えてきたので、いずれ実施しようと考えていたサイト全ページの書き換えを敢行しました。スタイルシートはごく一部を除いてほとんど従来のまま。ページ自身のメタデータほかの構造化データは、Schema.org語彙を中心にして表現しています。

Microdataの記述

今回使ったMicrodataの一部を紹介しておきます。Microdataは、文書内に記述されたものごとの特徴を表す名前-値の対(プロパティ)のグループをアイテムと呼び、基本単位として扱います。

アイテムと型
Microdataの場合、まず最初にアイテムの範囲(スコープ)をitemscope属性で示します。文書のメタデータを表現したいので、html要素にこの属性を加えて全体を一つのアイテムとします(itemscope真偽値属性で属性名のみを記述しますが、XHTML構文の場合は整形式とするためにitemscope=""とします)。このときアイテムが型(RDFでいえばクラス)を持つなら、同じ要素にitemtype属性も加えます。ここではSchema.orgのWebPageを用います。
アイテムの識別子
またMicrodata仕様では、語彙がサポートする場合、アイテムはグローバル識別子をitemid属性に持つことができるとしています。Schema.orgサイトにはitemidを用いた例も掲載されていますから、利用できると考えてよいでしょう。itemidの値は絶対URIに解決することになっているので、itemid=""でウェブページ自身を表すことができます。

(例)

<html itemscope=""
      itemtype="http://schema.org/WebPage"
      itemid=""
      xmlns="http://www.w3.org/1999/xhtml">
プロパティ
アイテムの持つプロパティは子孫要素のitemprop属性で示します(子孫ではない要素をitemrefで参照することもできますが、ややこしいので割愛します)。型付きアイテムの場合は、その語彙が定めるプロパティを(通常単語の形で)用いるか、他の語彙のプロパティを完全URIで記述します。schema.orgのWebPageにはnamecreatorが定義されているので、文書タイトルと作者の記述にはこれらが利用できます。
プロパティの値
一般には、itempropを持つ要素のテキスト内容がプロパティ値となります。alinkなどhref属性を持つ要素では、その値を絶対URIに解決したものが値となります(同じ要素にitemscope属性があると、この要素を起点にした子アイテムが値=目的語となります)。nameプロパティのExpected Type(RDFでいえば値域)はTextですから、普通にtitle要素に記述します。creatorPerson型のアイテムが期待されるので、ここではlink要素のhrefを用い、addressなど別の場所に記述するPerson型アイテムのitemidと同一のURIを記述しておきます。

(例)

<head>
 <title itemprop="name">ちょっとしたメモ</title>
 <link  itemprop="creator" href="http://purl.org/net/who/kanzaki#masahide" />
 ...
</head>

アイテム型WebPageを利用する場合、Schema.orgの例がitemtypebody要素に設定しているところが気になるかも知れませんが、Microdataのitemscopeitemtypehtml要素も含めどの要素にも記述できます(これはたとえばW3CのVocabメーリングリストの記事using <html> tagでも取り上げられています)。こうすることでtitle要素をはじめとするhead要素内の情報をそのままメタデータとし、さらに本文(body要素)のマーク付の情報も同じアイテムに含めることができます。

W3CのMicrodata to RDFの手順で、上の記述から次のRDFが得られます。

(例)

@prefix schema: <http://schema.org/> .
<> a schema:WebPage;
   schema:name "ちょっとしたメモ";
   schema:creator (<http://purl.org/net/who/kanzaki#masahide>).