001: /*
002: * (c) Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
003: * All rights reserved.
004: *
005: */
006: package com.hp.hpl.jena.db.impl;
007:
008: import com.hp.hpl.jena.db.GraphRDB;
009: import com.hp.hpl.jena.graph.*;
010: import com.hp.hpl.jena.vocabulary.RDF;
011:
012: /**
013: *
014: * @author hkuno based on GraphMem.java, v 1.4 by Chris Dollin (chris-dollin)
015: * @version
016: *
017: * TripleStoreGraph_RDB is a table-specific, database-independent
018: * implementation of TripleStoreGraph.
019: */
020:
021: public class SpecializedGraph_TripleStore_RDB extends
022: SpecializedGraph_TripleStore {
023:
024: /**
025: * Constructor.
026: *
027: * Create a new instance of a TripleStore graph, taking an IPSet
028: * as an argument. Used for bootstrapping, when we don't have a
029: * DBPropLSet yet.
030: */
031: public SpecializedGraph_TripleStore_RDB(IPSet pSet,
032: Integer dbGraphId) {
033: super (pSet, dbGraphId);
034: }
035:
036: /*
037: * (non-Javadoc)
038: * @see com.hp.hpl.jena.db.impl.SpecializedGraph#subsumes(com.hp.hpl.jena.graph.Triple, int)
039: *
040: * determine if the default graph has any triples of the given pattern.
041: * the table below indicates the return value for each reif style for
042: * the various types of patterns.
043: * note: "conc" means the node in the pattern is not a concrete node.
044: *
045: * Pattern Minimal Conv Standard
046: * ANY rdf:subj ANY all none none
047: * ANY rdf:pred ANY all none none
048: * ANY rdf:obj ANY all none none
049: * ANY rdf:type rdf:stmt all none none
050: * ANY rdf:type conc all all all
051: * ANY rdf:type !conc all all some
052: * ANY !conc ANY all all some
053: * else all all all
054: */
055:
056: public char subsumes(Triple pattern, int reifBehavior) {
057: // we assume that other sg's have been called first
058: char res = allTriplesForPattern;
059: if (reifBehavior == GraphRDB.OPTIMIZE_AND_HIDE_ONLY_FULL_REIFICATIONS)
060: return res;
061: Node pred = pattern.getPredicate();
062: boolean isReifPred = pred.equals(RDF.Nodes.subject)
063: || pred.equals(RDF.Nodes.predicate)
064: || pred.equals(RDF.Nodes.object);
065: boolean isPredType = pred.equals(RDF.Nodes.type);
066: Node obj = pattern.getObject();
067: boolean isObjStmt = obj.equals(RDF.Nodes.Statement);
068: if (reifBehavior == GraphRDB.OPTIMIZE_ALL_REIFICATIONS_AND_HIDE_NOTHING) {
069: if (isReifPred)
070: res = noTriplesForPattern;
071: else if (isPredType) {
072: if (isObjStmt)
073: res = noTriplesForPattern;
074: else if (!obj.isConcrete())
075: res = someTriplesForPattern;
076: }
077: if (!pred.isConcrete())
078: res = someTriplesForPattern;
079: } else {
080: // reifBehavior == OPTIMIZE_AND_HIDE_FULL_AND_PARTIAL_REIFICATIONS
081: if (isReifPred || (isPredType && isObjStmt))
082: res = noTriplesForPattern;
083: }
084: return res;
085: }
086: }
087:
088: /*
089: * (c) Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
090: * All rights reserved.
091: *
092: * Redistribution and use in source and binary forms, with or without
093: * modification, are permitted provided that the following conditions
094: * are met:
095: * 1. Redistributions of source code must retain the above copyright
096: * notice, this list of conditions and the following disclaimer.
097: * 2. Redistributions in binary form must reproduce the above copyright
098: * notice, this list of conditions and the following disclaimer in the
099: * documentation and/or other materials provided with the distribution.
100: * 3. The name of the author may not be used to endorse or promote products
101: * derived from this software without specific prior written permission.
102:
103: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
104: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
105: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
106: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
107: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
108: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
109: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
110: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
111: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
112: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
113: */
|