java - 如何在 rdf4j 中解析一个大的 rdf 文件
问题描述
我想使用以下代码解析 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
请有任何帮助
解决方案
该错误是由于 Apache Xerces XML 解析器,而不是默认的 JDK XML 解析器造成的。因此,只需从您的 .m2 存储库中删除 Xerces XML 文件夹,代码就可以正常工作。
推荐阅读
- javascript - 如何从我得到的数组中获取特定的数组元素作为调用 axios.get() 调用的函数的响应
- react-native - 世博会推送通知图标和标题
- machine-learning - 是否可以通过机器学习来学习和预测 NaN 值?
- javascript - 如何在 iframe src 中转义脚本标签?
- javascript - 如何在使用 jQuery 刷新(隐藏/显示)DOM 后继续播放 CSS 动画?
- php - 如何在php中更新一行中的多个数据?
- reactjs - 反应输入值
- javascript - CORS 政策已阻止从源“https://gmbexample-f23ef.firebaseapp.com”访问“https://www.googleapis.com/oauth2/v4/token”获取
- sharepoint - 使用共享点自定义下拉列
- javascript - 这个正则表达式会起作用吗?我正在尝试匹配并提取很多不同的缩写