I did something similar a while back. This doesn't quite do what you want, but it may be close. I compared inequivalent classes and such as well as super classes.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ private boolean areEqual(OntClass thisOne, OntClass thatOne){ return areEqual(false, thisOne, thatOne); } private boolean areEqual(boolean deep, OntClass thisOne, OntClass thatOne){ if (thisOne.isUnionClass() && thatOne.isUnionClass()) { return areEqual(thisOne.asUnionClass(), thatOne.asUnionClass()); } else if (thisOne.isIntersectionClass() && thatOne.isIntersectionClass()) { return areEqual(thisOne.asIntersectionClass(), thatOne.asIntersectionClass()); } else if (thisOne.isComplementClass() && thatOne.isComplementClass()) { return areEqual(thisOne.asComplementClass(), thatOne.asComplementClass()); } else if (thisOne.isRestriction() && thatOne.isRestriction()) { return areEqual(thisOne.asRestriction(), thatOne.asRestriction()); } else if (thisOne.isURIResource() && thatOne.isURIResource()) { // Both classes must have the same URI to be the same if(!haveEqualURI(thisOne, thatOne)) return false; if(deep){ // Must have the same Equivalent Classes if(!areEqual(thisOne.listEquivalentClasses().toList(), thatOne.listEquivalentClasses().toList())) return false; // Must have the same Superclasses if(!areEqual(thisOne.listSuperClasses().toList(), thatOne.listSuperClasses().toList())) return false; // Must have the same Disjoint Classes if(!areEqual(thisOne.listDisjointWith().toList(), thatOne.listDisjointWith().toList())) return false; } return true; } return false; } private boolean haveEqualURI(OntResource thisURI, OntResource thatURI){ if(thisURI.isURIResource() && thatURI.isURIResource()){ if(thisURI.getLocalName().equals(thatURI.getLocalName())){ if(isMapped(thisURI.getNameSpace(), thatURI.getNameSpace())){ return true; } } } return false; } private boolean areEqual(OntProperty thisOne, OntProperty thatOne){ return areEqual(false, thisOne, thatOne); } private boolean areEqual(boolean deep, OntProperty thisOne, OntProperty thatOne){ if(thisOne.isURIResource() && thatOne.isURIResource()){ // Both properties must have the same URI to be the same if(!haveEqualURI(thisOne, thatOne)) return false; if(deep){ if(thisOne.isDatatypeProperty() && !thatOne.isDatatypeProperty()) return false; if(thisOne.isFunctionalProperty() && !thatOne.isFunctionalProperty()) return false; if(thisOne.isInverseFunctionalProperty() && !thatOne.isInverseFunctionalProperty()) return false; if(thisOne.isObjectProperty() && !thatOne.isObjectProperty()) return false; if(thisOne.isSymmetricProperty() && !thatOne.isSymmetricProperty()) return false; if(thisOne.isTransitiveProperty() && !thatOne.isTransitiveProperty()) return false; if(!areEqual(thisOne.listRange().toList(), thatOne.listRange().toList())) return false; if(!areEqual(thisOne.listDomain().toList(), thatOne.listDomain().toList())) return false; if(!areEqual(thisOne.listSuperProperties(true).toList(), thatOne.listSuperProperties(true).toList())) return false; } return true; } return false; } // This will catch UnionClass, IntersectionClass, and ComplementClass private boolean areEqual(BooleanClassDescription thisOne, BooleanClassDescription thatOne){ return areEqual(thisOne.listOperands().toList(), thatOne.listOperands().toList()); } private boolean areEqual(List<? extends OntResource> thisOne, List<? extends OntResource> thatOne){ for(int i = 0; i < thisOne.size(); i++ ){ for(int j = 0; j < thatOne.size(); j++){ if(areEqual(thisOne.get(i), thatOne.get(j))){ thisOne.remove(i); thatOne.remove(j); i--; break; } } } if(thisOne.size() == 0 && thatOne.size() == 0) return true; return false; } private boolean areEqual(Restriction thisOne, Restriction thatOne){ // Same property for this restriction if(!areEqual(thisOne.getOnProperty(), thatOne.getOnProperty())) return false; // Same restriction type and values if (thisOne.isAllValuesFromRestriction() && thatOne.isAllValuesFromRestriction()) return areEqual(thisOne.asAllValuesFromRestriction().getAllValuesFrom(), thatOne.asAllValuesFromRestriction().getAllValuesFrom()); if (thisOne.isSomeValuesFromRestriction() && thatOne.isSomeValuesFromRestriction()) return areEqual(thisOne.asSomeValuesFromRestriction().getSomeValuesFrom(), thatOne.asSomeValuesFromRestriction().getSomeValuesFrom()); if (thisOne.isHasValueRestriction() && thatOne.isHasValueRestriction()) return areEqual(thisOne.asHasValueRestriction().getHasValue(), thatOne.asHasValueRestriction().getHasValue()); if (thisOne.isCardinalityRestriction() && thatOne.isCardinalityRestriction()) return thisOne.asCardinalityRestriction().getCardinality() == thatOne.asCardinalityRestriction().getCardinality(); if (thisOne.isMaxCardinalityRestriction() && thatOne.isMaxCardinalityRestriction()) return thisOne.asMaxCardinalityRestriction().getMaxCardinality() == thatOne.asMaxCardinalityRestriction().getMaxCardinality(); if (thisOne.isMinCardinalityRestriction() && thatOne.isMinCardinalityRestriction()) return thisOne.asMinCardinalityRestriction().getMinCardinality() == thatOne.asMinCardinalityRestriction().getMinCardinality(); return false; } private boolean areEqual(RDFNode thisOne, RDFNode thatOne){ if(thisOne.isResource() && thatOne.isResource()) return areEqual(thisOne.asResource(), thatOne.asResource()); if(thisOne.isLiteral() && thatOne.isLiteral()) return areEqual(thisOne.asLiteral(), thatOne.asLiteral()); return false; } private boolean areEqual(Resource thisOne, Resource thatOne){ if(thisOne.canAs(OntClass.class) && thatOne.canAs(OntClass.class)) return areEqual(thisOne.as(OntClass.class), thatOne.as(OntClass.class)); if(thisOne.canAs(OntProperty.class) && thatOne.canAs(OntProperty.class)) return areEqual(thisOne.as(OntProperty.class), thatOne.as(OntProperty.class)); else return thisOne.equals(thatOne); } private boolean areEqual(Literal thisOne, Literal thatOne){ return this.equals(thatOne); } ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -- Mark Fischer On Wed, Apr 3, 2013 at 12:23 PM, aarthi <aarthirajara...@gmail.com> wrote: > hi... i need to compare two ontologies using jena... if i take two > classes, each in a separate ontology. in order to say these two classes are > structurally equivalent, i need to say all the super class for the 2 > classes we considered are similar.. can anyone help me for the code > > > On Sat, Mar 30, 2013 at 8:24 AM, aarthi <aarthirajara...@gmail.com> wrote: > > > hi thanks.. it worked correctly. because i didn't add the jena files > > correctly.sorry for that. and i need to retrieve the class and > > properties names from an ontology. if i execute my previous code i > > just got the triple format. is there anyway to store the class and > > properties names in a separate file or in a database? if its possible > > please guide me..... > > > > > > > > > > > > > > > > > > On 3/30/13, Andy Seaborne <a...@apache.org> wrote: > > > Which version of Jena is this? > > > > > > Jena doesn't use Apache commons logging (it did a long time ago, I > > > think). For some libraries we use, there is a Apache commons logging > > > dependency, which is met via jcl-over-slf4j in the POMs. > > > > > > But that's nowhere near PropertyImpl, which has a reference to SLF4J > > > nowadays. > > > > > > Andy > > > > > > >>> Exception in thread "main" java.lang.NoClassDefFoundError: > > > >>> org/apache/commons/logging/LogFactory > > > >>> at > > > >>> > > com.hp.hpl.jena.rdf.model.impl.PropertyImpl.<clinit>(PropertyImpl.java > > > >> : > > > >>> 58) > > > > > > > > > On 30/03/13 13:38, John A. Fereira wrote: > > >> Specifically, you'll need to include the commons-logging jar file in > > your > > >> classpath. Typically that would mean specifying a directory which > > >> includes that jar file as well as the jar files for the jena library > and > > >> any other dependency library. You'll probably also need to include > one > > >> for log4j or simple logging (slf4j) library. > > >> > > >>> -----Original Message----- > > >>> From: Milorad Tosic [mailto:mbto...@yahoo.com] > > >>> Sent: Saturday, March 30, 2013 9:07 AM > > >>> To: aarthi; users > > >>> Subject: Re: > > >>> > > >>> Looks like you need to include an additional library for > > >>> org.apache.commons.logging.LogFactory class. > > >>> > > >>> Regards, > > >>> Milorad > > >>> > > >>> > > >>> > > >>> > > >>> > > >>>> ________________________________ > > >>>> From: aarthi <aarthirajara...@gmail.com> > > >>>> To: Milorad Tosic <mbto...@yahoo.com>; users <users@jena.apache.org > > > > >>>> Sent: Saturday, March 30, 2013 1:56 PM > > >>>> Subject: > > >>>> > > >>>> hi.. > > >>>> i'm doing my project with ontology. i need to retrieve the class > > and > > >>>> properties names in order to compare them for equality. to retrieve > > >>> the > > >>>> class an property names i'm using a java code. i have attached that > > >>>> code with this mail. but i got some error, I don't know how to > resolve > > >>>> that. for that i had import com.hp.hpl.jena package. i dont get the > > >>>> classpath files and javadoc files. is it enough if i add only the > > >>>> source package? pls help me.... > > >>>> > > >>>> this is my code: > > >>>> > > >>>> > > >>>> //package testejena; > > >>>> 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.rdf.model.ModelFactory; > > >>>> import com.hp.hpl.jena.util.FileManager; import > > >>>> com.hp.hpl.jena.util.iterator.ExtendedIterator; > > >>>> import java.io.InputStream; > > >>>> import java.util.Iterator; > > >>>>PropertyImpl > > >>>> public class testeProp { > > >>>> static final String inputFileName = "newspaper.owl"; > > >>>> public static void main(String args[]) { > > >>>> try { > > >>>> //create the reasoning model using the base > > >>>> OntModel inf = > > >>>> ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM); > > >>>> > > >>>> // use the FileManager to find the input file > > >>>> InputStream in = FileManager.get().open(inputFileName); > > >>>> if (in == null) { > > >>>> throw new IllegalArgumentException("File: " + > > >>>> inputFileName + " not found"); > > >>>> } > > >>>> > > >>>> inf.read(in, ""); > > >>>> > > >>>> String URI = > > >>>> "http://www.owl-ontologies.com/Ontology1363337688.owl#"; > > >>>> > > >>>> ExtendedIterator classes = inf.listClasses(); > > >>>> while (classes.hasNext()) { > > >>>> OntClass essaClasse = (OntClass) classes.next(); > > >>>> > > >>>> String vClasse = > > essaClasse.getLocalName().toString(); > > >>>> > > >>>> if (essaClasse.hasSubClass()) { > > >>>> System.out.println("Classe: " + vClasse); > > >>>> OntClass cla = inf.getOntClass(URI + vClasse); > > >>>> for (Iterator i = cla.listSubClasses(); > > >>>> i.hasNext();) { > > >>>> OntClass c = (OntClass) i.next(); > > >>>> System.out.print(" " + c.getLocalName() > + " > > >>> " > > >>>> + "\n"); > > >>>> } > > >>>> } > > >>>> } > > >>>> } catch (Exception e) { > > >>>> System.out.println("there may be error"); > > >>>> System.out.println(e.getMessage()); > > >>>> } > > >>>> } > > >>>> } > > >>>> > > >>>> > > >>>> > ---------------------------------------------------------------------- > > >>> - > > >>>> --------------------------- if i run my program i got the following > > >>>> error: > > >>>> > > >>>> > > >>>> Exception in thread "main" java.lang.NoClassDefFoundError: > > >>>> org/apache/commons/logging/LogFactory > > >>>> at > > >>>> > com.hp.hpl.jena.rdf.model.impl.PropertyImpl.<clinit>(PropertyImpl.java > > >>> : > > >>>> 58) > > >>>> at > > >>>> > com.hp.hpl.jena.enhanced.BuiltinPersonalities.<clinit>(BuiltinPersonal > > >>> i > > >>>> ties.java:28) > > >>>> at > > >>>> com.hp.hpl.jena.rdf.model.impl.ModelCom.<init>(ModelCom.java:51) > > >>>> at > > >>>> > com.hp.hpl.jena.rdf.model.ModelFactory.createDefaultModel(ModelFactory > > >>> . > > >>>> java:119) > > >>>> at > > >>>> > com.hp.hpl.jena.rdf.model.ModelFactory.createDefaultModel(ModelFactory > > >>> . > > >>>> java:113) > > >>>> at > > >>>> > com.hp.hpl.jena.rdf.model.impl.ModelSpecImpl.<clinit>(ModelSpecImpl.ja > > >>> v > > >>>> a:56) > > >>>> at testeProp.main(testeProp.java:16) Caused by: > > >>>> java.lang.ClassNotFoundException: > > >>>> org.apache.commons.logging.LogFactory > > >>>> at java.net.URLClassLoader$1.run(URLClassLoader.java:202) > > >>>> at java.security.AccessController.doPrivileged(Native > Method) > > >>>> at > java.net.URLClassLoader.findClass(URLClassLoader.java:190) > > >>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:307) > > >>>> at > > >>>> sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) > > >>>> at java.lang.ClassLoader.loadClass(ClassLoader.java:248) > > >>>> ... 7 more > > >>>> Java Result: 1 > > >>>> BUILD SUCCESSFUL (total time: 0 seconds) > > >>>> > > >>>> > > >>>> > > >>>> > > >>>> > > >>>> > > >>>> please anyone help me... > > >>>> > > >>>> > > >>>> > > >> > > > > > > > > >