1. 程式人生 > >Jena API 在OWL中應用的體會

Jena API 在OWL中應用的體會

為了更好的使用Jena API,我們應該對OWL有個大致的瞭解。OWL核心是圍繞三元組的,即我們在很多資料中看到的陳述(Statement),它的組成為:Statement=(Subject,Property,Object),其中Subject我們熟成為主體,Property成為屬性,Object成為客體。在程式設計中容易讓人搞混的他們和Individual的區別。Individual熟稱為個體。它是Subject、Object的一個例項,例如在Statement=(Animals,Eat,Plants)陳述中sheep是Animals的一個Individual,grass是Plants的一個Individual。從這個角度上來說我們理解為什麼主體、客體被說成是類(Class)。而這一切的主體、客體、個體、類、屬性等我們都可以稱為資源(Resource)。在程式設計中OWL常用的是OntModel,Ontclass,OntProperty,Individual。OntClass可以用來建立主體,客體,OntPropety用來建立屬性,Individual用來建立個體。 常用的方法有CreatClass,CreatIndividual,listObjects,listObjectsofProperty,listSubjectswithProperty,listPropertyvalues等,具體可以參照下面的一個簡單例子。

public static void main(String[] args){

OntModel ontmodel=ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);

String NS="http://OWLTEST/Things#";

//動物類和動物名稱類

OntClass animals=ontmodel.createClass(NS+"Animals");

OntClass animalsname=ontmodel.createClass(NS+"AnimalsName");

//植物類和植物名稱類

OntClass plants=ontmodel.createClass(NS+"Plants");

OntClass plantsname=ontmodel.createClass(NS+"PlantsName");

//動物類和植物類的物件關係rant

OntProperty rant=ontmodel.createObjectProperty(NS+"Rant");

OntProperty hasanimalsname=ontmodel.createObjectProperty(NS+"HasAnimalsName");

OntProperty hasplantsname=ontmodel.createObjectProperty(NS+"HasPlantsName");

OntProperty hasname=ontmodel.createDatatypeProperty(NS+"HasName");

hasanimalsname.addDomain(animals);

hasanimalsname.addRange(animalsname);

hasplantsname.addDomain(plants);

hasplantsname.addRange(plantsname);

rant.addDomain(animals);

rant.addRange(plants);

hasanimalsname.addDomain(animals);

hasanimalsname.addRange(animalsname);

hasplantsname.addDomain(plants);

hasplantsname.addRange(plantsname);

hasname.addDomain(animalsname);

hasname.addDomain(plantsname);

Individual a=animals.createIndividual(NS+"A");

Individual b=animals.createIndividual(NS+"B");

Individual sheep=animalsname.createIndividual(NS+"Sheep");

Individual horse=animalsname.createIndividual(NS+"Horse");

a.addProperty(hasanimalsname, sheep);

animalsname.addProperty(hasname, sheep);

animalsname.addProperty(hasname, horse);

Individual grass=plants.createIndividual(NS+"Grass");

System.out.println(ontmodel);

System.out.println("..............................");

for(Iterator i=ontmodel.listObjects();i.hasNext();){

Resource r=(Resource)i.next();

System.out.println(r.getLocalName());

}

System.out.println("..............................");

for (Iterator i=ontmodel.listIndividuals();i.hasNext();){

Individual ind=(Individual)i.next();

System.out.println(ind.getLocalName());

}

System.out.println("..............................");

for (Iterator i=ontmodel.listObjectProperties();i.hasNext();){

Property p=(Property)i.next();

System.out.println("Property:"+p.getLocalName());

for (Iterator j=ontmodel.listObjectsOfProperty(p);j.hasNext();){

Resource node=(Resource)j.next();

System.out.println("Objects:"+node.getLocalName());

}

}

System.out.println("..............................");

for (Iterator i=animalsname.listPropertyValues(hasname);i.hasNext();){

Resource value=(Resource)i.next();

System.out.println("HasName's values:"+value.getLocalName());

}

System.out.println("..............................");

}