我想在我的机器上下载两个或更多数据集,并且能够为每个数据集启动一个SPARQL端点。我尝试了Fuseki,这是Jena项目的一部分。但是,它会将整个数据集加载到内存中,如果我打算查询大型数据集(如DBpedia),我打算做其他事情(启动多个SPARQL端点并对它们使用联合查询系统),这是不太需要的。
为了让您了解一下,我打算使用SILK链接多个数据集,使用FEDX联合查询系统查询它们。如果你建议改变我正在使用的系统,或者可以给我一个提示,那就太好了。如果你建议一个适合这个项目的数据集,它也会很有帮助。
答案 0 :(得分:4)
Jena的Fuseki可以使用TDB作为存储机制,TDB将内容存储在磁盘上。关于caching on 32 and 64 bit Java systems的TDB文档讨论了文件内容映射到内存的方式。我不相信TDB / Fuseki将整个数据集加载到内存中;这对于大型数据集来说是不可行的,但TDB可以处理相当大的数据集。我认为你应该考虑做的是使用tdbloader
创建一个TDB商店;然后你可以指出Fuseki。
有一个在this answer中设置TDB商店的示例。在那里,查询是使用tdbquery
执行的,但是根据文档的Running a Fuseki server部分,使用相同的TDB商店启动Fuseki所需要做的就是使用--loc=DIR
选项:
--loc=DIR
使用现有的TDB数据库。如果它不存在,请创建一个空的。
答案 1 :(得分:2)
As Joshua said,Jena的Fuseki使用TDB,因此它可以存储非常大的本体,而无需使用大量资源。例如,您可以将Yago2 taxonomy加载到其中,并仅使用大约600MB的RAM。您不需要将Fuseki加载到Java项目中,只需从命令行运行它并在项目中查询它即可。
通过以下方式将其加载到Windows命令行:
java -jar c:\your_ontology_directory\fuseki-server.jar \
--file=your_ontology.rdf /your_namespace
然后,您可以使用任何GET / POST应用程序(甚至在您的浏览器中)对它运行SPARQL查询:
http://localhost:3030/your_namespace/sparql?query=SELECT * { ?s ?p ?o }
默认情况下,结果以XML格式返回。
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="s"/>
<variable name="p"/>
<variable name="o"/>
</head>
<results>
<result>
<binding name="s">
<uri>http://yago-knowledge/resource/wordnet_gulag_103467887</uri>
</binding>
<binding name="p">
<uri>http://www.w3.org/2000/01/rdf-schema#subClassOf</uri>
</binding>
<binding name="o">
<uri>http://yago-knowledge/resource/wordnet_prison_camp_104005912</uri>
</binding>
</result>
…