很长时间没跟大家分享经验了,写这篇文章的时候,离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]下载,里面也有很多说明,具体就不说了。里面包含如下内容
![](https://i-blog.csdnimg.cn/blog_migrate/1603b9e9af28ed25c906b019d3811afd.jpeg)
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));
}
}
}
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,结果如下:
![](https://i-blog.csdnimg.cn/blog_migrate/a457bd9a786249ce928b3b5e96357e35.jpeg)
转载于:https://blog.51cto.com/ziapple/57621