※ 本記事はノート投稿の転載です。
※ https://note.com/super_crow2005/n/n390095318342?magazine_key=m1df32e6ef6e1
RDFにはRDFトリプルというセマンティック・ウェブのグラフ表現のモデルを基礎的な関係と捉えており、また推論できるようなセマンティックスを備えることを目指しているので、その意味でモデルがあることが念頭におかれている。そうはいっても、RDFの範囲で見返してみるなら、ノード要素をrdf:Descriptionのタグで書き始めてrdf:aboutでURIを示しているだけだった。実のところ関係を表すプロパティ要素もrdf:Descriptionとrdf:aboutで記述する。これは、XMLとは異なり、リソースresourceを定義できるということだ。だが、これだけでは、ノード要素とプロパティ要素の区別がついていないことになるので、矢印のところ(述語)がノードになってしまっていることになりかねない。
そうはいっても、これまでにも、例えばrdf:typeを使って、どのクラスのインディビデュアル(インスタンス)かを書けていたではないか、という疑問がである。その通りで、rdf:typeに指定するURIによって区別を付けるのである。そのようなクラスやセマンティック・ウェブの表現を実現する為のスキーマが定義されている。それが、RDF スキーマ(RDFS)である。RDFスキーマの語彙を利用することでクラスやプロパティを、「それ」として記述できる。インディビデュアルについては、どうも怪しげだが、OWLになればNamedIndividualで明確になる。
RDFスキーマによる語彙定義の方法はRDF Vocabulary Description Language 1.0: RDF Schemaで規定される。名前空間URI はhttp://www.w3.org/2000/01/rdfschema#である。なおRDFそのものの語彙はRDF文法、構文規則で定義されており、名前空間URI はhttps://www.w3.org/1999/02/22-rdf-syntax-ns#である。これはURIというよりインターネットアドレスそのものでもあって、クリックしてみるとよい。
また、RDFの表現、オントロジー表現という言葉をよく用いるが、description(記述) という意味である。ただ、例えば論理式のような場合、representationやexpression(式定義などの表現)を意味している場合もある。よって情報処理で、オントロジーとかセマンティック・ウェブといったとき、あくまで物事をことばで書けること、それでデータとできることを狙っているとはいえるだろう。しかし、哲学のオントロジーのように物事の存在を普遍性をもって通用するように決めることを無視するものでもない。クワインのオントロジカルコミットメントでは論理式の表現を挙げており、情報処理でもオントロジーといった、単なるデータベースやプログラミングの技と思わない方がよい。
rdf:Descriptionのタグに属性rdf:aboutでURIを指定し、rdf:typeで型(type)を指定する、つまり型付けする。いままで個物(インディビデュアル)を記述するRDFの例を示してきた。
たとえば、
<rdf:Description rdf:about="http://www.test.org/20250615/test01#Jyoshu">
<rdf:type rdf:resource="http://www.semanticweb.org/20250615/food#person"/>
<food:eat rdf:resource="http://www.semanticweb.org/20250615/food#bf20250615"/>
</rdf:Description>
とtest01:Jyoshu(趙州さん)を記述した。food:personというクラスのインディビデュアルである。もちろんrdf:Descriptionをowl:NamedIndividualとした方が、インディビデュアルであることが明らかで好ましい。
クラスの定義も同様である。このときrdf:typeのrdf:resourceの指定を"http://www.w3.org/2000/01/rdf-schema#Class" とするのである。
<rdf:Description rdf:about="http://www.semanticweb.org/20250615/food#person">
<rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
</rdf:Description>
次のように書いてもよい。タグを変える。rdf:typeの指定は不要である。
'''rdf:rdfによる個物の記述
また、OWLで書いてもよい。
```owl:owlによる個物の記述
<owl:Class rdf:about="http://www.semanticweb.org/20250615/food#person">
このようにクラスを定義でき、これによってRDFのノード要素は全てクラスで定義できるのである。
なお、後に述べるが、プロパティも同様にrdf:propertyにより定義され、rdf:propertyはrdfs:Classのインスタンス、つまりrdfs:Class型である。
これによって、RDFとして、全ての要素はユーザー定義でき、その形式的な意味は明らかとなる。さらに、rdfs:Classもrdf:Propertyも、リテラルのrdfs:Literal, rdf:XMLLiteral、データ型rdfs:Datatypeもrdfs:resourceを継承している。つまりRDFファイルの中身はすべてrdf:resourceのインディビデュアル(インスタンス、個物)として存在するものとなるのである。
なおRDFで定義できるクラスやプロパティ、データタイプは、あくまでRDFスキーマの語彙を利用して定義したもの、つまりスキーマの語彙をクラスとして、個物として定義したものである。クラスやプロパティ、データタイプはrdf:resourceのサブクラスであったので、それら個物はrdf:resourceの個物ということなのである。RDFスキーマの語彙のRDFのグラフを図に示す。

出典:神崎、セマンティック・ウェブのためのRDF/OWL入門、森北出版、p.71
一応、継承(サブクラス)の例を示しておく。趙州さんは朝に坐禅するのだが、朝の活動の一種として坐禅があるとしたのであった。まあ、朝食をとる、新聞を読む、身支度する、といった類である。
<owl:Class rdf:about="http://www.semanticweb.org/20250615/food#activity">
<owl:Class rdf:about="http://www.semanticweb.org/20250615/food#zazen">
<rdfs:subClassOf rdf:resource="http://www.semanticweb.org/20250615/food#activity"/>
</owl:Class>
勿論、rdf:Descriptionとrdf:typeでクラスとして、rdfs:subClassOfを加えてもよい。オントロジーの関係表現では、
food:zazen rdf:type owl:Class .
food:zazen rdfs:subClassOf food:activity .
ということである。rdfs:subClassOfはis_aという関係である。rdf:typeはここではis_typed_asとでもするのであろうか。SVOでいう、Oが定義されたクラス(たとえばfood:activityとかfood:zazen)なら、主語は個物であってrdf:typeはis_aとかis_instanceとして扱われるのである。型(考え方によっては変数)みたいなものである。owl:Class、rdf:Property、rdfs:Datatypeの場合は、is_type_ofとするのがよいかもしれない。