如何用Jena2.64版本调用本体库
这里使用的本体库是用protege4.0.2进行构建的,其建造本体的大致方法一般网上均有建议看PIZZA的列子来进行学习,这里重点实现中文本体的调用。
首先打开Protege4.0.2软件打开本体库:如下图
截取本体信息:1:文件的路径file:E:/分词专用软件/test/math.owl
2:屏幕最上方的本体编号:http://www.semanticweb.org/ontologies/2012/1/Ontology1329894930328.owl#math(这里要加上math)
然后打开Eclipse 创建一个工程,在创建一个文件(名字任意)代码如下
import java.io.*; import java.sql.SQLException; import java.util.Iterator; import com.hp.hpl.jena.db.*; import com.hp.hpl.jena.rdf.model.*; import com.hp.hpl.jena.ontology.*; import com.hp.hpl.jena.util.iterator.*; public class test2 { public static void main(String[] args) { OntModel ontModel=ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);// 创建本体模型 //ontModel.read("file:E:/分词专用软件/ontology/DStructure.owl"); //读取当前路径下的文件,加载模型 //ontModel.read("file:E:/分词专用软件/test/Pizza.owl"); //读取当前路径下的文件,加载模型 //ontModel.read("file:E:/分词专用软件/test/math.owl"); //读取当前路径下的文件,加载模型 ontModel.read("file:E:/分词专用软件/test/DM.owl"); //读取当前路径下的文件,加载模型 OntClass cls=ontModel.createClass(":dataStructureClass");//定义一个类作为模型中数据结构类的等价类,并添加注释 cls.addComment("the EquivalentClass of DataStructure...", "EN"); //OntClass oc=ontModel.getOntClass("http://www.semanticweb.org/ontologies/2012/1/Ontology1330067689075.owl#Pizza"); //OntClass oc=ontModel.getOntClass("http://www.semanticweb.org/ontologies/2012/1/Ontology1329894930328.owl#math"); //OntClass oc=ontModel.getOntClass("http://www.DStructure.com/ontologies/DStructure.owl#数据结构"); OntClass oc=ontModel.getOntClass("http://www.semanticweb.org/ontologies/2010/3/Ontology1272336320453.owl#DM"); //oc.addEquivalentClass(cls);//将先前定义的类添加为数据结构的等价类 //迭代显示模型中的类,在迭代过程中完成各种操作 for (Iterator i=ontModel.listClasses(); i.hasNext();){ OntClass c=(OntClass)i.next(); //返回类型强制转换 if(!c.isAnon()){//如果不是匿名类,则打印类的名字 System.out.print("Class"); //获取类的URI并输出,在输出时对URI做了简化(将命名空间前缀省略) System.out.println(c.getModel().getGraph().getPrefixMapping().shortForm(c.getURI())); // 处理数据结构类 if (c.getLocalName().equals("数据结构")) { // 如果当前类是数据结构 System.out.println(" URI@" + c.getURI()); // 输出它的完整URI System.out.print(" Animal's EquivalentClass is "+ c.getEquivalentClass()); // 取得它的的等价类并打印 System.out.println(" [comments:" + c.getEquivalentClass().getComment("EN")+"]"); // 输出等价类的注释 }// 处理数据结构结束 // 迭代显示当前类的直接父类 for (Iterator it = c.listSuperClasses(); it.hasNext();) { OntClass sp = (OntClass) it.next(); String str = c.getModel().getGraph().getPrefixMapping().shortForm(c.getURI()) // 获取URI + "'s superClass is " ; String strSP = sp.getURI(); try{ // 另一种简化处理URI的方法 str = str + ":" + strSP.substring(strSP.indexOf('#')+1); System.out.println(" Class" +str); }catch( Exception e ){} } // super class ends // 迭代显示当前类的直接子类 for (Iterator it = c.listSubClasses(); it.hasNext();){ System.out.print(" Class"); OntClass sb = (OntClass) it.next(); System.out.println(c.getModel().getGraph().getPrefixMapping() .shortForm(c.getURI())+ "'s subClass is " + sb.getModel().getGraph().getPrefixMapping() .shortForm(sb.getURI())); }// suber class ends // 迭代显示与当前类相关的所有属性 for(Iterator ipp = c.listDeclaredProperties(); ipp.hasNext();){ OntProperty p = (OntProperty)ipp.next(); System.out.println(" associated property: " + p.getLocalName()); }// property ends }// anonymity ends else {}// 是匿名类 }// for ends } }
最后将JENA2.6.4的包放入路径(这里建议全部放入)
最后进行编译,基本就不会有问题了,显示的结果跟本体创建的类基本一致
如果出现Exception in thread "main" java.lang.NoClassDefFoundError错误信息
基本就是你路径设置问题。路径的“\”跟WINDOWS那个斜杠是相反的,另外就是你路径的文件名是否改变了,这个与JAVA Build PAth的理由是一样的。