← All compilation units

Flyology_SPARQL.Syntax

Description

The syntax tree a query parses into.

Nodes live in one flat vector with every reference an index, the same shape the RDF and N3 term models use. An expression tree, a pattern tree, and a projection list are all recursive in different ways, and one flat vector removes all three recursions at once.

The tree records what was written rather than what it means. "?x" and "$x" are the same variable and are stored the same way, but a FILTER containing "1 + 2" keeps the addition rather than folding it: this is a syntax tree, and a query that is written back should be the query that was read.

Add_Child

procedure Add_Child (Into : in out Builder; Parent, Item : Node_Reference)

Attach a child to a node, in order.

Parameters
Into
Parent
Item

Add_Node

function Add_Node
  (Into    : in out Builder;
   Variant : Node_Kind;
   Text    : String := "";
   Detail  : String := "") return Node_Reference

Add a node and return a reference to it.

Parameters
Into
Variant
Text
Detail
Return value

Add_Prefix

procedure Add_Prefix (Into : in out Builder; Name, Namespace : String)

Record a prefix declaration.

Parameters
Into
Name
Namespace

Base

function Base (Value : Query) return String

Return the base IRI declared by the prologue, or an empty string.

Parameters
Value

Query to inspect

Return value

The base IRI

Builder

type Builder is limited private;

Assembles a query. The parser is the only intended user; it is here rather than in a child of this package so that reading a tree and building one stay separate concerns with separate APIs.

Child

function Child
  (Into  : Builder;
   Node  : Node_Reference;
   Index : Positive) return Node_Reference
Parameters
Into
Node
Index
Return value

Child

function Child
  (Value : Query;
   Node  : Node_Reference;
   Index : Positive) return Node_Reference

Return one child of a node.

Parameters
Value

Query holding the node

Node

The node

Index

One-based child position

Return value

The child

Child_Count

function Child_Count
  (Into : Builder; Node : Node_Reference) return Natural
Parameters
Into
Node
Return value

Child_Count

function Child_Count
  (Value : Query; Node : Node_Reference) return Natural

Return how many children a node has.

Parameters
Value

Query holding the node

Node

The node

Return value

Child count

Dataset

function Dataset (Value : Query) return Node_Reference
Parameters
Value
Return value

Describe_Targets

function Describe_Targets (Value : Query) return Node_Reference
Parameters
Value
Return value

Detail

function Detail (Value : Query; Node : Node_Reference) return String

Return a node's secondary text: a prefixed name's prefix, a literal's language tag, or a BIND target.

Parameters
Value

Query holding the node

Node

The node

Return value

The text, empty where the kind carries none

Duplicates

function Duplicates (Value : Query) return Duplicates_Kind

Return the SELECT duplicate mode.

Parameters
Value

Query to inspect

Return value

The duplicate mode

Duplicates_Kind

type Duplicates_Kind is (All_Solutions, Distinct_Solutions,
                         Reduced_Solutions);

Duplicate handling on a SELECT.

Enumeration literals
All_Solutions
Distinct_Solutions
Reduced_Solutions

Form

function Form (Value : Query) return Query_Form

Return the query's form.

Parameters
Value

Query to inspect

Return value

The query form

Group_By

function Group_By (Value : Query) return Node_Reference
Parameters
Value
Return value

Having

function Having (Value : Query) return Node_Reference
Parameters
Value
Return value

Kind

function Kind (Into : Builder; Node : Node_Reference) return Node_Kind

Read one node of the tree still being built. The parser asks questions of nodes it has just made, and producing a whole Query to answer one would copy the tree each time it was asked.

Parameters
Into
Node
Return value

Kind

function Kind (Value : Query; Node : Node_Reference) return Node_Kind

Return a node's kind.

Parameters
Value

Query holding the node

Node

The node

Return value

The node's kind

Limit

function Limit (Value : Query) return Integer

Return the LIMIT or OFFSET, or -1 when absent.

Parameters
Value

Query to inspect

Return value

The bound, or -1

No_Node

No_Node : constant Node_Reference := 0;

No node.

Node_Kind

type Node_Kind is
   IRI_Node, Prefixed_Node, Blank_Node, Literal_Node, Variable_Node,
   A_Node,
   Triple_Node,
   Group_Node,
,
   …,
   Projection_Node);

What a node in the tree is.

Enumeration literals
IRI_Node

Terms

Prefixed_Node
Blank_Node
Literal_Node
Variable_Node
A_Node
Triple_Node

Patterns one subject-predicate-object

Group_Node

{ ... }

Optional_Node

OPTIONAL { ... }

Union_Node

{ ... } UNION { ... }

Minus_Node

MINUS { ... }

Graph_Node

GRAPH term { ... }

Service_Node

SERVICE term { ... }

Filter_Node

FILTER expression

Bind_Node

BIND (expression AS ?v)

Values_Node

VALUES ...

Subquery_Node

{ SELECT ... }

Triple_Term_Node

<<( s p o )>>

Reified_Node

<< s p o ~r >>

Dataset_Node

FROM, FROM NAMED

Exists_Node

EXISTS, NOT EXISTS

Collection_Node

( a b c ) in a pattern

Property_List_Node

[ p o ] in a pattern

Or_Node

Expressions

And_Node
Compare_Node

=, !=, <, >, <=, >=

Arithmetic_Node

+, -, *, /

Unary_Node

!, unary + and -

Call_Node

a function or built-in call

In_Node

IN and NOT IN

Order_Term_Node

Clauses one ORDER BY key

Projection_Node

one selected item

Node_Reference

type Node_Reference is new Natural;

Reference to one node, or zero for none.

Offset

function Offset (Value : Query) return Integer
Parameters
Value
Return value

Order_By

function Order_By (Value : Query) return Node_Reference
Parameters
Value
Return value

Prefix_Count

function Prefix_Count (Value : Query) return Natural

Return the number of prefix declarations.

Parameters
Value

Query to inspect

Return value

Declaration count

Prefix_Name

function Prefix_Name (Value : Query; Index : Positive) return String

Return one prefix name, without its colon.

Parameters
Value

Query to inspect

Index

One-based declaration position

Return value

The prefix name

Prefix_Namespace

function Prefix_Namespace
  (Value : Query; Index : Positive) return String

Return one prefix's namespace.

Parameters
Value

Query to inspect

Index

One-based declaration position

Return value

The namespace IRI

Projection

function Projection (Value : Query) return Node_Reference

Return the projection, GROUP BY, ORDER BY, or CONSTRUCT template roots. Each is a list node whose children are the individual items.

Parameters
Value

Query to inspect

Return value

The list root, or No_Node

Query

type Query (<>) is private;

A parsed query.

Query_Form

type Query_Form is
  (Select_Query, Ask_Query, Construct_Query, Describe_Query);

What kind of query this is.

Enumeration literals
Select_Query

SELECT

Ask_Query

ASK

Construct_Query

CONSTRUCT

Describe_Query

DESCRIBE

Selects_All

function Selects_All (Value : Query) return Boolean

Report whether a SELECT projects every variable, written "*".

Parameters
Value

Query to inspect

Return value

True for SELECT *

Set_Base

procedure Set_Base (Into : in out Builder; Value : String)

Record the parts of the query that are not nodes.

Parameters
Into
Value

Set_Dataset

procedure Set_Dataset (Into : in out Builder; Value : Node_Reference)
Parameters
Into
Value

Set_Describe

procedure Set_Describe (Into : in out Builder; Value : Node_Reference)
Parameters
Into
Value

Set_Duplicates

procedure Set_Duplicates (Into : in out Builder; Value : Duplicates_Kind)
Parameters
Into
Value

Set_Group_By

procedure Set_Group_By (Into : in out Builder; Value : Node_Reference)
Parameters
Into
Value

Set_Having

procedure Set_Having (Into : in out Builder; Value : Node_Reference)
Parameters
Into
Value

Set_Limit

procedure Set_Limit (Into : in out Builder; Value : Integer)
Parameters
Into
Value

Set_Offset

procedure Set_Offset (Into : in out Builder; Value : Integer)
Parameters
Into
Value

Set_Order_By

procedure Set_Order_By (Into : in out Builder; Value : Node_Reference)
Parameters
Into
Value

Set_Projection

procedure Set_Projection (Into : in out Builder; Value : Node_Reference)
Parameters
Into
Value

Set_Selects_All

procedure Set_Selects_All (Into : in out Builder; Value : Boolean)
Parameters
Into
Value

Set_Template

procedure Set_Template (Into : in out Builder; Value : Node_Reference)
Parameters
Into
Value

Set_Version

procedure Set_Version (Into : in out Builder; Value : String)
Parameters
Into
Value

Set_Where

procedure Set_Where (Into : in out Builder; Value : Node_Reference)
Parameters
Into
Value

Start

procedure Start (Into : in out Builder; Value : Query_Form)

Begin a query of the given form.

Parameters
Into
Value

Template

function Template (Value : Query) return Node_Reference
Parameters
Value
Return value

Text

function Text (Into : Builder; Node : Node_Reference) return String
Parameters
Into
Node
Return value

Text

function Text (Value : Query; Node : Node_Reference) return String

Return a node's primary text: an IRI, a variable name, a literal's lexical form, an operator, or a function name.

Parameters
Value

Query holding the node

Node

The node

Return value

The text, empty where the kind carries none

To_Query

function To_Query (Into : in out Builder) return Query

Finish, producing the query. The nodes move into it rather than being copied, which is why the builder is left empty rather than reusable.

Parameters
Into
Return value

Version

function Version (Value : Query) return String

Return the VERSION declaration, or an empty string.

Parameters
Value

Query to inspect

Return value

The declared version

Where_Clause

function Where_Clause (Into : Builder) return Node_Reference

Return the WHERE clause recorded so far, or No_Node.

Parameters
Into
Return value

Where_Clause

function Where_Clause (Value : Query) return Node_Reference

Return the root of the WHERE clause, or No_Node for a query with none, which only DESCRIBE may be.

Parameters
Value

Query to inspect

Return value

The pattern root