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

4. RDF/XMLの厳密な構文(2)

URI参照

RDFでURIを参照するときには、普通次のように記述します。

例1
	<?xml version=”1.0” encoding=”Shift_JIS” ?>
	<rdf:RDF
	        xmls:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#” 
	        xmls:4dd=”http://www.4dd.co.jp/yojigen/” >
	    <rdf:Description rdf:about=”http://www.4dd.co.jp/yojigen/FourDimensionalData” >
		<4dd:creator rdf:resource=”http://www.4dd.co.jp/yojigen/TaroYojigen” />
		<4dd:homePage rdf:resource=”http://www.4dd.co.jp/” />
		<4dd:hasEmployee>40</4dd:hasEmployee>
	    </rdf:Description>
	</rdf:RDF>

この例では "http://www.4dd.co.jp/yojigen/" と何度も記述しています。これを簡単に記述するために、基底URIを設定することができます。基底URIはxml:base属性をrdf:RDF要素のプロパティ属性に記述することで設定できます。基底URIを設定したときのURIの決定方法は次のようになります。

  • rdf:about:基底URI + 値
  • rdf:ID:基底URI + # + 値
  • rdf:nodeIDまたは記述なし:匿名ノードを生成する。基底URIは関係しない。
  • rdf:resource :空プロパティによるモデル生成で使用。基底URI + 値
  • rdf:datatype:値のデータ型を指定する。基底URI + 値

たとえば、xml:base="http://www.4dd.co.jp/yojigen"と宣言していたとすると、rdf:ID="Person"という属性を持つノードのURIは、"http://www.4dd.co.jp/yojigen #Person" ということになります。また、rdf:resource="Animal" とすると、"http://www.4dd.co.jp/yojigen/Animal" を参照します。

rdf:nodeIDは、空白ノードに対してローカルIDをつけたい場合に使う属性で、rdf:about、rdf:resourceの代わりに記述します。例を示します。

例2
	<rdf:Description rdf:about=http://www.4dd.co.jp/ >
	   <4dd:creator rdf:nodeID=”a” />
	</rdf:Description>

	<rdf:Description rdf:nodeID=”a”>
	   <4dd:name>Taro,Yojigen</4dd:name>
	   <4dd:address>Kyoto</4dd:address>
	</rdf:Description>

最後に基底URIを使った例を示します。

例3
<?xml version="1.0" encoding="Shift_JIS"?>
	<rdf:RDF 
	        xmls:rdf=http://www.w3.org/1999/02/22-rdf-syntax-ns#
	        xmls:4dd=http://www.4dd.co.jp/yojigen/
	        xml:base=http://www.4dd.co.jp/yojigen/ >
	   <rdf:Description rdf:ID=”FourDimensionalData” >
	       <4dd:creator rdf:resource=”TaroYojigen” />
	       <4dd:homePage rdf:resource=”http://www.4dd.co.jp/” />
	       <4dd:hasEmployee rdf:datatype="http://www.w3.org/2001/XMLSchema#int" >40</4dd:hasEmployee>
	   </rdf:Description>
	</rdf:RDF>

上のように、FourDimensionalDataのURIは "http://www.4dd.co.jp/yojigen/#FourDimensionalData" 、TaroYojigenのURIは "http://www.4dd.co.jp/yojigen/TaroYojigen" になりますが、4dd:homePageの値やrdf:datatype属性の値のように絶対URIを記述した場合、そちらが優先されます。つまり、相対URIを各属性の値に記述したときは上で説明した決定方法でURIが決まり、値に絶対URIを記述した場合は基底URIとは関係なく絶対URIが値として採用されます。

rdf:parseType属性

rdf:parseType属性は、その要素の中身をどのように扱うかを指定する属性で、その型は次の3種類あります。

  • Literal型:要素の中身をリテラルとして扱う
  • Resource型:匿名ノードを生成し、要素の中身をその匿名ノードに対する記述として扱う
  • Collection型:要素の中身をセットとして扱う
  •  

これらについて例をひとつずつあげたいと思います。

例4
	<4dd:player parseType="Literal">
	    <4dd:Person rdf:ID="TaroYojigen "/>
	</4dd:player>
 

これは、4dd:playerの値はリテラル値としての "<4dd:Person rdf:ID="TaroYojigen "/>" であるということになります。

図1
図1

例5
	<4dd:player parseType="Resource">
	    <4dd:name>TaroYojigen </4dd:name>
	    <4dd:mailaddress>yojigen@4dd.co.jp</4dd:mailaddress>
	</4dd:player>

このResource型は次の図のように匿名ノードを生成することになります。

図2
図2

例6
	<4dd:player parseType="Collection">
	    <4dd:Person rdf:ID="TaroYojigen "/>
	    <4dd:Person rdf:ID="JiroYojigen "/>
	</4dd:player>

このときのモデルは、rdf:first、rdf:restというプロパティと、rdf:nilノードを使って表現します。

図3
図3

このグラフ中の匿名ノードはrdf:List型のノードです。rdf:nilはrdf:Listのサブクラスで各リストから要素をひとつずつ取り出していく形になります。

  • rdf:IDによる具体化

第2章で説明した文の具体化は、rdf:ID属性を利用することで簡略化することができます。

例7
	<rdf:Statement rdf:ID=”thisGame”>
	    <rdf:subject rdf:resource=”#TaroYojigen” />
	    <rdf:predicate rdf:resource=”#plays” />
	    <rdf:object rdf:resource=”#Tennis” />
	</rdf:Statement>
例8
	<rdf:Description rdf:ID=”TaroYojigen”>
	    <4dd:plays rdf:ID=”thisGame” rdf:resource=”#Tennis” />
	</rdf:Description>

例1、2は同じモデルを表しています(playsプロパティが同じURIであるとする)。例1は第2章と同じグラフを表しています。例2はrdf:ID属性をpropertyAttributeとして記述することによってトリプルを簡単に具体化しています。



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