2016-10-26 7 views
-1

サブジェクト、述語、オブジェクトをNトリプル形式のRDFファイルから抽出してCSVファイルに保存するにはどうすればよいですか?RDF Nトリプルファイルからサブジェクト、述語、オブジェクトを抽出

+0

ビットは広く、曖昧です。なぜこれが必要ですか?これはどのようなプログラミング言語/ツールで起こるはずですか?あなたは何をやってみましたか? –

+0

実際、RDFファイルの任意のフォーマットからsubject、predicate、objectをトリプルテーブルの3つのカラムに抽出したいと思います。たとえば、subject、predicate、objectの列の値はそれぞれID1、Type、Bookになります。 – Mahmud

+0

私は参照してください。これを反映するためにあなたの質問を編集してください:具体的かつ具体的な質問をしてください。また、これまでに試したことと、これが(できれば)起こるべき言語を含めることを忘れないでください。最後に、良い質問をする方法に関するヒントを見てみましょう。将来は良い答えを得るチャンスを向上させます。 –

答えて

0

単純な変換では、N-Triplesファイルをグローバル検索して置き換えるだけで、適切な場所にカンマを挿入し、各行の最後に完全停止を削除します。

RDF値にはコンマが含まれ、リテラル値にはデータ型(^^xsd:int)または言語タグ(@en)が付加されます。 CSVの使用目的に応じて、この値を何とかエスケープする必要があります。

おそらく最も簡単な方法は、そう、引用符で全体の事を入れて、コンマと引用符のすべての出現をエスケープすることです:

"a literal, like, string"@en 

は次のようになります。

"\"a literal\, like\, string\"@en" 

は、このすべてを考えると、あなたはどちらかできますテキストエディタ(vimがこれに適しています)で正規表現の魔法を使うか、ファイルを変換する簡単なプログラムを書くことができます。たとえば、JavaとRDF4Jを使用して、あなたはこのようなものを使用してファイルを変換できます。

FileInputStream ntriples = new FileInputStream("..."); 
Model rdf = Rio.parse(ntriples, "", RDFFormat.NTRIPLES); 

try (FileWriter csvWriter = new FileWriter(...)) { 
    for (Statement st: rdf) { 
     csvWriter.write(convert(st.getSubject())); 
     csvWriter.write(", "); 

     csvWriter.write(convert(st.getPredicate())); 
     csvWriter.write(", "); 

     csvWriter.write(convert(st.getObject())); 
     csvWriter.write("\n"); 
    } 
} 
convert方法が適切に引用さに IRIBNodeまたは Literalを変換するために必要な魔法を行い

...そして逃げられたString値 - 私はあなたが上で言及したものを与えられたあなた自身のためにそれを働かせることができるはずです。このアプローチの利点は、N-Triplesだけでなく、Rioがパーサを持つあらゆるタイプのRDF構文に対しても機能することです。

また、opencsvやjackson-dataformat-csvなどのCSV解析/書き込みライブラリを使用することもできます。言ったように:オプションは無限です。

+0

ありがとうございました。私はあなたに知らせようとします。 – Mahmud

+0

"Model rdf = Rio.parse(ntriples、RDFFormat.NTRIPLES);"という文を書くときにエラーが発生します。タイプRioのメソッドparse(InputStream、String、RDFFormat、Resource ...)は引数(File、RDFFormat)には適用されません – Mahmud

+0

ああ、コードサンプルで間違いがあります。今修正されました。将来の参照のために、http://docs.rdf4j.org/にあるRDF4Jのドキュメント(API Javadocとサンプルを含む)を見つけることができます。 –

関連する問題