很长时间没跟大家分享经验了,写这篇文章的时候,离web语义学习之路2已经有一段时间了,一是没时间,二是最近也是在研究UDDI的东西,路3其实准备的比较仓促,但没有关系了,本来就是个人学习嘛。路3主要讲上会给大家推荐的WineAgent实例,仔细研究了它之后,发现 [url]http://www.ksl.stanford.edu/people/dlm/webont/wineAgent/[/url]里面涵盖的东西非常多,是一个非常不错的学习web语义的参考。wineAgent主要内容:
1.它采用JTP推理机来完成推理。
jtp是一个非常好的推理机,跟路2介绍的racer不一样,jtp是基于jena推理的,它的好处在于代码开源,完全是用java写的,非常方面我们用java来编程。
2.daml+oil实现
路2我们推荐的本体标准是owl,但这没有关系,daml和owl是一脉相承的,owl就是从daml的基础上发展而来的,而且daml可以很容易转换为owl,所以我们不用担心本体建模的问题。
 
在整个实现过程中,我们必须知道以下内容
1.owl语法,知道了owl你自然就知道了daml,这其实在我们的路1就已经说明了,另外建模的话大家可以多看看protege可视化建模工具,附件给大家分享一个protege中文入门手册,呵呵,转自别人的成果。
2.jtp语法,目前我还未找到任何关于jtp的详细语法介绍,但既然它是基于jena的,我想会jena语法的话,应该不是问题,本人观察了racer、jena的用户手册以及jtp的一些语法片段,发现推理机的语法几乎是一样的,所以我们学习路2的racer就足够了。附件中本人会附上racer的用户手册,手册有2个,给大家的是具体语法参考,另外一个是userGuide,由于文件大于2M上传不上,其实如果大家能吧racer试用版的下下来里面自带就有。
 
我的实例
JTP可以在这个网址 [url]http://www.ksl.stanford.edu/software/JTP/[/url]下载,里面也有很多说明,具体就不说了。里面包含如下内容
jtp-daml.sh和jtp-owl.sh是linux下的运行文件,jtp-daml.bat和jtp-owl.bat是windows下的执行文件,src是源代码,我们也可以不借助.bat运行环境,直接用java来构建推理机。以下是我做的
1.新建一个tomcat工程叫jtptest,把上图的lib下的包拷贝到web-inf/lib下,新建一个test.java,内容如下:
package org.bjtu;

import java.net.URL;
import jtp.*;
import jtp.context.daml.*;
import jtp.fol.*;

public class test
{  
     //定义知识库,即一个owl/daml文件位置。
     public static final String KB_URL = "http://www.daml.org/2001/03/daml+oil-ex";
    //public static final String DRC = "http://www.ksl.stanford.edu/software/jtp/drc.ser";
    
    public static void main (String [] argv) throws Exception
    {
    DamlReasoningContext drc = new DamlReasoningContext();
    drc.setUp();

    drc.loadKB(new URL (KB_URL));
    //推出Peter的年龄
    ReasoningStepIterator rsi = drc.ask("(|http://www.daml.org/2001/03/daml+oil-ex#|::age |[url]http://www.daml.org/2001/03/daml+oil-ex#[/url]|::|Peter| ?x)");
    ReasoningStep rs = null;
    while ((rs = rsi.next()) != null)
    {
  Literal lit = SubstUtils.deReferenceLiteral((Literal)rs.getGoal());
  System.out.println("X = " + lit.getArgs().get(1));
    }
    }

}
运行java Application,结果如下: