-- 作者:lipeiqiang1997
-- 发布时间:3/19/2009 4:31:00 PM
-- [讨论]
我现在正在学习Jena推理机和本体,现在我遇到一个问题,看看哪位朋友能帮助解决。我首先把Jena导入到ECLIPSE中,然后从网上好多博客都有这个程序,就是用Protege建立一个creature本体,然后用Jena推理,但是在编译的时候出现下列错误,请各位朋友看看问题出在哪里。 import com.hp.hpl.jena.rdf.model.*; import com.hp.hpl.jena.ontology.*; public class MyOntology { public static void main(String[] args) { // 创建本体模型 OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); ontModel.read("file:./Creature.owl"); // 读取文件,加载模型 // 定义一个类作为模型中Animal类的等等价类,并添加注释 OntClass cls = ontModel.createClass(":DongwuClass"); cls.addComment("the EquivalentClass of Animal...", "EN"); OntClass oc = ontModel.getOntClass("http://www.owl-ontologies.com/marine.owl#Animal"); oc.addEquivalentClass(cls); // 将先前定义的类添加为Animal的等价类 // 迭代显示模型中的类 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())); // 处理Animal类 if (c.getLocalName().equals("Animal")) { // 如果当前类是Animal 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 ){ } } // 迭代显示当前类的子类 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 suberClass is " + sb.getModel().getGraph().getPrefixMapping() .shortForm(sb.getURI())); } // 迭代显示与当前类相关的所有属性 for(Iterator ipp = c.listDeclaredProperties(); ipp.hasNext();) { OntProperty p = (OntProperty)ipp.next(); System.out.println(" associated property: " + p.getLocalName()); } } } } } 这是编译后的结果: Exception in thread "main" java.lang.Error: 无法解析的编译问题: Iterator 无法解析为类型 Iterator 无法解析为类型 Iterator 无法解析为类型 Iterator 无法解析为类型 at tuou.MyOntology.main(MyOntology.java:20) 我自己看不出错误出在哪里,如果哪位朋友看出来了可否帮助一下。谢谢
|