All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openrdf.model.impl.URIImpl Maven / Gradle / Ivy

/*  Sesame - Storage and Querying architecture for RDF and RDF Schema
 *  Copyright (C) 2001-2006 Aduna
 *
 *  Contact: 
 *  	Aduna
 *  	Prinses Julianaplein 14 b
 *  	3817 CS Amersfoort
 *  	The Netherlands
 *  	tel. +33 (0)33 465 99 87
 *  	fax. +33 (0)33 465 99 87
 *
 *  	http://aduna-software.com/
 *  	http://www.openrdf.org/
 *  
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; either
 *  version 2.1 of the License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package org.openrdf.model.impl;

import java.io.Serializable;

import org.openrdf.vocabulary.RDF;
import org.openrdf.vocabulary.RDFS;

import org.openrdf.model.GraphException;
import org.openrdf.model.URI;
import org.openrdf.model.Value;

import org.openrdf.sesame.sail.StatementIterator;

/**
 * An implementation of the URI interface.
 **/
public class URIImpl implements URI, Serializable {

/*------------------------------------------------------+
| Some static constants defining rdf and rdfs resources |
+------------------------------------------------------*/

	// RDF
	/** Constant URI for rdf:type **/
	public static final URI RDF_TYPE = new URIImpl(RDF.TYPE);
	/** Constant URI for rdf:Property **/
	public static final URI RDF_PROPERTY = new URIImpl(RDF.PROPERTY);
	/** Constant URI for rdf:XMLLiteral **/
	public static final URI RDF_XMLLITERAL = new URIImpl(RDF.XMLLITERAL);
	/** Constant URI for rdf:subject **/
	public static final URI RDF_SUBJECT = new URIImpl(RDF.SUBJECT);
	/** Constant URI for rdf:predicate **/
	public static final URI RDF_PREDICATE = new URIImpl(RDF.PREDICATE);
	/** Constant URI for rdf:object **/
	public static final URI RDF_OBJECT = new URIImpl(RDF.OBJECT);
	/** Constant URI for rdf:Statement **/
	public static final URI RDF_STATEMENT = new URIImpl(RDF.STATEMENT);
	/** Constant URI for rdf:Alt **/
	public static final URI RDF_ALT = new URIImpl(RDF.ALT);
	/** Constant URI for rdf:Bag **/
	public static final URI RDF_BAG = new URIImpl(RDF.BAG);
	/** Constant URI for rdf:Seq **/
	public static final URI RDF_SEQ = new URIImpl(RDF.SEQ);
	/** Constant URI for rdf:value **/
	public static final URI RDF_VALUE = new URIImpl(RDF.VALUE);
	/** Constant URI for rdf:List **/
	public static final URI RDF_LIST = new URIImpl(RDF.LIST);
	/** Constant URI for rdf:first **/
	public static final URI RDF_FIRST = new URIImpl(RDF.FIRST);
	/** Constant URI for rdf:rest **/
	public static final URI RDF_REST = new URIImpl(RDF.REST);
	/** Constant URI for rdf:nil **/
	public static final URI RDF_NIL = new URIImpl(RDF.NIL);
	
	// RDF Schema
	/** Constant URI for rdfs:Resource **/
	public static final URI RDFS_RESOURCE = new URIImpl(RDFS.RESOURCE);
	/** Constant URI for rdfs:Class **/
	public static final URI RDFS_CLASS = new URIImpl(RDFS.CLASS);
	/** Constant URI for rdfs:Literal **/
	public static final URI RDFS_LITERAL = new URIImpl(RDFS.LITERAL);
	/** Constant URI for rdfs:subClassOf **/
	public static final URI RDFS_SUBCLASSOF = new URIImpl(RDFS.SUBCLASSOF);
	/** Constant URI for rdfs:subPropertyOf **/
	public static final URI RDFS_SUBPROPERTYOF = new URIImpl(RDFS.SUBPROPERTYOF);
	/** Constant URI for rdfs:domain **/
	public static final URI RDFS_DOMAIN = new URIImpl(RDFS.DOMAIN);
	/** Constant URI for rdfs:range **/
	public static final URI RDFS_RANGE = new URIImpl(RDFS.RANGE);
	/** Constant URI for rdfs:comment **/
	public static final URI RDFS_COMMENT = new URIImpl(RDFS.COMMENT);
	/** Constant URI for rdfs:label **/
	public static final URI RDFS_LABEL = new URIImpl(RDFS.LABEL);
	/** Constant URI for rdfs:isDefinedBy **/
	public static final URI RDFS_ISDEFINEDBY = new URIImpl(RDFS.ISDEFINEDBY);
	/** Constant URI for rdfs:seeAlso **/
	public static final URI RDFS_SEEALSO = new URIImpl(RDFS.SEEALSO);
	/** Constant URI for rdfs:Datatype **/
	public static final URI RDFS_DATATYPE = new URIImpl(RDFS.DATATYPE);
	/** Constant URI for rdfs:Container **/
	public static final URI RDFS_CONTAINER = new URIImpl(RDFS.CONTAINER);
	/** Constant URI for rdfs:member **/
	public static final URI RDFS_MEMBER = new URIImpl(RDFS.MEMBER);
	/** Constant URI for rdfs:ContainerMembershipProperty **/
	public static final URI RDFS_CONTAINERMEMBERSHIPPROPERTY = new URIImpl(RDFS.CONTAINERMEMBERSHIPPROPERTY);
	
/*---------------------------------------+
| Variables                              |
+---------------------------------------*/

	/** The namespace. **/
    private String _namespace;

	/** local name **/
    private String _localName;

/*---------------------------------------+
| Constructors                           |
+---------------------------------------*/

	/**
	 * Creates a new URI from the supplied string.
	 *
	 * @param uri A String representing a legal, absolute URI.
	 * @throws IllegalArgumentException If the supplied URI is not a
	 * legal (absolute) URI.
	 **/
	public URIImpl(String uri) {
		// Find the place to split the uri
		int i = uri.length() - 1;
		while (i >= 0) {
			char c = uri.charAt(i);
			if (c == '#' || c == ':' || c == '/') {
				break;
			}
			i--;
		}

		if (i > 0) {
			// Split the uri
			_namespace = uri.substring(0, i + 1);
			_localName = uri.substring(i + 1);
		}
		else {
			throw new IllegalArgumentException("'"+uri+"' is not a legal (absolute) URI");
		}
	}

	/**
	 * Creates a new URI that will get the supplied namespace and local name.
	 *
	 * @param namespace A namespace.
	 * @param localName A legal local name. A legal local name adheres to the definition of an NCName as specified at
	 * http://www.w3.org/TR/REC-xml-names/#NT-NCName.
	 **/
	public URIImpl(String namespace, String localName) {
		if (namespace == null) {
			throw new IllegalArgumentException("namespace must not be null");
		}
		if (localName == null) {
			throw new IllegalArgumentException("localName must not be null");
		}

		_namespace = namespace;
		_localName = localName;
	}

/*---------------------------------------+
| Methods                                |
+---------------------------------------*/

	// inherit comments
	public String getNamespace() {
		return _namespace;
	}

	// inherit comments
	public String getLocalName() {
		return _localName;
	}

	// inherit comments
	public String getURI() {
		// This code is (much) more efficient then just concatenating the two strings.
		char[] result = new char[_namespace.length() + _localName.length()];
		_namespace.getChars(0, _namespace.length(), result, 0);
		_localName.getChars(0, _localName.length(), result, _namespace.length());
		return new String(result);
	}

	// implements URI.equals(Object)
    public boolean equals(Object o) {
		if (this == o) {
			return true;
		}

        if (o instanceof URI) {
			URI other = (URI)o;

			return
				_localName.equals(other.getLocalName()) &&
				_namespace.equals(other.getNamespace());
		}

		return false;
	}

	// Implements URI.hashCode()
	public int hashCode() {
		return _namespace.hashCode() ^ _localName.hashCode();
	}

	/**
	 * Compares this URI with the supplied object.
	 *
	 * @throws ClassCastException if o is not of type Value
	 * @see java.lang.Comparable
	 **/
	public int compareTo(Object o) {
		if (this == o) {
			return 0;
		}

		Value other = (Value)o;

		if (other instanceof URI) {
			return getURI().compareTo( ((URI)other).getURI() );
		}
		else {
			// URI < BNode and URI < Literal
			return -1;
		}
	}

	/**
	 * Returns the String-representation of this URI.
	 **/
	public String toString() {
		return getURI();
	}

	// Implements URI.getPredicateStatements()
	public StatementIterator getPredicateStatements()
		throws GraphException
	{
		throw new GraphException("no backing store associated");
	}

	// Implements Resource.addProperty(URI, Value)
	public void addProperty(URI property, Value value)
		throws GraphException
	{
		throw new GraphException("no backing store associated");		
	}

	// Implements Resource.getSubjectStatements()
	public StatementIterator getSubjectStatements()
		throws GraphException
	{
		throw new GraphException("no backing store associated");
	}

	// Implements Value.getObjectStatements()
	public StatementIterator getObjectStatements()
		throws GraphException
	{
		throw new GraphException("no backing store associated");
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy