java - 文件/本体(turtle、N3、JSON、RDF-XML)等到 java 中的 .ttl 文件转换

标签 java file rdf converters turtle-rdf

我想问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为此,或更具体地说,其 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:您在类路径上缺少必要的第三方库(在本例中为日志记录库)。

最好使用 Maven(或 Gradle)来设置项目,而不是使用 onejar。请参阅development environment setup注释,或者有关更多分步指南,请参阅 this tutorial (本教程使用 Eclipse 而不是 Netbeans,但有关如何设置 Maven 项目的要点在 Netbeans 中非常相似)。

如果你实在不想用Maven,你也可以做download the RDF4J SDK ,这是一个 ZIP 文件。解压它,然后将 lib/ 目录中的所有 jar 文件添加到 Netbeans 中。

关于java - 文件/本体(turtle、N3、JSON、RDF-XML)等到 java 中的 .ttl 文件转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59514022/

相关文章:

java - 以编程方式关闭当前显示的 Java Swing JDialog 框

Java Socket查找真实客户端IP地址

java - Length Required (411) - RESTlet 客户端中所需的长度

java - weka 中的 SMO 置信度度量

php - 使用准备好的语句上传图像文件位置

php - 为什么 php 将 $_FILES 值按名称、类型而不是输入文件名的顺序分组?

excel - 将文件夹/子文件夹中的列表中的文件 move 到另一个文件夹中的相同文件夹结构

java - 如何重命名本体的前缀

rdf - 将 Notation3 加载到数据库中

rdf - 是rdfs :subClassOf really transitive?