无法查询本地Wikidata转储

问题描述

我正在尝试针对2016 Wikidata dump (.ttl format)在本地运行“猫” Wikidata查询

PREFIX bd: <http://www.bigdata.com/rdf#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>

SELECT ?item
WHERE
{
  ?item wdt:P31 wd:Q146.
}

为此,我正在终端中运行sparql --data wikidata-20160201-all-BETA.ttl --query cats.rq我有一个R5 3600X cpu和16GB RAM,并且该查询最终持续运行了几分钟,使用了70%的cpu和大约4GB的RAM。 Wikidata上的查询(目前的数据量比2016年高出几倍)在2秒内运行,同时仍使用SERVICE获取标签,而我不是。

我正在使用Apache Jena来运行SPARQL查询,并且我主要在Windows 10上进行了测试。 对于小型文件(例如Learning SPARQL中的文件),查询会立即返回正确的结果,因此Apache Jena似乎已配置好并且工作正常。但是,我是知识库/ Wikidata / SPARQL等方面的新手,所以也许我搞砸了。

编辑:大约20分钟后,我收到以下错误消息: Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded

解决方法

sparql --data wikidata-20160201-all-BETA.ttl ...将尝试在执行查询之前将整个文件加载到内存中。 wikidata-20160201-all-BETA.ttl是大文件。

相反,将文件加载到TDB数据库中:

tdb2.tdbloader --loc WD wikidata-20160201-all-BETA.ttl

然后查询:

tdb2.tdbquery --loc WD --query cats.rq

它不适合存储在内存中,只需简单查找就可以加载所有内容。当您使用SERVICE并询问WikiData端点时,您正在查询已经加载的数据库。

耶拿(Jena)中有一个远程SPARQL工具:rsparql

rsparql --service https://query.wikidata.org/bigdata/namespace/wdq/sparql --query cats.rq

这会将查询发送到给定的端点,并支持与sparql相同的输出输出选项。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...