2514 2011,Vo1.32,No.7 计算机工程与设计ComputerEngineering andDesign 基于规则的网站信息检测与修复方法 朱菁菁, 杨小虎 (浙江大学计算机系,浙江杭州310027) 摘 要:为了给网站管理员提供有效的、半自动化的_T-具,帮助他们处理一些可能预见的问题,提出了一种采用逻辑语言实 现自动推理验证网站信息的半自动化方法,并用逻辑编程语言prolog实现。基于用户最初制定的规则来检测网站所发布的 信息,同时做出相应的处理,力求能最大限度地自动修复、完整网页内容。实验结果验证了该方法的有效性。 关键词:prolog;XML文件处理;逻辑编程;网站检测;网站修复 中图法分类号:TP391.1 文献标识码:A 文章编号:1000—7024(2011)07—2514—04 Rule—based website verification and repairing approach ZHU Jing-jing, YANG Xiao—hu (Department of Computer Science Technology,Zhej iang University,Hangzhou 3 1 0027,China) Abstract:Verifying and repairing website content for its correctness and completeness is a challenging research issue.In order to provide web administrators with an effective and semi—automatic mechanism to assist them in ifxing every possible expected problem,an approach ofr semi—automatically is proposed to verify website information based on the logic programming,and is realized by logic programming language prolog.This approach based on the rules given by users at ifrst,and will semi—automatically repair and audit website when any problem is captured and is dealt with.The result shows it give suppo ̄to automated website verification and repair. Key words:prolog;XML processing;logic programming;website verification;website repairing 0引 言 匹配的方法,直接将它用prolog语言实现。相比文献[4】,本文 在简单的模式匹配的基础上,引进规则的判定,与文献【4]中所 网站设计日趋复杂,使得网站的维护工作越来越困难, 描述的相区别;文献[5]中作者提出了一种可以抽象描述规则 网站管理者需要有效的自动化工具来协助网站的可靠性和 的语言,在我们的工作中也需要将用户制定的规则用程序语 完整性维护工作。本文提出了一种基于规则的网站自动检 言表达,选择使用prolog逻辑编程语言,相比文献[7】更为灵 测与修复方法,一旦检测到了网站内容中有违背事先所制订 活、丰富。总之,我们实现的过程基于用户最初制定的规则, 的规则的条目,则予以修改或者报出错信息。该方法主要通 用这些规则来判定事实,当然首先要将网页内容转换成prolog 过逻辑编程语言实现,本文采用的是逻辑编程语言prolog。 中的既定事实。 prolog在处理半结构化文件、编写规则上较有优势,主要用来 检测和处理xML,HTML文件的内容。通过将XML/HTML文 l基于规则的检测、修复技术 件的内容转换成prolog下可以判断的事实,然后选择性的应 1.1 prolog与实现大致流程 用规则进行结构上、内容上的匹配检测,并以此判断内容是 Prolog(programminginlogic)即逻辑编程,以prolog为代表 否符合限制条件。 的逻辑程序设计(LP)语言是一类重要的人工智能应用语言。 有关于网站内容的检测与修复,及其相关工作在过去的 主要特点是问题描述和问题求解过程的分离,且在处理结构 很多文献中被作为课题研究。文献[1]中提出了基于类型的检 化问题上有一定的优势。 测方法,包括静态文件验证与运行时二次验证,防止修复后破 会想到用prolog实现网站内容验证,是因为prolog程序 坏另一限制的现象出现;文献[2】中提出的是一种基于重写的 的特点与网页验证的情景很相似。prolog程序是由一系列的 架构,作者将传统的模式匹配机制用树形模仿所代替,这种树 事实和规则组成的数据库,事实是prolog中最简单的谓词,通 形模仿技术对于识别半结构化的文件(xML/HTML)内容更为 常将事实作为数据库来搜索,而通过模式匹配能够完成一般 适合;文献【3】介绍了基于树形模仿,用Haskell语言实现的网 语言中的判断操作 。Prolog语言最强大的功能之一就是它内 站检测工具的一个雏形;文献[4】中作者使用的也是基于模式 建了模式匹配算法——联合操作,能自动完成模式匹配。 收稿日期:2010—07—08;修订日期:2010-09—16。 作者简介:朱菁菁(1985一),女,浙江杭州人,硕士研究生,研究方向为软件工程、分布式计算; 杨小虎(1966一),舅,浙江绍兴人,研究 员,研究方向为软件工程、分布式计算。E—mail:jingjingz@zju.edu.cn 朱菁菁,杨小虎:基于规则的网站信息检测与修复方法 2011,Vo1.32,No.7 2515 例如,“在厨房里有一个小的红苹果”将其转化成prolog 下的事实就是: location(object(apple,red,small,1),kitchen). 联合操作的例子如图1所示(其中‘=/2’是prolog的内部 谓词)。 图1 简单的联合操作 关于网站信息验证,我们所要做的就是从用户制定的规 则出发,逐一检测网页内容中是否存在与规则相违背的信息。 一旦发现,如果可以自动修改的则修改到符合规则的格式及 内容,如果不能修改的则向网站管理员报出错信息。结合我 们的检测流程和prolog程序的特点,实现过程如下: (1)将网页内容(XML\HTML文件)转换成prolog可以搜 索的事实。XML或HTML文件的格式并不符合prolog下事 实的要求,如果我们希望prolog将网页内容作为事实来搜索 的话,首先要解决的问题是转化XML\HTML文件的格式,使 得在内容不变的情况下,可以作为可判定的事实,被prolog 程序搜索匹配。 (2)网站管理员制定最初的网站限制规范。简单的规范 诸如某项内容的值不能为空、一项内容的值与另~内容值相 关联等。 (3)将一系列的规则用prolog语言抽象描述。需要将自然 语言表述的网站规范转化成prolog下用来判定事实的规则。 (4)调用prolog程序,基于规则对网页内容进行检测,检测 是通过上述的模式匹配完成的。将规则应用于内容转化的事 实上,如果匹配成功则符合规则,如果匹配不成功,表示此处 出现了违反规则的内容。此外,prolog程序内建的自动回溯功 能,保证了对网页内容的遍历搜索,使得同一规则多次作用于 事实,而不需要人为遍历判定。 (5)根据检测到的结果激活相应的处理措施:自动修复或 报错。 1.2网页内容转化 本文所提出的方法主要是针对用XML或HTML文件表 示的网页。 图2为books.xml文件,将其简单的视为一张基于XML的 网页。因为这个文件树形结构的特点,使得我们可以将文件 内容转化成prolog中对应的事实。也就是说,一张网页(xML 文件)对应一系列事实,网站即为一系列有限的事实的集合。 经过转换books.xml对应的prolog事实如图3所示。 显然我们转换的目的是为了能够使用联合操作进行检 测。对比图1中的例子,转换得到的表达正好符合prolog中事 图2 books.xml 图3 book.xml转换后的prolog事实 实的格式。 假设变量XML BOOK的值等于上述网页转化后的事实, 那么通过联合操作查找上述网页中出版社为‘ChinaMachine’ 的书,可以简单的通过下面的语句实现: XML,—BOOK=books(book(x,_press(‘China Machine’)),_). 上述等式中变量x即为我们所要找的书。显然X=name Thinkinginjava')。等式中多次出现符号‘’,一是因为在正常的 网页中,并不只有例子中的几个标签,对于不关心的标签项可 以用‘’代替。 1.3网页规则 接下来考虑如何将管理员制定的网站规范用prolog语言 描述。网站规范包含一系列的规则,我们将管理员制定的规 则大致分为两类:正确性规则与完整性规则。 1-3.1 正确性规则 L—r 如果L项在网站w的某一网页内容中被找到,那么L的 内容必须被规则r认定是正确的,否则视为出错。 例如,书的作者不能为空: books(,book(_,author(N),_),_)一XML_BOOK. L:N. r:notempty(N). 书的价格大于零: books(,book(,_price(P),_),—)一=XML_BOOK. L:P r:atem2number(P,v1): 2516 2011,Vo1.32,No.7 Pl>0. 计算机工程与设计Computer Engineering and Design 1.3.2完整性规则 L一(r)LI 如果L项在网站w的某一网页内容项中被找钊,那么按 照规则r,L1项也必须在网站w的网页内容中存在,否则视为 出错。 例如,如果书的库存量等于0,则借书页面应显示’unavai— lable’: books(,book(,name(N),,store(S),),)一XML BOOK. bookborrow(book(name(N)_canborrow(CB),_),一)一= ,XMLB00KB0RR0W. L:N.S. L1:N,CB. r:atem2nnmber(S,SI); S l=0,CB= available ; S 1>0.CB= unavailable . 1-3-3修复措施 应用规则匹配事实的同时,我们根据规则的分类来制定 处理规则的措施 基于以上两种规则,我们不难发现违背规 则的情况通常发生在网页内容项缺少、冗余,又或者是网页内 容项的格式、值不符合。基于这些情况,制定的处理措施必然 包含增添、删除、修改等的操作。一旦检测到任何违背以上两 种规则的信息,处理的方式有以下几种: (1)insert(S,XML TERM1,XML TERM2):基于规则R,添 加XML文件中缺少的项s: (2)delete(S,XML TERM1,XML TERM2):基于规则R,将 XML文件中的项s删除: (3)change(S1,S2,XMLTERM1,XMLTERM2):基于规则 R,将XML文件中的项S1用s2代替; (4)failure(R,Meg):检测到XML文件中存在违背规则R的 项,给出错误信息(针对无法自动修复的规则)。 以上4种处理方式用来处理需要修复的网页内容,当错 误被检测到时相应的措施会被激活。具体细分可以发现,处 理违反正确性规则的通常足change,failure ̄这止匕措施都可能 用来处理完整性规则。 1.4验证与修复 关于验证的原理,前面已经提到过使用的正是prolog中 的联合操作。简单的联合在1.1/1.2中已经介绍并举例,直接 调用prolog的内部谓词就可以实现。 标准的联合在匹配网页内容转换的事实时会产生一些问 题。标准联合要求单项逐个匹配,而非标准联合并不要求严 格匹配。基于网站内容的特点,本文采用非标准联合来检测 网站的信息。标准联合与非标准联合比较如图4所示。 此外,prolog还有一个强大的回溯功能,使得错误的检测 可以自动遍历,也就是说不会在发现首个错误后就立即停止, 而是持续直到搜索完整个XML文件内容。 最后根据检测到的结果激活相应的处理措施:自动修复 或报错。网站管理员最初在制定网站规范的时候,对于一些 简单的、易于程序自动修改的内容应该同时给出修改的动作。 例如,如果程序检测到时间格式不符合,那么修复的结果就是 图4标准联合与非标准联合比较 修改到符合网站设计要求的时间格式。但对于另外一一些违背 规则的内容I例如,某项的值为空),程序很难自动修改,这时候 做出报错的处理。 修复过程如下:任何时候当一个错误被检测到,一种可能 的修复措施将被选择激活,为了处理错误,指定的代码将被执 行。也就是说prolog程序会根据规则遍历搜索网页内容转换 后的事实,一旦发现跟规则不匹配的内容,就激发某一修复措 施,如果不能够自动修复则报出错信息,最后人为修改。 2 实 现 2.1实验结果 本文实现部分的代码都是在SWI-Prolog 平台上编译、 运行的。 假设处理的初始文件为XML FILE1,处理得到的最终文 件是XML FILE2,总过程如下: transaction(XML FILE I,XMLFILE2):一 xml2pro(XML FILE1,X1), rl(X.,X ), r2(X2,X,), m(X ,X ), pro2xml(X ,XML FILE2). xml2pro和pro2xml两个函数处理XML文件内容与prolog 事实之间的转换。变量x、为最初转换得到的事实,rI至IX1函 数则顺序判定每一规则是否符合,不符合的当下就采取相应 措施。经过一系列规则的匹配检测,最终得到的变量x ,为 修复后的事实,转化后得到的XML_FILE2文件就是我们想要 的结果。 实例:假设我们维护的是一个图书网站,网站中的某一网 页包含图书的名称、作者、出版社、年份、价格等的信息。我们 为这张网页制定一些最简单的规则: (1)每本书都要有相应的价格信息,既不能为空,也不能为 负值,当检测价格为空或负值时报出错信息; (2)对于2010年新上架的书,在网页条目上显示“new” 信息,当检测到没有显示“new”的2010的新书时,自动添加 new标签; (3)对于出版社为“Forbidden”的图书不能上架,当出版社 为“Forbidden”的图书被检测到时,自动予以删除。 朱菁菁,杨小虎:基于规则的网站信息检测与修复方法 2011,Vo1.32,No.7 2517 部分代码如下: transaction(XMLF1LE1,XMLFILE2):一 xmt2pro(XMLFILE 1,X 1), rl(X1,x2), r2(x2,x3), r3(X3,x4), pro2xml(X4,XML FILE2). rl(X,Y):一 r1modify. rlmodify:一 X~:books(,book(,price(P),), atom number(P,P1), P1<0. failure(“rl”.”price is negtive”). rlmodify:一 X= ̄=books【_,book(一,price(P),一),j, empty(P), failure(“订”.”price is null”). r1modify:一write(’rulel completed.’). r2(X,Y):一 r2modify(X.Y). r2modiyf(X,Y):一 X=:~=books(,book(,name(N),yeaff’20 1 0’).), replace(book(,name(N),year(’2010 ), book(,name(N),year( 20 1 0 ),lfag(‘new’),X,Y), r2modiyf(X,Y):一write(’rule2 completed.’). r3(X,Y):一 r3modify(X,Y). r3modify(X.Y):一 X一=books(book(,,name(N),press(’Forbidden’),_),_), delete(book(,name(N)~,),x,Y). r3modiyf(x Y):一write(’rule3 completed.’). 程序运行结果显示最终的 页内容都能符合我们最初制 定的3点要求。 2.2分析 本文提出了一种网站榆测与修复方式,这种方式很好的 利用了逻辑编程语言事实与规则相对独立的特点。逻辑编程 语言由一系列的事实和规则组成,通常将事实作为数据库来 搜索,用相对独立的规则与之匹配。另一方面,对于网站来 说,内容通常是不固定的。对于丰富的网页内容,我们很难针 对特定的内容制定规则,所以我们希望能够制定与内容相对 独立的规则,并用规则来检测时刻变化的网页内容。显然,逻 辑编程语言事实和规则相对独立的特点正好符合了我们所希 望的内容与规则的关系。因而这种新的检测与修复方式的提 出是可行的,并且在某些方面有一定的优势。 另一方面,本文采用了prolog语言来实现,这是因为pro— log强大的联合和回溯功能给实现自动检测提供了可能性。规 则之于网页内容的检测主要是通过prolog的联合操作完成的: 将网页内容与规则转化为prolog下的谓词,从而可以埘内容 和规则进行匹配操作。又有于网页内容的信息量较大,所以 显示中不可能~次匹配所有内容,而回溯的功能解决了这个 问题。XML/HTML文件内容的树形结构化特点使得网页内容 的很条目都是嵌套存在的,我们采用回溯的方式嵌套的匹配 条目,从而遍历全部的网页内容。从上述一些例子可以看出 用prolog实现是可行的。 对于检测到的结构化问题,比如格式错误,只要给出相 应的正确格式表达式还是很容易修复的。但是对于自动修复 网页内容上二的错误要实现起来还是比较困难,我们无法罗列 每一种内容错误的解决方式,所以修复修复通常还是需要人 为参与。 3结束语 本文提出了一种基于规则的网站信息自动检测与修复方 法,并通过逻辑编程语言prolog实现。简单的网站基于事先 制定的规则,正确性、完整性错误可以被自动检测到,同时激 活相应的处理措施。如今,有越来越多的网站是基于XML文 件或HTML文件,它们的特点都是树形结构化,因此开发类似 于本文所述方式的工具是有价值的,可以减少网站维护的T 作量,能最大范围使用工具自动完成。 参考文献: [I】 Coelho J,Florido M.Type—based static and dynamic website veri— ifcation[C].Indian:IEEE Second International Conference on In— ternet and Web Applications and Services,2007. 【2] Alpuente M,Ballis D,Falaschi M.A rewriting—based framework for web sites verification[C].Italy:Elsevier Science,2005:4 1—6 1. [3j Alpuente M,Ballis D,Falaschi M.VERDkan automated tool for web sites veriifcation【EB/OL].http://users.dsic.upv.es/grupos/ elp/GVerdi/,2006. [4】Despeyroux T.Practical semantic analysis ofweb sites and docu— ments[C].ACM,2005:685—693. [5] Coelho J,Florido M.A constraint logic programming approach to veriifcation ofwebsim content[C].USA:International Workshop on XML Research and Application,2006:48・156. [6] William Flocksin,Christopher S Mellish.Programming in prolog fM].USA:Springe 20O5:52—55. 【7]VeriFlog[EB/OL].http://www.dec.fc.up.ptJjcoelho/verilfog/,2008. [8] SWI—Prolog[EB/OL].http://www.swi—prolog.org/.2010.