JSONのデータ記法は、RDF/Turtleで主語を明記しない(空白ノードである)トリプルの書き方によく似ている。多くの人やサービスがデータをJSONの形で提供してくれれば、これをTurtleに変換してRDFとして扱うこともできるだろうし、JSONに馴染んだ人なら、案外Turtleを(そしてRDFを)抵抗なく受け入れられるのではなかろうか、などと考えたりしていた。
Turtleは、RDFのグラフを、XML構文ではなくて、主語、目的語、述語をシンプルに列挙する形で記述する。たとえば、ある学生の学籍番号をURIに仕立てて主語を名前付けし、その名前を目的語/述語で表すRDFトリプルがあるとしよう。
![[http://...studentid/10108068]--name-->'John Barleycorn'](/works/2006/misc/0221stuid.gif)
グラフのXML構文は次のようになる(http://example.org/ns/はデフォルト名前空間として宣言されているとする)。
[例1]
<rdf:Description rdf:about="http://example.org/studentid/10108068"> <name>John Barleycorn</name> </rdf:Description>
これをTurtleで記述すると、次のようになる(rdf:Descriptionは、ノードを表現するXML構文のために用意されている要素で、トリプルには反映されない)。
[例2]
<http://example.org/studentid/10108068>:name"John Barleycorn" .
最初の<>で囲まれたURIが主語、:nameが述語(プロパティ)、最後の引用符の中が目的語で、この3つを並べて最後にピリオドを置くだけだから、極めて簡単。nameの前にコロン(:)が付いているのは、Turtleでデフォルト名前空間を表す方法だ。
さてここで、studentidを、主語を表すURIではなく、IDとして機能するプロパティで記述したとしよう(厳密には、これだけでグローバルに主語を特定することは難しいが、細かいことは忘れる)。
![[]--studentid-->'10108068'; --name-->'John Barleycorn'](/works/2006/misc/0221bnode.gif)
XMLで書くと次のとおり。
[例3]
<rdf:Description> <studentid>10108068</studentid> <name>John Barleycorn</name> </rdf:Description>
この場合、主語はURI参照を持たないので空白ノードとなる。こうした空白ノード主語を持つトリプルは、Turtleでは[]で囲んで示す。また、同じ主語を持つトリプルは、述語と目的語を ; で結んで列挙してよい。すると、例3のRDF/XMLは、次のTurtleで表現できる。
[例4]
[:studentid "10108068"; :name "John Barleycorn"].
一方、例3のXMLをJSONに翻訳するとき、RDFグラフには現れないrdf:Descriptionは省いてしまえば、次のように表すことができるだろう。
[例5]
{
"studentid": "10108068",
"name": "John Barleycorn"
}
[] と {}、; と , を入れ替え、プロパティ名に付随する : の位置を逆にすれば、TurtleとJSONはまさに瓜二つではないか。JSONのデータからRDF/Turtleを得るというアイデアは、何とかなるかも知れない。JSONを知っていればRDF/Turtleに取り組みやすいというのも、それほど的外れではないように思える。
もちろん、両者にはそれなりに違いもあるから、変換にはいくつかの仕掛けが必要になる。少なくとも名前空間宣言の処理がないと始まらないし、型付きノード要素や配列の扱いなど、いくつかの慣用的なデータ記述をマップする方法も考えなくてはならない。が、これらを細かく検討すると話がどんどん長くなるので、ひとまずここで切り上げて、続きは稿を改めることにしよう。
まず出発点としては、JSONとRDF/Turtleはかなり親和性が高そうだ、ということだ。
- JSONではじめるRDF/Turtle(2) - 名前空間 (2006-02-21)
- JSONではじめるRDF/Turtle(3) - 型付ノード (2006-02-21)
- JSONではじめるRDF/Turtle(4) - プロパティの反復と主語 (2006-03-05)
- JSONではじめるRDF/Turtle(5) - 相互変換のデモ (2006-03-05)
- JSONがRFCに (2006-03-30)
- application/jsonがRFC4627に (2006-07-29)
- DOASとTurtle/RDF (2007-12-27)
- もうひとつのRDF構文:Turtle (2004-03-27)


