以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Web Services & Semantic Web Services 』  (http://bbs.xml.org.cn/list.asp?boardid=10)
----  OWL查询一个实例的详细信息,运行时出现异常了  (http://bbs.xml.org.cn/dispbbs.asp?boardid=10&rootid=&id=121039)


--  作者:星火辉煌
--  发布时间: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


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms