RDFをXHTMLに埋め込む仕組みの一つ。主にrel属性とclass属性を用い、bodyまたはhead内にRDFとして抽出可能なメタデータをマークアップする。
eRDFはRDFaの様にXHTMLの要素・属性を拡張して実現する技術ではない。このため、現在のXHTML (1.0及び1.1)ですぐに利用可能である。複雑なRDFは表現できないこともあるが、microformatsのように読みやすい形でマークアップできるのが利点だろう。
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要素では、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内の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" .