我想了解一个给定的url是否是一个本体或不是。 (通过尝试将它读入Jena)耶拿,读一个模型需要永远
通常,不可分析的页面(404,HTML等)会引发各种异常,并且由Jena分析有效的RDF。但一些(无效)文件需要5-10分钟才能解析!没有高CPU或RAM使用率,没有! model.read()
永不落幕。 (有一次,我已经等了一个小时!)
try {
Model model = ModelFactory.createOntologyModel();
model.read("http://dbpedia.org/page/Pizza_Deliverance"); // <- THIS LINE NEVER FINISHES!
// It is an ontology.
} catch (Exception e) {
// Jena can't parse it
}
是挂另一个代码示例:(此时Model.read由输入流中提供)
// In is an InputStream that holds http://dbpedia.org/page/Pizza_Deliverance
Model model;
try {
model = ModelFactory.createOntologyModel();
model.read(in, baseUri); // <- THIS LINE NEVER ENDS.
} catch (Exception e) {
Logger.error("Error parsing file as ontology: " + baseUri, e);
return null;
}
return model;
这里是堆栈跟踪(如果我迫不及待地想一个)
java.lang.NullPointerException: null
at com.hp.hpl.jena.rdf.arp.impl.XMLHandler.endElement(XMLHandler.java:133) ~[jena-core-2.10.0.jar:2.10.0]
at org.apache.xerces.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:598) ~[xercesImpl-2.11.0.jar:na]
at org.apache.xerces.impl.XMLNamespaceBinder.handleEndElement(XMLNamespaceBinder.java:835) ~[xercesImpl-2.11.0.jar:na]
at org.apache.xerces.impl.XMLNamespaceBinder.endElement(XMLNamespaceBinder.java:599) ~[xercesImpl-2.11.0.jar:na]
at org.apache.xerces.impl.dtd.XMLDTDValidator.endNamespaceScope(XMLDTDValidator.java:2099) ~[xercesImpl-2.11.0.jar:na]
at org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:2050) ~[xercesImpl-2.11.0.jar:na]
我的问题:
- 我错过了什么吗? Misusage等
- 如果给定的页面(或字符串)可以解析为本体,是否有任何替代方法检查?
编辑: 我工作围绕这一问题,在另一个线程做分析工作,并杀死线程,如果解析时间过长。但这不是一个真正的解决方案。
编辑2:
我看着源和堆栈跟踪长时间运行的代码。问题出在org.apache.xerces.parsers.DTDConfiguration.parse(boolean)
如果这对你来说意味着什么。
它没有做任何改变。我只是看着源代码和堆栈追踪长时间运行的代码。问题出现在'org.apache.xerces.parsers.DTDConfiguration.parse(boolean)'中(但这并不能告诉我什么) – 2013-04-10 19:20:55