语义Web中的Swi prolog

unc*_*ons 22 java semantic-web prolog swi-prolog dcg

我想听听那些在使用swi-prolog的语义库方面拥有真实编程经验的人.

编辑:这个问题的原因是,在我与prolog经验交谈的很多人中,他们中的大多数人似乎已经在他们的学术项目中使用它进行一些人工智能编程.我想知道是否有人在生产环境中广泛使用它.由于实时可维护性,性能不同于完成项目以获得好成绩.

你是如何与Java这样的编程语言集成的?

编辑:如答案所述,似乎REST服务或使用swi prolog的外部接口是两个最佳选择.

您使用prolog库(在语义Web的上下文中)是什么?

可能不会在这里得到明确的答案.可能是,这个问题属于语义溢出.我现在有一个很好的想法,并将在更合适的论坛继续讨论.

使用了什么开发环境? 由swi prolog提供的Emacs或其变体似乎是压倒性的答案.

我从来没有想过像Intellij IDEA这样的IDE.毕竟我会做什么,自动完成?我理解基于规则的语言的必要性.再说一遍,我之所以讨论开发环境,是为了帮助我追踪我的规则(调试),也可能在我的知识集中找出异常.Sw prolog图形跟踪器照顾第一个要求,但至少对我来说,它出现了粗制滥造和有限.但我不相信还有别的.

我真的很喜欢使用swi prolog的想法,但如果它影响生产力,它会远离它.

如答案所述,prolog应该被用来表现它擅长的东西.我总是知道这一点,因此我的问题是与其他编程语言的集成.似乎最大的生产力是开发人员的质量,并处于开发阶段.系统中的问题可能处于休眠状态且不易修复,但可以通过使用一组问题来检查系统的有效性.

注意:当我提到答案时,我指的是@littletable提供的答案.也有兴趣在SWI序言中人们对于语义网,西娅看起来很有趣.

Lit*_*les 12

免责声明:我没有在商业/生产环境中使用SWI-Prolog,我没有尝试使用SWI/Java界面(虽然在SWI-Prolog邮件列表中报告它工作得相当好),我对此没有兴趣语义网.

也就是说,我确实使用SWI-Prolog编写了一个大型且非平凡的项目,它不是一个玩具应用程序 - 我需要它才能完成我的研究.因此,我有一些回答这个问题的凭据,即使不是所有必需的.

在大型项目的上下文中,最好将Prolog视为用于编写搜索例程的特定于域的语言 - 与SQL和存储不同.Prolog做得非常好,它解决了搜索问题.如果您的问题可以缩小到给定一组事实和规则的一组变量的有效赋值,Prolog是您的选择武器:除了调整之外,您不必担心编码中的任何其他内容查询和规则.它也会运行得相当快,特别是如果你编译谓词.Prolog通常很慢,不是因为它本身很慢,而是因为它在大型搜索空间上运行搜索例程.

记住这一点,您可以使用与SQL集成类似的方式将其与Java集成:Prolog负责解决搜索问题.它存储永久数据和规则,并运行查询.Java应用程序负责其他任何事情.

开发环境对Prolog来说有点软.你不会得到一个花哨的IDE - 只是因为很少有东西可以想象.Prolog程序很少有完整的编译时信息,因此您无法获得完美的自动完成功能.我只是使用Emacs,Prolog shell总是打开.对于大多数事情,Prolog文本跟踪器/调试器都可以解决问题.SWI带有自己的图形化调试器,但我还没有尝试过.

Prolog有几个鲜为人知的优点:内置的解析框架(DCG规则),一个很棒的宏系统(术语扩展)和元谓词(call,findall等).如果你知道如何使用它们,这些都是你的套牌中真正的优势.

总结一下:Prolog是否会提高或损害生产力?这取决于目前阻碍生产力的因素.如果你浪费太多时间想知道如何在Java中实现知识表示和搜索例程 - 只需使用Prolog; 它不像你实现自己的红黑树而不是使用SQL.如果您正在寻找软实时性能和破坏IDE - 请尝试其他方法.


Sam*_*mpa 5

我也没有真正在生产环境中使用它,但我将它集成到基于Java/Eclipse的Bioclipse工作台中,用于实际场景,作为我的论文工作的一部分.此外,论文的工作重点是测试Bioclipse中prolog集成的性能和可用性.

我将简要回答您在下面提出的问题,但对于任何感兴趣的人,最多的信息可以在我的论文报告中找到,名为"SWI-Prolog作为语义Web工具,用于Bioclipse中的语义查询:集成和性能基准测试",如以及我的相关标记博客文章.源代码在github仓库中提供.

你是如何与Java这样的编程语言集成的?

我使用了JPL Java Prolog接口

您使用prolog库(在语义Web的上下文中)是什么?

我用它来对一些60000核磁共振谱的RDF数据库做一些模式匹配,包含不同高度的峰.与其他语义Web工具(如Pellet和Jena(基于Java))相比,我使用它来测试此操作的SWI-Prolog的性能.(BTW,SWI-Prolog远远超过这两种工具).

使用了什么开发环境?

Eclipse RCP

我真的很喜欢使用swi prolog的想法,但如果它影响生产力,它会远离它.

我的经验是,除了提高某些问题的生产率之外,某些操作的性能也远远优于使用传统编程语言编写的工具.