「RDF意味論」の和訳を国立情報学研究所の私のホームページにアップしましたが,日本語で読んでもやっぱり難しいという方もきっといらっしゃると思い,和訳した「RDF意味論」を読むための連載記事をここに書きました.コメント,質問などを歓迎いたします.

2008年12月27日土曜日

「RDF意味論」を読むために 第7章


括弧情報提供とあるように,第7章は規範ではありません.しかし実用上最も重要な章であり,これまでの記述でわからないところがあったとしても,あまり気にせずに,実装上はこの章の伴意ルールのみを真剣に取り扱えばOKです.

条件(トリプル)の一つ一つをクロージャという方もいらっしゃいますが,ここでの書き方は,左側のトリプルがグラフ上で見つかったら,右側のトリプルをグラフに追加してよいという書き方です.実際に追加するかわりに,クエリに対して推論エンジンにこれらのルールを組み込んでもいいですね.前にも書いたように,(書いてないか?),DL でやることはあるインスタンスがあるクラスに所属するかという質問と,あるクラスはあるクラスのサブクラスかという質問に答えることだけですから.

2+2+2+13+9=28ですから,全部で28個のルールがあります.OWLになるとこれに加えて一体いくつの伴意ルールがあるのか完全にはわかっていません.RDF(S)では一応これで完全としてもよさそうに思えます.ドイツの ter Horst という研究者は,意味論ではプロパティはブランクノードでもよいのに,統語論では駄目とされているからと,プロパティにブランクノードを許した場合の伴意ルールについて論文を書いていますが,私としてはそんなの関係ないと思います.SWCLOS ではトリプルのプレディケイトは CLOS のスロット名になりますから,ブランクノードではありえないからです.

全部の伴意ルールについて詳しく解説することはあまりにも量が多くなりますので,重要なものや微妙なもののみにとどめさせていただきます.

se1, se2 はあまり使いどころはないですね.余談になりますが,Jeremy Carroll は一見おかまみたいな人で Jena の開発者ですが,今はアメリカにわたって Top Quadrant に参加しています.

rdf1 は rdfs4a, rdfs4b と並んで非常に有用です.前にも書いたように,初めて現れたURLを即座にrdfs:Resource のインスタンスとか rdf:Property のインスタンスとして定義することができます.

rdfs2 は定義域の伴意ルール,rdfs3 は値域の伴意ルールです.rdfs5 は rdfs:subPropertyOf に関する推移律,rdfs11 は rdfs:subClassOf に関する推移律です.rdfs6 は プロパティの,rdfs10 はクラスの自明な性質ですね.

rdfs8 は自明でかつ非常に重要な性質です.すべてのクラスは rdfs:Resource のサブクラスとなります.

rdfs7 がサブプロパティに関する重要なルールです.つまりスーパプロパティで言えた事実は,すべてサブプロパティでも真となる.ですが,あまりよい例を思いつきません.

rdfs9 は包摂律と呼ばれる非常に重要な性質です.たとえば,「イヌ」が「哺乳類」のサブクラスで buddy が「イヌ」のインスタンスなら,だれかさんの飼っているイヌ buddy は「哺乳類」のインスタンスです.これ,クラスの外延的概念そのものと言っていいですよね.この包摂律とさきほどの推移律を組み合わせると,すべてのインスタンスは rdfs:Resource のインスタンスということが導かれます.

包摂律が分かれば,ext1 と ext2 はまあ自明ですよね.あまり有用ではありませんが.

ext3 と ext4 はサブプロパティに関する継承(インヘリタンス)に相当するものですね.たとえば,vin:hasColor は vin:hasWineDescriptor のサブプロパティで,vin:hasWineDescriptor の定義域は vin:Wine だとしたら,トリプルとして

Strainge vin:hasColor vin:Red .

などとあったら,Strainge は vin:Wine のインスタンスだと分かります.
どうもオブジェクト指向のインヘリタンスに相当するものは RDF ではこの二つしかないようです.ではどうするかというとOWL では rdfs:subClassOf の owl:Restriction ということで継承したい性質を記述するのですね.これはまた別の議論になりますが.

ext5 - ext9 は今まで rdfs:Resource がトップクラスとしてきて,これより上位のクラスはないと思っていたのにいきなりその上位クラスを持ってきて,ちょっと唐突です.rdf:type や rdfs:subClassOf のスーパプロパティを導入しなければ,まあここの記述は関係ないので気にしないとしてもOKですが,逆にすでに rdf:type や rdfs:subClassOf の性質を持つ処理系があれば,その処理系が処理できるユニバースのサブユニバースとして RDF(S) ユニバースを設定できることになりますね.

rdfD2 は "+0001"^^xsd:integer をサブジェクトに持つトリプルがあったら,"1"^^xsd:integer のトリプルを追加してもよいという意味ですね.(逆もOK).

rdfD3 は "+0001"^^xsd:decimal と "1"^^xsd:integer とか,"1"^^xsd:nonNegativeInteger みたいな話ですね.

以上で7章の説明を終えますが,最後に RDF(S) エンティティの関係図を示しておきます.


0 コメント:

読者

自己紹介