/* * Copyright (c) 1998-2009, The University of Sheffield. * * This file is part of GATE (see http://gate.ac.uk/), and is free * software, licenced under the GNU Library General Public License, * Version 2, June 1991 (in the distribution as file licence.html, * and also available at http://gate.ac.uk/gate/licence.html). * * Johann Petrak 2009-08-13 * * $Id: ONodeIDImpl.java 11598 2009-10-13 13:44:17Z johann_p $ */ package gate.creole.ontology.impl.sesame; import gate.creole.ontology.InvalidURIException; import gate.creole.ontology.ONodeID; /** * This class implements interface ONodeID and can represent either * blank node or an URI. What each method returns depends on whether the * object actually returns a URI or a blank node. * @author Johann Petrak */ public class ONodeIDImpl implements ONodeID { /** * Namespace for this URI (in current version - a value before the * last occurance of '#' or '/') */ protected String namespace; /** * A Resource name (in current version - a value after the last * occurance of '#' or '/') */ protected String aResourceName; /** * String representation of the URI */ protected String uri; /** * Denotes whether the OResource this URI belongs to is an anonymous * or not. */ protected boolean isAnonymousResource; /** * Constructor * * @param uri * @param isAnonymousResource * @throws InvalidURIException */ protected ONodeIDImpl(String uri, boolean isAnonymousResource) throws InvalidURIException { this.isAnonymousResource = isAnonymousResource; if(!this.isAnonymousResource) { // do this in the same way as the sesame implementation does it // in sesame 2.3 see org/openrdf/model/util/URIUtil.java // Split into a namespace and local name part after: // - the first occurrence of a #, if not found ... // - the last occurrence of a /, if not found ... // - the last occurence of a : // Unlike in the old implementation, an URI can now have // a blank resource name (i.e. be all namespace) int index = uri.indexOf('#'); if(index < 0) { index = uri.lastIndexOf('/'); } if(index < 0) { index = uri.lastIndexOf(':'); } if(index < 0) { throw new InvalidURIException("Invalid URI: " + uri); } index++; // increase by one: this is the length of the namespace this.uri = uri; this.namespace = uri.substring(0,index); if(uri.length() > index) { aResourceName = uri.substring(index,uri.length()); } else { aResourceName = ""; } } else { this.uri = uri; this.namespace = ""; this.aResourceName = "[" + uri + "]"; } } /** * Retrieves the name space part from the URI. In this implementation * it retrieves the string that appears before the last occurance of * '#' or '/'. * * @return */ public String getNameSpace() { return this.namespace; } /** * Retrieves the resource name from the given URI. In this * implementation it retrieves the string that appears after the last * occurance of '#' or '/'. * * @return */ public String getResourceName() { return this.aResourceName; } /** * Returns the string representation of the uri. In case of anonymous * class, it returns the '[' + resourcename + ']'. */ public String toString() { return this.uri; } /** * Indicates whether the URI refers to an anonymous resource * * @return */ public boolean isAnonymousResource() { return this.isAnonymousResource; } public int compareTo(ONodeID other) { return this.toString().compareTo(other.toString()); } public boolean equals(Object other) { if(other instanceof ONodeID) { return this.toString().equals(((ONodeID)other).toString()); } else { return false; } } public int hashCode() { return uri.hashCode(); } public String toTurtle() { if(isAnonymousResource()) { if(uri.startsWith("_:")) { return uri; } else { return "_:"+uri; } } else { return "<"+uri+">"; } } public void validate() { throw new UnsupportedOperationException("Not yet implemented"); } public String toASCIIString() { throw new UnsupportedOperationException("Not yet implemented"); } public String toDisplayString() { throw new UnsupportedOperationException("Not yet implemented"); } }