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("..............................");
}