Author: alexdma
Date: Sat Nov 26 23:41:30 2011
New Revision: 1206635
URL: http://svn.apache.org/viewvc?rev=1206635&view=rev
Log:
- OntologyProvider now uses generics instead of Object (STANBOL-332)
- getOntologies(true) implementation in AbstractOntologyCollectorImpl is now
possible, although instead of providing the closure it merges the closure of
each managed ontology with the ontology itself (TODO preserve separate
ontologies). (STANBOL-332)
- Implemented simpler version of getFromOntonet() method in reasoners.web
(calls getOntologies(true) among other things) (STANBOL-250)
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyProvider.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/ClerezzaOntologyProvider.java
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/OWLAPIOntologyProvider.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/ontology/OntologyProvider.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyProvider.java?rev=1206635&r1=1206634&r2=1206635&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyProvider.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/api/ontology/OntologyProvider.java
Sat Nov 26 23:41:30 2011
@@ -75,9 +75,9 @@ public interface OntologyProvider<S> {
* @param returnType
* @return
*/
- Object getStoredOntology(IRI reference, Class<?> returnType);
+ <O> O getStoredOntology(IRI reference, Class<O> returnType);
- Object getStoredOntology(IRI reference, Class<?> returnType, boolean
merge);
+ <O> O getStoredOntology(IRI reference, Class<O> returnType, boolean merge);
/**
*
@@ -92,9 +92,9 @@ public interface OntologyProvider<S> {
* {@link UnsupportedOperationException} should be thrown.
* @return
*/
- Object getStoredOntology(String key, Class<?> returnType);
+ <O> O getStoredOntology(String key, Class<O> returnType);
- Object getStoredOntology(String key, Class<?> returnType, boolean merge);
+ <O> O getStoredOntology(String key, Class<O> returnType, boolean merge);
/**
* Returns an array containing the most specific types for ontology
objects that this provider can manage
@@ -102,7 +102,7 @@ public interface OntologyProvider<S> {
*
* @return the supported ontology return types.
*/
- Class<?>[] getSupportedReturnTypes();
+ <O> Class<O>[] getSupportedReturnTypes();
/**
* Retrieves an ontology by reading its content from a data stream and
stores it using the storage system
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=1206635&r1=1206634&r2=1206635&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
Sat Nov 26 23:41:30 2011
@@ -195,11 +195,13 @@ public abstract class AbstractOntologyCo
*/
@Override
public Set<OWLOntology> getOntologies(boolean withClosure) {
- if (withClosure) throw new UnsupportedOperationException(
- "Closure support not implemented efficiently yet. Please call
getOntologies(false) and compute the closure union for the OWLOntology objects
in the set.");
+ // if (withClosure) throw new UnsupportedOperationException(
+ // "Closure support not implemented efficiently yet. Please call
getOntologies(false) and compute the closure union for the OWLOntology objects
in the set.");
Set<OWLOntology> ontologies = new HashSet<OWLOntology>();
- for (IRI id : managedOntologies)
- ontologies.add(getOntology(id));
+ for (IRI id : managedOntologies) {
+ // FIXME temporary fix is to merge instead of including closure
+ ontologies.add(getOntology(id, withClosure));
+ }
return Collections.unmodifiableSet(ontologies);
}
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=1206635&r1=1206634&r2=1206635&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
Sat Nov 26 23:41:30 2011
@@ -33,6 +33,7 @@ import java.util.Set;
import java.util.Stack;
import org.apache.clerezza.rdf.core.MGraph;
+import org.apache.clerezza.rdf.core.NonLiteral;
import org.apache.clerezza.rdf.core.Resource;
import org.apache.clerezza.rdf.core.Triple;
import org.apache.clerezza.rdf.core.TripleCollection;
@@ -40,6 +41,7 @@ import org.apache.clerezza.rdf.core.UriR
import org.apache.clerezza.rdf.core.access.EntityAlreadyExistsException;
import org.apache.clerezza.rdf.core.access.TcManager;
import org.apache.clerezza.rdf.core.access.TcProvider;
+import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
import org.apache.clerezza.rdf.core.serializedform.Parser;
import org.apache.clerezza.rdf.core.serializedform.UnsupportedFormatException;
import org.apache.clerezza.rdf.ontologies.OWL;
@@ -72,8 +74,6 @@ import org.semanticweb.owlapi.model.OWLO
import org.semanticweb.owlapi.model.OWLOntologyCreationException;
import org.semanticweb.owlapi.model.OWLOntologyIRIMapper;
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;
@@ -260,17 +260,17 @@ public class ClerezzaOntologyProvider im
}
@Override
- public Object getStoredOntology(IRI reference, Class<?> returnType) {
+ public <O> O getStoredOntology(IRI reference, Class<O> returnType) {
return getStoredOntology(getKey(reference), returnType);
}
@Override
- public Object getStoredOntology(IRI reference, Class<?> returnType,
boolean merge) {
+ public <O> O getStoredOntology(IRI reference, Class<O> returnType, boolean
merge) {
return getStoredOntology(getKey(reference), returnType, merge);
}
@Override
- public Object getStoredOntology(String key, Class<?> returnType) {
+ public <O> O getStoredOntology(String key, Class<O> returnType) {
// TODO default to false? Or by set policy?
return getStoredOntology(key, returnType, false);
}
@@ -278,11 +278,12 @@ public class ClerezzaOntologyProvider im
/**
* In this implementation the identifier is the Graph Name (e.g.
ontonet::blabla)
*/
+ @SuppressWarnings("unchecked")
@Override
- public Object getStoredOntology(String identifier, Class<?> returnType,
boolean merge) {
+ public <O> O getStoredOntology(String identifier, Class<O> returnType,
boolean merge) {
if (identifier == null) throw new IllegalArgumentException("Identifier
cannot be null");
if (returnType == null) {
- returnType = OWLOntology.class;
+ returnType = (Class<O>) OWLOntology.class;
log.warn("No return type given for ontologies. Will return a {}",
returnType);
}
boolean canDo = false;
@@ -302,7 +303,7 @@ public class ClerezzaOntologyProvider im
return returnType.cast(tc);
} else if (OWLOntology.class.isAssignableFrom(returnType)) {
try {
- return toOWLOntology(new UriRef(identifier), merge);
+ return (O) toOWLOntology(new UriRef(identifier), merge);
} catch (OWLOntologyCreationException e) {
log.error("Failed to return stored ontology " + identifier + "
as type " + returnType, e);
}
@@ -311,6 +312,7 @@ public class ClerezzaOntologyProvider im
return null;
}
+ @SuppressWarnings("unchecked")
@Override
public Class<?>[] getSupportedReturnTypes() {
return supported;
@@ -500,14 +502,21 @@ public class ClerezzaOntologyProvider im
Set<UriRef> loaded = new HashSet<UriRef>();
TripleCollection graph = store.getTriples(graphName);
- OWLOntology o =
OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(graph, mgr);
+ UriRef ontologyId = null;
+
+ Iterator<Triple> itt = graph.filter(null, RDF.type, OWL.Ontology);
+ if (itt.hasNext()) {
+ NonLiteral nl = itt.next().getSubject();
+ if (nl instanceof UriRef) ontologyId = (UriRef) nl;
+ }
List<UriRef> revImps = new Stack<UriRef>();
fillImportsReverse(graphName, revImps);
if (!merge) {
- // FIXME rewrite import statements so that only the scope name
needs to be added!
+ OWLOntology o =
OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(graph, mgr);
+ // TODO make it not flat.
// Examining the reverse imports stack will flatten all imports.
List<OWLOntologyChange> changes = new
ArrayList<OWLOntologyChange>();
OWLDataFactory df = OWLManager.getOWLDataFactory();
@@ -520,39 +529,65 @@ 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 concise / efficient / brutal implementation, but messes
up ontology name.
-
- // TripleCollection tempGraph = new SimpleMGraph();
- // for (UriRef ref : revImps)
+ // final Set<OWLOntology> mergeUs = new HashSet<OWLOntology>();
+ //
+ // for (UriRef ref : revImps) {
// if (!loaded.contains(ref)) {
- // tempGraph.addAll(store.getTriples(ref));
+ // TripleCollection tc = store.getTriples(ref);
+ //
mergeUs.add(OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(tc, mgr));
// loaded.add(ref);
// }
- // OWLOntology merged =
OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(tempGraph, mgr);
+ // }
+ // 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.
+
+ TripleCollection tempGraph = new SimpleMGraph();
+ // The set of triples that will be excluded from the merge
+ Set<Triple> exclusions = new HashSet<Triple>();
+ // Examine all reverse imports
+ for (UriRef ref : revImps)
+ if (!loaded.contains(ref)) {
+ // Get the triples
+ TripleCollection imported = store.getTriples(ref);
+ // For each owl:Ontology
+ Iterator<Triple> remove = imported.filter(null, RDF.type,
OWL.Ontology);
+ while (remove.hasNext()) {
+ NonLiteral subj = remove.next().getSubject();
+ /*
+ * If it's not the root ontology, trash all its
triples. If the root ontology is
+ * anonymous, all ontology annotations are to be
trashed without distinction.
+ */
+ if (ontologyId == null || !subj.equals(ontologyId)) {
+ Iterator<Triple> it = imported.filter(subj, null,
null);
+ while (it.hasNext()) {
+ Triple t = it.next();
+ exclusions.add(t);
+ }
+ }
+ }
- return merged;
+ Iterator<Triple> it = imported.iterator();
+ while (it.hasNext()) {
+ Triple t = it.next();
+ if (!exclusions.contains(t)) tempGraph.add(t);
+ }
+ loaded.add(ref);
+ }
+ // Since they are all merged and import statements removed, there
should be no risk of going
+ // online.
+ return
OWLAPIToClerezzaConverter.clerezzaGraphToOWLOntology(tempGraph, mgr);
}
}
Modified:
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/OWLAPIOntologyProvider.java
URL:
http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/OWLAPIOntologyProvider.java?rev=1206635&r1=1206634&r2=1206635&view=diff
==============================================================================
---
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/OWLAPIOntologyProvider.java
(original)
+++
incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/owlapi/OWLAPIOntologyProvider.java
Sat Nov 26 23:41:30 2011
@@ -79,9 +79,21 @@ public class OWLAPIOntologyProvider impl
}
@Override
- public Object getStoredOntology(String identifier, Class<?> returnType) {
+ public <O> O getStoredOntology(IRI reference, Class<O> returnType) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <O> O getStoredOntology(IRI reference, Class<O> returnType, boolean
merge) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public <O> O getStoredOntology(String identifier, Class<O> returnType) {
if (returnType == null) {
- returnType = OWLOntology.class;
+ returnType = (Class<O>) OWLOntology.class;
log.warn("No return type given for ontologies. Will return a {}",
returnType);
}
boolean canDo = false;
@@ -98,6 +110,12 @@ public class OWLAPIOntologyProvider impl
}
@Override
+ public <O> O getStoredOntology(String key, Class<O> returnType, boolean
merge) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
public Class<?>[] getSupportedReturnTypes() {
return new Class<?>[] {OWLOntology.class};
}
@@ -132,22 +150,4 @@ public class OWLAPIOntologyProvider impl
throw new UnsupportedOperationException("Not implemented for OWL API
version.");
}
- @Override
- public Object getStoredOntology(IRI reference, Class<?> returnType) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public Object getStoredOntology(IRI reference, Class<?> returnType,
boolean merge) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public Object getStoredOntology(String key, Class<?> returnType, boolean
merge) {
- // TODO Auto-generated method stub
- return null;
- }
-
}
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=1206635&r1=1206634&r2=1206635&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
Sat Nov 26 23:41:30 2011
@@ -24,6 +24,7 @@ import java.util.Set;
import org.apache.stanbol.ontologymanager.ontonet.api.ONManager;
import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologyScope;
import org.apache.stanbol.ontologymanager.ontonet.api.ontology.OntologySpace;
+import org.apache.stanbol.ontologymanager.ontonet.api.session.Session;
import org.apache.stanbol.owl.transformation.JenaToOwlConvert;
import org.apache.stanbol.reasoners.servicesapi.ReasoningServiceInputProvider;
import org.semanticweb.owlapi.apibinding.OWLManager;
@@ -48,7 +49,7 @@ import com.hp.hpl.jena.rdf.model.StmtIte
* An input provider which binds the reasoners input to Ontonet
*
* @author enridaga
- *
+ *
*/
public class OntonetInputProvider implements ReasoningServiceInputProvider {
@@ -147,6 +148,55 @@ public class OntonetInputProvider implem
OntologyScope scope = null;
synchronized (onManager) {
scope = onManager.getScopeRegistry().getScope(this.scopeId);
+ }
+ if (scope == null) {
+ log.error("Scope {} cannot be retrieved", this.scopeId);
+ throw new IOException("Scope " + this.scopeId + " cannot be
retrieved");
+ }
+ Session session = null;
+ synchronized (onManager) {
+ session = onManager.getSessionManager().getSession(sessionId);
+ }
+ if (session == null) {
+ 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());
+ }
+ if (session != null) {
+ set.add(session.asOWLOntology(false));
+ for (OWLOntology o : session.getOntologies(true)) {
+ set.add(o);
+ // set.addAll(o.getImportsClosure());
+ }
+ }
+ OWLOntologyMerger merger = new OWLOntologyMerger(new
OWLOntologySetProvider() {
+ @Override
+ public Set<OWLOntology> getOntologies() {
+ return set;
+ }
+ });
+ return merger.createMergedOntology(createOWLOntologyManager(),
+ IRI.create("reasoners:input-" + System.currentTimeMillis()));
+ } catch (OWLOntologyCreationException e) {
+ String message = "The network for scope/session cannot be
retrieved";
+ log.error(message + ":", e);
+ throw new IllegalArgumentException(message);
+ }
+ }
+
+ private OWLOntology getFromOntonetOld() throws IOException {
+ try {
+ OntologyScope scope = null;
+ synchronized (onManager) {
+ scope = onManager.getScopeRegistry().getScope(this.scopeId);
}
if (scope == null) {