SWI-Prolog语义Web库和Python接口

我想编写一个使用Prolog查询RDF三元组的Python Web应用程序.我发现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应用程序的人.它超级快速且功能强大.

解决方法:

我没有使用过pyswip,虽然前段时间我看过它.你的问题引人注目,pyswip看起来很有吸引力,特别是’pythonic’界面.

然后我设法安装,但完成后(我不得不调整安装’说明’,因为我正在运行一个相当最新的SWI-Prolog),我无法运行简单的介绍性样本而不会产生奇怪的问题:样本声明中的错误arity,SWI-Prolog对2 ^ assertz上错误处理的术语引用抱怨,等等.我找不到任何文件….

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

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

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

我可能有兴趣合作编写一些东西,我知道一点Boost和C FLI,但我不是Python编码器,只是用它来原型化Google Docs的使用(或者更好,只是Spreadsheets)……

OTOH我喜欢在Prolog中写作,现在,偏离主题,我会做一个题外话,并提出一个稍微不同的方法:使用SWI的HTTP服务器功能在逻辑和表示之间建立一个更独特的界面(即更多的MVC)序言.

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

这样,逻辑将被强烈地解耦,然后将增加很多可重用性.
当然,如果你对seles中的三元组不感兴趣,那么这是有道理的.

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

上一篇:如何从swi-prolog中执行的python脚本获取输出值


下一篇:java – 可以推荐哪种语言用于文本挖掘/解析?