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

16. 型変換

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

16.1. RDFNode.canAs と as メソッド

RDFNode インタフェースは RDF の様々な概念の基となるインタフェースです。 そのため各概念の相互変換などを行うメソッドを持っています。

メソッド 説明
public RDFNode as(java.lang.Class view) この RDFNode を異なる型 view に変換します。変換できない場合は例外が投げられます。
public boolean canAs(java.lang.Class view) この RDFNode を異なる型 view に変換することが可能なときに true を返します。

これらは例えば Property と Resource の相互変換を行う場合に使用します。

RDF ではプロパティをリソースとして使用したり、リソースをプロパティとして使用したりすることがあります。 これらを表すインタフェースは Property と Resource です。 Property は Resource のサブインタフェースです。 そのため Property を実装したオブジェクトは Resource のメソッドを使用したり、Resource 型の変数に代入したりできます。

しかし Java の仕様上、逆の操作はできません。 これを実現するのが RDFNode.as() メソッドです。 上述の Resource のオブジェクトを Property に変換することができます。

一方 canAs メソッドは事前にその変換が可能かどうかを調べることが可能します。 例えば目的語がリテラルかリソースかによって処理を分けたいときにしようできます。 同様の要求は問い合わせ処理を行う場合に頻出します。

次の例は RDFモデル中に出てくる作者 (dc:creator) がリソースの場合はURIを、リテラルの場合は値を表示し、 それ以外の場合は何も処理を行いません。

例
NodeIterator creators = model.listObjectsOfProperty(DC.creator);
while(creators.hasNext()){
   RDFNode rdfNode = creators.nextNode();
   if(rdfNode.canAs(Resource.class)){
      Resource creator = (Resource)rdfNode.as(Resource.class);
      System.out.println(creator.getURI());
   } else if(rdfNode.canAs(Literal.class)){
      Literal creator = (Literal)rdfNode.as(Literal.class);
      System.out.println(creator.getString());
   } else {
      // Resource や Literal に変換できない場合は処理しない。
   }  
}


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

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