Metadata と RDFa と ccREL

no extension

Web ページに cc-license のメタデータを指示するために RDFa をお勉強中。 以下は覚え書きのために残しておく。

HTML5 下でメタデータを埋め込むまたは指示する仕組みとしては Microdata と RDFa が有力っぽい。

(Microformats はよく分からないけど,あれってもう死んでるんじゃないのかなぁ(とはいえ RDFa は Microformats からの fork なんだけど。まぁ Trunk が潰れて Branch のみが生き残るってのはよく聞く話だし。それも進化の多様性のあり方じゃよ,フォッフォッフォッ)。 以前も思ったけど, Microformats は何がしたいのかさっぱりわからない。 たぶん基盤(infrastructure)がないせいだと思う。 メタデータってのは語彙(vocabulary)をいかに制御するかが肝で,たとえ「知らない語彙」でも合理的に扱えるようになっていなければならない。 何故ならメタデータを解釈(parse)する「機械」は何も知らない(ところから始める)のだから。 それが Machine-Readable であるということだ)

Microdata と RDFa の最大の違いは DOM の要素として制御できるかどうかで,その点では最後発の Microdata がもっとも有利といえる。 RDF/RDFa は意味(semantics)を解釈するための独自の parser が必要で, DOM つまり JavaScript 等で制御可能な Microdata のほうが将来性が見込める。

とはいえ Microdata の JavaScript 実装は進んでないみたい。

「JavaScript APIが削除されるに至った主な理由は、実装の欠如です。具体的には、FirefoxとOpera (Presto)が一度は実装したものの、OperaがChromiumに移行したため実装例が減ってしまい、勧告の条件(二つ以上の相互運用可能な実装が存在すること)を満たせるか怪しくなったというもの。 Blinkからはすでに実装が削除されており、Firefoxでも削除を検討中、WebKitからもMicrodataのAPIに関連するコードは削除されたそうで、MicrodataのJavaScript APIは実質上「終わった」と言っても良いかもしれません(ただし、WHATWG仕様においては、「代替案がない」という理由で仕様が残されることが決定しています)。」
RDFa関連の3仕様が勧告に!その時Microdataは……? | HTML5Experts.jp より)

どうなるのかなぁ。 もったいない気がするんだけど。

というわけで,今回は RDFa で行きます。

RDFa の基礎

まず W3C のドキュメントから

で,これだとちょっと分かりにくいので以下を参照するとよい。

RDF では主語・述語・目的語の Triple を構成する。 実は主語と目的語は等価な resource で,つまり resource 同士を(述語を使って)つなぎ合わせてネットワーク(というか Web)にしていくことで意味(semantics)を形成する。 これが RDF の本質的な機能である。 だから RDF/RDFa では常に主語はなにか,述語はなにか,目的語はなにか,を意識していくとよい(という説明をちゃんとしているページを殆ど見かけないのだが,みんなどうしてるんだろう)。 ちなみに resource には URI を指定する。 またリテラルデータ(タイトルとか名前とか)は目的語にしか使えない。

ただし,自前で間違えずに RDFa の Triple を作るのは結構難しいので,以下の Validator の助けを借りることをお薦めする。

なんで2つも Validate しないといけないかというと HTML5 的には OK でも RDFa 的には NG だったり,またその逆もあったりして結構面倒なのだ。 この辺は慣れていくしかない,トホホ。

RDFa の語彙

RDFa 1,1 以降では語彙の指定を prefix 属性を使って行う。

<html prefix='dc: http://purl.org/dc/terms/
              cc: http://creativecommons.org/ns#'>

これで Dublin Core の語彙が dc: プレフィクスに, ccREL の語彙が cc: プレフィクスに割り当てられる。 ただし以下の語彙については組み込み済みなので prefix 指定なしで使うことができる。

まぁ dc: cc: og: foaf: といったメジャーどころは組み込み済みなので,自前で語彙を作らない限り, prefix のお世話になることはほぼないだろう。

cc-license のメタデータを指示する

これで準備はできたので,早速 cc-license のメタデータを指示してみる。 cc-license のメタデータを指示するには Dublin CoreccREL(Creative Commons Rights Expression Language) の語彙を使う。

(ちなみに Creative Commons のサイトでは選択したライセンスのメタデータを吐いてくれるツールがあるが,あれをそのまま貼り付けると Validator に怒られる,困ったことに)

使うプロパティは以下のとおり。

  • dc:title : 作品のタイトル
  • dc:dateCopyrighted : 公表日
  • dc:source : 元になった作品(URL) 二次的著作物の場合
  • cc:attributionName : 著作(権)者名
  • cc:attributionURL : 著作(権)者の URL
  • cc:license : ライセンス(URL)
  • cc:morePermissions : 追加許可(URL)
  • cc:useGuidelines : ガイドライン(URL)

実際には以下のように使う。

<div class='copyright' about='cc-license.shtml'>
  Written and revised by <a href='#me' rel='cc:attributionURL' property='cc:attributionName'>Yasuhiro (Spiegel) ARAKAWA</a>
  on <span property="dc:dateCopyrighted">Sunday, 03-Aug-2014 21:11:27 JST</span>,<br>
  Licensed under <&span rel='cc:license' resource='http://creativecommons.org/licenses/by/4.0/rdf'gt;<a property='cc:license' href='http://creativecommons.org/licenses/by/4.0/'><img src='/images/cc/by.s.png' alt='Attribution License' height='12'></a>
  and <a href='/cc-license.shtml#morePermissions' rel='cc:morePermissions'>more permissions</a></span>.
</div>

述語が全て property 属性で指定されている点に注意。 ライセンスを指示する a 要素の場合は rel 属性のほうが正しい気がするが(実際 RDFa Validator は OK なんだけど), HTML5 Validator のほうが NG を吐く。 理由は不明。

これを RDFa Validator にかけると Turtle フォーマットで以下の情報を吐いてくれる。

@prefix cc: <http://creativecommons.org/ns#> .
@prefix dc: <http://purl.org/dc/terms/> .

</cc-license.shtml> cc:attributionName "Yasuhiro (Spiegel) Arakawa"@ja; cc:attributionURL </cc-license.shtml#me>; cc:license <http://creativecommons.org/licenses/by/4.0/rdf>; cc:morePermissions </cc-license.shtml#morePermissions>; dc:dateCopyrighted "Sunday, 03-Aug-2014 21:16:13 JST"@ja; dc:title "クリエイティブ・コモンズ・ライセンスについて"@ja .

ま,まぁ,正しく解釈してるみたいなんでいいのかな?

RDFa の仕様はかなり parser 任せな部分があるように感じる。 属性の指定さえ間違えなければ parser 側で勝手に解釈して主語や目的語を推定してくれる。 そもそも HTML5 の仕様からしてかなり ad hoc な感じだしなぁ。 まぁいいや。 今日はここまで。

photo
セマンティック・ウェブのためのRDF/OWL入門
神崎 正英
森北出版 2005-01-07
評価

Linked Data: Webをグローバルなデータ空間にする仕組み セマンティックWeb プログラミング オントロジ技術入門―ウェブオントロジとOWL (セマンティック技術シリーズ) セマンティックWeb入門 オントロジー構築入門

by G-Tools , 2014/08/03