Author: alexdma
Date: Mon Nov 28 09:48:52 2011
New Revision: 1207044
URL: http://svn.apache.org/viewvc?rev=1207044&view=rev
Log:
- some optimizations in OWL exports of spaces and sessions (no merging if there
is only one ontology) (STANBOL-332)
- reduced ontonet calls from reasoners web provider (STANBOL-250)
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologySpaceSource.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyScope.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologySpace.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologyCollectorImpl.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologySpaceImpl.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOntologyProvider.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyScopeImpl.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/AbstractOntologySpaceImpl.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionImpl.java
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeOntologyResource.java
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java
incubator/stanbol/trunk/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/OntonetInputProvider.java
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologySpaceSource.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologySpaceSource.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologySpaceSource.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/io/OntologySpaceSource.java
Mon Nov 28 09:48:52 2011
@@ -44,7 +44,7 @@ public class OntologySpaceSource extends
"Could not add subtrees to unmodifiable ontology space {}.
Input source will have no additions.",
e.getOntologyCollector());
}
- bindRootOntology(space.asOWLOntology());
+ bindRootOntology(space.asOWLOntology(false));
}
protected void appendSubtree(OntologyInputSource subtree) throws
UnmodifiableOntologyCollectorException {
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyScope.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyScope.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyScope.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyScope.java
Mon Nov 28 09:48:52 2011
@@ -20,7 +20,6 @@ import java.util.Set;
import org.apache.stanbol.ontologymanager.ontonet.api.NamedResource;
import org.apache.stanbol.ontologymanager.ontonet.api.session.Session;
-import org.semanticweb.owlapi.model.OWLOntology;
/**
* Represents an ontology network that is used for modelling a given knowledge
component or domain, e.g.
@@ -44,6 +43,9 @@ public interface OntologyScope extends N
/**
* Adds a new ontology space to the list of user session spaces for this
scope.
*
+ * @deprecated as session ontology spaces are obsolete, so is this method.
Please refer directly to the
+ * session identified by <code>sessionID</code>.
+ *
* @param sessionSpace
* the ontology space to be added.
* @throws UnmodifiableOntologyCollectorException
@@ -51,15 +53,6 @@ public interface OntologyScope extends N
void addSessionSpace(OntologySpace sessionSpace, String sessionID) throws
UnmodifiableOntologyCollectorException;
/**
- * Returns an ontological form of this scope.
- *
- * @deprecated Please use the inherited method {@link
OWLExportable#asOWLOntology(boolean)}. Calls to the
- * current method are equivalent to asOWLOntology(false).
- * @return an OWL ontology that represents this scope.
- */
- OWLOntology asOWLOntology();
-
- /**
* Returns the core ontology space for this ontology scope. The core space
should never be null for any
* scope.
*
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologySpace.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologySpace.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologySpace.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologySpace.java
Mon Nov 28 09:48:52 2011
@@ -16,22 +16,13 @@
*/
package org.apache.stanbol.ontologymanager.ontonet.api.ontology;
-import org.semanticweb.owlapi.model.OWLOntology;
-
/**
* An ontology space identifies the set of OWL ontologies that should be
"active" in a given context, e.g. for
* a certain user session or a specific reasoning service. Each ontology space
has an ID and a top ontology
* that can be used as a shared resource for mutual exclusion and locking
strategies.
+ *
+ * @author alexdma
*/
public interface OntologySpace extends OntologyCollector, OWLExportable,
Lockable {
- /**
- * Returns the ontology that serves as a root module for this ontology
space.
- *
- * @deprecated Please use the inherited method {@link
OWLExportable#asOWLOntology(boolean)}. Calls to the
- * current method are equivalent to asOWLOntology(false).
- * @return the OWL form of this ontology space.
- */
- OWLOntology asOWLOntology();
-
}
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologyCollectorImpl.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologyCollectorImpl.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologyCollectorImpl.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologyCollectorImpl.java
Mon Nov 28 09:48:52 2011
@@ -19,12 +19,15 @@ package org.apache.stanbol.ontologymanag
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Set;
import org.apache.clerezza.rdf.core.TripleCollection;
import org.apache.clerezza.rdf.core.UriRef;
import org.apache.stanbol.ontologymanager.ontonet.api.io.OntologyInputSource;
import org.apache.stanbol.ontologymanager.ontonet.api.ontology.Lockable;
+import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OWLExportable;
import
org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyCollector;
import
org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyCollectorListener;
import
org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyCollectorModificationException;
@@ -33,8 +36,18 @@ import org.apache.stanbol.ontologymanage
import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpace;
import
org.apache.stanbol.ontologymanager.ontonet.api.ontology.UnmodifiableOntologyCollectorException;
import org.apache.stanbol.owl.util.OWLUtils;
+import org.apache.stanbol.owl.util.URIUtils;
+import org.semanticweb.owlapi.apibinding.OWLManager;
+import org.semanticweb.owlapi.model.AddImport;
import org.semanticweb.owlapi.model.IRI;
+import org.semanticweb.owlapi.model.OWLDataFactory;
import org.semanticweb.owlapi.model.OWLOntology;
+import org.semanticweb.owlapi.model.OWLOntologyAlreadyExistsException;
+import org.semanticweb.owlapi.model.OWLOntologyChange;
+import org.semanticweb.owlapi.model.OWLOntologyCreationException;
+import org.semanticweb.owlapi.model.OWLOntologyManager;
+import org.semanticweb.owlapi.model.OWLOntologySetProvider;
+import org.semanticweb.owlapi.util.OWLOntologyMerger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -45,7 +58,7 @@ import org.slf4j.LoggerFactory;
*
*/
public abstract class AbstractOntologyCollectorImpl implements
OntologyCollector, Lockable,
- OntologyInputSourceHandler {
+ OntologyInputSourceHandler, OWLExportable {
protected String _id = null;
@@ -133,6 +146,82 @@ public abstract class AbstractOntologyCo
}
@Override
+ public OWLOntology asOWLOntology(boolean merge) {
+
+ long before = System.currentTimeMillis();
+
+ // Create a new ontology
+ OWLOntology root;
+ OWLOntologyManager ontologyManager =
OWLManager.createOWLOntologyManager();
+ IRI iri = IRI.create(namespace + _id);
+ try {
+ root = ontologyManager.createOntology(iri);
+ } catch (OWLOntologyAlreadyExistsException e) {
+ // It should be impossible, but just in case.
+ ontologyManager.removeOntology(ontologyManager.getOntology(iri));
+ try {
+ root = ontologyManager.createOntology(iri);
+ } catch (OWLOntologyAlreadyExistsException e1) {
+ root = ontologyManager.getOntology(iri);
+ } catch (OWLOntologyCreationException e1) {
+ log.error("Failed to assemble root ontology for scope " + iri,
e);
+ root = null;
+ }
+ } catch (OWLOntologyCreationException e) {
+ log.error("Failed to assemble root ontology for scope " + _id, e);
+ root = null;
+ }
+
+ // Add the import declarations for directly managed ontologies.
+ if (root != null) {
+
+ if (merge) {
+ final Set<OWLOntology> set = new HashSet<OWLOntology>();
+ log.debug("Merging {} with its imports.", root);
+ set.add(root);
+
+ for (IRI ontologyIri : managedOntologies) {
+ log.debug("Merging {} with {}.", ontologyIri, root);
+ set.add(getOntology(ontologyIri, true));
+ }
+
+ OWLOntologySetProvider provider = new OWLOntologySetProvider()
{
+ @Override
+ public Set<OWLOntology> getOntologies() {
+ return set;
+ }
+ };
+ OWLOntologyMerger merger = new OWLOntologyMerger(provider);
+ try {
+ root =
merger.createMergedOntology(OWLManager.createOWLOntologyManager(), iri);
+ } catch (OWLOntologyCreationException e) {
+ log.error("Failed to merge imports for ontology " + iri,
e);
+ root = null;
+ }
+
+ } else {
+ // Add the import declarations for directly managed ontologies.
+ List<OWLOntologyChange> changes = new
LinkedList<OWLOntologyChange>();
+ OWLDataFactory df = ontologyManager.getOWLDataFactory();
+
+ String base = URIUtils.upOne(IRI.create(namespace + getID()))
+ "/";
+
+ // The key set of managedOntologies contains the ontology
IRIs, not their storage keys.
+ for (IRI ontologyIri : managedOntologies) {
+ IRI physIRI = IRI.create(base + ontologyIri);
+ changes.add(new AddImport(root,
df.getOWLImportsDeclaration(physIRI)));
+ }
+
+ ontologyManager.applyChanges(changes);
+ }
+
+ }
+ log.debug("OWL export of {} completed in {} ms.", getID(),
System.currentTimeMillis() - before);
+
+ return root;
+ }
+
+ @Override
public void clearListeners() {
listeners.clear();
}
@@ -211,11 +300,6 @@ public abstract class AbstractOntologyCo
}
@Override
- public Set<Class<?>> getSupportedOntologyTypes() {
- return Collections.unmodifiableSet(supportedTypes);
- }
-
- @Override
public int getOntologyCount(boolean withClosure) {
if (withClosure) throw new UnsupportedOperationException(
"Closure support not implemented efficiently yet. Please call
getOntologyCount(false).");
@@ -223,6 +307,11 @@ public abstract class AbstractOntologyCo
}
@Override
+ public Set<Class<?>> getSupportedOntologyTypes() {
+ return Collections.unmodifiableSet(supportedTypes);
+ }
+
+ @Override
public boolean hasOntology(IRI ontologyIri) {
return managedOntologies.contains(ontologyIri);
}
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologySpaceImpl.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologySpaceImpl.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologySpaceImpl.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/AbstractOntologySpaceImpl.java
Mon Nov 28 09:48:52 2011
@@ -17,24 +17,18 @@
package org.apache.stanbol.ontologymanager.ontonet.impl.clerezza;
import java.util.ArrayList;
-import java.util.LinkedList;
import java.util.List;
-import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OWLExportable;
import
org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyProvider;
import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpace;
import org.apache.stanbol.ontologymanager.ontonet.api.ontology.SpaceType;
import org.apache.stanbol.owl.util.URIUtils;
-import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.model.AddImport;
import org.semanticweb.owlapi.model.IRI;
import org.semanticweb.owlapi.model.OWLDataFactory;
import org.semanticweb.owlapi.model.OWLImportsDeclaration;
import org.semanticweb.owlapi.model.OWLOntology;
-import org.semanticweb.owlapi.model.OWLOntologyAlreadyExistsException;
import org.semanticweb.owlapi.model.OWLOntologyChange;
-import org.semanticweb.owlapi.model.OWLOntologyCreationException;
-import org.semanticweb.owlapi.model.OWLOntologyManager;
import org.semanticweb.owlapi.model.RemoveImport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -61,65 +55,6 @@ public abstract class AbstractOntologySp
}
@Override
- public OWLOntology asOWLOntology() {
- return this.asOWLOntology(false);
- }
-
- /**
- * FIXME not merging yet
- *
- * @see OWLExportable#asOWLOntology(boolean)
- */
- @Override
- public OWLOntology asOWLOntology(boolean merge) {
- if (merge) throw new UnsupportedOperationException(
- "Ontology merging only implemented for managed ontologies, not
for collectors. "
- + "Please set merge parameter to false.");
-
- long before = System.currentTimeMillis();
-
- OWLOntology root;
- OWLOntologyManager ontologyManager =
OWLManager.createOWLOntologyManager();
- IRI iri = IRI.create(namespace + _id);
- try {
- root = ontologyManager.createOntology(iri);
- } catch (OWLOntologyAlreadyExistsException e) {
- ontologyManager.removeOntology(ontologyManager.getOntology(iri));
- try {
- root = ontologyManager.createOntology(iri);
- } catch (OWLOntologyAlreadyExistsException e1) {
- root = ontologyManager.getOntology(iri);
- } catch (OWLOntologyCreationException e1) {
- log.error("Failed to assemble root ontology for scope " + iri,
e);
- root = null;
- }
- } catch (OWLOntologyCreationException e) {
- log.error("Failed to assemble root ontology for scope " + _id, e);
- root = null;
- }
-
- // Add the import declarations for directly managed ontologies.
- if (root != null) {
- List<OWLOntologyChange> changes = new
LinkedList<OWLOntologyChange>();
- OWLDataFactory df = ontologyManager.getOWLDataFactory();
-
- String base = URIUtils.upOne(IRI.create(namespace + getID())) +
"/";
-
- // The key set of managedOntologies contains the ontology IRIs,
not their storage keys.
- for (IRI ontologyIri : managedOntologies) {
- IRI physIRI = IRI.create(base + ontologyIri);
- changes.add(new AddImport(root,
df.getOWLImportsDeclaration(physIRI)));
- }
-
- ontologyManager.applyChanges(changes);
- }
-
- log.debug("OWL export of space {} completed in {} ms.", getID(),
System.currentTimeMillis() - before);
-
- return root;
- }
-
- @Override
public OWLOntology getOntology(IRI ontologyIri, boolean merge) {
// Remove the check below. It might be an unmanaged dependency (TODO
remove from collector and
// reintroduce check?).
@@ -133,19 +68,21 @@ public abstract class AbstractOntologySp
* TODO manage import rewrites better once the container ID is fully
configurable (i.e. instead of
* going upOne() add "session" or "ontology" if needed).
*/
- for (OWLImportsDeclaration oldImp : o.getImportsDeclarations()) {
- changes.add(new RemoveImport(o, oldImp));
- String s = oldImp.getIRI().toString();
- s = s.substring(s.indexOf("::") + 2, s.length());
- boolean managed = managedOntologies.contains(oldImp.getIRI());
- // For space, always go up at least one
- IRI ns = getNamespace();
- IRI target = IRI.create((managed ? ns + "/" +
getID().split("/")[0] + "/" : URIUtils.upOne(ns)
-
+ "/")
- + s);
- changes.add(new AddImport(o, df.getOWLImportsDeclaration(target)));
+ if (!merge) {
+ for (OWLImportsDeclaration oldImp : o.getImportsDeclarations()) {
+ changes.add(new RemoveImport(o, oldImp));
+ String s = oldImp.getIRI().toString();
+ s = s.substring(s.indexOf("::") + 2, s.length());
+ boolean managed = managedOntologies.contains(oldImp.getIRI());
+ // For space, always go up at least one
+ IRI ns = getNamespace();
+ IRI target = IRI.create((managed ? ns + "/" +
getID().split("/")[0] + "/" : URIUtils
+ .upOne(ns) + "/")
+ + s);
+ changes.add(new AddImport(o,
df.getOWLImportsDeclaration(target)));
+ }
+ o.getOWLOntologyManager().applyChanges(changes);
}
- o.getOWLOntologyManager().applyChanges(changes);
return o;
}
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOntologyProvider.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOntologyProvider.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOntologyProvider.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/clerezza/ClerezzaOntologyProvider.java
Mon Nov 28 09:48:52 2011
@@ -505,6 +505,7 @@ public class ClerezzaOntologyProvider im
UriRef ontologyId = null;
+ // Get the id of this ontology.
Iterator<Triple> itt = graph.filter(null, RDF.type, OWL.Ontology);
if (itt.hasNext()) {
NonLiteral nl = itt.next().getSubject();
@@ -529,29 +530,15 @@ public class ClerezzaOntologyProvider im
o.getOWLOntologyManager().applyChanges(changes);
return o;
} else {
- // final Set<OWLOntology> mergeUs = new HashSet<OWLOntology>();
- //
- // for (UriRef ref : revImps) {
- // if (!loaded.contains(ref)) {
- // TripleCollection tc = store.getTriples(ref);
- //
mergeUs.add(OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(tc, mgr));
- // loaded.add(ref);
- // }
- // }
- // mergeUs.add(o);
- // OWLOntologyMerger merger = new OWLOntologyMerger(new
OWLOntologySetProvider() {
- //
- // @Override
- // public Set<OWLOntology> getOntologies() {
- // return mergeUs;
- // }
- //
- // }, false);
- // OWLOntology merged =
merger.createMergedOntology(OWLManager.createOWLOntologyManager(),
- // OWLUtils.guessOntologyIdentifier(o));
-
// More efficient / brutal implementation.
+ // If there is just the root ontology, convert it straight away.
+ if (revImps.size() == 1 && revImps.contains(graphName)) {
+ OWLOntology o =
OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(graph, mgr);
+ return o;
+ }
+
+ // FIXME when there's more than one ontology, this way of merging
them seems inefficient...
TripleCollection tempGraph = new SimpleMGraph();
// The set of triples that will be excluded from the merge
Set<Triple> exclusions = new HashSet<Triple>();
@@ -590,5 +577,4 @@ public class ClerezzaOntologyProvider im
return
OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(tempGraph, mgr);
}
}
-
}
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyScopeImpl.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyScopeImpl.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyScopeImpl.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/OntologyScopeImpl.java
Mon Nov 28 09:48:52 2011
@@ -43,6 +43,8 @@ import org.semanticweb.owlapi.model.OWLO
import org.semanticweb.owlapi.model.OWLOntologyChange;
import org.semanticweb.owlapi.model.OWLOntologyCreationException;
import org.semanticweb.owlapi.model.OWLOntologyManager;
+import org.semanticweb.owlapi.model.OWLOntologySetProvider;
+import org.semanticweb.owlapi.util.OWLOntologyMerger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -132,11 +134,6 @@ public class OntologyScopeImpl implement
}
}
- @Override
- public OWLOntology asOWLOntology() {
- return this.asOWLOntology(false);
- }
-
/**
* FIXME not merging yet
*
@@ -144,30 +141,56 @@ public class OntologyScopeImpl implement
*/
@Override
public OWLOntology asOWLOntology(boolean merge) {
- if (merge) throw new UnsupportedOperationException(
- "Ontology merging only implemented for managed ontologies, not
for collectors. "
- + "Please set merge parameter to false.");
+ // if (merge) throw new UnsupportedOperationException(
+ // "Ontology merging only implemented for managed ontologies, not for
collectors. "
+ // + "Please set merge parameter to false.");
// Create an ontology manager on the fly. We don't really need a
permanent one.
OWLOntologyManager mgr = OWLManager.createOWLOntologyManager();
OWLDataFactory df = mgr.getOWLDataFactory();
- OWLOntology ont;
+ OWLOntology ont = null;
try {
- // The root ontology ID is in the form [namespace][scopeId]
- ont = mgr.createOntology(IRI.create(getNamespace() + getID()));
- List<OWLOntologyChange> additions = new
LinkedList<OWLOntologyChange>();
- // Add the import statement for the custom space, if existing and
not empty
- OntologySpace spc = getCustomSpace();
- if (spc != null && spc.getOntologyCount(false) > 0) {
- IRI spaceIri = IRI.create(getNamespace() + spc.getID());
- additions.add(new AddImport(ont,
df.getOWLImportsDeclaration(spaceIri)));
- }
- // Add the import statement for the core space, if existing and
not empty
- spc = getCoreSpace();
- if (spc != null && spc.getOntologyCount(false) > 0) {
- IRI spaceIri = IRI.create(getNamespace() + spc.getID());
- additions.add(new AddImport(ont,
df.getOWLImportsDeclaration(spaceIri)));
+
+ if (merge) {
+ final Set<OWLOntology> set = new HashSet<OWLOntology>();
+
+ log.debug("Merging custom space of {}.", getID());
+ set.add(this.getCustomSpace().asOWLOntology(merge));
+
+ log.debug("Merging core space of {}.", getID());
+ set.add(this.getCoreSpace().asOWLOntology(merge));
+
+ OWLOntologySetProvider provider = new OWLOntologySetProvider()
{
+ @Override
+ public Set<OWLOntology> getOntologies() {
+ return set;
+ }
+ };
+ OWLOntologyMerger merger = new OWLOntologyMerger(provider);
+ try {
+ ont =
merger.createMergedOntology(OWLManager.createOWLOntologyManager(),
+ IRI.create(getNamespace() + getID()));
+ } catch (OWLOntologyCreationException e) {
+ log.error("Failed to merge imports for ontology.", e);
+ ont = null;
+ }
+ } else {
+ // The root ontology ID is in the form [namespace][scopeId]
+ ont = mgr.createOntology(IRI.create(getNamespace() + getID()));
+ List<OWLOntologyChange> additions = new
LinkedList<OWLOntologyChange>();
+ // Add the import statement for the custom space, if existing
and not empty
+ OntologySpace spc = getCustomSpace();
+ if (spc != null && spc.getOntologyCount(false) > 0) {
+ IRI spaceIri = IRI.create(getNamespace() + spc.getID());
+ additions.add(new AddImport(ont,
df.getOWLImportsDeclaration(spaceIri)));
+ }
+ // Add the import statement for the core space, if existing
and not empty
+ spc = getCoreSpace();
+ if (spc != null && spc.getOntologyCount(false) > 0) {
+ IRI spaceIri = IRI.create(getNamespace() + spc.getID());
+ additions.add(new AddImport(ont,
df.getOWLImportsDeclaration(spaceIri)));
+ }
+ mgr.applyChanges(additions);
}
- mgr.applyChanges(additions);
} catch (OWLOntologyCreationException e) {
log.error("Failed to generate an OWL form of scope " + getID(), e);
ont = null;
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/AbstractOntologySpaceImpl.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/AbstractOntologySpaceImpl.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/AbstractOntologySpaceImpl.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/AbstractOntologySpaceImpl.java
Mon Nov 28 09:48:52 2011
@@ -26,7 +26,6 @@ import java.util.Map;
import java.util.Set;
import org.apache.stanbol.ontologymanager.ontonet.api.io.OntologyInputSource;
-import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OWLExportable;
import
org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyCollectorListener;
import
org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyCollectorModificationException;
import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpace;
@@ -150,16 +149,6 @@ public abstract class AbstractOntologySp
}
@Override
- public OWLOntology asOWLOntology() {
- return this.asOWLOntology(false);
- }
-
- /**
- * FIXME not merging yet
- *
- * @see OWLExportable#asOWLOntology(boolean)
- */
- @Override
public OWLOntology asOWLOntology(boolean merge) {
if (merge) throw new UnsupportedOperationException(
"Ontology merging not implemented yet. Please set merge
parameter to false.");
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionImpl.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionImpl.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionImpl.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/session/SessionImpl.java
Mon Nov 28 09:48:52 2011
@@ -45,7 +45,9 @@ import org.semanticweb.owlapi.model.OWLO
import org.semanticweb.owlapi.model.OWLOntologyChange;
import org.semanticweb.owlapi.model.OWLOntologyCreationException;
import org.semanticweb.owlapi.model.OWLOntologyManager;
+import org.semanticweb.owlapi.model.OWLOntologySetProvider;
import org.semanticweb.owlapi.model.RemoveImport;
+import org.semanticweb.owlapi.util.OWLOntologyMerger;
import org.slf4j.LoggerFactory;
/**
@@ -85,16 +87,30 @@ public class SessionImpl extends Abstrac
listeners.add(listener);
}
+ @Override
+ public OWLOntology asOWLOntology(boolean merge) {
+ OWLOntology o = super.asOWLOntology(merge);
+ if (o != null && !merge) {
+ OWLOntologyManager ontologyManager = o.getOWLOntologyManager();
+ OWLDataFactory df = ontologyManager.getOWLDataFactory();
+ List<OWLOntologyChange> changes = new
LinkedList<OWLOntologyChange>();
+ // Add import declarations for attached scopes.
+ for (String scopeID : getAttachedScopes()) {
+ IRI physIRI = IRI.create(namespace + scopeID);
+ changes.add(new AddImport(o,
df.getOWLImportsDeclaration(physIRI)));
+ }
+ ontologyManager.applyChanges(changes);
+ }
+ return o;
+ }
+
/**
* FIXME not merging yet FIXME not including imported ontologies unless
they are merged *before* storage.
*
* @see OWLExportable#asOWLOntology(boolean)
*/
- @Override
- public OWLOntology asOWLOntology(boolean merge) {
- if (merge) throw new UnsupportedOperationException(
- "Ontology merging only implemented for managed ontologies, not for
collectors. "
- + "Please set merge parameter to false.");
+ // @Override
+ public OWLOntology asOWLOntology2(boolean merge) {
long before = System.currentTimeMillis();
@@ -120,29 +136,54 @@ public class SessionImpl extends Abstrac
root = null;
}
+ // Add the import declarations for directly managed ontologies.
if (root != null) {
- // Add the import declarations for directly managed ontologies.
- List<OWLOntologyChange> changes = new
LinkedList<OWLOntologyChange>();
- OWLDataFactory df = ontologyManager.getOWLDataFactory();
- String base = IRI.create(namespace + getID()) + "/";
- // The key set of managedOntologies contains the ontology IRIs,
not their storage keys.
- for (IRI ontologyIri : managedOntologies) {
- IRI physIRI = IRI.create(base + ontologyIri);
- changes.add(new AddImport(root,
df.getOWLImportsDeclaration(physIRI)));
- }
+ if (merge) {
+ final Set<OWLOntology> set = new HashSet<OWLOntology>();
+ log.debug("Merging {} with its imports.", root);
+ set.add(root);
+
+ for (IRI ontologyIri : managedOntologies) {
+ log.debug("Merging {} with {}.", ontologyIri, root);
+ set.add(getOntology(ontologyIri, true));
+ }
+
+ OWLOntologySetProvider provider = new OWLOntologySetProvider()
{
+ @Override
+ public Set<OWLOntology> getOntologies() {
+ return set;
+ }
+ };
+ OWLOntologyMerger merger = new OWLOntologyMerger(provider);
+ try {
+ root =
merger.createMergedOntology(OWLManager.createOWLOntologyManager(), iri);
+ } catch (OWLOntologyCreationException e) {
+ log.error("Failed to merge imports for ontology " + iri,
e);
+ root = null;
+ }
+
+ } else {
+ // Add the import declarations for directly managed ontologies.
+ List<OWLOntologyChange> changes = new
LinkedList<OWLOntologyChange>();
+ OWLDataFactory df = ontologyManager.getOWLDataFactory();
+ String base = IRI.create(namespace + getID()) + "/";
+ // The key set of managedOntologies contains the ontology
IRIs, not their storage keys.
+ for (IRI ontologyIri : managedOntologies) {
+ IRI physIRI = IRI.create(base + ontologyIri);
+ changes.add(new AddImport(root,
df.getOWLImportsDeclaration(physIRI)));
+ }
+
+ // Add import declarations for attached scopes.
+ for (String scopeID : getAttachedScopes()) {
+ IRI physIRI = IRI.create(namespace + scopeID);
+ changes.add(new AddImport(root,
df.getOWLImportsDeclaration(physIRI)));
+ }
- // Add import declarations for attached scopes.
- for (String scopeID : getAttachedScopes()) {
- IRI physIRI = IRI.create(namespace + scopeID);
- changes.add(new AddImport(root,
df.getOWLImportsDeclaration(physIRI)));
+ // Commit
+ ontologyManager.applyChanges(changes);
}
-
- // Commit
- ontologyManager.applyChanges(changes);
-
}
-
log.debug("OWL export of session {} completed in {} ms.", getID(),
System.currentTimeMillis()
-
before);
@@ -197,11 +238,14 @@ public class SessionImpl extends Abstrac
@Override
public OWLOntology getOntology(IRI ontologyIri, boolean merge) {
+
+ long before = System.currentTimeMillis();
+
// Remove the check below. It might be an unmanaged dependency (TODO
remove from collector and
// reintroduce check?).
// if (!hasOntology(ontologyIri)) return null;
OWLOntology o;
- o = (OWLOntology) ontologyProvider.getStoredOntology(ontologyIri,
OWLOntology.class, merge);
+ o = (OWLOntology) ontologyProvider.getStoredOntology(ontologyIri,
OWLOntology.class, true);
// Rewrite import statements
List<OWLOntologyChange> changes = new ArrayList<OWLOntologyChange>();
OWLDataFactory df = o.getOWLOntologyManager().getOWLDataFactory();
@@ -220,6 +264,9 @@ public class SessionImpl extends Abstrac
changes.add(new AddImport(o, df.getOWLImportsDeclaration(target)));
}
o.getOWLOntologyManager().applyChanges(changes);
+
+ log.debug("OWL export of session " + getID() + " ontology {} completed
in {} ms.", ontologyIri,
+ System.currentTimeMillis() - before);
return o;
}
Modified:
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeOntologyResource.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeOntologyResource.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeOntologyResource.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeOntologyResource.java
Mon Nov 28 09:48:52 2011
@@ -185,9 +185,9 @@ public class ScopeOntologyResource exten
// First of all, it could be a simple request for the space root!
String temp = scopeid + "/" + ontologyid;
if (temp.equals(scope.getCoreSpace().getID())) {
- return
Response.ok(scope.getCoreSpace().asOWLOntology()).build();
+ return
Response.ok(scope.getCoreSpace().asOWLOntology(false)).build();
} else if (temp.equals(scope.getCustomSpace().getID())) {
- return
Response.ok(scope.getCustomSpace().asOWLOntology()).build();
+ return
Response.ok(scope.getCustomSpace().asOWLOntology(false)).build();
// } else if (scope.getSessionSpace(IRI.create(temp)) != null)
{
// return
Response.ok(scope.getSessionSpace(IRI.create(temp)).asOWLOntology()).build();
}
Modified:
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ScopeResource.java
Mon Nov 28 09:48:52 2011
@@ -129,7 +129,7 @@ public class ScopeResource extends BaseS
@Context HttpHeaders headers,
@Context ServletContext servletContext) {
if (scope == null) return Response.status(NOT_FOUND).build();
- else return Response.ok(scope.asOWLOntology()).build();
+ else return Response.ok(scope.asOWLOntology(false)).build();
}
/**
Modified:
incubator/stanbol/trunk/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/OntonetInputProvider.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/OntonetInputProvider.java?rev=1207044&r1=1207043&r2=1207044&view=diff
==============================================================================
---
incubator/stanbol/trunk/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/OntonetInputProvider.java
(original)
+++
incubator/stanbol/trunk/reasoners/web/src/main/java/org/apache/stanbol/reasoners/web/input/provider/impl/OntonetInputProvider.java
Mon Nov 28 09:48:52 2011
@@ -161,22 +161,24 @@ public class OntonetInputProvider implem
log.warn("Session {} cannot be retrieved. Ignoring.",
this.sessionId);
}
final Set<OWLOntology> set = new HashSet<OWLOntology>();
- set.add(scope.asOWLOntology(false));
- for (OWLOntology o : scope.getCustomSpace().getOntologies(true)) {
- set.add(o);
- // set.addAll(o.getImportsClosure());
- }
- for (OWLOntology o : scope.getCoreSpace().getOntologies(true)) {
- set.add(o);
- // set.addAll(o.getImportsClosure());
- }
+ set.add(scope.asOWLOntology(true));
+
+ // for (OWLOntology o :
scope.getCustomSpace().getOntologies(true)) {
+ // set.add(o);
+ // // set.addAll(o.getImportsClosure());
+ // }
+ // for (OWLOntology o : scope.getCoreSpace().getOntologies(true)) {
+ // set.add(o);
+ // // set.addAll(o.getImportsClosure());
+ // }
if (session != null) {
- set.add(session.asOWLOntology(false));
- for (OWLOntology o : session.getOntologies(true)) {
- set.add(o);
- // set.addAll(o.getImportsClosure());
- }
+ set.add(session.asOWLOntology(true));
+ // for (OWLOntology o : session.getOntologies(true)) {
+ // set.add(o);
+ // // set.addAll(o.getImportsClosure());
+ // }
}
+ if (set.size() == 1) return set.iterator().next();
OWLOntologyMerger merger = new OWLOntologyMerger(new
OWLOntologySetProvider() {
@Override
public Set<OWLOntology> getOntologies() {