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

4. RDFの読み込み(Model)

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

4.1. RDFの読み込み

ここからは、 RDF のファイルを Jena で読み込む方法について説明します。 Jena で RDF を処理するためには、com.hp.hpl.jena.model.Model インタフェースを実装したオブジェクトを取得する必要があります。 Model インタフェースは RDF モデルを表し、 モデルやそこに含まれるリソースやプロパティを処理する機能を持っています。 RDF のデータをModel インタフェースを実装したオブジェクトの形で取得する方法として、 まず本章で、Model インタフェースのメソッドを使う方法を紹介し、 次章で com.hp.hpl.jena.util.FileManager というクラスを使う方法を紹介します。 今回は解説しませんが、 com.hp.hpl.jena.rdf.model.RDFReader というインタフェースを使う方法もあります。 この方法を使うと、エラーチェックの制限を強くするなどのオプション設定を使うことができます。

4.2. Modelの読み込み機能

Model オブジェクトのメソッドを利用するには, まず最初に 空の Model オブジェクトを取得する必要があります。 最も簡単な方法は、 com.hp.hpl.jena.rdf.model.ModelFactory の createDefaultModel() メソッドを使うことです。 このメソッドは空の RDF モデルを生成します。 クラスメソッドですので、次のように使用します。

Model model = ModelFactory.createDefaultModel();

この式により model には、ステートメントをまったく含まない、空の Model オブジェクトが代入されます。 これ以外の方法としては、問い合わせなど、何らかの処理の結果として取得することもあります。

では次に Model オブジェクトにファイルシステムや Web 上に存在する RDF データを読み込む方法を見てみましょう。 この目的を実現するために Model には read メソッドがあります。 以下は read() メソッドを使って RDF のデータを読み込むサンプルプログラムです。

1:  import com.hp.hpl.jena.rdf.model.Model;
2:  import com.hp.hpl.jena.rdf.model.ModelFactory;
3:
4:  public class InputSample1 {
5:    public static void main(String[] args) {
6:      try{
7:        Model model = ModelFactory.createDefaultModel();
8:        model.read("http://www.techscore.com/rss/rss.rdf");
9:        model.write(System.out,"RDF/XML-ABBREV");
10:     }catch(Exception e){
11:       e.printStackTrace();
12:     }
13:   }
14: }

7行目では ModelFactory というクラスの createDefaultModel() というメソッドを使って、 空の Model オブジェクトを生成しています。 そして8行目で http://www.techscore.com/rss/rss.rdf から RDF の読み込みを行っています。 read() メソッドは既に生成されている Model オブジェクトから呼び出します。 読み込まれた RDF モデルに含まれるステートメントは、 呼び出しを行った Model オブジェクトに追加されます。 そのため RDF モデルに変更を加えずに読み込みを行うためには、 上のサンプルコードのように RDF ノードを全く含まない空の Model オブジェクトの read() を実行する必要があります。 逆に、既にステートメントを含んでいる Model オブジェクトの read() を実行すると、 2つの RDF モデルがマージされることになります。

Model の read() メソッドには次のようなものがあります。

メソッド 内容
public Model read(java.io.InputStream in, java.lang.String base) 引数で指定した InputStream から RDF/XML 構文として読み込む。 base はモデル中で解決されない相対 URI の解決に使う。
public Model read(java.io.InputStream in, java.lang.String base, java.lang.String lang) 引数で指定した InputStream から lang で指定した構文として読み込む。 base はモデル中で解決されない相対 URI の解決に使う。
public Model read(java.lang.String url) 引数で指定した URL から RDF/XML 構文の RDF を読み込む。
public Model read(java.lang.String url, java.lang.String lang) 引数で指定した URI から lang で指定した構文として RDF を読み込む。
public Model read(java.lang.String url, java.lang.String base, java.lang.String lang) 引数で指定した URI から lang で指定した構文として RDF を読み込む。 base はモデル中で解決されない相対 URI の解決に使う。

RDF の構文を指定する引数の lang には、 "RDF/XML"、"RDF/XML-ABBREV"、"N3"、"N-TRIPLE"、"TURTLE"などを指定することができます。 読み取りの場合は、 RDF/XML と RDF/XML-ABBREV の区別はありません。 また構文を指定しなかった場合は、基本的に"RDF/XML"として読み込みます。

このほかにも java.io.Reader クラスを引数にすることもできます。 しかし Reader やこのクラスを継承したクラスは、文字コードを指定して読み込みが行えたり、 システムのデフォルトの文字コードで読み込みを行ったりします。 そのため扱う文字コードと実際のデータの文字コードが異る場合があるために、 特に XML で問題を起こすことがあるので、使わないことが推奨されています。 InputStream や URL によって読み込みを行う場合、文字コードは自動で判別されます。



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

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