为了更好的使用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("..............................");
}