※ 本記事はnoteに投稿した記事の転載である。
※ https://note.com/super_crow2005/n/n95091b72e0eb
構文というと、英語の第3文型がSVOだとか、構文規則の事である。RDFというのはSVOだったから、それをXML風の鍵括弧<>を使ってどのように書くのか、というのと、その主語や述語、目的語をどのように指定するのか、ということである。RDFはグラフで表せるのであったから、主語・目的語はノード要素で、述語はプロパティ要素(エッジ要素とは言わないようだ)という。
先々、オントロジー言語OWLを使うことを前提に言うなら、
<主語のURI rdf:about="URIを指定">
<述語のURI rdf:resource=目的語("URIを指定")>
</主語のURI>
という形で知っておくのよいのではないだろうか。ProtegeのRDF/XML形式での出力で、個物(individual)ではそのように書かれる。
RDFでは、要素の書き始めのタグとしてはrdf:Descriptionを使う場合、
<rdf:Description rdf:about="主語(URIを指定)">
<rdf:type(主語の型を指定する、という述語) rdf:resource="型(URIを指定)"/>
<述語のURI rdf:resource=目的語("URIを指定")/>
</主語のURI>
となる。一例を挙げれば、
<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>
となる。これは、"http://www.test.org/20250615/test01#Jyoshu" という主語は、"http://www.semanticweb.org/20250615/food#person" というrdf:typeであり、"http://www.semanticweb.org/20250615/food#bf20250615" をfood:eatした、といったことである。
"http://www.test.org/20250615/test01#Jyoshu" は趙州さんという人の名前を表すURIである。
"http://www.semanticweb.org/20250615/food#person" はクラスである。まあオブジェクト指向でいうところのクラスと考えてもよい。rdf:typeはインスタンスに対してクラスを示すのであって、いうなればクラスというデータ型(type)ということだろう。
"http://www.semanticweb.org/20250615/food#bf20250615" が目的語の食事のインスタンスのURIである。食事のインスタンスとは、具体的に食べたものが記載されていることで、「2025/6/15の朝食」のことをいっていると受けとってほしい。
つまり、次の二つの文であるのだ。SVOの記法で、
Jyoshu rdf:type food:person .
Jyoshu food:eat bf20250615.
URIのアドレス部分は長いので名前空間を使って短くする。rdf:typeのrdf:やfood:eatのfood:は名前空間を指定する接頭辞である。それぞれURIのアドレス部分を略したものであり、つまりrdf:typeやfood:eatがURIである。
rdf:は"http://www.w3.org/1999/02/22-rdf-syntax-ns#" 、foodは"http://www.semanticweb.org/20250615/food#" である。
上のように主語を書くのであるが、目的語もノード要素なので同様である。というか、目的語というのは文としてみた時に、Oの位置になっているだけなのであって、その言葉で表されるものとしては、主語も目的語もない。
<rdf:Description rdf:about="http://www.semanticweb.org/20250615/food#bf20250615">
<rdf:type rdf:resource="http://www.semanticweb.org/20250615/food#breakfast"/>
</rdf:Description>
bf20250615 rdf:type breakfast .
RDFファイルでは、ノード要素であることを表すためにrdf:Descriptionを利用しているのだが、これはRDF/XMLのフォーマットとしてノードを表現するための記号として用意されたようだ。セマンティックを考慮したRDFやOWLとしては、それはクラスか個体(インディビデュアル)を表す。また述語のプロパティ要素の定義も同様に書く。要は、グラフに登場する要素を、XML書式で書くとき、そのタグはrdf:Descriptionとする、ということである。このタグは要素の種類によって、個物を表す場合にはowl:NamedIndividual、クラスを表す場合にはowl:Class、またはrdfs:Class、プロパティの場合には、owl:Propertyとできる。
<owl:NamedIndividual rdf:about="http://www.semanticweb.org/20250615/food#bf20250615">
<rdf:type rdf:resource="http://www.semanticweb.org/20250615/food#breakfast"/>
</owl:NamedIndividual>
<owl:ObjectProperty rdf:about="http://www.semanticweb.org/20250615/food#eat"/>
<owl:Class rdf:about="http://www.semanticweb.org/20250615/food#breakfast">
<rdfs:subClassOf rdf:resource="http://www.semanticweb.org/20250615/food#meal"/>
</owl:Class>
インディビデュアルの場合には定義したクラス名を直接にタグとして書いてもよい。
<food:person rdf:about="http://www.test.org/20250615/test01#Jyoshu">
<food:eat rdf:resource="http://www.semanticweb.org/20250615/food#bf20250615"/>
</food:person>