jena实例

来源:互联网 发布:linux 备份系统日志 编辑:程序博客网 时间:2024/04/29 13:09
摘自:http://imarine.blog.163.com/blog/static/51380183200812774739130/ 

本文实现了一个简单的例子。通过Protégé 3.1创建一个Creature本体,并将其存储到OWL文件Creature.owl,然后使用和Jena通过读取该文件创建本体模型,实践Jena中的一些Ontology API。本文不涉及如何使用Protégé 3.1创建本体,您可以到Protégé的主页或者是http://www.chengtao.name/modules/wordpress/寻找详细的资料,后者虽然只是一个博客,但确实提供了很多我们需要的资源,比如一个完整的Protégé使用教程。本文例子中对Jena的使用主要参照Jena文档中\\Jena-2.4\src-examples\jena\examples\ontology下面的describeClass。它读取food.owl和wine.owl两个文件建立本体模型,并显示模型中概念以及相关关系的详细信息。DescribeClass.java主要负责查询详细信息并显示出来,Main.java只是创建本体模型并调用DescribeClass.java的功能。

 

本体类层次图

例子的主要代码如下列出。

// 创建使用OWL语言的内存模型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");// 通过完整的URI取得模型中的Animal类OntClass oc = ontModel.

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")+"]");}// 处理Animal结束      // 迭代显示当前类的直接父类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 suberClass 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 endselse // 是匿名类{}}// for ends 部分输出结果如下,说明部分不在输出中。Class:Animal  URI@http://www.owl-ontologies.com/marine.owl#Animal  // 完整的URI// 等价类及其注释  Animal's EquivalentClass is :DongwuClass [comments:the EquivalentClass of Animal...]  Class:Animal's superClass is :Creature // 直接父类  Class:Animal's suberClass is :MixAnimal // 直接子类  Class:Animal's suberClass is :GrassAnimal  Class:Animal's suberClass is :MeatAnimal  associated property: eat // 关联属性  associated property: beEated  associated property: mainEat 

原创粉丝点击