# ARQ - Extending Query Execution

There are a number of ways of extending query execution. This page describes how to interface ARQ to data which requires an alternative is not in a Jena graph.

- Property functions: custom code that provides the matching of a property, rather than just simply matching RDF data.
- Alternative basic pattern matching
- Alternative execute of a SPARQL algebra

Property functions provide the most convenient way of adding custom code to the graph matching process for specific predicates. The free text search capabilities, using Lucene, are done this way.

To replace several or all triple patterns in a SPARQL basic graph pattern (BGP) matching in a query, an application can enhance the main query engine and intercept the BGP matching process.

This page describes how to interface ARQ to data which requires an alternative matching for the BGP

## Basic Graph Pattern matching

BGP matching proceeds a number of "stages". Each stage matches a subset of the basic graph pattern.

@@Standard : break into plain BGP/ property function. Optimize each plain BGP

The normal BGP matching is a single stage that finds all bindings for variables for a pattern.

@@stages

The query optimizer prefers execution plans that pass the results from previous patterns into later stages. This enables maximal indexing of pattern matching.

@@Somewhere: Bindings / Query Iterators

Query optimization, input and substitution

ARQ Documentation Page