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);
OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
创建一个本体模型,参数OntModleSpec.OWL_MEM指在内存中创建一个本体模型。
- ontModel.read("file:./food.owl");
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 {}
- }
- }
- }