3

在 Ubuntu 中使用 SWI-Prolog(多线程,64 位,版本 5.10.4),我试图从 rdf/3 谓词中获取 rdf 三元组,遵循其中一个教程(实际上,所有这些都告诉我相同,但下面的示例与http://cliopatria.swi-prolog.org/tutorial/Parsia/ 类似)。然而,虽然其他谓词似乎运作良好,但 rdf/3 什么也没给出:

?- [library(semweb/rdf_db)].
...
true
?- [library(semweb/rdf_http_plugin)].
...
true
?- rdf_load('http://dbpedia.org/resource/Amsterdam').
% Parsed "http://dbpedia.org/resource/Amsterdam" in 0.32 sec; 4,194 triples
true.

?- rdf(S, P, O).
false.
?- rdf_graph(G).
G = 'http://dbpedia.org/resource/Amsterdam'.

如果我为 P 和 O 输入常数(但我忘了怎么做),我会得到 S 的结果一两次。我不确定这是我的 swipl 版本中的一个错误,还是我忘记了一些重要的事情或一些琐碎的事情。Prolog 和库是从标准的 Ubuntu 12.10 存储库安装的。

(我没有对 semweb 库进行任何测试,因为我不知道该怎么做,因为我不是每天都在 Prolog 中编程)

4

2 回答 2

1

我正在使用从源代码安装的 SWI-Prolog,我可以在您的示例之后看到三元组。那么可能你需要升级你的版本。

于 2013-01-13T16:36:37.793 回答
0

我总是尝试为要加载三元组的图形命名,然后在rdf/4函数中使用该名称。这对我有用,并明确您正在查询哪个图表。例如:

?- rdf_load('http://dbpedia.org/resource/Amsterdam', [graph('amsterdam')]).
% Parsed "http://dbpedia.org/resource/Amsterdam" in 0.19 sec; 5,120 triples
true.

?- rdf_statistics(triples_by_graph(Graph, Triples)).
Graph = amsterdam,
Triples = 5120.

?- rdf(S, P, O, 'amsterdam').
S = 'http://dbpedia.org/resource/Cornelis_Pronk',
P = 'http://dbpedia.org/property/placeOfBirth',
O = 'http://dbpedia.org/resource/Amsterdam' .
于 2017-04-19T20:46:48.463 回答