ちょっとしたメモ

AtomとRDF

Atomは、どうやらRDF/XML構文は採用しないものの、なんとかRDFとの相互変換ができるようにしようという議論が、昨年の8月頃にわりと盛り上がっていた。最近この話題は下火になった感じだが、ぼちぼちAtomの実装が出てきているので、少し思い出しておこう。

RDFのXML構文というのはバリエーションがありすぎるとか、コードが25%増えるとかいって一部で評判悪い。たとえば、次のシンプルなAtomの断片を見てみる。

(例)

<entry>
 <author>
  <name>Masahide Kanzaki</name>
 </author>
</entry>

XMLとしては問題ないし、人間が見ても意味はおおむね誰にでも通じる。ところが、RDFではこれは成り立たない。entryのプロパティがauthorというのはOKだが、つぎのnameがノードになってしまって、Masahide Kanzakiという文字列の行き場が無くなる。もちろん、この場合nameはプロパティとして扱って欲しいわけだ。

RDFとしてのモデルをきちんと示すには、ひとつノードを追加する必要がある。

(例)

<entry>
 <author>
  <foaf:Person>
   <name>Masahide Kanzaki</name>
  </foaf:Person>
 </author>
</entry>

これでauthor, nameはそれぞれプロパティとして扱われ、RDFアプリケーションはハッピーだ。しかし、この一段階加わるところが、RDFishとかpejorativeとか言われちゃうんだな。わざわざ書かなくても分かるでしょと。

RDFのXML構文のバリエーションが多いのは、実はこういうのを回避するためでもある。アンチRDF/XMLの人々も、RDFでメタデータを表現すること自体の意義は認めていることが多いので、RDF/XMLの省略構文を使って、元のAtomに近い形で記述する方法は検討されている。

(例)

<entry>
 <author rdf:parseType="Resource">
  <name>Masahide Kanzaki</name>
 </author>
</entry>

rdf:parseTypeを加えてやることで、authorはプロパティであると同時にノードとも解釈され、次のnameがめでたくプロパティとして扱われというわけ。このrdf:parseTypeも邪魔くさいという時には、古典的なDTDで属性リスト宣言をしておくという方法もある。

<!ATTLIST author rdf:parseType CDATA #FIXED "Resource">

Atomのいくつかの要素に対してこの宣言を記述して、DTDとして参照してやると、最初の例がそのままRDFとして処理できるようになる。たとえば次の例を見てみよう。これは、Atom 0.3のシンプルなフィードに、DOCTYPE宣言とRDFの名前空間宣言を加えただけのものだ(feed要素のversion属性は、エラーを起こすので省いている)。

RDF Validatorで検証してみると、rel, hrefなどの属性が名前空間修飾されていないという警告は出るものの、きちんとグラフが描かれるはず。

ほかにXSLTを使う方法などもあるが、コストが大きいのであまり好まれないみたい。こうしたAtomのRDF対応について最近あまり語られないのは、とりあえず棚上げなのか何かよく分からないけれど、せっかくの可能性なので、思い出して検討してみたいところだ。

関連メモ: