001: /*
002: * LICENSE INFORMATION
003: * Copyright 2005-2007 by FZI (http://www.fzi.de).
004: * Licensed under a BSD license (http://www.opensource.org/licenses/bsd-license.php)
005: * <OWNER> = Max Völkel
006: * <ORGANIZATION> = FZI Forschungszentrum Informatik Karlsruhe, Karlsruhe, Germany
007: * <YEAR> = 2007
008: *
009: * Project information at http://semweb4j.org/rdf2go
010: */
011: package org.ontoware.rdf2go.model;
012:
013: import org.ontoware.rdf2go.exception.ModelRuntimeException;
014: import org.ontoware.rdf2go.model.node.URI;
015:
016: /**
017: * Defines an RDF Model, and the functions to add and delete statements of all
018: * possible kinds to this model. Query functions are also provided.
019: *
020: * IMPROVE: add support for union, intersection
021: *
022: * @author Max Voelkel <dev@xam.de>
023: * @author Benjamin Heitmann <benjamin@lauschangriff.org>
024: * @author Leo Sauermann
025: */
026: public interface Model extends ModelValueFactory, ModelAddRemove,
027: ModelRemovePatterns, QueryableModel, ModelIO, Commitable,
028: ReificationSupport {
029:
030: /**
031: * @return the context URI or null
032: */
033: URI getContextURI();
034:
035: /**
036: * Open connection to defined, unterlying implementation
037: */
038: void open();
039:
040: /**
041: * Close connection to defined, unterlying implementation. commit() is
042: * called internally.
043: */
044: void close();
045:
046: /**
047: * @return true, if model has been opened and not yet closed.
048: */
049: boolean isOpen();
050:
051: /**
052: * For plain models without any inference, this is the exact number of
053: * explicit statements.
054: *
055: * For models with inference, this number may be anything between the number
056: * of explicit statements up to the number of all inferrable statements plus
057: * the number of explicit statements.
058: *
059: * For both cases: If one new triple is added to the model, the size must
060: * increase at least one.
061: *
062: * @return the (imprecise?) number of statements in the model (see comment)
063: * @throws ModelRuntimeException
064: */
065: long size() throws ModelRuntimeException;
066:
067: /**
068: * @return true if the model is empty, i.e. contains no statements. This is
069: * the same as size() == 0, but might be faster.
070: */
071: boolean isEmpty();
072:
073: // //////////////
074: // Manipulate underlying impl
075:
076: /**
077: * @return the native implementation (e.g. a Jena Model). Using this method
078: * breaks strict triple store independence, but exposes the full
079: * power and <b>reduces</b> API dependence. This method is part of
080: * the main API.
081: */
082: Object getUnderlyingModelImplementation();
083:
084: // ///////////////////
085: // eases integration of RDF2Go models in many settings
086:
087: /**
088: * Add an arbitrary runtime property, this will not be persisted and is only
089: * available at runtime. This allows Model to serve as a central data model
090: * in larger applications (like SemVersion.ontoware.org)
091: *
092: * @param propertyURI
093: * @param value
094: */
095: void setProperty(URI propertyURI, Object value);
096:
097: /**
098: * @param propertyURI
099: * @return stored runtime property value or null
100: */
101: Object getProperty(URI propertyURI);
102:
103: /**
104: * Dumps the whole content of the model via System.out
105: */
106: void dump();
107:
108: /**
109: * Two models can be equal even if they do not contain the same statements.
110: * We owe this problem mainly to blank nodes.
111: *
112: * See http://www.w3.org/TR/2002/WD-rdf-concepts-20020829/#xtocid103648 for
113: * the official definition of graph equality (which is based on graph
114: * isomorphism). See also http://www.w3.org/TR/rdf-mt/.
115: *
116: * @param other
117: * @return true if the two models are isomorphic as defined in
118: * http://www.w3.org/TR/rdf-mt/
119: */
120: boolean isIsomorphicWith(Model other);
121:
122: }
|