File/ontology(turtle、N3、JSON、RDF-XML)等到 java 中的 .ttl 文件转换
File/ontology (turtle, N3, JSON, RDF-XML) etc to .ttl file conversions in java
我想问一下 Java 中是否有我可以读入的方法,基本上任何文件格式(N3、JSON、RDF-XML)等等,然后将其转换为 turtle(.ttl)。我搜索了 Google 以获得一些想法,但它们主要只是解释特定的文件类型以及如何将文件类型转换为 RDF,而我想要的是另一种方式。
编辑(按照答案中给出的代码示例):
if(FilePath.getText().equals("")){
FilePath.setText("Cannot be empty");
}else{
try {
// get the inputFile from file chooser and setting a text field with
// the path (FilePath is the variable name fo the textField in which the
// path to the selected file from file chooser is done earlier)
FileInputStream fis = new FileInputStream(FilePath.getText());
// guess the format of the input file (default set to RDF/XML)
// when clicking on the error I get take to this line.
RDFFormat inputFormat = Rio.getParserFormatForFileName(fis.toString()).orElse(RDFFormat.RDFXML);
//create a parser for the input file and a writer for Turtle
RDFParser rdfParser = Rio.createParser(inputFormat);
RDFWriter rdfWriter = Rio.createWriter(RDFFormat.TURTLE,
new FileOutputStream("./" + fileName + ".ttl"));
//link parser to the writer
rdfParser.setRDFHandler(rdfWriter);
//start the conversion
InputStream inputStream = fis;
rdfParser.parse(inputStream, fis.toString());
//exception handling
} catch (FileNotFoundException ex) {
Logger.getLogger(FileConverter.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(FileConverter.class.getName()).log(Level.SEVERE, null, ex);
}
}
我已将 "eclipse-rdf4j-3.0.3-onejar.jar" 添加到 NetBeans 的 Libraries 文件夹中,现在当我 运行 程序时,我不断收到此错误:
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at org.eclipse.rdf4j.common.lang.service.ServiceRegistry.(ServiceRegistry.java:31)
如有任何帮助或建议,我们将不胜感激。谢谢。
是的,这是可能的。一种选择是使用 Eclipse RDF4J for this purpose, or more specifically, its Rio parser/writer toolkit.
这是一个使用 RDF4J Rio 的代码示例。它根据文件扩展名检测输入文件的语法格式,并直接将数据写入新文件,在Turtle语法中:
// the input file
java.net.URL url = new URL(“http://example.org/example.rdf”);
// guess the format of the input file (default to RDF/XML)
RDFFormat inputFormat = Rio.getParserFormatForFileName(url.toString()).orElse(RDFFormat.RDFXML);
// create a parser for the input file and a writer for Turtle format
RDFParser rdfParser = Rio.createParser(inputFormat);
RDFWriter rdfWriter = Rio.createWriter(RDFFormat.TURTLE,
new FileOutputStream("/path/to/example-output.ttl"));
// link the parser to the writer
rdfParser.setRDFHandler(rdfWriter);
// start the conversion
try(InputStream inputStream = url.openStream()) {
rdfParser.parse(inputStream, url.toString());
}
catch (IOException | RDFParseException | RDFHandlerException e) { ... }
有关更多示例,请参阅 RDF4J documentation。
编辑关于您的NoClassDefFoundError
:您的类路径中缺少必要的第三方库(在本例中为日志记录库)。
与其使用 onejar,不如使用 Maven(或 Gradle)来设置您的项目可能更好。请参阅 development environment setup notes, or for a more step by step guide, see this tutorial(本教程使用 Eclipse 而不是 Netbeans,但有关如何设置 Maven 项目的要点与 Netbeans 中的非常相似)。
如果你真的不想用Maven,你也可以download the RDF4J SDK,这是一个ZIP文件。解压它,然后将 lib/
目录中的所有 jar 文件添加到 Netbeans 中。
另一种选择是使用 Apache Jena。
我想问一下 Java 中是否有我可以读入的方法,基本上任何文件格式(N3、JSON、RDF-XML)等等,然后将其转换为 turtle(.ttl)。我搜索了 Google 以获得一些想法,但它们主要只是解释特定的文件类型以及如何将文件类型转换为 RDF,而我想要的是另一种方式。
编辑(按照答案中给出的代码示例):
if(FilePath.getText().equals("")){
FilePath.setText("Cannot be empty");
}else{
try {
// get the inputFile from file chooser and setting a text field with
// the path (FilePath is the variable name fo the textField in which the
// path to the selected file from file chooser is done earlier)
FileInputStream fis = new FileInputStream(FilePath.getText());
// guess the format of the input file (default set to RDF/XML)
// when clicking on the error I get take to this line.
RDFFormat inputFormat = Rio.getParserFormatForFileName(fis.toString()).orElse(RDFFormat.RDFXML);
//create a parser for the input file and a writer for Turtle
RDFParser rdfParser = Rio.createParser(inputFormat);
RDFWriter rdfWriter = Rio.createWriter(RDFFormat.TURTLE,
new FileOutputStream("./" + fileName + ".ttl"));
//link parser to the writer
rdfParser.setRDFHandler(rdfWriter);
//start the conversion
InputStream inputStream = fis;
rdfParser.parse(inputStream, fis.toString());
//exception handling
} catch (FileNotFoundException ex) {
Logger.getLogger(FileConverter.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(FileConverter.class.getName()).log(Level.SEVERE, null, ex);
}
}
我已将 "eclipse-rdf4j-3.0.3-onejar.jar" 添加到 NetBeans 的 Libraries 文件夹中,现在当我 运行 程序时,我不断收到此错误:
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory at org.eclipse.rdf4j.common.lang.service.ServiceRegistry.(ServiceRegistry.java:31)
如有任何帮助或建议,我们将不胜感激。谢谢。
是的,这是可能的。一种选择是使用 Eclipse RDF4J for this purpose, or more specifically, its Rio parser/writer toolkit.
这是一个使用 RDF4J Rio 的代码示例。它根据文件扩展名检测输入文件的语法格式,并直接将数据写入新文件,在Turtle语法中:
// the input file
java.net.URL url = new URL(“http://example.org/example.rdf”);
// guess the format of the input file (default to RDF/XML)
RDFFormat inputFormat = Rio.getParserFormatForFileName(url.toString()).orElse(RDFFormat.RDFXML);
// create a parser for the input file and a writer for Turtle format
RDFParser rdfParser = Rio.createParser(inputFormat);
RDFWriter rdfWriter = Rio.createWriter(RDFFormat.TURTLE,
new FileOutputStream("/path/to/example-output.ttl"));
// link the parser to the writer
rdfParser.setRDFHandler(rdfWriter);
// start the conversion
try(InputStream inputStream = url.openStream()) {
rdfParser.parse(inputStream, url.toString());
}
catch (IOException | RDFParseException | RDFHandlerException e) { ... }
有关更多示例,请参阅 RDF4J documentation。
编辑关于您的NoClassDefFoundError
:您的类路径中缺少必要的第三方库(在本例中为日志记录库)。
与其使用 onejar,不如使用 Maven(或 Gradle)来设置您的项目可能更好。请参阅 development environment setup notes, or for a more step by step guide, see this tutorial(本教程使用 Eclipse 而不是 Netbeans,但有关如何设置 Maven 项目的要点与 Netbeans 中的非常相似)。
如果你真的不想用Maven,你也可以download the RDF4J SDK,这是一个ZIP文件。解压它,然后将 lib/
目录中的所有 jar 文件添加到 Netbeans 中。
另一种选择是使用 Apache Jena。