3

我想将 wikidata 加载到 virtuoso 中。经过几天的搜索,我找不到任何教程,或者至少找不到使用 virtuoso 来 sparql 查询 wikidata 的人。我不想在服务器上花钱来加载 50G+ 的数据。例如,为什么 virtuoso 而不是 blazegraph?因为我习惯于为 DBpedia 使用 virtuoso。

4

1 回答 1

-3

正如这里和其他地方所指出的,将 Wikidata 加载到 Virtuoso 应该只是从下载中创建海龟文件(最好有多个海龟文件)并批量加载它。为了获得良好的性能,必须有一些参数在 virtuoso.ini 中更改。

然而,将 Wikidata 加载到 Virtuoso 中存在问题,这是由于 Virtuoso 中长期存在的错误与地理坐标的实现有关。要解决这个问题需要修补 Virtuoso,并且不适合胆小的人。

以下是有关如何让 Virtuoso 的开源版本加载 Wikidata 的说明。请注意,地理坐标代码的修补可能会导致使用生成的 KB 出现问题。

1/ 修补地理坐标文字代码,编辑 virtuoso-opensource/libsrc/Wi/rdfbox.c 以注释掉两段检查非地球坐标的代码。请注意,这是 Virtuoso 中的一个错误,并且 Wikidata 符合此数据类型的规范。

/*非地球坐标 if (RDF_BOX_GEO_TYPE == type && DV_GEO != box_dtp && DV_LONG_INT != box_dtp) sqlr_new_error ("42000", "RDFGE", "RDF box with a geometry RDF type and a non-geometry content"); */

/*非地球坐标 if (type == RDF_BOX_GEO && box_dtp != DV_GEO) sqlr_new_error ("22023", "SR559", "几何类型的 RDF 盒子需要一个空间对象作为值,而不是 %s 类型的值(%d)", dv_type_title (box_dtp), box_dtp); */

2/ 给 Turtle 加载器打补丁,编辑 virtuoso-opensource/libsrc/Wi/ttlpv.sql 中 rdf_rl_lang_id 的结尾,如下所示。请注意,这是 Virtuoso 中的另一个错误,它是由并行加载具有不同语言的语言字符串触发的。

id:= sequence_next ('RDF_LANGUAGE_TWOBYTE', 1, 1); --pfps 插入 rdf_language (rl_twobyte, rl_id) 值 (id, ln); 插入软 rdf_language (rl_twobyte, rl_id) 值 (id, ln); 提交工作;-- 如果加载非事务性,这仍然是一个尖锐的事务边界。log_enable (old_mode, 1); --pfps 获取实际的 id,因为它可能是不同的 id := (从 DB.DBA.RDF_LANGUAGE 中选择 RL_TWOBYTE,其中 RL_ID = ln);rdf_cache_id ('l', ln, id); 返回标识;

于 2020-03-27T17:59:33.210 回答