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

10. Statement,ReifiedStatementの生成、取得

2006.02.28 株式会社四次元データ 中井隆史

10.1. Statementオブジェクトの生成

Statement インタフェースを実装したオブジェクトは、 Model インタフェースの createStatment() メソッドを使用して生成します。 このメソッドによって新たにステートメントを生成したとしても、 生成と同時に RDF モデルにそのステートメントが追加されるわけではありません。 add(Statement) メソッドを使って追加する必要があります。 しかし Statement インタフェースの changeObject() メソッドを 使ってステートメントに変更を加えたときにも、追加されます。

10.2. ReifiedStatementとは

RDF におけるステートメントの、もう一つの表現に具体化されたステートメントがあります。 次の RDF は「太郎のテニスが人々を感動させる」という表現を RDF で表したものです。

<rdf:RDF ……>
   <rdf:Statement>
      <rdf:subject 
         rdf:resource="http://tech.4dd.co.jp/yojigen/Taro"/>
      <rdf:predicate 
         rdf:resource="http://tech.4dd.co.jp/yojigen/plays"/>
      <rdf:object 
         rdf:resource="http://tech.4dd.co.jp/yojigen/Tennis"/>
       
      <4dd:impresses 
         rdf:resource="http://tech.4dd.co.jp/yojigen/People"/>
   </rdf:Statement> 
   ……
</rdf:RDF>

この例では「太郎がテニスをする」というステートメントが主語です。 この表現を実現するために、"rdf:Statement"を使ってステートメントを具体化して ID を与えています。 Jena では具体化されたステートメントを、 com.hp.hpl.jena.rdf.model.ReifiedStatementで扱います。 これはステートメント自体を主語に使うためのもので、実際には Statement ではなく Resource のサブインターフェスです。

10.3. createStatement(), createReifiedStatement()

Model インタフェースの createStatement(), createReifiedStatement() メソッドには次のようなものがあります。

メソッド 説明
Statement createStatement(Resource s, Property p, RDFNode o) 主語、述語、目的語がそれぞれ s, p, o のステートメントを生成します。
Statement createStatement(Resource s, Property p, 基本データ型/*int, double等*/ o) 主語、述語、目的語がそれぞれ s, p, o のステートメントを生成します。
Statement createStatement(Resource s, Property p, java.lang.String o) 主語、述語、目的語がそれぞれ s, p, o のステートメントを生成します。
Statement createStatement(Resource s, Property p, java.lang.String o, java.lang.String l) 主語、述語、目的語がそれぞれ s, p, o のステートメントを生成します。l では目的語の言語を指定します。
ReifiedStatement createReifiedStatement(Statement s) ステートメントを具体化します。この返り値の getModel() メソッドの値はこのモデルになります。
ReifiedStatement createReifiedStatement(java.lang.String uri, Statement s) ステートメントを具体化します。引数の uri がこの具体化ステートメントのリソースとしての URI になります。

これらを使って10.2.の RDF に含まれる2つのステートメントを生成すると次のようになります。

Statement s1 = model.createStatement(
   model.createResource("http://tech.4dd.co.jp/yojigen/Taro"),
   model.createProperty("http://tech.4dd.co.jp/yojigen/plays"),
   model.createResource("http://tech.4dd.co.jp/yojigen/Tennis"));
		
ReifiedStatement rs = model.createReifiedStatement(s1);

Statement s2 = model.createStatement(rs, 
   model.createProperty("http://tech.4dd.co.jp/yojigen/impresses"),
   model.createResource("http://tech.4dd.co.jp/yojigen/People"));


前のページへ TECHSCOREのTOPページへ 次のページへ
TECHSCORE PR
PR
PR
PR
PR
PR

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