Jena 对RDFS,OWL,DAML+OIL等本体操纵

来源:互联网 发布:top域名多少钱 编辑:程序博客网 时间:2024/05/22 13:33

Jena由  HP  Labs(http://www.hpl.hp.com)开发的Java开发工具包, 用于SemanticWeb(语义网)中的应用程序开发;Jana是开源的,在下载的文档中有 Jena的完整代码。Jena框架主要包括: 

    a)以RDF/XML、三元组形式读写 RDF资源描述框架是(RDF)是描述资源的一项标准(在技术上是W3C的推荐标准),Jena文档中有一部分详细介绍了RDF和 Jena  RDF  API,其内容包括对Jena  RDF包的介绍、RDF 模型的创建、读写、查询等操作,以及RDF 容器等的讨论。 

    b)RDFS,OWL,DAML+OIL等本体的操作Jena框架包含一个本体子系统(Ontology  Subsystem),它提供的API允许处理基于RDF的本体数据,也就是说,它支持OWL,DAML+OIL和 RDFS。本体API与推理子系统结合可以从特定本体中提取信息,Jena2还提供文档管理器(OntDocumentManager)以支持对导入本体的文档管理。

[java] view plaincopy
  1. OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);  
创建一个本体模型,参数OntModleSpec.OWL_MEM指在内存中创建一个本体模型。

[java] view plaincopy
  1. ontModel.read("file:./food.owl");  
这里读取一个食物的本体。

本体对象OntModel的listClasses()方法可以返回一个Iterator对象,对本体中的概念、关系和实例等进行遍历。

点击下载示例源码:

[java] view plaincopy
  1. import java.util.Iterator;  
  2.   
  3. import com.hp.hpl.jena.ontology.OntClass;  
  4. import com.hp.hpl.jena.ontology.OntModel;  
  5. import com.hp.hpl.jena.ontology.OntModelSpec;  
  6. import com.hp.hpl.jena.ontology.OntProperty;  
  7. import com.hp.hpl.jena.rdf.model.ModelFactory;  
  8.   
  9. public class test_0010 {  
  10.       
  11.     public static void main(String[] args) {  
  12.           
  13.         OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);  
  14.           
  15.         ontModel.read("file:./food.owl");  
  16.           
  17.         OntClass cls = ontModel.createClass(":FoodClass");  
  18.         cls.addComment("the EquivalentClass of Food...""EN");  
  19.           
  20.         OntClass oc = ontModel.getOntClass("http://www.w3.org/2001/sw/WebOnt/guide-src/food#ConsumableThing");  
  21.         oc.addEquivalentClass(cls);  
  22.           
  23.         for (Iterator<OntClass> i = ontModel.listClasses(); i.hasNext(); ) {  
  24.             OntClass c = i.next();  
  25.             if (!c.isAnon()) {  //测试c是否匿名  
  26.                 System.out.print("Class");  
  27.                 System.out.println(c.getModel().getGraph().getPrefixMapping().shortForm(c.getURI()));  
  28.                   
  29.                 if (c.getLocalName().equals("ConsumableThing")) {  
  30.                     System.out.println("  URI@" + c.getURI());  
  31.                     System.out.println("Animal's EquivalentClass is " + c.getEquivalentClass());  
  32.                     System.out.println("[Comments:" + c.getEquivalentClass().getComment("EN")  + "]");  
  33.                 }  
  34.                   
  35.                 for (Iterator<OntClass> it = c.listSuperClasses(); it.hasNext(); ) {  
  36.                     OntClass sp = it.next();  
  37.                     String str = c.getModel().getGraph().getPrefixMapping().shortForm(c.getURI());  
  38.                     String strSP = sp.getURI();  
  39.                     try {  
  40.                         str = str + ":" + strSP.substring(strSP.indexOf('#') + 1);  
  41.                         System.out.println("  Class" + str);  
  42.                     } catch (Exception e) {}  
  43.                 }  
  44.                   
  45.                 for (Iterator<OntClass> it = c.listSubClasses(); it.hasNext(); ) {  
  46.                     System.out.print("  Class");  
  47.                     OntClass sb = it.next();  
  48.                     System.out.println(c.getModel().getGraph().getPrefixMapping().shortForm(c.getURI()) +  
  49.                             "'s suberClass is " + sb.getModel().getGraph().getPrefixMapping().shortForm(sb.getURI()));  
  50.                 }  
  51.                   
  52.                 for (Iterator<OntProperty> ipp = c.listDeclaredProperties(); ipp.hasNext(); ) {  
  53.                     OntProperty p = ipp.next();  
  54.                     System.out.println("  associated property: " + p.getLocalName());  
  55.                 }  
  56.                 /**/  
  57.             }  
  58.             else {}  
  59.         }  
  60.     }  
  61. }