OWLOntologyImpl.java revision 2
a8c5a86d183db25a57bf193c06b41e092ec2e151Timo Sirainen/*
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen * Created on Dec 10, 2004
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen */
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainenpackage impl.jena;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport java.io.Reader;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport java.io.StringReader;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport java.net.URI;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport java.util.ArrayList;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport java.util.HashMap;
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainenimport java.util.HashSet;
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainenimport java.util.Iterator;
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainenimport java.util.LinkedHashSet;
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainenimport java.util.List;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport java.util.Map;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport java.util.Set;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport org.mindswap.owl.OWLClass;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport org.mindswap.owl.OWLDataProperty;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport org.mindswap.owl.OWLDataValue;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport org.mindswap.owl.OWLEntity;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport org.mindswap.owl.OWLFactory;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport org.mindswap.owl.OWLIndividual;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport org.mindswap.owl.OWLIndividualList;
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainenimport org.mindswap.owl.OWLKnowledgeBase;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport org.mindswap.owl.OWLObjectProperty;
395682d473b161c86165e7b9323ce4e45afb94bdTimo Sirainenimport org.mindswap.owl.OWLOntology;
395682d473b161c86165e7b9323ce4e45afb94bdTimo Sirainenimport org.mindswap.owl.OWLProperty;
072f06b60d69fe9456c3fffe20e72a7d09f2825dTimo Sirainenimport org.mindswap.owl.OWLValue;
395682d473b161c86165e7b9323ce4e45afb94bdTimo Sirainenimport org.mindswap.owls.service.Service;
395682d473b161c86165e7b9323ce4e45afb94bdTimo Sirainen
395682d473b161c86165e7b9323ce4e45afb94bdTimo Sirainenimport com.hp.hpl.jena.datatypes.xsd.XSDDatatype;
395682d473b161c86165e7b9323ce4e45afb94bdTimo Sirainenimport com.hp.hpl.jena.ontology.OntModel;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport com.hp.hpl.jena.rdf.model.Literal;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainenimport com.hp.hpl.jena.rdf.model.Model;
395682d473b161c86165e7b9323ce4e45afb94bdTimo Sirainenimport com.hp.hpl.jena.rdf.model.Property;
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainenimport com.hp.hpl.jena.rdf.model.RDFNode;
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainenimport com.hp.hpl.jena.rdf.model.Resource;
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainenimport com.hp.hpl.jena.rdf.model.Statement;
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainenimport com.hp.hpl.jena.vocabulary.OWL;
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainenimport com.hp.hpl.jena.vocabulary.RDF;
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen/**
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen * @author Evren Sirin
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen */
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainenpublic class OWLOntologyImpl extends OWLModelImpl implements OWLOntology, org.mindswap.owls.OWLSOntology {
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen private OWLKnowledgeBase kb;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen private OWLIndividual ontResource;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen private URI uri;
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen private URI fileURI;
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen private Map imports;
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen private OWLOntology sourceOntology;
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen public OWLOntologyImpl(OWLKnowledgeBase kb, URI uri, URI fileURI, Model jenaModel) {
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen super(jenaModel);
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen super.setBaseOntology(this);
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen this.uri = uri;
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen this.fileURI = fileURI;
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen this.kb = kb;
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen
51327f2489a4e0e615eb9f7d921473cf8512bb79Timo Sirainen imports = new HashMap();
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen sourceOntology = this;
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen }
31a574fda352ef4f71dbff9c30e15e4744e132c0Timo Sirainen
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen public OWLKnowledgeBase getKB() {
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen return kb;
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen }
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen public Set getImports() {
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen return new HashSet( imports.values() );
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen }
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen public Set getImports(boolean direct) {
99695d99930b35c2bac85d52e976b44cf8485d83Timo Sirainen if(!direct) {
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen LinkedHashSet importsClosure = new LinkedHashSet();
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen List orderedList = new ArrayList();
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen orderedList.add( this );
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen for( int i = 0; i < orderedList.size(); i++ ) {
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen OWLOntology ont = (OWLOntology) orderedList.get( i );
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen if( importsClosure.contains( ont ) )
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen continue;
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen else
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen importsClosure.add( ont );
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen for(Iterator it = ont.getImports().iterator(); it.hasNext();) {
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen OWLOntology imported = (OWLOntology) it.next();
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen if( importsClosure.contains( imported ) )
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen continue;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen else
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen orderedList.add( imported );
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen }
99695d99930b35c2bac85d52e976b44cf8485d83Timo Sirainen }
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen return importsClosure;
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen }
e2d268e9531227ead6a98466ecf3c046c857ef70Timo Sirainen
e2d268e9531227ead6a98466ecf3c046c857ef70Timo Sirainen return getImports();
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen }
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen
99695d99930b35c2bac85d52e976b44cf8485d83Timo Sirainen public void addImport(OWLOntology ontology) {
99695d99930b35c2bac85d52e976b44cf8485d83Timo Sirainen URI fileURI = ontology.getFileURI();
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen if( fileURI != null && !imports.containsKey( fileURI )) {
99695d99930b35c2bac85d52e976b44cf8485d83Timo Sirainen imports.put( fileURI, ontology );
99695d99930b35c2bac85d52e976b44cf8485d83Timo Sirainen }
99695d99930b35c2bac85d52e976b44cf8485d83Timo Sirainen }
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen public void addImports(Set theImports) {
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen Iterator aIter = theImports.iterator();
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen while (aIter.hasNext()) {
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen try {
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen OWLOntology aOnt = (OWLOntology)aIter.next();
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen addImport(aOnt);
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen }
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen catch (Exception ex) {
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen // probably a cast exception, someone trying to add an ontology that
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen // isnt actually an ontology object. just ignore, try the next one
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen }
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen }
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen //this.imports.addAll(theImports);
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen }
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen public OWLClass createClass(URI uri) {
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen OWLClass c = getClass(uri);
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen
44320b37d20bb75e0d433423318db2f4e29d5b91Timo Sirainen if(c == null) {
44320b37d20bb75e0d433423318db2f4e29d5b91Timo Sirainen Resource r = asResource(uri);
44320b37d20bb75e0d433423318db2f4e29d5b91Timo Sirainen ontModel.add(r, RDF.type, OWL.Class);
44320b37d20bb75e0d433423318db2f4e29d5b91Timo Sirainen kb.refresh();
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen c = new OWLClassImpl(this, r);
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen }
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen return c;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen }
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen public OWLObjectProperty createObjectProperty(URI uri) {
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen OWLObjectProperty c = getObjectProperty(uri);
44320b37d20bb75e0d433423318db2f4e29d5b91Timo Sirainen
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen if(c == null) {
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen Property r = asProperty(uri);
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen ontModel.add(r, RDF.type, OWL.ObjectProperty);
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen kb.refresh();
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen
eb0816090cf5a549280ad783b9aa6fec199d36baTimo Sirainen c = new OWLObjectPropertyImpl(this, r);
363929157786b549c80630bda3c3575f5115c6c5Timo Sirainen }
4182d8cd818e76856a5a1e25b343fe5ddf69fd8eTimo Sirainen
18a41cbd38f83429b790414c1159c097af4a59b8Timo Sirainen return c;
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen }
c115c742f730e312d6b6ab5064595cd0d8b4e26eTimo Sirainen
public OWLDataProperty createDataProperty(URI uri) {
OWLDataProperty c = getDataProperty(uri);
if(c == null) {
Property r = asProperty(uri);
ontModel.add(r, RDF.type, OWL.DatatypeProperty);
kb.refresh();
c = new OWLDataPropertyImpl(this, r);
}
return c;
}
public OWLIndividual createIndividual(URI uri) {
OWLIndividual ind = getIndividual(uri);
if(ind == null) {
Resource r = asResource(uri);
ind = new OWLIndividualImpl(this, r);
kb.refresh();
}
return ind;
}
public OWLIndividual createInstance(OWLClass c) {
Resource r = ontModel.createResource();
ontModel.add(r, RDF.type, (Resource) c.getImplementation());
OWLIndividual ind = new OWLIndividualImpl(this, r);
kb.refresh();
return ind;
}
public OWLIndividual createInstance(OWLClass c, URI uri) {
Resource r = asResource(uri);
ontModel.add(r, RDF.type, (Resource) c.getImplementation());
OWLIndividual ind = new OWLIndividualImpl(this, r);
kb.refresh();
return ind;
}
public OWLDataValue createDataValue(String value) {
return new OWLDataValueImpl(ontModel.createLiteral(value));
}
public OWLDataValue createDataValue(String value, String language) {
return new OWLDataValueImpl(ontModel.createLiteral(value, language));
}
public OWLDataValue createDataValue(Object value, URI datatypeURI) {
if(datatypeURI.equals(org.mindswap.owl.vocabulary.RDF.XMLLiteral))
return new OWLDataValueImpl(ontModel.createLiteral(value.toString(), true));
else
return new OWLDataValueImpl(ontModel.createTypedLiteral(value, datatypeURI.toString()));
}
public OWLDataValue createDataValue(Object value) {
if(value instanceof OWLDataValue )
return (OWLDataValue) value;
else if(value instanceof URI)
return new OWLDataValueImpl(ontModel.createTypedLiteral(value, XSDDatatype.XSDanyURI));
else
return new OWLDataValueImpl(ontModel.createTypedLiteral(value));
}
public URI getURI() {
return uri;
}
public URI getFileURI() {
return fileURI;
}
/* (non-Javadoc)
* @see org.mindswap.owl.OWLObject#debugString()
*/
public String debugString() {
return "Ontology (" + uri + ")";
}
/* (non-Javadoc)
* @see org.mindswap.owl.OWLOntology#getOntologyObject()
*/
public OWLEntity getOntologyObject() {
return ontResource;
}
/* (non-Javadoc)
* @see org.mindswap.owl.OWLOntology#asSingletonKB()
*/
public OWLKnowledgeBase asKB() {
return asKB(true);
}
/* (non-Javadoc)
* @see org.mindswap.owl.OWLOntology#asSingletonKB(boolean)
*/
public OWLKnowledgeBase asKB(boolean withImports) {
OWLKnowledgeBase kb = OWLFactory.createKB();
kb.load(this, withImports);
return kb;
}
protected OWLDataValue wrapDataValue(Literal l, OWLOntology ont) {
return new OWLDataValueImpl(l);
}
protected OWLIndividual wrapIndividual(Resource r, OWLOntology ont) {
return new OWLIndividualImpl(this, r);
}
protected OWLClass wrapClass(Resource r, OWLOntology ont) {
return new OWLClassImpl(this, r);
}
protected OWLObjectProperty wrapObjectProperty(Property p, OWLOntology ont) {
return new OWLObjectPropertyImpl(this, p);
}
protected OWLDataProperty wrapDataProperty(Property p, OWLOntology ont) {
return new OWLDataPropertyImpl(this, p);
}
public String toString() {
if(uri == null)
return "Ontology()";
return "Ontology(" + uri + ")";
}
public void setURI(URI uri) {
this.uri = uri;
if(uri != null)
ontResource = new OWLIndividualImpl(this, ontModel.getResource(uri.toString()));
}
public void setFileURI(URI uri) {
this.fileURI = uri;
}
// public void setKB(OWLKnowledgeBase kb) {
// this.kb = kb;
// }
// public void setImports(Set imports) {
// this.imports = imports;
// }
public void refresh() {
ontModel.rebind();
kb.refresh();
}
public void setProperty(OWLIndividual ind, OWLDataProperty prop, String value) {
setProperty(ind, prop, createDataValue(value));
}
public void setProperty(OWLIndividual ind, OWLDataProperty prop, Object value) {
setProperty(ind, prop, createDataValue(value));
}
public void setProperty(OWLIndividual ind, OWLDataProperty prop, OWLDataValue value) {
Resource subject = (Resource) ind.getImplementation();
Property predicate = (Property) prop.getImplementation();
Literal object = (Literal) value.getImplementation();
ontModel.remove(ontModel.listStatements(subject, predicate, (Literal) null));
ontModel.add(subject, predicate, object);
kb.refresh();
}
public void addProperty(OWLIndividual ind, OWLProperty prop, OWLValue value) {
if( prop instanceof OWLObjectProperty && value instanceof OWLIndividual )
addProperty( ind, (OWLObjectProperty) prop, (OWLIndividual) value );
else if( prop instanceof OWLDataProperty && value instanceof OWLDataValue )
addProperty( ind, (OWLDataProperty) prop, (OWLDataValue) value );
else
throw new IllegalArgumentException();
}
public void addProperty(OWLIndividual ind, OWLDataProperty prop, OWLDataValue value) {
ontModel.add(
(Resource) ind.getImplementation(),
(Property) prop.getImplementation(),
(Literal) value.getImplementation());
kb.refresh();
}
public void addProperty(OWLIndividual ind, OWLDataProperty prop, String value) {
addProperty(ind, prop, createDataValue(value));
}
public void addProperty(OWLIndividual ind, OWLDataProperty prop, Object value) {
addProperty(ind, prop, createDataValue(value));
}
public void removeProperties(OWLIndividual ind, OWLProperty prop) {
Resource subject = (Resource) ind.getImplementation();
Property predicate = (Property) prop.getImplementation();
ontModel.remove(ontModel.listStatements(subject, predicate, (Resource) null));
kb.refresh();
}
public void removeProperty(OWLIndividual ind, OWLProperty prop, OWLValue value)
{
Resource subject = (Resource)ind.getImplementation();
Property predicate = (Property)prop.getImplementation();
RDFNode object = (RDFNode)value.getImplementation();
Statement stmt = ontModel.createStatement(subject,predicate,object);
ontModel.remove(stmt);
refresh();
}
public void addProperty(OWLIndividual ind, OWLObjectProperty prop, OWLIndividual value) {
ontModel.add(
(Resource) ind.getImplementation(),
(Property) prop.getImplementation(),
(Resource) value.getImplementation());
kb.refresh();
}
public void setProperty(OWLIndividual ind, OWLObjectProperty prop, OWLIndividual value) {
Resource subject = (Resource) ind.getImplementation();
Property predicate = (Property) prop.getImplementation();
Resource object = (Resource) value.getImplementation();
ontModel.remove(ontModel.listStatements(subject, predicate, (Resource) null));
ontModel.add(subject, predicate, object);
kb.refresh();
}
public void addType(OWLIndividual ind, OWLClass c) {
ontModel.add(
(Resource) ind.getImplementation(),
RDF.type,
(Resource) c.getImplementation());
kb.refresh();
}
public void removeTypes(OWLIndividual ind) {
Resource subject = (Resource) ind.getImplementation();
ontModel.remove(ontModel.listStatements(subject, RDF.type, (Resource) null));
kb.refresh();
}
public OWLOntology getTranslationSource() {
return sourceOntology;
}
public void setTranslationSource(OWLOntology ontology) {
sourceOntology = ontology;
}
public Service getService() {
List list = getServices();
return list.isEmpty() ? null : (Service) list.get(0);
}
public OWLIndividual parseLiteral(String literal) {
Reader in = new StringReader( literal );
OWLOntologyImpl ont = (OWLOntologyImpl) kb.read( in, uri );
OWLIndividual res = null;
int outCount = 0;
OWLIndividualList instances = ont.getIndividuals();
for(int i = 0; i < instances.size(); i++) {
OWLIndividual ind = (OWLIndividual) instances.get( i );
if(ont.getIncomingProperties(ind).isEmpty())
return ind;
if (res == null)
{
res = ind;
outCount = ont.getProperties(ind).size();
}
else
{
int newCount = ont.getProperties(ind).size();
if (newCount > outCount)
{
res = ind;
outCount = newCount;
}
}
}
return res;
}
public OWLOntology union( OWLOntology ont ) {
// create empty ont
OWLOntology newOnt = OWLFactory.createOntology();
// add the contents of both ontologies
newOnt.add( this );
newOnt.add( ont );
return newOnt;
}
public void add( OWLOntology ont ) {
Model m1 = ((OntModel) this.getImplementation()).getBaseModel();
Model m2 = ((OntModel) ont.getImplementation()).getBaseModel();
m1.add( m2 );
kb.refresh();
}
public List getServices() {
if (kb != null)
return kb.getServices();
return super.getServices();
}
}