001: /*
002: * (c) Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
003: * All rights reserved.
004: *
005: */
006:
007: package com.hp.hpl.jena.db.impl;
008:
009: import com.hp.hpl.jena.graph.*;
010: import com.hp.hpl.jena.shared.*;
011: import com.hp.hpl.jena.util.iterator.ExtendedIterator;
012:
013: /**
014: * Interface for a specialized graphs that are optimized for reification.
015: *
016: * @author csayers
017: * @version $Revision: 1.8 $
018: *
019: */
020: public interface SpecializedGraphReifier extends SpecializedGraph {
021:
022: /**
023: * Add a reified triple to the specialized graph.
024: *
025: * Note that when calling add, the call will either fail (complete=false)
026: * indicating the graph can not store the quad, or succeed (complete=true)
027: * indicating that a subsequent call to contains(node, triple) will return true
028: * and that the add operation is complete.
029: * Adding the same triple twice is not an error. However adding the same
030: * node twice is an error and should throw a Reifier.AlreadyReifiedException.
031: *
032: * @param n is the Node to be added
033: * @param t is the triple to be added
034: * @param complete is true if a subsequent call to contains(triple) will return true.
035: * @throws Reifier.AlreadyReifiedException if the node already reifies a triple
036: */
037: public void add(Node n, Triple t, CompletionFlag complete)
038: throws AlreadyReifiedException;
039:
040: /**
041: * Attempt to delete a reified triple from the specialized graph.
042: *
043: * @param t is the triple to be deleted
044: * @param complete is true if either (i) the triple was in the graph and was deleted, or
045: * (ii) the triple was not in the graph the graph can guarantee that a call to add(Triple)
046: * would have succeeded, had it been made for that same triple.
047: */
048: public void delete(Node n, Triple t, CompletionFlag complete);
049:
050: /**
051: * Tests if a reified triple is contained in the specialized graph.
052: * @param n is the node to be tested - may be null to indicate any node
053: * @param t is the triple to be tested
054: * @param complete is true if the graph can guarantee that no other specialized graph
055: * could hold any matching triples.
056: * @return boolean result to indicte if the tripple was contained
057: */
058: public boolean contains(Node n, Triple t, CompletionFlag complete);
059:
060: /**
061: * Finds matching reified triples in the specialized graph and returns their nodes.
062: // * @param t the TripleMatch
063: * @param t the Triple
064: * @param complete is true if the graph can guarantee that no other specialized graph
065: * could hold any matching triples.
066: * @return ExtendedIterator which iterates over any matching nodes
067: */
068: // public ExtendedIterator findReifiedNodes(TripleMatch t, CompletionFlag complete);
069: public ExtendedIterator findReifiedNodes(Triple t,
070: CompletionFlag complete);
071:
072: /**
073: * Finds the reified triple corresponding to a particular node in the specialized graph.
074: * @param t the TripleMatch
075: * @param complete is true if the graph can guarantee that no other specialized graph
076: * could hold any matching triples.
077: * @return ExtendedIterator which iterates over any matching nodes
078: */
079: public Triple findReifiedTriple(Node n, CompletionFlag complete);
080: }
081:
082: /*
083: (c) Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
084: All rights reserved.
085:
086: Redistribution and use in source and binary forms, with or without
087: modification, are permitted provided that the following conditions
088: are met:
089:
090: 1. Redistributions of source code must retain the above copyright
091: notice, this list of conditions and the following disclaimer.
092:
093: 2. Redistributions in binary form must reproduce the above copyright
094: notice, this list of conditions and the following disclaimer in the
095: documentation and/or other materials provided with the distribution.
096:
097: 3. The name of the author may not be used to endorse or promote products
098: derived from this software without specific prior written permission.
099:
100: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
101: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
102: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
103: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
104: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
105: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
106: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
107: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
108: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
109: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
110: */
|