以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 RSS/FOAF/Dublin Core/CIM/PRISM/Gene Ontology 』  (http://bbs.xml.org.cn/list.asp?boardid=3)
----  [讨论]  (http://bbs.xml.org.cn/dispbbs.asp?boardid=3&rootid=&id=73284)


--  作者: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)
我自己看不出错误出在哪里,如果哪位朋友看出来了可否帮助一下。谢谢


--  作者:jpz6311whu
--  发布时间:3/19/2009 4:43:00 PM

--  
要把Iterator 所在的包引import进来,还有许多其他的包
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
5,453.125ms