Hatena::Groupweb

eRDF

eRDF

eRDF (Embedded RDF)とは

RDFをXHTMLに埋め込む仕組みの一つ。主にrel属性とclass属性を用い、bodyまたはhead内にRDFとして抽出可能なメタデータをマークアップする。

eRDFはRDFaの様にXHTMLの要素・属性を拡張して実現する技術ではない。このため、現在のXHTML (1.0及び1.1)ですぐに利用可能である。複雑なRDFは表現できないこともあるが、microformatsのように読みやすい形でマークアップできるのが利点だろう。

eRDF構文

eRDFの構文はExpressing Dublin Core in HTML/XHTML meta and link elements (dcq-html)を基に作られている。このためprefixの宣言や、head内におけるメタデータ表現が同じである。またbody内での構文もdcg-htmlの設計思想にある程度準じている為、dcq-htmlを知っている人であれば容易に習得できるだろう。

プロファイル及び利用するスキーマの宣言

eRDFを利用するにはまずプロファイルを読み込む必要がある。プロファイルを指定することにより、そのHTMLはeRDFによるメタデータの埋め込みを行っているとアプリケーションが理解できることになる。

プロファイルはhead要素のprofile属性にて、プロファイルのURIを示せばよい。eRDFのプロファイルURIはhttp://purl.org/NET/erdf/profileである。

<head profile="http://purl.org/NET/erdf/profile">

これでeRDFを利用する用意は調ったこととなる。

次に必要なのは、利用する語彙のnamespace宣言をすること。eRDFはdcq-htmlに倣い、RDF/XMLが用いるxmlns属性ではなく、link要素において宣言を行う。

<link rel="schema.接頭辞" href="スキーマのnamespace"/>

Dublin Core, FOAFをそれぞれdc, foafというprefixで利用する場合、link要素は次の通り。

<link rel="schema.dc" href="http://purl.org/dc/elements/1.1/"/>
<link rel="schema.foaf" href="http://xmlns.com/foaf/0.1/"/>

スキーマ宣言をし、prefixを定義した語彙はprefix.property又はprefix-propertyという形でエンコードされる*1

head内のプロパティ表現

head要素では、meta要素とlink要素にて、eRDFのマークアップを行う。

手始めに「この文書の作者は山田太郎です。」というメタデータをhead要素に埋め込んでみる。

「作者」に対応するRDF語彙をDublin CoreのCreatorとし、prefixを"dc"と定義した場合、プロパティはdc-creator又はdc.creatorと表現することになる。値となる「山田太郎」がリソースではなくただの文字列(リテラル)である場合、meta要素を用いて次のように埋め込む。

<link rel="schema.dc" href="http://purl.org/dc/elements/1.1/"/>
<meta name="dc-creator" content="山田太郎"/>
<!-- name="dc.creator" としてもOK -->

生成されるトリプルは次の通り。

<> dc:creator "山田太郎" .

値がURLなどのリソースである場合は、link要素を用いる。山田太郎を表すリソースが http://example.com/about#TaroYamada であるとき、foaf:makerを用い次のようにリンクする。

<link rel="schema.foaf" href="http://xmlns.com/foaf/0.1/"/>
<link rel="foaf-maker" href="http://example.com/about#TaroYamada"/>

この例では、次のようなRDFトリプルが生成される。

<> foaf:maker <http://example.com/about#TaroYamada> .

body内でのプロパティ表現

body内のeRDFマークアップには、class属性とrel属性を用いることになる。今度はHTML文書内に山田太郎のプロフィールが書かれている例を考え、それをもとにeRDFのマークアップを試みる。

<div class="contact">
  <p>私の名前は山田太郎です。何かありましたら<a href="mailto:taro@example.com">taro@example.com</a>までお願いします。</p>
</div>

自分の名前「山田太郎」及びメールアドレス「taro@example.com」をマークアップする場合、おおむねこのようなものとなるだろう。この名前及びメールアドレスをFOAFとして出力させたい場合は、次のようなeRDFマークアップを施す。

<div class="contact" id="taro">
  <p>私の名前は<span class="foaf-name">山田太郎</span>です。何かありましたら<a href="mailto:taro@example.com" rel="foaf:mbox">taro@example.com</a>までお願いします。</p>
</div>

出力されるトリプルは、次のようなものとなる。

<#taro> foaf:name "山田太郎" ;
  foaf:mbox <mailto:taro@example.com> .
<mailto:taro@example.com> rdfs:label "taro@example.com" .

基点となる要素(div)にid属性を与えリソース化する。子孫要素はidにより与えられたURIを頼りに、RDFのトリプルを導き出す。

クラスの表現

前述したFOAFの例だが、foaf:name及びfoaf:mboxのドメインはfoaf:Agentであるため、「山田太郎」が人間であるかは不明である。人間であることを明示させたい場合は、foaf:Personというクラスを表現する必要がある。

eRDFでクラスを表す場合は、-prefix-Classと、ハイフンを先頭に付加しマークアップすればよい。この場合は-foaf-Personをdiv要素のclass属性に追記するだけである。

<div class="contact -foaf-Person" id="taro">
  <p>私の名前は<span class="foaf-name">山田太郎</span>です。何かありましたら<a href="mailto:taro@example.com" rel="foaf:mbox">taro@example.com</a>までお願いします。</p>
</div>

出力されるトリプルは次の通り。

<#taro> a foaf:Person ;
  foaf:name "山田太郎" ;
  foaf:mbox <mailto:taro@example.com> .
<mailto:taro@example.com> rdfs:label "taro@example.com" .

*1:dcq-htmlではドットのみが許されていたが、eRDFではCSSを利用する可能性を考慮し、ハイフンでのエンコードも可能となった