15. ステートメントの削除2006.04.03 株式会社四次元データ 中井隆史
Jena 15章 ステートメントの削除
ここではにRDF モデルからステートメントを削除する方法について解説します。 追加の場合と同様に、Resource と Model などのメソッドを使う方法があります。 15.1. Resource のメソッドを使用したステートメントの削除ステートメントの主語となる Resource を利用して、 RDF モデルにステートメントを削除するのが Resource の removeAll() メソッドとremoveProperties() です。 どちらも目的語を指定できないため、「目的語が A であるようなステートメントを削除する」といった処理には不向きです。 そのかわり主語が決まっているステートメントの削除については簡単にできるのが特徴です。 Rsource インタフェースの createStatement() メソッドの主な種類
15.2. Model のメソッドを使用したステートメントの削除Model インタフェースを使って RDF モデルからステートメントを追加する場合は、remove……() という名前のメソッドを使用します。 他のモデルなどのステートメント集合との比較や、具体化されたステートメントなど、 Resource に比べて多彩な条件で削除を指定できます。 このようなメソッドには次のようなものがあります。
以下に例を示します。ここで紹介するサンプルコードは 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)); |
![]()
![]()
|