将大型RDF文件加载到openrdf Sesame本体管理器中

时间:2010-08-23 08:50:22

标签: rdf ontology sesame

我需要将表示为N-triples文件(1gb)的非常大的本体加载到openrdf Sesame应用程序。我正在使用工作台界面来做到这一点。我知道这个文件太大了,无法在一个请求中加载。为了解决这个问题,我将文件分成大小为100mb的文件。但我仍然从openrdf Sesame服务器收到错误:

HTTP ERROR 500

Problem accessing /openrdf-workbench/repositories/business/add. Reason:

    Unbuffered entity enclosing request can not be repeated.
Caused by:

org.apache.commons.httpclient.ProtocolException: Unbuffered entity enclosing request can not be repeated.
 at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:487)

有没有人对openrdf Sesame或其他我可以用于我的任务的本体经理有很好的了解?

非常感谢您的投入

ķ。

3 个答案:

答案 0 :(得分:3)

Sesame Workbench实际上不是这类任务的理想工具 - 尽管我希望它能够处理100MB文件。可能是您运行Sesame的Tomcat设置了POST限制?你可以在Sesame的邮件列表上四处询问,那里也很少有知识渊博的人。但是有两种可能的想法可以完成任务:

处理此问题的一种方法是使用Sesame的Repository API以编程方式上传。有关代码示例,请查看Sesame website上的用户文档。

或者,如果您使用的是Sesame本机存储,则可以使用Sesame的命令行控制台执行“脏”的解决方法:创建本地本机三重存储并将数据上载到本地存储(这应该更快,因为没有HTTP通信是必要的)。然后,关闭Sesame服务器,将本地本机存储的数据文件复制到服务器中的存储数据文件中,然后重新启动。

答案 1 :(得分:1)

我遇到了同样的问题。当我尝试上传“大型”RDF(大约40MB)时,上传过程失败并出现错误:

  

无法重复未缓冲的实体封闭请求。

我尝试其他Tomcat和芝麻,但没有成功。然后我尝试使用芝麻控制台和本地存储库(不是tomcat服务器上的localhost - 正如Jeen在另一个答案中所说)它向我显示另一个错误:

  

格式错误的文档:JAXP00010001:解析器在本文档中遇到了超过“64000”的实体扩展;这是JDK强加的限制。 [第1行,第1栏]

所以我认为关于实体限制的错误在tomcat的某个地方被Umbuffered实体的错误所覆盖。

然后我找到了这个主题What's causing these ParseError exceptions when reading off an AWS SQS queue in my Storm cluster并在tomcat启动之前添加了这个语句:

export JAVA_OPTS="${JAVA_OPTS} -Djdk.xml.entityExpansionLimit=0"

此语句禁用XML解析器中的实体限制(默认值为64 000,如错误消息所示)。在此步骤之后,我可以加载“大”RDF(在40-800MB上测试)。

答案 2 :(得分:-1)

我不确切地知道您希望实现什么任务,但您可能需要查看here以获取具有非正式(主要是自称)可伸缩性结果的可扩展三重存储列表。在这方面,Sesame只报告处理70M的陈述(不是很多......可能是你麻烦的原因。)