n トリプル形式の RDF ファイルを解析したいと考えています。
私は自分のパーサーを書くことができますが、むしろライブラリを使用したいと思います.Jenaはこの目的のために不必要に複雑に見えます.
便利なライブラリを教えてください。または、Sesame または Jena のどちらかをよく知っている場合は、それらがこれを解決する方法について何か知っているかもしれません。
Jena を使用すると、それほど難しくありません。
rdfexample.ntriple
次の RDF を N-TRIPLE 形式で含むファイルがあるとします (例はhereから取得)。
<http://www.recshop.fake/cd/Hide your heart> <http://www.recshop.fake/cd#year> "1988" .
<http://www.recshop.fake/cd/Hide your heart> <http://www.recshop.fake/cd#price> "9.90" .
<http://www.recshop.fake/cd/Hide your heart> <http://www.recshop.fake/cd#company> "CBS Records" .
<http://www.recshop.fake/cd/Hide your heart> <http://www.recshop.fake/cd#country> "UK" .
<http://www.recshop.fake/cd/Hide your heart> <http://www.recshop.fake/cd#artist> "Bonnie Tyler" .
<http://www.recshop.fake/cd/Empire Burlesque> <http://www.recshop.fake/cd#year> "1985" .
<http://www.recshop.fake/cd/Empire Burlesque> <http://www.recshop.fake/cd#price> "10.90" .
<http://www.recshop.fake/cd/Empire Burlesque> <http://www.recshop.fake/cd#company> "Columbia" .
<http://www.recshop.fake/cd/Empire Burlesque> <http://www.recshop.fake/cd#country> "USA" .
<http://www.recshop.fake/cd/Empire Burlesque> <http://www.recshop.fake/cd#artist> "Bob Dylan" .
次のコード
public static void main(String[] args) {
String fileNameOrUri = "src/a/rdfexample.ntriple";
Model model = ModelFactory.createDefaultModel();
InputStream is = FileManager.get().open(fileNameOrUri);
if (is != null) {
model.read(is, null, "N-TRIPLE");
model.write(System.out, "TURTLE");
} else {
System.err.println("cannot read " + fileNameOrUri);;
}
}
ファイルを読み取り、TURTLE 形式で出力します。
<http://www.recshop.fake/cd/Hide your heart>
<http://www.recshop.fake/cd#artist>
"Bonnie Tyler" ;
<http://www.recshop.fake/cd#company>
"CBS Records" ;
<http://www.recshop.fake/cd#country>
"UK" ;
<http://www.recshop.fake/cd#price>
"9.90" ;
<http://www.recshop.fake/cd#year>
"1988" .
<http://www.recshop.fake/cd/Empire Burlesque>
<http://www.recshop.fake/cd#artist>
"Bob Dylan" ;
<http://www.recshop.fake/cd#company>
"Columbia" ;
<http://www.recshop.fake/cd#country>
"USA" ;
<http://www.recshop.fake/cd#price>
"10.90" ;
<http://www.recshop.fake/cd#year>
"1985" .
したがって、Jena を使用すると、RDF (任意の形式) をオブジェクトに簡単に解析してcom.hp.hpl.jena.rdf.model.Model
、プログラムで操作することができます。
古い質問ですが、さまざまなライブラリについて明示的に尋ねたので、 Eclipse RDF4JのRio パーサーを使用して単純な RDF 解析を行う方法を示したいと思いました(開示: 私は RDF4J 開発者の 1 人です)。
たとえば、ファイルを解析してすべてのトリプルを に入れるにはModel
、次のようにします。
FileInputStream in = new FileInputStream("/path/to/file.nt");
Model m = Rio.parse(in, RDFFormat.NTRIPLES);
パーサーの出力をすぐに stdout に (たとえば Turtle 形式で) 出力したい場合は、次のようにします。
FileInputStream in = new FileInputStream("/path/to/file.nt");
RDFParser parser = Rio.createParser(RDFFormat.NTRIPLES);
parser.parse(in, "", Rio.createWriter(RDFFormat.TURTLE, System.out));
もちろん、これらの基本的なツールを使用する方法は他にもあります。詳細については、ツールキットのドキュメントを参照してください。
ちなみに、Rio パーサーは別の Maven アーティファクトとして利用できるので、RDF4J ツールの残りを使用せずにパーサーのみを使用したい場合は、そうすることができます。