-- 作者:星火辉煌
-- 发布时间:9/4/2011 10:45:00 AM
-- OWL查询一个实例的详细信息,运行时出现异常了
源代码 import java.io.*; import java.sql.SQLException; import java.util.HashMap; import java.util.Iterator; import javax.swing.tree.DefaultMutableTreeNode; import antlr.collections.impl.Vector; import com.hp.hpl.jena.db.*; import com.hp.hpl.jena.ontology.Individual; import com.hp.hpl.jena.ontology.OntClass; import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.ontology.OntModelSpec; import com.hp.hpl.jena.ontology.OntProperty; import com.hp.hpl.jena.rdf.model.*; import com.hp.hpl.jena.util.OneToManyMap.Entry; public class Persistent { //获得一个实例的所有详细信息(属性和属性值) public String getInsInfo(String insname,String owlpath){ String info=null; String namespace=null; namespace=insname.substring(0, insname.indexOf("#")+1); //首先创建模型,读取owl文件 OntModel model=ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM,null); try { model.read(new FileInputStream(owlpath),""); } catch(FileNotFoundException e) { System.out.println("文件读取失败:"+e.getMessage()); } //根据实例的名称获取实例类型 Individual instance=(Individual)model.getIndividual(insname); OntClass classont=instance.getOntClass(); int index; String str; //输出实例信息 String var=insname.substring(insname.indexOf("#")+1); info="实例名称:"+var+"\n\n"; //获取该实例的属性,如果是数值属性,则直接输出其值,否则输出对应的实例 //获取这个类的所有属性属性有:属性名称,属性类型,属性值 for(Iterator prys=classont.listDeclaredProperties();prys.hasNext();){ OntProperty pry=(OntProperty)prys.next(); //获取属性名称 String pryname=pry.toString(); index=pryname.indexOf("#"); str=pryname.substring(index+1); info=info+str+": "; //获取这个实例的属性值 String pryvalue=instance.getPropertyValue(pry).toString(); //判断该属性是对象属性还是数值数值属性,rang获取的是属性的数据类型 //从rang中可以看出那些是对象属性那些是数据属性。 //对象属性的命名空间是自定义的,值属性的命名空间是http://www.w3.org/2001/XMLSchema# String rang =pry.getRDFType().toString(); index=rang.indexOf("#"); String nstype=rang.substring(0, index+1); if(nstype.equalsIgnoreCase(namespace)){ //对象属性 index=pryvalue.indexOf("#"); pryvalue=pryvalue.substring(index+1); info=info+pryvalue+"\n\n"; //判断对象是否含有属性如果有,输出属性信息,rang是对象的类型 OntClass pryclass=model.getOntClass(rang); if(pryclass!=null){ //获得该类的所有属性 for(Iterator subprys=pryclass.listDeclaredProperties();subprys.hasNext();){ //输出该实例的属性和属性值 OntProperty subpry=(OntProperty)subprys.next(); //获取属性名称 String subpryname=subpry.toString(); index=subpryname.indexOf("#"); str=subpryname.substring(index+1); //表示对象属性 info=info+""+str+": "; //获取这个实例的属性值 Individual pryins=(Individual)model.getIndividual(namespace+pryvalue); String subpryvalue=pryins.getPropertyValue(subpry).toString(); if(subpryvalue.contains("^^")){ //数值属性 index=subpryvalue.indexOf("^^"); subpryvalue=subpryvalue.substring(0,index); } else {//对象属性 index=subpryvalue.indexOf("#"); subpryvalue=subpryvalue.substring(index+1); } System.out.println(subpryvalue); info=info+subpryvalue+"\n\n"; } } } else{//数据属性: index=pryvalue.indexOf("^^"); pryvalue=pryvalue.substring(0, index); System.out.println(pryvalue); info=info+pryvalue+"\n\n"; } } System.out.println(info); return info; } public static void main(String a[]){ Persistent s=new Persistent(); String str=s.getInsInfo("zuopin1","F:/国画/国画.owl"); System.out.println(str); } } 运行结果: Exception in thread "main" java.lang.NullPointerException
|