首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >耶拿,看模特要花很长时间

耶拿,看模特要花很长时间
EN

Stack Overflow用户
提问于 2013-04-10 12:43:45
回答 6查看 1.1K关注 0票数 2

我试图理解给定的url是否是一个本体。(试着把它读给耶拿听)

通常情况下,不可解析页(404、HTML等)抛出各种异常和有效的RDF被Jena解析。但是一些(无效的)文件需要5-10分钟才能解析!没有高的CPU或内存使用量,什么都没有!model.read()永远不会结束。(一旦我等了一个小时!)

代码语言:javascript
复制
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由输入流提供)

代码语言:javascript
复制
// 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;

这是堆栈跟踪(如果我等待得到的话)

代码语言:javascript
复制
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]

我的问题:

  1. 我是不是遗漏了什么?滥用等
  2. 是否有其他方法可以检查给定的页面(或字符串)是否可以解析为本体?

编辑:解决了这个问题,方法是在另一个线程中执行解析工作,如果解析耗时太长,则终止线程。但这不是真正的解决办法。

编辑2:

我查看了源文件和堆栈跟踪的长期运行代码。如果这对您有任何意义,那么问题就在org.apache.xerces.parsers.DTDConfiguration.parse(boolean)中。

EN

回答 6

Stack Overflow用户

发布于 2013-04-10 20:51:34

您正在尝试将HTML页面读取到Jena模型。换句话说,您使用application/rdf+xml媒体类型为此URI发送HTTP请求。(有关链接数据中内容协商的更多信息,请参见http://wifo5-03.informatik.uni-mannheim.de/bizer/pub/LinkedDataTutorial/#Terminology )网络上的链接数据资源有重定向机制。可能,DBpedia重定向会在那里产生一个问题,例如无限重定向循环,或者可能是基于DBpedia的虚拟RDF存储存在问题。你应该问这个问题到dbpedia邮件列表,他们可以帮助你。

作为一个建议,如果您需要检查给定的URI是否返回一个链接的数据资源描述,您可以为几种不同的媒体类型(如application/rdf+xml、application/text+n3等)发送简单的HTTP,如果在指定的时间内得到任何响应,则可以使用Jena解析检索到的响应。下面是一个例子:

代码语言:javascript
复制
HttpGet get = new HttpGet();
get.setURI(URI.create("http://dbpedia.org/resource/Pizza_Deliverance"));
get.setHeader("Accept", "text/n3");
HttpClient client = new DefaultHttpClient();
HttpResponse response = client.execute(get);
HttpEntity entity = response.getEntity();
System.out.println(EntityUtils.toString(entity));

此代码返回描述资源的N3文档。如果您使用"application/rdf+xml“媒体类型为您的解救 URI尝试这段代码,您将得到一个HTTP406异常。这个错误可能意味着您需要了解URI的类型。

票数 2
EN

Stack Overflow用户

发布于 2014-02-06 17:58:21

我对http://bio2rdf.org也有同样的问题。当我用curl请求它时,我看到它只返回HTML,就像在您的例子中一样。因此,我认为耶拿应该返回某种不可解析的异常,一旦它看到它不能理解格式。

在您的例子中,修复应该是使用正确的dbpedia资源,它是http://dbpedia.org/resource/Pizza_Deliverance而不是http://dbpedia.org/page/Pizza_Deliverance (差异是resourcepage),因为http://dbpedia.org/page/Pizza_Deliverance只是在浏览器中读取它的HTML表示。

作为一个更一般的解决方法,我编写了下面的readModel-method,您可以在这里找到它:https://gist.github.com/white-gecko/8849251。如果它得到一个不被接受的数据类型的答案,它只返回null

票数 1
EN

Stack Overflow用户

发布于 2013-04-10 18:42:50

几年前,我使用http://www.mindswap.org/2003/pellet/demo.shtml检查了我的本体或本体URI。也许你可以先用小球检查你的url。此页面还向您的本体复杂性提供了建议。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15926195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档