犀利小胖

 

如何用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的理由是一样的。

posted on 2012-05-01 14:48  犀利小胖  阅读(916)  评论(2编辑  收藏  举报

导航