Jena学习笔记(1)——RDFS,OWL,DAML+OIL等本体操纵

Jena介绍:

       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)以支持对导入本体的文档管理。

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

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

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

点击下载示例源码:

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.ontology.OntProperty;
import com.hp.hpl.jena.rdf.model.ModelFactory;

public class test_0010 {
	
	public static void main(String[] args) {
		
		OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
		
		ontModel.read("file:./food.owl");
		
		OntClass cls = ontModel.createClass(":FoodClass");
		cls.addComment("the EquivalentClass of Food...", "EN");
		
		OntClass oc = ontModel.getOntClass("http://www.w3.org/2001/sw/WebOnt/guide-src/food#ConsumableThing");
		oc.addEquivalentClass(cls);
		
		for (Iterator<OntClass> i = ontModel.listClasses(); i.hasNext(); ) {
			OntClass c = i.next();
			if (!c.isAnon()) {  //测试c是否匿名
				System.out.print("Class");
				System.out.println(c.getModel().getGraph().getPrefixMapping().shortForm(c.getURI()));
				
				if (c.getLocalName().equals("ConsumableThing")) {
					System.out.println("  URI@" + c.getURI());
					System.out.println("Animal's EquivalentClass is " + c.getEquivalentClass());
					System.out.println("[Comments:" + c.getEquivalentClass().getComment("EN")  + "]");
				}
				
				for (Iterator<OntClass> it = c.listSuperClasses(); it.hasNext(); ) {
					OntClass sp = it.next();
					String str = c.getModel().getGraph().getPrefixMapping().shortForm(c.getURI());
					String strSP = sp.getURI();
					try {
						str = str + ":" + strSP.substring(strSP.indexOf('#') + 1);
						System.out.println("  Class" + str);
					} catch (Exception e) {}
				}
				
				for (Iterator<OntClass> it = c.listSubClasses(); it.hasNext(); ) {
					System.out.print("  Class");
					OntClass sb = it.next();
					System.out.println(c.getModel().getGraph().getPrefixMapping().shortForm(c.getURI()) +
							"'s suberClass is " + sb.getModel().getGraph().getPrefixMapping().shortForm(sb.getURI()));
				}
				
				for (Iterator<OntProperty> ipp = c.listDeclaredProperties(); ipp.hasNext(); ) {
					OntProperty p = ipp.next();
					System.out.println("  associated property: " + p.getLocalName());
				}
				/**/
			}
			else {}
		}
	}
}




你可能感兴趣的:(Jena学习笔记(1)——RDFS,OWL,DAML+OIL等本体操纵)