-1

我想使用以下代码解析 RDF4J 中的一个大文件,但由于解析器限制,我得到一个异常;

public class ConvertOntology {

    public static void main(String[] args) throws RDFParseException, RDFHandlerException, IOException {

        String file =  "swetodblp_april_2008.rdf";
        File initialFile = new File(file);
        InputStream input = new FileInputStream(initialFile);
        RDFParser parser = Rio.createParser(RDFFormat.RDFXML);
        parser.setPreserveBNodeIDs(true); 
        Model model = new LinkedHashModel();
        parser.setRDFHandler(new StatementCollector(model));
        parser.parse(input, initialFile.getAbsolutePath());
        FileOutputStream out = new FileOutputStream("swetodblp_april_2008.nt");
            RDFWriter writer = Rio.createWriter(RDFFormat.TURTLE, out);
        try {
          writer.startRDF();
          for (Statement st: model) {
                    writer.handleStatement(st);
          }
          writer.endRDF();
        }
        catch (RDFHandlerException e) {
        }
        finally {
          out.close();
        }

    }

解析器在本文档中遇到了超过“100,000”个实体扩展;这是应用程序施加的限制。

我按照 RDF4J 网站上的建议执行我的代码以设置两个参数(如以下命令所示)

mvn -Djdk.xml.totalEntitySizeLimit=0 -DentityExpansionLimit=0 exec:java

请有任何帮助

4

1 回答 1

0

该错误是由于 Apache Xerces XML 解析器,而不是默认的 JDK XML 解析器造成的。因此,只需从您的 .m2 存储库中删除 Xerces XML 文件夹,代码就可以正常工作。

于 2020-02-02T05:09:15.167 回答