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

2. RDFの簡単なXML構文

RDF は一般的に XML により表現されます。 XML によって RDF を表現するための構文を RDF/XML といいます。この章では RDF/XML について簡単に説明します。

RDFのデータモデル

第1章でも出てきましたが、 RDF のデータモデルは基本的に次の3つの要素から構成されます。

モデル 説明
リソース RDF のなかで記述されるものはすべてリソースと呼ばれ、必ず URI で指定されます。
プロパティ リソースを記述するために用いる関係や特徴などのことをプロパティと呼びます。
文 (Statement) リソースとプロパティ+値の組み合わせを記述したものを RDF の文(ステートメント)またはトリプルと呼びます。これらの3つの要素は、それぞれ主語、述語、目的語と呼ばれます。

グラフ表現

このデータモデルを XML で記述するための簡単な例として、第1章でも使用した「"http://tech.4dd.co.jp"の作者は四次元太郎です」という関係を記述します。 RDF ではこのような関係をラベル付き有向グラフで表現します。

グラフ表現図

リソースを楕円、リテラルを長方形として、プロパティを矢印(アーク)、矢印の始点が主語、終点が値を表しています。また主語と目的語をノードと言います。目的語がリソースの場合、そのリソースを主語とした文を続けることができます。

XMLを使った文の構造

次に上記の関係を XML の構造で記述します。

例1
<rdf:Description rdf:about="http://tech.4dd.co.jp">
   <作者>四次元太郎</作者>
</rdf:Description>

このように、 Description要素が「文」を表し、 about属性が「主語」となるリソースの URI を表します。 Description要素の内容が「述語」の部分であるプロパティ(「作者」要素)と、「目的語」となる値(四次元太郎)を表しています。
また上の例では省略していますが、実際にはプロパティの部分に URI で参照できるリソースしか記述できません。詳細な例を以下に示します。ここで rdf は RDF Model & Syntax の名前空間とし、 dc は Dublin Core という RDF Schema によって定義された RDF言語の名前空間を表すものとします。

例2
<?xml version="1.0" encoding="Shift_JIS"?>
<rdf:RDF
   xmls:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmls:dc="http://purl.org/dc/elements/1.1/"
   xml:lang="ja">
   <rdf:Description rdf:about="http://tech.4dd.co.jp">
      <dc:creator>四次元太郎</dc:creator>
   </rdf:Description>
</rdf:RDF>

まず XML宣言 を行い、次に ルート要素RDF を定義します。 RDF要素 の中には名前空間宣言や xml:lang属性 などを含めることができます。

トリプルを組み合わせる、つまり「目的語」の部分をリテラル値ではなくリソースとし、他の文の「主語」とすることによって関係を構造化することが可能です。例えば次のラベルのような関係を記述します。ここで接頭辞vはvCardの名前空間を表すものとします。

XMLを使った文の構造図

例3
<?xml version="1.0" encoding="Shift_JIS"?>
<rdf:RDF
   xmls:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmls:dc="http://purl.org/dc/elements/1.1/"
   xml:lang="ja">
   <rdf:Description rdf:about="http://tech.4dd.co.jp">
      <dc:creator rdf:resource="urn:4dd:000"/>
   </rdf:Description>
   <rdf:Description rdf:about="urn:4dd:000">
      <v:name>四次元太郎</v:name>
      <v:mailAddress>yojigen@4dd.co.jp</v:mailAddress>
   </rdf:Description>
</rdf:RDF>

と書くことで、「"http://tech.4dd.co.jp"の作者は"urn:4dd:000"という URI で表される人物で、その人物の名前は四次元太郎、メールアドレスは"yojigen@4dd.co.jp"です。」という関係を記述することができます。

コンテナモデル

RDF では表現のためにいろいろなモデルが定義されています。そのひとつがこのコンテナモデルです。例えば作者が複数存在する場合や別表記があったりする場合、複数のリソースをまとめて表現する必要があります。このような用途のため、 RDF ではコンテナという3つのモデルが用意されています。

  • Bag : 順序を指定しないリスト
  • Seq : 順序のあるリスト
  • Alt : 同じプロパティ値で違う表記法がある場合のリスト (タイトルの日本語訳、英語訳など)

例として先ほどの"http://tech.4dd.co.jp"の作者が複数存在する場合の表記を示します。

例4
<?xml version="1.0" encoding="Shift_JIS"?>
<rdf:RDF
   xmls:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmls:dc="http://purl.org/dc/elements/1.1/"
   xml:lang="ja">
   <rdf:Description rdf:about="http://tech.4dd.co.jp">
      <dc:creator>
         <rdf:Bag>
            <rdf:li>四次元太郎</rdf:li>
            <rdf:li>四次元次郎</rdf:li>
            <rdf:li>四次元データ</rdf:li>
         </rdf:Bag>
      </dc:creator>
   </rdf:Description>
</rdf:RDF>

rdf:liタグ の部分は rdf:_nタグ でも記述できます。

例5
<?xml version="1.0" encoding="Shift_JIS"?>
<rdf:RDF
   xmls:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmls:dc="http://purl.org/dc/elements/1.1/"
   xml:lang="ja">
   <rdf:Description rdf:about="http://tech.4dd.co.jp">
      <dc:creator>
         <rdf:Bag>
            <rdf:_1>四次元太郎</rdf:_1>
            <rdf:_2>四次元次郎</rdf:_2>
            <rdf:_3>四次元データ</rdf:_3>
         </rdf:Bag>
      </dc:creator>
   </rdf:Description>
</rdf:RDF>

また英語表記などを書く場合、 Alt要素 を使用して次のように記述します。

例6
<?xml version="1.0" encoding="Shift_JIS"?>
<rdf:RDF
    xmls:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmls:dc="http://purl.org/dc/elements/1.1/"
    xml:lang="ja">
    <rdf:Description rdf:about="http://tech.4dd.co.jp">
       <dc:creator>
          <rdf:Alt>
             <rdf:li xml:lang="ja">四次元太郎</rdf:li>
             <rdf:li xml:lang="en">Taro,Yojigen</rdf:li>
          </rdf:Alt>
       </dc:creator>
    </rdf:Description>
</rdf:RDF>

例4の関係をグラフ表現すると次のようになります。

コンテナモデル図

dc:creatorプロパティ には直接値が記述されていないため、目的語は匿名リソースとなります。コンテナモデルは rdf:typeプロパティ (RDF Schema参照)によって「 rdf:Bagタイプ のリソース」として表現されます。

文の具体化

文を主語とする場合、その文をリソースとして具体化する必要があります。例えば「四次元太郎のテニスが人々を感動させる」という文を書きたいとします。
RDF では文全体を表す rdf:Statement というタイプのリソースをつくり、そのプロパティとして rdf:subject , rdf:predicate , rdf:object の3つを与えることで、この文自体を具体化します。以下にグラフ表現と RDF を示します。

文の具体化図

例7
<?xml version="1.0" encoding="Shift_JIS"?>
<rdf:RDF
   xmls:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmls:dc="http://purl.org/dc/elements/1.1/"
   xmls:4dd="http://tech.4dd.co.jp/yojigen"
   xml:lang="ja">
   <rdf:Statement rdf:ID="thisGame">
      <rdf:subject rdf:resource="#Taro,Yojigen"/>
      <rdf:predicate rdf:resource="#plays"/>
      <rdf:object rdf:resource="#Tennis"/>
   </rdf:Statement>
   <rdf:Description rdf:about="#thisGame">
      <4dd:impresses rdf:resource="#People"/>
   </rdf:Description>
</rdf:RDF>

例からもわかるように、 rdf:subjectプロパティ には主語となるリソースを、 rdf:predicateプロパティ には述語となるリソースを、 rdf:objectプロパティ には目的語となるリソースを値として記述します。



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