Class QueryUtils

java.lang.Object
org.aksw.jenax.arq.util.syntax.QueryUtils

public class QueryUtils extends Object
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static void
    applyDatasetDescription(org.apache.jena.query.Query query, org.apache.jena.sparql.core.DatasetDescription dd)
     
    static org.apache.jena.query.Query
    applyElementTransform(org.apache.jena.query.Query beforeQuery, Function<? super org.apache.jena.sparql.syntax.Element,? extends org.apache.jena.sparql.syntax.Element> transform)
     
    static Map<String,org.apache.jena.graph.Node>
    applyNodeTransform(Map<String,org.apache.jena.graph.Node> jsonMapping, org.apache.jena.sparql.graph.NodeTransform nodeTransform)
    Transform json mapping obtained via Query.getJsonMapping TODO Actually this should be added to Jena's NodeTransformLib.
    static org.apache.jena.query.Query
    applyNodeTransform(org.apache.jena.query.Query query, org.apache.jena.sparql.graph.NodeTransform nodeTransform)
     
    static org.apache.jena.query.Query
    applyOpTransform(org.apache.jena.query.Query beforeQuery, Function<? super org.apache.jena.sparql.algebra.Op,? extends org.apache.jena.sparql.algebra.Op> transform)
     
    static void
    applyRange(org.apache.jena.query.Query query, com.google.common.collect.Range<Long> range)
     
    static org.apache.jena.sparql.algebra.Op
    applyRange(org.apache.jena.sparql.algebra.Op op, com.google.common.collect.Range<Long> range)
     
    static org.apache.jena.query.Query
    applySlice(org.apache.jena.query.Query query, Long offset, Long limit, boolean cloneOnChange)
    Limit the query to the given range, relative to its own given range
    static org.apache.jena.sparql.syntax.Element
    asPatternForConstruct(org.apache.jena.query.Query q)
     
    static boolean
    canActAsConstruct(org.apache.jena.query.Query q)
     
    static org.apache.jena.query.Query
    constructToSelect(org.apache.jena.query.Query query)
    Derive a select query that projects only the variables mentioned in the construct query template.
    static Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var>
    createRandomVarMap(org.apache.jena.query.Query query, String base)
     
    static org.apache.jena.query.Query
    elementToQuery(org.apache.jena.sparql.syntax.Element pattern)
     
    static org.apache.jena.query.Query
    elementToQuery(org.apache.jena.sparql.syntax.Element pattern, String resultVar)
     
    static org.apache.jena.sparql.core.Var
    extractSoleProjectVar(org.apache.jena.query.Query query)
    Extract a single projection variable from the query.
    static org.apache.jena.query.Query
    fixVarNames(org.apache.jena.query.Query query)
     
    static org.apache.jena.sparql.core.Var
    freshVar(org.apache.jena.query.Query query)
     
    static org.apache.jena.sparql.core.Var
    freshVar(org.apache.jena.query.Query query, String baseVarName)
     
    static boolean
    hasLimit(Long limit)
    Returns true iff the argument is neither: null, Query.NOLIMIT nor Long.MAX_VALUE
    static boolean
    Returns true iff the argument is non null, not equal to Query.NOLIMIT and greater than 0 This function returns true for any negative value unless it is equal to Query.NOLIMIT.
    static void
    injectElement(org.apache.jena.query.Query query, org.apache.jena.sparql.syntax.Element element)
     
    static void
    injectFilter(org.apache.jena.query.Query query, String exprStr)
     
    static void
    injectFilter(org.apache.jena.query.Query query, String varName, org.apache.jena.graph.Node node)
     
    static void
    injectFilter(org.apache.jena.query.Query query, org.apache.jena.sparql.core.Var var, org.apache.jena.graph.Node node)
     
    static void
    injectFilter(org.apache.jena.query.Query query, org.apache.jena.sparql.expr.Expr expr)
     
    static Set<org.apache.jena.sparql.core.Quad>
    instanciate(Iterable<org.apache.jena.sparql.core.Quad> quads, org.apache.jena.sparql.engine.binding.Binding binding)
    This method does basically the same as org.apache.jena.sparql.engine.QueryExecutionBase.execConstruct and SparqlerBaseSelect note sure if it is redundant
    static Set<org.apache.jena.graph.Node>
    mentionedNodes(org.apache.jena.query.Query query)
     
    static Set<org.apache.jena.sparql.core.Var>
    mentionedVars(org.apache.jena.query.Query query)
     
    static org.apache.jena.query.Query
    optimizePrefixes(org.apache.jena.query.Query query)
     
    static org.apache.jena.query.Query
    optimizePrefixes(org.apache.jena.query.Query query, org.apache.jena.shared.PrefixMapping globalPm)
    In-place optimize a query's prefixes to only used prefixes
    static void
    overwriteDatasetDescription(org.apache.jena.query.Query query, org.apache.jena.sparql.core.DatasetDescription dd)
     
    static org.apache.jena.query.Query
    randomizeVars(org.apache.jena.query.Query query)
     
    static long
    rangeToLimit(com.google.common.collect.Range<Long> range)
     
    static long
    rangeToOffset(com.google.common.collect.Range<Long> range)
     
    static org.apache.jena.query.Query
    restoreQueryForm(org.apache.jena.query.Query query, org.apache.jena.query.Query proto)
    Restore a query form from a prototype.
    static org.apache.jena.query.Query
    restrictToLimit(org.apache.jena.query.Query query, long limit, boolean cloneOnChange)
    Restrict a query's limit to the given argument.
    static org.apache.jena.query.Query
    rewrite(org.apache.jena.query.Query beforeQuery, Function<? super org.apache.jena.sparql.algebra.Op,? extends org.apache.jena.sparql.algebra.Op> xform)
    Rewrite a query based on an algebraic transformation; preserves the construct template
    static org.apache.jena.query.Query
    selectToConstruct(org.apache.jena.query.Query query, org.apache.jena.sparql.syntax.Template template)
     
    static org.apache.jena.query.Query
    setQueryType(org.apache.jena.query.Query query, org.apache.jena.query.QueryType queryType)
    Set the query type on a given query.
    static boolean
    shouldDisablePatternReorder(org.apache.jena.query.Query query)
    Triple pattern reordering can give significant performance boosts on SPARQL queries but when SERVICE clauses and/or user defined property functions are in use it can lead to unexpected results.
    static com.google.common.collect.Range<Long>
    subRange(com.google.common.collect.Range<Long> _parent, com.google.common.collect.Range<Long> _child)
    Returns the absolute range for a child range relative to a parent range Assumes that both ranges have a lower endpoint
    static com.google.common.collect.Range<Long>
    toRange(Long offset, Long limit)
     
    static com.google.common.collect.Range<Long>
    toRange(org.apache.jena.query.Query query)
     
    static com.google.common.collect.Range<Long>
    toRange(org.apache.jena.sparql.algebra.op.OpSlice op)
     
    static org.apache.jena.query.Query
    unionConstruct(Iterable<org.apache.jena.query.Query> queries)
    Combine multiple construct queries into a single query whose template and query pattern is the union of those of the provided queries This method does NOT perform any renaming of variables.
    static org.apache.jena.query.Query
    unionConstruct(org.apache.jena.query.Query... queries)
    Combine multiple construct queries into a single query whose template and query pattern is the union of those of the provided queries This method does NOT perform any renaming of variables.
    static org.apache.jena.shared.PrefixMapping
    usedPrefixes(org.apache.jena.query.Query query)
    Scans the query for all occurrences of URI nodes and returns the applicable subset of its prefix mapping.
    static org.apache.jena.shared.PrefixMapping
    usedPrefixes(org.apache.jena.query.Query query, org.apache.jena.shared.PrefixMapping global)
    Determines the used prefixes w.r.t the query's local prefixes and a global prefix map (may be null).
    static org.apache.jena.shared.PrefixMapping
    usedReferencePrefixes(org.apache.jena.query.Query query, org.apache.jena.shared.PrefixMapping pm)
    Determine used prefixes within the given prefix mapping.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • QueryUtils

      public QueryUtils()
  • Method Details

    • setQueryType

      public static org.apache.jena.query.Query setQueryType(org.apache.jena.query.Query query, org.apache.jena.query.QueryType queryType)
      Set the query type on a given query.
      Parameters:
      query - The query on which to set the query type
      queryType - The query type to set
      Returns:
      The given query
    • applyElementTransform

      public static org.apache.jena.query.Query applyElementTransform(org.apache.jena.query.Query beforeQuery, Function<? super org.apache.jena.sparql.syntax.Element,? extends org.apache.jena.sparql.syntax.Element> transform)
    • applyOpTransform

      public static org.apache.jena.query.Query applyOpTransform(org.apache.jena.query.Query beforeQuery, Function<? super org.apache.jena.sparql.algebra.Op,? extends org.apache.jena.sparql.algebra.Op> transform)
    • restoreQueryForm

      public static org.apache.jena.query.Query restoreQueryForm(org.apache.jena.query.Query query, org.apache.jena.query.Query proto)
      Restore a query form from a prototype. Typical use case is when a CONSTRUCT query should be restored after a it was compiled using Algebra.compile() (which discards the template part). Also restores FROM and FROM NAMED.
      Parameters:
      query -
      proto -
      Returns:
    • unionConstruct

      public static org.apache.jena.query.Query unionConstruct(org.apache.jena.query.Query... queries)
      Combine multiple construct queries into a single query whose template and query pattern is the union of those of the provided queries This method does NOT perform any renaming of variables.
      Parameters:
      queries -
      Returns:
    • unionConstruct

      public static org.apache.jena.query.Query unionConstruct(Iterable<org.apache.jena.query.Query> queries)
      Combine multiple construct queries into a single query whose template and query pattern is the union of those of the provided queries This method does NOT perform any renaming of variables.
      Parameters:
      queries -
      Returns:
    • constructToSelect

      public static org.apache.jena.query.Query constructToSelect(org.apache.jena.query.Query query)
      Derive a select query that projects only the variables mentioned in the construct query template. If the template does not mention any variables then SELECT * is used instead.
      Parameters:
      query -
      Returns:
    • selectToConstruct

      public static org.apache.jena.query.Query selectToConstruct(org.apache.jena.query.Query query, org.apache.jena.sparql.syntax.Template template)
    • rewrite

      public static org.apache.jena.query.Query rewrite(org.apache.jena.query.Query beforeQuery, Function<? super org.apache.jena.sparql.algebra.Op,? extends org.apache.jena.sparql.algebra.Op> xform)
      Rewrite a query based on an algebraic transformation; preserves the construct template
      Parameters:
      beforeQuery -
      xform -
      Returns:
    • asPatternForConstruct

      public static org.apache.jena.sparql.syntax.Element asPatternForConstruct(org.apache.jena.query.Query q)
    • canActAsConstruct

      public static boolean canActAsConstruct(org.apache.jena.query.Query q)
    • mentionedVars

      public static Set<org.apache.jena.sparql.core.Var> mentionedVars(org.apache.jena.query.Query query)
    • mentionedNodes

      public static Set<org.apache.jena.graph.Node> mentionedNodes(org.apache.jena.query.Query query)
    • freshVar

      public static org.apache.jena.sparql.core.Var freshVar(org.apache.jena.query.Query query)
    • freshVar

      public static org.apache.jena.sparql.core.Var freshVar(org.apache.jena.query.Query query, String baseVarName)
    • applyNodeTransform

      public static Map<String,org.apache.jena.graph.Node> applyNodeTransform(Map<String,org.apache.jena.graph.Node> jsonMapping, org.apache.jena.sparql.graph.NodeTransform nodeTransform)
      Transform json mapping obtained via Query.getJsonMapping TODO Actually this should be added to Jena's NodeTransformLib.
      Parameters:
      jsonMapping -
      nodeTransform -
      Returns:
    • applyNodeTransform

      public static org.apache.jena.query.Query applyNodeTransform(org.apache.jena.query.Query query, org.apache.jena.sparql.graph.NodeTransform nodeTransform)
    • usedPrefixes

      public static org.apache.jena.shared.PrefixMapping usedPrefixes(org.apache.jena.query.Query query, org.apache.jena.shared.PrefixMapping global)
      Determines the used prefixes w.r.t the query's local prefixes and a global prefix map (may be null). The local prefixes take precedence.
      Parameters:
      query -
      global -
      Returns:
    • usedPrefixes

      public static org.apache.jena.shared.PrefixMapping usedPrefixes(org.apache.jena.query.Query query)
      Scans the query for all occurrences of URI nodes and returns the applicable subset of its prefix mapping. Note: In principle Jena allows sub queries to define their own prefixes However, this is non-standard and jena raises syntax exception when trying to clone such a query
       
       PREFIX foo: <http://ex.org/foo/>
       SELECT * {
         {
           PREFIX foo2: <http://ex.org/foo/>
           SELECT * { foo2:a ... }
         }
       }
       
       
      This method ignores non-standard 'inner' prefixes, so for the example above, the method will "incorrectly" return foo as a used prefix.
      Parameters:
      query -
      Returns:
    • usedReferencePrefixes

      public static org.apache.jena.shared.PrefixMapping usedReferencePrefixes(org.apache.jena.query.Query query, org.apache.jena.shared.PrefixMapping pm)
      Determine used prefixes within the given prefix mapping. The query's own prefixes are ignored.
      Parameters:
      query -
      pm -
      Returns:
    • optimizePrefixes

      public static org.apache.jena.query.Query optimizePrefixes(org.apache.jena.query.Query query, org.apache.jena.shared.PrefixMapping globalPm)
      In-place optimize a query's prefixes to only used prefixes
      Parameters:
      query -
      prefixMapping -
      Returns:
    • optimizePrefixes

      public static org.apache.jena.query.Query optimizePrefixes(org.apache.jena.query.Query query)
    • randomizeVars

      public static org.apache.jena.query.Query randomizeVars(org.apache.jena.query.Query query)
    • createRandomVarMap

      public static Map<org.apache.jena.sparql.core.Var,org.apache.jena.sparql.core.Var> createRandomVarMap(org.apache.jena.query.Query query, String base)
    • injectFilter

      public static void injectFilter(org.apache.jena.query.Query query, String varName, org.apache.jena.graph.Node node)
    • injectFilter

      public static void injectFilter(org.apache.jena.query.Query query, org.apache.jena.sparql.core.Var var, org.apache.jena.graph.Node node)
    • injectFilter

      public static void injectFilter(org.apache.jena.query.Query query, String exprStr)
    • injectFilter

      public static void injectFilter(org.apache.jena.query.Query query, org.apache.jena.sparql.expr.Expr expr)
    • injectElement

      public static void injectElement(org.apache.jena.query.Query query, org.apache.jena.sparql.syntax.Element element)
    • toRange

      public static com.google.common.collect.Range<Long> toRange(org.apache.jena.sparql.algebra.op.OpSlice op)
    • applyRange

      public static org.apache.jena.sparql.algebra.Op applyRange(org.apache.jena.sparql.algebra.Op op, com.google.common.collect.Range<Long> range)
    • applySlice

      public static org.apache.jena.query.Query applySlice(org.apache.jena.query.Query query, Long offset, Long limit, boolean cloneOnChange)
      Limit the query to the given range, relative to its own given range
      Parameters:
      query -
      offset -
      limit -
      cloneOnChange -
      Returns:
    • applyRange

      public static void applyRange(org.apache.jena.query.Query query, com.google.common.collect.Range<Long> range)
    • hasNonZeroOffset

      public static boolean hasNonZeroOffset(Long offset)
      Returns true iff the argument is non null, not equal to Query.NOLIMIT and greater than 0 This function returns true for any negative value unless it is equal to Query.NOLIMIT.
    • hasLimit

      public static boolean hasLimit(Long limit)
      Returns true iff the argument is neither: null, Query.NOLIMIT nor Long.MAX_VALUE
    • rangeToOffset

      public static long rangeToOffset(com.google.common.collect.Range<Long> range)
    • rangeToLimit

      public static long rangeToLimit(com.google.common.collect.Range<Long> range)
    • toRange

      public static com.google.common.collect.Range<Long> toRange(org.apache.jena.query.Query query)
    • toRange

      public static com.google.common.collect.Range<Long> toRange(Long offset, Long limit)
    • subRange

      public static com.google.common.collect.Range<Long> subRange(com.google.common.collect.Range<Long> _parent, com.google.common.collect.Range<Long> _child)
      Returns the absolute range for a child range relative to a parent range Assumes that both ranges have a lower endpoint
      Parameters:
      _parent -
      _child -
      Returns:
    • applyDatasetDescription

      public static void applyDatasetDescription(org.apache.jena.query.Query query, org.apache.jena.sparql.core.DatasetDescription dd)
    • overwriteDatasetDescription

      public static void overwriteDatasetDescription(org.apache.jena.query.Query query, org.apache.jena.sparql.core.DatasetDescription dd)
    • fixVarNames

      public static org.apache.jena.query.Query fixVarNames(org.apache.jena.query.Query query)
    • elementToQuery

      public static org.apache.jena.query.Query elementToQuery(org.apache.jena.sparql.syntax.Element pattern, String resultVar)
      Parameters:
      pattern - a pattern of a where-clause
      resultVar - an optional result variable (used for describe queries)
      Returns:
    • elementToQuery

      public static org.apache.jena.query.Query elementToQuery(org.apache.jena.sparql.syntax.Element pattern)
    • instanciate

      public static Set<org.apache.jena.sparql.core.Quad> instanciate(Iterable<org.apache.jena.sparql.core.Quad> quads, org.apache.jena.sparql.engine.binding.Binding binding)
      This method does basically the same as org.apache.jena.sparql.engine.QueryExecutionBase.execConstruct and SparqlerBaseSelect note sure if it is redundant
      Parameters:
      quads -
      binding -
      Returns:
    • extractSoleProjectVar

      public static org.apache.jena.sparql.core.Var extractSoleProjectVar(org.apache.jena.query.Query query)
      Extract a single projection variable from the query. Illegal argument exception if there are zero or more than 1 candidates.
    • shouldDisablePatternReorder

      public static boolean shouldDisablePatternReorder(org.apache.jena.query.Query query)
      Triple pattern reordering can give significant performance boosts on SPARQL queries but when SERVICE clauses and/or user defined property functions are in use it can lead to unexpected results. This method decides whether to disable reordering
    • restrictToLimit

      public static org.apache.jena.query.Query restrictToLimit(org.apache.jena.query.Query query, long limit, boolean cloneOnChange)
      Restrict a query's limit to the given argument.