SWI-Prolog 语义网库及 Python 接口

4
我想编写一个Python Web应用程序,使用Prolog查询RDF三元组。我发现pyswip可以将Python与SWI-Prolog进行交互,并且目前我正在研究SWI-Prolog的RDF功能。我想知道是否有人尝试过这个方法 - 如果有的话:你的设置是什么样子的?你如何让pyswip与SWI-Prolog语义Web库一起工作?或者是否有另一个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 应用程序的人使用此方法。它超级快速和超级强大。
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文档(或更好的是电子表格)...
另一方面,我喜欢用Prolog写作。现在,离题一下,我想提出一个稍微不同的方法:在逻辑和表示之间建立更明显的接口(即更多的MVC),利用SWI-Prolog的HTTP服务器功能。
编写一个服务器,将其公开为(X)HTML(+JSON + SVG + ...),然后在Python中使用(或解析)输出。一种RPC。
这样,逻辑将被强烈解耦,并且可重用性将大大增加。 当然,如果你对三元组“本身”不感兴趣,而是对它们的语义感兴趣,那么这是有意义的。
我认为通过解耦,调试也可以变得更加容易。 Jan Wielemaker,SWI-Prolog的主要开发者,经常建议要掌握同时运行复杂引擎(如Java和我认为Python也是类似的)和Prolog的行为的难度,特别是当涉及多线程时(如果考虑到它,总是如此)。 而今天,必须使用多线程。

我发现 AllegroGraph 4.6 Python API 很适合我的需求。你也可以试试看! - John Thompson
chac:我找到了一个教程,讲述如何使用SWI-Prolog制作JSON RPC服务器。http://technogems.blogspot.com/2011/08/easy-cross-platform-inter-process.html 不幸的是,它给出的示例只执行一个函数:将两个数字相加。您认为制作一个可以执行任意Prolog的RPC服务器有多难?我在这里提出了一个问题:http://stackoverflow.com/questions/11995376/does-a-json-rpc-server-exist-for-answering-general-prolog-queries - John Thompson

3

我对pyswip没有经验。但是供您参考,SWI Prolog似乎非常强大,因为我有使用KnowRob库的经验,它用于机器人中的AI推理。不确定这是否有帮助。


+1:感谢提供链接!这似乎是一个有价值的资源,SWI-Prolog网站上缺少了它。 - CapelliC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接