4

我想编写一个使用 Prolog 查询 RDF 三元组的 Python Web 应用程序。我发现pyswip用于将 Python 与 SWI-Prolog 连接起来,我目前正在研究 SWI-Prolog 的 RDF 功能。我想知道是否有人以前尝试过这个——如果有人尝试过:你的设置是什么样的?你如何让 pyswip 与 SWI-Prolog 语义网络库一起工作?或者是否有另一个 Python-Prolog 接口可以让这更容易?

编辑:

我实际上找到了一个非常好的解决方案。我之前使用 AllegroGraph 3.3 Python API 对 RDF 数据进行 Prolog 查询,但我认为他们对 Allegro Common Lisp 的 Prolog 扩展有点缺乏,因为它缺少诸如数字比较运算符之类的东西。从那以后,我尝试了 AllegroGraph 4.6,我发现他们的 Prolog 扩展中缺少的任何东西都可以通过以下事实来弥补:您可以使用lisp转义函子编写 Allegro Common Lisp 表达式来处理您需要做的任何事情由 Prolog 扩展提供。由于某种原因,当我使用 AllegroGraph 3.3 Python API 时没有定义这个函子,但显然 Allegro 的开发人员从那时起已经走了很长一段路。

我建议任何想要构建一个使用 Prolog 查询 RDF 数据的 Python Web 应用程序的人。它超级快速且超级强大。

4

2 回答 2

4

我没有使用过 pyswip,虽然前段时间我看了一下。你的问题很有说服力,而且 pyswip 看起来很有吸引力,尤其是“pythonic”界面。

然后我设法安装,但完成后(我不得不调整安装“说明”,因为我正在运行一个相当最新的 SWI-Prolog),我无法运行简单的介绍性示例而不会引发奇怪的问题:示例声明中的错误数量,SWI-Prolog 抱怨 2^assertz 上的错误处理术语引用等。而且我找不到任何文档....

我建议使用Boost.Python和 C++ SWI-Prolog FLI(外语界面)。

也许我们只需要一个方法:比如 PrologEngine.call(TermArray),映射到 call/N,以完全访问丰富的 Prolog 库(其中包括 SemWeb)和一些反射调用。

也就是说,我认为这不是一项微不足道的任务,也许 pyswip 提供了一种更好的方法,一旦调试......

我可能有兴趣在编码方面进行合作,我知道一点 Boost 和 C++ FLI,但我不是 Python 编码器,只是用它来原型使用 Google Docs(或者更好,只是电子表格)......

OTOH 我喜欢在 Prolog 中写作,现在,题外话,我想跑题,向您提出一个稍微不同的方法:使用 SWI 的 HTTP 服务器功能在逻辑和表示之间创建一个更独特的接口(即更多 MVC)-序言。

编写一个公开为 (X)HTML (+JSON+SVG+...) 的服务器,并在 python 中使用(或解析)输出。一种 RPC。

这样逻辑将被强解耦,然后将大大增加可重用性。当然,如果您对“in se”中的三元组不感兴趣,但对它们的语义感兴趣,这是有道理的。

我认为调试也可以容易得多,总是由于解耦。Jan Wielemaker,主要 SWI-Prolog 开发人员,经常建议难以驾驭一起运行的复杂引擎的行为,比如 Java(我认为 Python 会类似)和 Prolog,特别是在涉及多线程时(总是,如果我们认为其中)。今天,将使用多线程。

于 2012-06-06T01:19:34.537 回答
3

我没有使用 pyswip 的经验。但供您参考,swi prolog 似乎很有能力,因为我对库knowrob有一些经验,这是用于机器人学中的人工智能推理。不确定这是否有帮助

于 2012-06-06T01:52:44.093 回答