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

6. RDFの出力(Model)

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

6.1. RDFの出力

jena を使って RDF を出力する方法について説明します。 RDF を出力するには、主に Model インタフェースの write() メソッドを使う方法と、 com.hp.hpl.jena.model.RDFWriter インタフェースを使う方法があります。 これらの方法について本章と次章で順に解説します。

6.2. Modelの出力機能

Model インタフェースには 読み込み用の read() メソッドと同様に、 ファイルシステムや Web に RDF データを書き込む write() メソッドがあります。 次のコードは read() メソッドのところで使ったものと基本的に同じものです。 write() メソッドを使って RDF のデータを出力しています。

1:  import com.hp.hpl.jena.rdf.model.Model;
2:  import com.hp.hpl.jena.rdf.model.ModelFactory;
3:
4:  public class OutputSample1 {
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: }

9行目で write() メソッドを使って model の内容を出力しています。 Model の write() メソッドには次のようなものがあります。

メソッド 内容
public Model write(java.io.OutputStream out) 引数で指定した OutputStream に RDF/XML 構文の形で書き込む。
public Model write(java.io.OutputStream out, java.lang.String lang) 引数で指定した OutputStream に lang で指定した構文の形で書き込む。
public Model write(java.io.OutputStream out, java.lang.String lang, java.lang.String base) 引数で指定した OutputStream に lang で指定した構文の形で書き込む。 base はモデル中で解決されない相対 URI の解決に使う。
public Model write(java.io.Writer writer) 引数で指定した Writer に RDF/XML 構文の形で書き込む。
public Model write(java.io.Writer writer, java.lang.String lang) 引数で指定した Writer に lang で指定した構文の形で書き込む。
public Model write(java.io.Writer writer, java.lang.String lang, java.lang.String base) 引数で指定した Writer に lang で指定した構文の形で書き込む。 base はモデル中で解決されない相対 URI の解決に使う。

RDF の構文を指定する引数の lang には、 "RDF/XML"、"RDF/XML-ABBREV"、"N3"、"N-TRIPLE"、"TURTLE"などが指定できます。 RDF/XML と RDF/XML-ABBREV の違いは、出力のときのみ現れます。 これは効率と可読性のどちらを優先するかの違いです。

RDF/XML形式
<?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#" >
  <rdf:Description rdf:nodeID="A0">
    <vcard:Given>太郎</vcard:Given>
    <vcard:Family>四次元</vcard:Family>
  </rdf:Description>
  <rdf:Description rdf:about="http://4dd.co.jp/">
    <vcard:N rdf:nodeID="A0"/>
  </rdf:Description>
</rdf:RDF>

RDF/XML-ABBREV形式
<?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#">
  <rdf:Description rdf:about="http://4dd.co.jp/">
    <vcard:N rdf:parseType="Resource">
      <vcard:Given>太郎</vcard:Given>
      <vcard:Family>四次元</vcard:Family>
    </vcard:N>
  </rdf:Description>
</rdf:RDF>

java.io.Writer クラスを引数にする場合は、文字コードに注意が必要です。 Writer 関連のクラスは、出力の文字コードが指定できたり、システム環境の文字コードで出力したりします。 しかし XML 以外の構文は特定の文字コードで書かれるように定められていたり、 逆に文字コードに対する仕様が明確に定まっていなかったりします。 また XML も UTF-8 や UTF-16 以外の文字コードについては、パーサが処理できるとは限りません。 そのため、特定の文字コードを使った XML の出力を行いたい場合を除けば、使うべきではありません。

またModel インタフェースの write() メソッドは手軽に出力できますが、 文字コードの指定をせずに XML を出力すると XML 宣言が出力されません。 XML の構文上は間違いではありませんが、 XML 宣言はある方が望ましいです。 XML 宣言を確実に出力するには、次章の RDFWriter インタフェースを使う必要があります。



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

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