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対応について最近あまり語られないのは、とりあえず棚上げなのか何かよく分からないけれど、せっかくの可能性なので、思い出して検討してみたいところだ。
- AtomをRSS1.0に融合させる提案 (2004-03-29)
- AtomとGRDDLとSemantic SDO (2004-04-11)