jena API 起步(一)owl 文件的简单解析(适合初学者)

本文介绍如何使用Jena API创建本体模型并读取OWL文件,演示了如何列出本体中的类、子类及属性,并展示了具体的Java代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

最近开始看jena的api,对自己建的本体做一些工作。不过自己也是个菜鸟,很多东西可能在别人眼里都很浅显。不过做了,总要留点东西。

下面的一些内容是根据jena document里的例子"Textual rendering of the class hierarchy"来讲的。我只是根据自己的需要利用了一部分里面的内容。

1.  OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM, null );
createOntologyModel建立一个model,其中里面的参数可选,对应不同的语言,如DAML_LANG, OWL_DL_LANG, OWL_LANG, OWL_LITE_LANG, RDFS_LANG.复杂的模型需要用到OntModelSpec
2.  m.getDocumentManager().addAltEntry( "http://www.dut.cn/sars", "file:D:/sars.owl" );提供一个入口,
也就是确定文件的位置,第一个参数是URI,可以不用真实存在的,第二个是owl文件所在的位置,这个必须是真实的咯~
3.  m.read("http://www.dut.cn/sars");read有多个构造函数,这个是最简单的一个,用上面的addAltEntryURL参数;
其实上面的addAltEntry也可以不用,而直接采用读取本地文件的方法,代码如下:
             try
             {
                  m.read(new FileInputStream("D://sars.owl"),"");
             }
             catch(IOException ioe)
             {
                  System.err.println(ioe.toString());
             }

其中try不能少。第2个参数是对应一个绝对的URI,如果没有就用“”。

4.  rootclasses()是罗列出第一层里的class。首先定义一个list用来存放各个classm.listClasses()将罗列出所有的class,然后通过判断来选取第一层的类。不过在javadoc里找到了另外一个函数listHierarchyRootClasses();完全可以替换原来的做法。

5.  下面的这个程序主要列出本体中的各个class,同时将各个classsubclassproperty,在我的本体中全是ObjectProperty及其Range罗列出来,由于在定义本体的时候有hasis开头的互逆的属性,这里仅需要has开头的属性,所以用字符串判断的方法来取得这些属性及其Range。不知道有没有别的方法~:)

 

package cn.dut.www;

import java.io.FileInputStream;

import java.io.IOException;

import java.util.Iterator;

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.rdf.model.ModelFactory;

import com.hp.hpl.jena.ontology.*;

 

public class ReadOWL {

 

       public static void main(String[] args) {

              // create the model and import owl file

              OntModel model = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM, null );

           try

           {

                  model.read(new FileInputStream("D://sars.owl"),"");

           }

           catch(IOException ioe)

           {

                  System.err.println(ioe.toString());

           }

           //the class number

           int j=0;

          //list classes

           for(Iterator i=model.listClasses();i.hasNext();)

           {

                  j++;

            OntClass c = (OntClass) i.next();

            String strClass=c.getModel().usePrefix(c.getURI());

            System.out.println(j+strClass.substring(1));

           

            //to list sub-classes for each class

            for(Iterator k=c.listSubClasses(true);k.hasNext();)

            {

                   System.out.print("  "+"hasSubClass");

                   OntClass subclass=(OntClass)k.next();

                   String strSubClass=subclass.getModel().usePrefix(subclass.getURI());

                   System.out.println(strSubClass.substring(1));

            }

            

            //list property for each class

            for(Iterator y=c.listDeclaredProperties(true);y.hasNext();)

            {

                  

                   OntProperty property=(OntProperty)y.next();

      

                   String strPropertyName=property.getModel().usePrefix(property.getURI());

                  

                   String strRange=property.getRange().toString();

                   String strRangeName=property.getModel().usePrefix(strRange);

                  

                   //show just the "has" Properties

                   if(strPropertyName.substring(1).substring(0,3).equals("has"))

                   {

                         

                          System.out.print("  ");

                       System.out.print(strPropertyName.substring(1));

                       System.out.println(strRangeName.substring(1));

                   }

                  

            }

           }

       };

}

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值