Webアプリ開発エンジニアのための技術情報サイト「テックスコア」

2. 基本構成

RDF Schema では基本的に、クラス、インスタンス、プロパティを定義します。クラスというのは、リソース( RDFMS 参照。RDF で記述されるものすべてを指す)を分類するためのカテゴリのことで、インスタンスはその具体化された実体です。オブジェクト指向におけるクラスとインスタンスの概念と同じです。たとえば、「人間」クラスがあるとすると、そのインスタンスは「山田太郎」「Bob」「ナターシャ」などです。サブクラスは親クラスの部分集合であり、親クラスの特徴を引き継ぎます。たとえば「人間」クラスのサブクラスとして、「日本人」「アメリカ人」「ロシア人」などを考えることができます。

RDF Schema で定義したものは、 URI で参照され、メタデータを記述するために使われます。仕様では、基本クラスおよび基本プロパティが用意されており、すべてのクラスおよびプロパティはそれらを元に定義します。

基本クラスと基本プロパティ

まず、基本的なクラスには次のようなものがあります(以下、 rdf を RDF Model & Syntax の名前空間、 rdfs をRDF Schemaの名前空間とします)。

基本クラス 役割
rdfs:Resource 基本的なリソースの元となるクラス
rdf:Property プロパティを表すリソースの元となるクラス
rdfs:Class クラスを表すリソースの元となるクラス
rdfs:Literal 文字列などを表す元となるクラス

基本的なプロパティには次のようなものがあります(一部分を抜粋しています)。

基本プロパティ 役割
rdf:type リソースがどのクラスのインスタンスであるかを表します。
rdfs:subClassOf あるクラスのサブクラスを定義するときに使います。サブクラスのインスタンスは親クラスのインスタンスでもあります。
rdfs:subPropertyOf あるプロパティのサブプロパティを定義するときに使います。サブプロパティの関係は、親プロパティに置き換えても成り立ちます。
rdfs:domain あるプロパティの主語にこのクラスを適用できるかの範囲を定義するときに使います。複数定義可能で、その場合すべてを満たす必要があります。
rdfs:range あるプロパティの値にどのクラスを適用できるかの範囲を定義するときに使います。複数定義可能で、その場合すべてを満たす必要があります。

これらのクラスやプロパティを使った定義の例を以降の節で示します。


クラスの定義

まずクラスの定義の例を説明します。はじめに Sports クラスを定義します。クラスはすべて rdfs:Class クラスのインスタンスとして定義します。また、クラスを定義する際はどのクラスのサブクラスであるかを指定します。親クラスとして特に指定したいものがない場合は Resource クラスのサブクラスとします。次にこの Sports クラスのサブクラスとして Indoor クラスと Outdoor クラスを定義します。これらの関係モデルは次の図のようになります。

RDF Schema

これはRDFのグラフと同じ記述方法となっています。したがって、この定義する関係をXMLで記述すると以下のようになります(以下、名前空間宣言は省略して主要部分のみ記述します)。

例1
<rdf:Description rdf:ID="Sports">
   <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
   <rdfs:subClassOf rdf:resource="http://www.w3.org/2000/01/rdf-schema#Resource"/>
</rdf:Description>

<rdf:Description rdf:ID="Indoor">
   <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
   <rdfs:subClassOf rdf:resource="#Sports"/>
</rdf:Description>

<rdf:Description rdf:ID="Outdoor">
   <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
   <rdfs:subClassOf rdf:resource="#Sports"/>
</rdf:Description>

プロパティの定義

次にプロパティを定義します。プロパティはすべて rdfs:Property クラスのインスタンスとして定義します。ここでは、スポーツの選手 (player) を定義します。先ほどの例で定義した Sports クラスが、 "http://tech.4dd.co.jp/yojigen#" (名前空間を 4dd: とする)で定義されているとし、さらに人を表す Person クラスも同じ場所で定義されているとします。

例2
<rdf:Description rdf:about="http://tech.4dd.co.jp/yojigen#player">
   <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"/>
   <rdfs:domain rdf:resource="http://tech.4dd.co.jp/yojigen #Sports"/>
   <rdfs:range rdf:resource="http://tech.4dd.co.jp/yojigen#Person"/>
</rdf:Description>

もし別のプロパティの子であるプロパティを定義する場合は、
<rdfs:subPropertyOf rdf:resource="親プロパティのURI"/>
という記述を行います。

クラス、プロパティの構文

前節で定義したプロパティを使って、簡単な例を示します。ここで、v: を vCard 、 4dd: を "http://tech.4dd.co.jp/yojigen#" の名前空間とし、4ddで Person クラス、 Sports クラス、 Sports クラスのインスタンスである Tennis クラス、 player プロパティが定義されているとします。

例3
<rdf:Description rdf:about="http://tech.4dd.co.jp/yojigen#Tennis"/>
   <4dd:player>
      <rdf:Description>
         <rdf:type rdf:resource="http://tech.4dd.co.jp/yojigen#Person"/>
         <v:name>四次元太郎</v:name>
      </rdf:Description>
   </4dd:player>
</rdf:Description>

この定義を関係モデルで表現すると、次のようになります。

RDF Schema

灰色の部分が例3で定義した部分です。この部分が示す関係は、そのまま表現すると「 Tennis は Person である四次元太郎を、 player として持っている」となります。これは「四次元太郎はテニスの選手である」という内容を記述しています。(* グラフ中の空白部分は、 Person クラスの匿名インスタンスです。このインスタンスは v:name プロパティとして「四次元太郎」という値を持っています。)

(*) RDFの仕様では、属性値として名前空間を使った rdfs:Resource というような表記ができません。そのため今回は、属性値の部分はすべてURIを最初から書きました。しかし、名前空間URIを実体として定義しておけば、簡単に書くことができます。たとえば、DTDのエンティティ表現を使って、

<!DOCTYPE rdf:RDF [
   <!ENTITY rdfs 'http://www.w3.org/2000/01/rdf-schema#'>
]>

と宣言しておけば、「 &rdfs;Class 」で rdfs:Class クラスのURIを参照できます。このような宣言を使用すると、ファイルサイズや作業時間を節約することができます。特に、大きなRDF文書では有効です。



前のページへ TECHSCOREのTOPページへ 次のページへ
techscore(トップページへ)
TECHSCORE書店
TECHSCOREトップページJavaSQLXMLリッチクライアントモデリングセマンティックWebその他技術Tuigwaa