Author: alexdma Date: Fri Sep 30 18:49:40 2011 New Revision: 1177771 URL: http://svn.apache.org/viewvc?rev=1177771&view=rev Log: Ontology IDs ending with # or ? are now trimmed by indices, although the original ID is preserved within the ontology itself. This was causing trouble depending on how applications are handling URIs ending with these characters.
See e.g. the logical ID of http://www.w3.org/ns/org (STANBOL-196 STANBOL-305) TODO see if any query or fragment should be stripped altogether. Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/AbstractOntologySpaceImpl.java incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CoreOntologySpaceImpl.java incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CustomOntologySpaceImpl.java incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/SessionOntologySpaceImpl.java incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ONMScopeOntologyResource.java incubator/stanbol/trunk/owl/src/main/java/org/apache/stanbol/owl/util/OWLUtils.java Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/AbstractOntologySpaceImpl.java URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/AbstractOntologySpaceImpl.java?rev=1177771&r1=1177770&r2=1177771&view=diff ============================================================================== --- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/AbstractOntologySpaceImpl.java (original) +++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/AbstractOntologySpaceImpl.java Fri Sep 30 18:49:40 2011 @@ -18,10 +18,12 @@ package org.apache.stanbol.ontologymanag import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.stanbol.ontologymanager.ontonet.api.io.OntologyInputSource; @@ -64,7 +66,7 @@ public abstract class AbstractOntologySp /** * Indicates whether this ontology space is marked as read-only. Default value is false. */ - protected boolean locked = false; + protected volatile boolean locked = false; protected Logger log = LoggerFactory.getLogger(getClass()); @@ -72,7 +74,7 @@ public abstract class AbstractOntologySp * The identifier of the ontologies directly managed by this space (i.e. that were directly added to this * space, hence not including those just pulled in via import statements). */ - protected Set<OWLOntology> managedOntologies; + protected Map<IRI,OWLOntology> managedOntologies; protected IRI namespace = null; @@ -115,12 +117,14 @@ public abstract class AbstractOntologySp if (ontologyManager != null) this.ontologyManager = ontologyManager; else this.ontologyManager = OWLManager.createOWLOntologyManager(); - this.managedOntologies = new HashSet<OWLOntology>(); + this.managedOntologies = new HashMap<IRI,OWLOntology>(); } @Override public synchronized void addOntology(OntologyInputSource ontologySource) throws UnmodifiableOntologySpaceException { if (locked) throw new UnmodifiableOntologySpaceException(this); + log.debug("Trying to add ontology {} to space {}", + ontologySource != null ? ontologySource.getRootOntology() : "<NULL>", getNamespace() + getID()); // Avoid adding the space top ontology itself. if (ontologySource != null && ontologySource.hasRootOntology()) { OWLOntology o = ontologySource.getRootOntology(); @@ -231,18 +235,19 @@ public abstract class AbstractOntologySp @Override public synchronized Set<OWLOntology> getOntologies(boolean withClosure) { - return withClosure ? ontologyManager.getOntologies() : managedOntologies; + return withClosure ? ontologyManager.getOntologies() : new HashSet<OWLOntology>(managedOntologies.values()); } @Override public OWLOntology getOntology(IRI ontologyIri) { - OWLOntology o = null; - Iterator<OWLOntology> it = managedOntologies.iterator(); - while (it.hasNext() && o == null) { - OWLOntology temp = it.next(); - if (!temp.isAnonymous() && ontologyIri.equals(temp.getOntologyID().getOntologyIRI())) o = temp; - } - if (o == null) o = ontologyManager.getOntology(ontologyIri); + log.debug("Requesting ontology {} from space {}", ontologyIri, getNamespace() + getID()); + OWLOntology o = managedOntologies.get(ontologyIri); +// Iterator<OWLOntology> it = managedOntologies.iterator(); +// while (it.hasNext() && o == null) { +// OWLOntology temp = it.next(); +// if (!temp.isAnonymous() && ontologyIri.equals(temp.getOntologyID().getOntologyIRI())) o = temp; +// } +// if (o == null) o = ontologyManager.getOntology(ontologyIri); return o; } @@ -274,7 +279,7 @@ public abstract class AbstractOntologySp // TODO implement transaction control. // See to it that the ontology is copied to this manager. OWLOntology newOnt = reload(ontology, ontologyManager, true, false); - managedOntologies.add(newOnt); + managedOntologies.put(OWLUtils.getIdentifyingIRI(newOnt),newOnt); try { // Store the top ontology Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CoreOntologySpaceImpl.java URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CoreOntologySpaceImpl.java?rev=1177771&r1=1177770&r2=1177771&view=diff ============================================================================== --- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CoreOntologySpaceImpl.java (original) +++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CoreOntologySpaceImpl.java Fri Sep 30 18:49:40 2011 @@ -29,28 +29,19 @@ public class CoreOntologySpaceImpl exten public static final String SUFFIX = SpaceType.CORE.getIRISuffix(); + protected static String buildId(String scopeID) { + return (scopeID != null ? scopeID : "") + "/" + SUFFIX; + } + public CoreOntologySpaceImpl(String scopeID, IRI namespace, ClerezzaOntologyStorage storage) { - super(/* IRI.create( */(scopeID!=null?scopeID:"") + "/" + SpaceType.CORE.getIRISuffix(), namespace/* - * StringUtils. - * stripIRITerminator - * (namespace) + "/") - */, - SpaceType.CORE/* , scopeID */, storage); + super(buildId(scopeID), namespace, SpaceType.CORE, storage); } public CoreOntologySpaceImpl(String scopeID, IRI namespace, ClerezzaOntologyStorage storage, OWLOntologyManager ontologyManager) { - super(/* IRI.create( */(scopeID!=null?scopeID:"") + "/" + SpaceType.CORE.getIRISuffix(), namespace/* - * StringUtils. - * stripIRITerminator - * (namespace) + "/") - */, SpaceType.CORE, /* - * scopeID - * , - */ - storage, ontologyManager); + super(buildId(scopeID), namespace, SpaceType.CORE, storage, ontologyManager); } /** Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CustomOntologySpaceImpl.java URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CustomOntologySpaceImpl.java?rev=1177771&r1=1177770&r2=1177771&view=diff ============================================================================== --- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CustomOntologySpaceImpl.java (original) +++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/CustomOntologySpaceImpl.java Fri Sep 30 18:49:40 2011 @@ -31,25 +31,19 @@ public class CustomOntologySpaceImpl ext public static final String SUFFIX = SpaceType.CUSTOM.getIRISuffix(); + protected static String buildId(String scopeID) { + return (scopeID != null ? scopeID : "") + "/" + SUFFIX; + } + public CustomOntologySpaceImpl(String scopeID, IRI namespace, ClerezzaOntologyStorage storage) { - super(/* IRI.create( */(scopeID!=null?scopeID:"") + "/" + SpaceType.CUSTOM.getIRISuffix(), namespace/* - * StringUtils. - * stripIRITerminator - * (namespace) + "/") - */, - SpaceType.CUSTOM/* , scopeID */, storage); + super(buildId(scopeID), namespace, SpaceType.CUSTOM, storage); } public CustomOntologySpaceImpl(String scopeID, IRI namespace, ClerezzaOntologyStorage storage, OWLOntologyManager ontologyManager) { - super(/* IRI.create( */(scopeID!=null?scopeID:"") + "/" + SpaceType.CUSTOM.getIRISuffix(), namespace/* - * StringUtils. - * stripIRITerminator - * (namespace) + "/") - */, - SpaceType.CUSTOM, storage, ontologyManager); + super(buildId(scopeID), namespace, SpaceType.CUSTOM, storage, ontologyManager); } @Override Modified: incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/SessionOntologySpaceImpl.java URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/SessionOntologySpaceImpl.java?rev=1177771&r1=1177770&r2=1177771&view=diff ============================================================================== --- incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/SessionOntologySpaceImpl.java (original) +++ incubator/stanbol/trunk/ontologymanager/ontonet/src/main/java/org/apache/stanbol/ontologymanager/ontonet/impl/ontology/SessionOntologySpaceImpl.java Fri Sep 30 18:49:40 2011 @@ -33,54 +33,22 @@ public class SessionOntologySpaceImpl ex public static final String SUFFIX = SpaceType.SESSION.getIRISuffix(); - private static String buildId(String scopeID) { - return (scopeID!=null?scopeID:"") + "/" + SpaceType.SESSION.getIRISuffix() + "-" + new Random().nextLong(); + protected static String buildId(String scopeID) { + return (scopeID != null ? scopeID : "") + "/" + SpaceType.SESSION.getIRISuffix() + "-" + + new Random().nextLong(); } public SessionOntologySpaceImpl(String scopeID, IRI namespace, ClerezzaOntologyStorage store) { // FIXME : sync session id with session space ID - super(buildId(scopeID), namespace - /* - * IRI.create(StringUtils.stripIRITerminator(scopeID) + "/" + SpaceType.SESSION.getIRISuffix() + "-" + - * new Random().nextLong()) - */, SpaceType.SESSION, store/* , scopeID */); - - // IRI iri = IRI.create(StringUtils.stripIRITerminator(getID()) + "/root.owl"); - // try { - // setTopOntology(new RootOntologySource(ontologyManager.createOntology(iri), null), false); - // } catch (OWLOntologyCreationException e) { - // log.error("Could not create session space root ontology " + iri, e); - // } catch (UnmodifiableOntologySpaceException e) { - // // Should not happen... - // log.error("Session space ontology " + iri - // + " was denied modification by the space itself. This should not happen.", e); - // } + super(buildId(scopeID), namespace, SpaceType.SESSION, store); } public SessionOntologySpaceImpl(String scopeID, IRI namespace, ClerezzaOntologyStorage store, OWLOntologyManager ontologyManager) { - // FIXME : sync session id with session space ID - super(buildId(scopeID), namespace - /* - * IRI.create(StringUtils.stripIRITerminator(scopeID) + "/" + SpaceType.SESSION.getIRISuffix() + "-" + - * new Random().nextLong()) - */, SpaceType.SESSION, store, /* scopeID, */ - ontologyManager); - - // Logger log = LoggerFactory.getLogger(getClass()); - // IRI iri = IRI.create(StringUtils.stripIRITerminator(getID()) + "/root.owl"); - // try { - // setTopOntology(new RootOntologySource(ontologyManager.createOntology(iri), null), false); - // } catch (OWLOntologyCreationException e) { - // log.error("Could not create session space root ontology " + iri, e); - // } catch (UnmodifiableOntologySpaceException e) { - // // Should not happen... - // log.error("Session space ontology " + iri - // + " was denied modification by the space itself. This should not happen.", e); - // } + super(buildId(scopeID), namespace, SpaceType.SESSION, store, ontologyManager); } @Override @@ -115,7 +83,8 @@ public class SessionOntologySpaceImpl ex @Override public synchronized void tearDown() { - // TODO Auto-generated method stub + // TODO Do we really unlock? + locked = false; } } Modified: incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ONMScopeOntologyResource.java URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ONMScopeOntologyResource.java?rev=1177771&r1=1177770&r2=1177771&view=diff ============================================================================== --- incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ONMScopeOntologyResource.java (original) +++ incubator/stanbol/trunk/ontologymanager/web/src/main/java/org/apache/stanbol/ontologymanager/web/resources/ONMScopeOntologyResource.java Fri Sep 30 18:49:40 2011 @@ -103,11 +103,15 @@ public class ONMScopeOntologyResource ex @PathParam("uri") String ontologyid, @Context UriInfo uriInfo) { + log.info("Caught request for ontology {} in scope {}", ontologyid, scopeid); + if (!ontologyid.equals("all")) { // First of all, it could be a simple request for the space root! String absur = uriInfo.getAbsolutePath().toString(); + log.debug("Absolute URL Path {}", absur); + log.debug("Ontology ID {}", ontologyid); URI uri = URI.create(absur.substring(0, absur.lastIndexOf(ontologyid) - 1)); IRI sciri = IRI.create(uri); Modified: incubator/stanbol/trunk/owl/src/main/java/org/apache/stanbol/owl/util/OWLUtils.java URL: http://svn.apache.org/viewvc/incubator/stanbol/trunk/owl/src/main/java/org/apache/stanbol/owl/util/OWLUtils.java?rev=1177771&r1=1177770&r2=1177771&view=diff ============================================================================== --- incubator/stanbol/trunk/owl/src/main/java/org/apache/stanbol/owl/util/OWLUtils.java (original) +++ incubator/stanbol/trunk/owl/src/main/java/org/apache/stanbol/owl/util/OWLUtils.java Fri Sep 30 18:49:40 2011 @@ -16,6 +16,9 @@ */ package org.apache.stanbol.owl.util; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; + import org.semanticweb.owlapi.model.IRI; import org.semanticweb.owlapi.model.OWLOntology; @@ -32,11 +35,23 @@ public class OWLUtils { * @return */ public static IRI getIdentifyingIRI(OWLOntology o) { + String originalIri; if (o.isAnonymous()) { - return o.getOWLOntologyManager().getOntologyDocumentIRI(o); + originalIri = o.getOWLOntologyManager().getOntologyDocumentIRI(o).toString(); } else { - return o.getOntologyID().getOntologyIRI(); + originalIri = o.getOntologyID().getOntologyIRI().toString(); } + while (originalIri.endsWith("#") || originalIri.endsWith("?")) + originalIri = originalIri.substring(0, originalIri.length() - 1); + // try { + // if (originalIri.endsWith("#")) originalIri = originalIri.substring(0, + // originalIri.length() - 1) + URLEncoder.encode("#", "UTF-8"); + // else if (originalIri.endsWith("?")) originalIri = originalIri.substring(0, + // originalIri.length() - 1) + // + URLEncoder.encode("?", "UTF-8"); + // } catch (UnsupportedEncodingException e) { + // // That cannot be. + // } + return IRI.create(originalIri); } - }
