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

com.bigdata.rdf.sparql.ast.DescribeModeEnum Maven / Gradle / Ivy

/**

Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016.  All rights reserved.

Contact:
     SYSTAP, LLC DBA Blazegraph
     2501 Calvert ST NW #106
     Washington, DC 20008
     [email protected]

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

This program 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 General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
/*
 * Created on Aug 28, 2012
 */
package com.bigdata.rdf.sparql.ast;


/**
 * Type-safe enumeration of the different ways in which we can evaluate a
 * DESCRIBE query.
 * 
 * @author Bryan Thompson
 * 
 * @see  Concise
 *      Bounded Description 
 * 
 *      TODO This enumeration does not allow for inverse functional constraints.
 *      That extension can help with foaf data.
 */
public enum DescribeModeEnum {

    /**
     * The DESCRIBE is only the attributes and forward links.
     */
    ForwardOneStep(true/* forward */, false/* reverse */,
            false/* reifiedStatements */, false/* recursive */),
    /**
     * The DESCRIBE is the symmetric one-step neighborhood of the resource
     * (attributes, forward links, and backward links).
     */
    SymmetricOneStep(true/* forward */, true/* reverse */,
            false/* reifiedStatements */, false/* recursive */),
    /**
     * Concise Bounded Description.
     * 
     * 
     *     Given a particular node (the starting node) in a particular RDF
     *     graph (the source graph), a subgraph of that particular graph,
     *     taken to comprise a concise bounded description of the resource
     *     denoted by the starting node, can be identified as follows:
     * 
     *         1. Include in the subgraph all statements in the source graph
     *            where the subject of the statement is the starting node;
     *         
     *         2. Recursively, for all statements identified in the subgraph
     *            thus far having a blank node object, include in the subgraph
     *            all statements in the source graph where the subject of the
     *            statement is the blank node in question and which are not
     *            already included in the subgraph.
     *         
     *         3. Recursively, for all statements included in the subgraph
     *            thus far, for all reifications of each statement in the
     *            source graph, include the concise bounded description
     *            beginning from the rdf:Statement node of each reification.
     * 
     *     This results in a subgraph where the object nodes are either URI
     *     references, literals, or blank nodes not serving as the subject
     *     of any statement [not] in the [sub]graph.
     * 
* * The text is square brackets is my own (presumed) correction to the * definition of Concise Bounded Description and reflects the actual * behavior of this mode. * * @see CBD - Concise Bounded * Description */ CBD(true/* forward */, false/* reverse */, true/* reifiedStatements */, true/* recursive */), /** * Symmetric Concise Bounded Description (SCBD). * *
     * Specifically, given a particular node (the starting node) in a particular
     * RDF graph (the source graph), a subgraph of that particular graph, taken
     * to comprise a symmetric concise bounded description of the resource
     * denoted by the starting node, can be identified as follows:
     * 
     * 1. Include in the subgraph all statements in the source graph where the
     * object of the statement is the starting node;
     * 
     * 2. Recursively, for all statements identified in the subgraph thus far
     * having a blank node subject not equal to the starting node, include in
     * the subgraph all statements in the source graph where the object of the
     * statement is the blank node in question and which are not already
     * included in the subgraph.
     * 
     * 3. Recursively, for all statements included in the subgraph thus far, for
     * all reifications of each statement in the source graph, include the
     * symmetric concise bounded description beginning from the rdf:Statement
     * node of each reification.
     * 
     * 4. Include in the subgraph the concise bounded description beginning from
     * the starting node.
     * 
     * This produces a subgraph that includes a concise bounded description,
     * given the same starting point, but in addition, includes all inbound arc
     * paths, up to but not beyond a URIref subject node.
     * 
* * Note: Our evaluation actually proceeds in both the forward and reverse * direction at the same time. However, this is an efficiency matter and has * no effect on the semantics of the description. */ SCBD(true/* forward */, true/* reverse */, true/* reifiedStatements */, true/* recursive */); // /** // * Concise Bounded Description without Reification. // *

// * This is the same as {@link #CBD} except that the source graph is NOT // * probed for reifications of statements in the subgraph thus far (step 3). // * This option is useful when reified statement models are not common in the // * data and it avoids the overhead of testing for a reified statement model // * for each statement in the subgraph. // */ // CBDNR(true/* forward */, false/* reverse */, false/* reifiedStatements */, // true/* recursive */), // /** // * Symmetric Concise Bounded Description without Reification. // *

// * This is the same as {@link #SCBD} except that the source graph is NOT // * probed for reifications of statements in the subgraph thus far (step 3). // * This option is useful when reified statement models are not common in the // * data and it avoids the overhead of testing for a reified statement model // * for each statement in the subgraph. // */ // SCBDNR(true/* forward */, true/* reverse */, false/* reifiedStatements */, // true/* recursive */); private final boolean forward; private final boolean reverse; private final boolean reifiedStatements; private final boolean recursive; private DescribeModeEnum(final boolean forward, final boolean reverse, final boolean reifiedStatements, final boolean recursive) { this.forward = forward; this.reverse = reverse; this.reifiedStatements = reifiedStatements; this.recursive = recursive; } /** * Return true if the description includes the non-link * attributes and forward links. */ public boolean isForward() { return forward; } /** * Return true if the description includes the reverse links. */ public boolean isReverse() { return reverse; } /** * Return true if the description includes the description of * reified statements found in the description. */ public boolean isReifiedStatements() { return reifiedStatements; } /** * Return true if the description includes a recursive * expansion. */ public boolean isRecursive() { return recursive; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy