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

11.ステートメントの追加(Resource)

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

11.1. ステートメントの追加

RDF データモデルでは、モデルにステートメントを追加するということは情報を追加することに対応します。 ステートメントをモデルに追加するためには、主に次の二通りの方法を使います。

  • 主語となる Resource のメソッドを利用し述語と目的語を追加する。
  • RDF モデルを表す Model のメソッドを利用しステートメントを追加する。

前者は、あるリソースに対しプロパティのその値を設定すると考えれば分かりやすいでしょう。 後者は、ステートメントを直接 RDF モデルに追加することから、まさに情報を一つ加えるイメージです。

ステートメントの追加だけでなく、削除や問い合わせについても Model と Resorce の双方に解決策があります。 そのため今後は、この二つの方法を対応させながら解説を行っていきます。

11.2. Resource のメソッドを使用したステートメントの追加

ステートメントの主語となるリソースに注目して、RDFモデルにステートメントを追加するのが Resouce の addProperty() メソッドです。 このメソッドの第一引数は、 Property を実装したオブジェクトで第二引数は目的語です。 第二引数については、int や double, boolean などの基本データ型各種をとることが可能です。 この場合はリテラルとして扱われます。 また RDFNode を実装したオブジェクトをとることもできます。 Resource や Property は RDFNode のサブインタフェースですので、これらを第二引数にとることもできます。 引数が、他のどの型にも当てはまらない場合は Object 型として受け取られ、 そのオブジェクトの toString() メソッドを使うことで文字列として扱われます。

  • addProperty(Property p, RDFNode o)
  • addProperty(Property p, java.lang.String o)
  • addProperty(Property p, java.lang.String o, java.lang.String lang)
       lang はプロパティの言語指定
  • addProperty(Property p, 基本データ型/*int, double等*/ o)
  • addProperty(Property p, java.lang.Object o)

3章の例とほぼ同じものですが、 「"http://tech.4dd.co.jp"の作者の名前は"四次元太郎"でそのメールアドレスは"yojigen@4dd.co.jp"です」と言うステートメントを、 RDF モデルに追加する例を示します。 今回は作者を表すリソースを匿名リソースで表しています。

1:  import com.hp.hpl.jena.rdf.model.Model;
2:  import com.hp.hpl.jena.rdf.model.ModelFactory;
3:  import com.hp.hpl.jena.rdf.model.RDFWriter;
4:  import com.hp.hpl.jena.rdf.model.Resource;
5:  import com.hp.hpl.jena.vocabulary.DC;
6:  import com.hp.hpl.jena.vocabulary.VCARD;
7:
8:
9:  public class RDFSample2 {
10:   public static void main(String[] args) {
11:     Model model = ModelFactory.createDefaultModel();
12:
13:     Resource tech = 
14:      model.createResource("http://tech.4dd.co.jp");
15:     Resource yojigen = model.createResource();
16:
17:     tech.addProperty(DC.creator,yojigen);
18:     yojigen.addProperty(VCARD.NAME,"四次元太郎");
19:     yojigen.addProperty(VCARD.EMAIL,"yojigen@4dd.co.jp");
20:	
21:     try{
22:       RDFWriter writer = model.getWriter("RDF/XML-ABBREV");
23:       writer.setProperty("showXMLDeclaration","true");
24:       writer.write(model,System.out,"");
25:     }catch(Exception e) {
26:       e.printStackTrace();
27:     }
28:   }
29: }

まず13-15行目で、"http://tech.4dd.co.jp"を表すリソース(tech)と、作者を表す匿名リソース(yojigen)を取得します。

次に17行目で、「"http://tech.4dd.co.jp" の作者がある匿名リソースである」というステートメントを model に追加します。 このステートメントの主語は、プログラム中では model から生成された tech です。 そこで tech の addProperty() メソッドを使用します。 述語は com.hp.hpl.jena.vocabulary に含まれる語彙集のうち、 Dublin Core の DC.creator を使います。 目的語は 匿名リソース である yojigen です。 これらを引数として、 tech の addProperty() メソッドを呼び出します。 この処理によって、主語が tech、述語が DC.creator、目的語が yojigen のステートメントがmodelに追加されます。 18,19行でも同様に、匿名リソースで表された作者(yojigen)の名前やメールアドレスを、 vCard の語彙集を使って model に追加しています。

このプログラムの出力は次のようになります。

<?xml version="1.0"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:vcard="http://www.w3.org/2001/vcard-rdf/3.0#"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
  <rdf:Description rdf:about="http://tech.4dd.co.jp">
    <dc:creator rdf:parseType="Resource">
      <vcard:NAME>四次元太郎</vcard:NAME>
      <vcard:EMAIL>yojigen@4dd.co.jp</vcard:EMAIL>
    </dc:creator>
  </rdf:Description>
</rdf:RDF>


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

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