6

我想在我的机器上下载两个或更多数据集,并能够为每个数据集启动一个 SPARQL 端点。我试过 Fuseki,它是 Jena 项目的一部分。但是,它将整个数据集加载到内存中,如果我打算查询像 DBpedia 这样的大型数据集,考虑到我打算做其他事情(启动多个 SPARQL 端点并在它们上使用联合查询系统),这并不是非常需要的。

提醒一下,我打算使用SILK链接多个数据集,使用FEDX联合查询系统查询它们。如果您建议对我正在使用的系统进行任何更改,或者可以给我一个提示,那就太好了。如果您建议一个适合该项目的数据集,这也会很有帮助。

4

2 回答 2

4

Jena 的 Fuseki 可以使用 TDB 作为存储机制,而 TDB 将东西存储在磁盘上。关于在 32 位和 64 位 Java 系统上进行缓存的 TDB 文档讨论了文件内容映射到内存的方式。我不相信 TDB/Fuseki 将整个数据集加载到内存中;这对于大型数据集是不可行的,但 TDB 可以处理相当大的数据集。我认为您应该考虑使用tdbloader创建 TDB 存储;然后您可以将 Fuseki 指向它。

在这个答案中有一个设置 TDB 存储的示例。在那里,查询是使用 执行的tdbquery,但根据文档的运行 Fuseki 服务器部分,使用相同的 TDB 存储启动 Fuseki 所需要做的就是使用以下--loc=DIR选项:

  • --loc=DIR
    使用现有的 TDB 数据库。如果不存在,则创建一个空的。
于 2013-06-09T18:50:47.943 回答
2

正如 Joshua 所说,Jena 的 Fuseki 使用 TDB,因此它可以在不使用大量资源的情况下存储非常大的本体。例如,您可以将Yago2 分类加载到其中,并且只使用大约 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>
    …
于 2013-06-10T07:51:26.780 回答