Prolog服务器页面概述

2016-07-22 19:56胡伟强胡丽芳
电脑知识与技术 2016年16期

胡伟强+胡丽芳

摘要:Prolog Server Pages(PSP)是一种基于Prolog的脚本语言,它可以嵌入到HTML文档中。运行一个PSP应用程序需要Web服务器、Web浏览器和PSP解释器,代码在服务器端通过解释程序执行,执行结果被发送到客户端。该文以SWI-Prolog作为应用程序后台,在现有的Prolog编译器上实现了一个Apache Web服务器模块,它可以处理PSP文件,并且把嵌有PSP脚本的HTML代码发送到客户端。

关键词:PSP;Web服务器;PSP解释器

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)16-0102-02

1 概述

PSP是一种基于Prolog,能够嵌入HTML文档中脚本语言,利用PSP可以开发基于Web的应用程序,它用Prolog作为脚本语言,就像ASP用Visual Basic作为脚本语言,JSP用Java作为脚本语言一样[1]。Prolog是一种逻辑程序设计语言,特别适合于符号计算,经常用于人工智能中的符号计算和推理[2]。它由一系列规则和事实组成,运行一个Prolog程序就是提出一些查询,利用推理规则,是否能找到相匹配的规则和事实[3]。PSP解释程序由处理PSP请求,和SWI-Prolog进行交互的Web服务器和Prolog后台组成。

2 PSP简介

2.1 PSP脚本

PSP脚本通常存在于一个或多个扩展名为.psp的文件中,一个PSP文件实质上是包含一系列PSP代码的HTML文档。PSP代码位于“<?psp”和 “?>”之间,被称作一个块,每一个块都被单独地传递给PSP解释程序。解释程序把每一个块替换为解释后的结果。下面的例子表明了怎样用PSP生成著名的“hello world”页面。

一个块由一系列Prolog谓词定义和一个或多个Prolog查询组成,它们都是以“.”结束,查询以“?-”开始,这和Prolog的标准约定是一致的。应用程序读到谓词声明后,解释程序立刻将它声明到Prolog数据库中。

一个查询就是让应用程序询问一些关于Prolog数据库的信息,直到找到问题的解或者失败后终止[4]。输出的Prolog谓词被一个专用的套装软件生成HTML代码,PSP将SWI–Prolog的标准流改变到HTTP客户端,从而生成动态的HTML页面,这种机制类似于ASP、JSP技术。

2.2 HTML表单

一个HTML表单就是一段包含普通内容,标记,控件(如文本框,命令按钮,菜单等)和标签的文档。通常用户在将表单提交给Web服务器之前,是通过修改控件来完成表单的。每一个控件都有一个名字,用户使用控件的值向服务器传送信息。PSP提供了存取从客户端接收到的数据的方法,对于每一对(控件名,控件值),PSP解释程序都将其声明为如下事实:arg('控件名', '控件值').下面是一个简单表单的例子,该表单要求输入用户的名字和电子邮件,并调用表单处理程序"form_handler.psp"。

3 实现

本文以SWI-Prolog作为应用程序后台,在现有的Prolog编译器上实现了一个Web服务器模块, PSP可以看作SWI-Prolog和Web服务器之间的接口,我们开发了一个Web服务器模块,该模块可以处理PSP文件,并且能把处理后的结果(HTML文档)发送到客户端。这种实现是在Apache Web Server2.0和SWI-Prolog5.0的环境下开发的。

从开发的观点看,PSP包括以下三个部分:

1) Apache接口;

2) SWI-Prolog接口;

3) PSP解释程序。

PSP解释程序开发成Apache模块,称为mod_psp,它运行在Apache存储空间,系统装载后,mod_psp将自己注册成text/psp文件。当有PSP请求发生时,模块打开请求文件,同时调用解释程序。需要说明的是,内存分配是开发Apache模块的重要方面,因为模块只被装载一次,当一个Apache过程开始时,多个请求是在同一个存储空间处理,当处理子程序结束时,处理请求文件的空间必须被重新分配。否则会发生内存泄露,导致系统不稳定。

SWI-Prolog强大的外部接口使得PSP - Prolog接口的开发变得容易。SWI-Prolog提供的C函数可以声明谓词,找到Prolog查询的解。也可以在C函数里定义Prolog谓词。在实际的解释开始之前,PSP解释程序首先为每一个HTTP参数声明一个事实:arg(控件名,控件值)。PSP解释程序接收一块Prolog代码并且返回Prolog输出谓词的结果[5]。

4 结束语

开发的SWI-Prolog和Apache HTTP服务器之间的接口,PSP使程序员可以利用Prolog高级的推理能力来开发功能强大的应用程序,开发PSP的目的是让其作为ASP和JSP这些技术的替代和补充。因此,在任何情况下Prolog看起来更适合解决一个特定的问题,PSP能够和其他的技术一起使用。

参考文献:

[1] Developer Documentation for Apache 2.0[EB/OL].http://httpd.apache.org/docs-2.0/developer/.

[2] 王永庆.人工智能原理与方法[M].西安:西安交通大学出版社,2003.

[3] 雷英杰,邢清华,孙金萍,等.Visual Prolog 智能集成开发环境评述[J].空军工程大学学报:自然科学版,2002,3(5):39-43.

[4] Bratko I. Prolog Programming for Artificial Intelligence[M]. Addison-Wesley, 2001.

[5] SWI-Prolog Reference Manual[EB/OL].http://www.swi-prolog.org/.