COMMON LISPはなぜセマンティックウェブ向きなのか? その2

ユニバース、ユニバーサルクラス、ユニバーサルメタクラス

ここでRDF意味論からの引用をします。

ICEXT(y) is defined to be { x : < x,y > is in IEXT(I(rdf:type)) }

IC is defined to be ICEXT(I(rdfs:Class))

LV is defined to be ICEXT(I(rdfs:Literal))

ICEXT(I(rdfs:Resource)) = IR

IR は論議の世界(universe of discourse)と呼ばれるもので、今考えようとしている世界のすべてを含むものです。

CEXT は Class Extension のことで ICEXT(I(rdfs:Resource)) = IR は世の中のすべての事物は rdfs:Resouce のインスタンス・実現である、と言っています。この rdfs:Resource が世の中のすべての事物のクラス、すなわちユニバーサルクラスです。

同様に ICEXT(I(rdfs:Class))rdfs:Class のインスタンス・実現ですが、その世界は IC だと言っています。IC はすべてのクラスを含む世界ですから、rdfs:Class をユニバーサルメタクラスと呼ぶことにしましょう。IR, IC, ICEXT, IEXT などの I は解釈(Interpretation)の意味で、I(rdfs:Resource)rdfs:Resource を解釈したものという意味です。

上記の1行目は、y の Class Extension とは三つ組み x rdf:type y . の x のことだよと言っていますから、  x rdf:type rdfs:Class . の x は IC に所属し、x rdf:type rdfs:Resource の x はIR に所属します。

さてここで微妙な問題です。ユニバーサルクラスもクラス、ユニバーサルメタクラスもクラスですから、それらも IC に所属するとするのかしないのかです。実際にRDF意味論では、

rdfs:Resource rdf:type rdfs:Class .
rdfs:Class rdf:type rdfs:Class .

としています。

さあ、これがDL一派には大問題で、いろいろといちゃもんをつけて攻撃してくるのです。まあ、rdfs:Class は rdfs:Class の実現です、なんてことは一般の人々には理解不能なことはわかりますけどね。

ところが Common Lisp ではこれと全く同一のことを実現しているのです。以下はCommon Liso Object System (CLOS) の実施例です。

(typep (find-class 'standard-object) 'standard-class) => t
(typep (find-class 'standard-class) 'standard-class)   => t

すなわち、RDFの rdfs:Resource と rdfs:Class の関係は、CLOSの standard-object と standard-class の関係と全く同一なのです。CLOSの standard-object はすべてのCLOSオブジェクトのクラスであり、standard-class はすべてのCLOSクラスのクラス(すなわちメタクラス)なのです。

ですからCLOSの実装をもってすれば、RDFの実装も不可能ではない。そればかりか、ここではこれ以上詳しくは述べませんが、CLOSのメタオブジェクト・プロトコルを利用すれば、CLOSの土俵の上でRDFやOWLが実現できてしまうのです。