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

15. ステートメントの削除

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

ここではにRDF モデルからステートメントを削除する方法について解説します。 追加の場合と同様に、Resource と Model などのメソッドを使う方法があります。

15.1. Resource のメソッドを使用したステートメントの削除

ステートメントの主語となる Resource を利用して、 RDF モデルにステートメントを削除するのが Resource の removeAll() メソッドとremoveProperties() です。 どちらも目的語を指定できないため、「目的語が A であるようなステートメントを削除する」といった処理には不向きです。 そのかわり主語が決まっているステートメントの削除については簡単にできるのが特徴です。

Rsource インタフェースの createStatement() メソッドの主な種類

メソッド 説明
Resource removeAll(Property p) 呼び出したリソースが主語で述語がpである全てのステートメントを、関連付けられている RDF モデルから削除します。
Resource removeProperties() 呼び出したリソースが主語であるあらゆるステートメントを、関連付けられている RDF モデルから削除します。

15.2. Model のメソッドを使用したステートメントの削除

Model インタフェースを使って RDF モデルからステートメントを追加する場合は、remove……() という名前のメソッドを使用します。 他のモデルなどのステートメント集合との比較や、具体化されたステートメントなど、 Resource に比べて多彩な条件で削除を指定できます。 このようなメソッドには次のようなものがあります。

メソッド 説明
Model remove(Statement s) ステートメント s を削除します。
Model remove(Statement[] statements) statements に含まれる全てのステートメントを削除します。
Model remove(java.util.List statements) statements に含まれる全てのステートメントを削除します。
Model remove(StmtIterator iter) iter に含まれる全てのステートメントを削除します。
Model remove(Model m) m に含まれる全てのステートメントを削除します。
Model remove(Model m, boolean suppressReifications) statements に含まれる全てのステートメントを削除します。 ただし suppressReifications がfalse の場合、具体化されたステートメントは削除しません。
Model removeAll() RDFモデルから全てのステートメントを削除します。
Model removeAll(Resource s, Property p, RDFNode r) 主語、述語、目的語がそれぞれ s、p、r であるような全てのステートメントを削除します。
void removeAllReifications(Statement s) s を具体化した全てのステートメントを削除します
void removeReification(ReifiedStatement rs) 具体化されたステートメントの rs を削除します。

以下に例を示します。ここで紹介するサンプルコードは 11.2.で使用したサンプルコードの 出力(example1.rdf)から四次元太郎のメールアドレスを削除する処理です。

サンプルコード(RDFSample6.java)

1:   import com.hp.hpl.jena.rdf.model.Model;
2:   import com.hp.hpl.jena.rdf.model.ResIterator;
3:   import com.hp.hpl.jena.rdf.model.Resource;
4:   import com.hp.hpl.jena.rdf.model.Statement;
5:   import com.hp.hpl.jena.rdf.model.StmtIterator;
6:   import com.hp.hpl.jena.util.FileManager;
7:   import com.hp.hpl.jena.vocabulary.VCARD;
8:   
9:   public class RDFSample6 {
10:    public static void main(String[] args) {
11:      try {
12:        Model model = FileManager.get().loadModel("file:example1.rdf");
13:        ResIterator resIterator = 
14:              model.listSubjectsWithProperty(VCARD.NAME, "四次元太郎");
15:        while (resIterator.hasNext()) {
16:          Resource res = resIterator.nextResource();
17:          res.removeAll(VCARD.EMAIL);
18:        }
19:  
20:        model.write(System.out, "RDF/XML-ABBREV");
21:      } catch (Exception e) {
22:        e.printStackTrace();
23:      }
24:    }
25:  }

まず13行目で述語が vcard:NAME 目的語が"四次元太郎"のステートメントの主語であるリソースを取得します。 そして15-18行目で取得したリソースを主語、vcard:EMAIL を述語とするステートメントを削除しています。 ここでは Resource の removeAll メソッドを使用しています。結果は次のようになります。

削除前

<!--example1.rdf-->

<?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:EMAIL>yojigen@4dd.co.jp</vcard:EMAIL>
      <vcard:NAME>四次元太郎</vcard:NAME>
    </dc:creator>
  </rdf:Description>
</rdf:RDF>

削除後

<!--example2.rdf-->

<?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>
    </dc:creator>
  </rdf:Description>
</rdf:RDF>

同様の処理は17行目を次のように変更することにより Model を使った処理に変更できます。

Model の remove メソッドを使った場合

model.remove(res.listProperties(VCARD.EMAIL));


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

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