Java n-triple RDF解析
我想解析一个n-tripleforms的RDF文件。
我可以编写自己的解析器,但我宁愿使用一个库,Jena似乎为此目的而复杂化(或者至少我看不到他们的文档解释如何以合理的方式读取n-triples)。
你可以请我指出任何有用的图书馆,或者如果你了解芝麻或耶拿,你可能知道如何解决这个问题。
对Jena来说并不是那么困难:
给定一个文件rdfexample.ntriple
其中包含N-TRIPLEforms的以下RDF(示例取自此处 ):
"1988" . "9.90" . "CBS Records" . "UK" . "Bonnie Tyler" . "1985" . "10.90" . "Columbia" . "USA" . "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);; } }
读取文件,并以TURTLEforms打印出来:
"Bonnie Tyler" ; "CBS Records" ; "UK" ; "9.90" ; "1988" . "Bob Dylan" ; "Columbia" ; "USA" ; "10.90" ; "1985" .
因此,使用Jena,您可以轻松地将RDF(以任何forms)解析为com.hp.hpl.jena.rdf.model.Model
对象,该对象允许您以编程方式对其进行操作。
老问题,但是既然你明确询问了不同的库,我想我会展示如何使用Eclipse RDF4J的Rio解析器进行简单的RDF解析(披露:我是RDF4J开发人员之一)。
例如,要解析文件并将所有三元组放在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));
当然,有更多方法可以使用这些基本工具,请查看工具包文档以获取详细信息。
里约解析器可以作为单独的maven工件提供,所以如果你只想使用解析器,而不使用其余的RDF4J工具,你可以这样做。