Hey Aarthi,
isMapped is sort of specific to my application. It lets me say something
like,
"http://xmlns.com/foaf/spec/20100809/#" is equivalent to "
http://xmlns.com/foaf/spec/#"
So that if I'm comparing different versions, classes with the same
localName but different
versions for their namespace are still considered equal.
You can ignore this or implement it however you like. I simply used a Map.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
private Map<String, String> nsRemap;
private boolean isMapped(String thisURI, String thatURI){
if(thisURI.equals(thatURI)) return true;
if(nsRemap == null) return false;
String mapString = nsRemap.get(thisURI);
if(mapString != null && mapString.equals(thatURI)) return true;
return false;
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Of course, you'll need to initialize the map somewhere if you want to take
my approach.
--
Mark Fischer
On Thu, Apr 4, 2013 at 1:14 PM, aarthi <[email protected]> wrote:
>
> hi can you send me the code for ismapped() function...
>
>
> On Wed, Apr 3, 2013 at 11:16 AM, Mark Fischer <[email protected]
>wrote:
>
> > 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 <[email protected]>
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 <[email protected]>
> > 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 <[email protected]> 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:[email protected]]
> > > > >>> 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 <[email protected]>
> > > > >>>> To: Milorad Tosic <[email protected]>; users <
> > [email protected]
> > > >
> > > > >>>> 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...
> > > > >>>>
> > > > >>>>
> > > > >>>>
> > > > >>
> > > > >
> > > > >
> > > >
> > >
> >