#!/usr/bin/perl
use strict;
use warnings;
no warnings 'redefine';
use utf8;

use Test::More tests => 114;
use YAML;
use Data::Dumper;
use Scalar::Util qw(reftype);
use RDF::Query;

use_ok( 'RDF::Query::Parser::SPARQL11' );

################################################################################
# Log::Log4perl::init( \q[
# 	log4perl.category.rdf.query.parser          = TRACE, Screen
# 	
# 	log4perl.appender.Screen         = Log::Log4perl::Appender::Screen
# 	log4perl.appender.Screen.stderr  = 0
# 	log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout
# ] );
################################################################################

my $parser	= RDF::Query::Parser::SPARQL11->new();
isa_ok( $parser, 'RDF::Query::Parser::SPARQL11' );


my (@data)	= YAML::Load(do { local($/) = undef; <DATA> });
foreach (@data) {
	next unless (reftype($_) eq 'ARRAY');
	my ($name, $sparql, $correct)	= @$_;
	my $parsed	= $parser->parse( $sparql, undef, 1 );
	my $r	= is_deeply( $parsed, $correct, $name );
	unless ($r) {
		warn 'PARSE ERROR: ' . $parser->error;
# 		my $triples	= $parsed->{triples} || [];
# 		foreach my $t (@$triples) {
# 			warn $t->as_sparql . "\n";
# 		}
		
#		warn Dumper($parsed);
		my $dump	= YAML::Dump($parsed);
		$dump		=~ s/\n/\n  /g;
		warn $dump;
		exit;
	}
}


# sub _____ERRORS______ {}
# ##### ERRORS
# 
# {
# 	my $sparql	= <<"END";
# 		PREFIX : <http://example.org/>
# 		SELECT *
# 		WHERE
# 		{
# 			_:a ?p ?v . { _:a ?q 1 }
# 		}
# END
# 	my $parsed	= $parser->parse( $sparql );
# 	is( $parsed, undef, '(DAWG) syn-bad-34.rq' );
# 	if ($parsed) {
# 		warn "unexpected parse tree: " . Dumper($parsed);
# 	}
# 	like( $parser->error, qr/^Same blank node identifier/, 'got expected syntax error' );	# XXX
# }


__END__
---
- Subselect
- |
  PREFIX : <http://people.example/>
  SELECT ?y ?name WHERE {
    :alice :knows ?y .
    {
      SELECT ?y ?name WHERE {
        ?y :name ?name
      }
      ORDER BY ?name
      LIMIT 1
    }
  }
- method: SELECT
  namespaces: &1
    __DEFAULT__: http://people.example/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://people.example/alice
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://people.example/knows
            - !!perl/array:RDF::Query::Node::Variable
              - y
        - !!perl/array:RDF::Query::Algebra::SubSelect
          - !!perl/hash:RDF::Query
            base: ~
            parsed:
              method: SELECT
              triples:
                - !!perl/array:RDF::Query::Algebra::Limit
                  - !!perl/array:RDF::Query::Algebra::Project
                    - !!perl/array:RDF::Query::Algebra::Sort
                      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
                        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
                          - !!perl/array:RDF::Query::Algebra::Triple
                            - !!perl/array:RDF::Query::Node::Variable
                              - y
                            - !!perl/array:RDF::Query::Node::Resource
                              - URI
                              - http://people.example/name
                            - !!perl/array:RDF::Query::Node::Variable
                              - name
                      -
                        - ASC
                        - !!perl/array:RDF::Query::Node::Variable
                          - name
                    -
                      - &1 !!perl/array:RDF::Query::Node::Variable
                        - y
                      - &2 !!perl/array:RDF::Query::Node::Variable
                        - name
                  - 1
              variables:
                - *1
                - *2
      -
        - &3 !!perl/array:RDF::Query::Node::Variable
          - y
        - &4 !!perl/array:RDF::Query::Node::Variable
          - name
  variables:
    - *3
    - *4
---
- Subselect with differing projection
- |
  PREFIX : <http://people.example/>
  SELECT ?name WHERE {
    :alice :knows ?y .
    {
      SELECT ?y ?name WHERE {
        ?y :name ?name
      }
      ORDER BY ?name
      LIMIT 1
    }
  }
- method: SELECT
  namespaces: &1
    __DEFAULT__: http://people.example/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://people.example/alice
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://people.example/knows
            - !!perl/array:RDF::Query::Node::Variable
              - y
        - !!perl/array:RDF::Query::Algebra::SubSelect
          - !!perl/hash:RDF::Query
            base: ~
            parsed:
              method: SELECT
              triples:
                - !!perl/array:RDF::Query::Algebra::Limit
                  - !!perl/array:RDF::Query::Algebra::Project
                    - !!perl/array:RDF::Query::Algebra::Sort
                      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
                        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
                          - !!perl/array:RDF::Query::Algebra::Triple
                            - !!perl/array:RDF::Query::Node::Variable
                              - y
                            - !!perl/array:RDF::Query::Node::Resource
                              - URI
                              - http://people.example/name
                            - !!perl/array:RDF::Query::Node::Variable
                              - name
                      -
                        - ASC
                        - !!perl/array:RDF::Query::Node::Variable
                          - name
                    -
                      - &1 !!perl/array:RDF::Query::Node::Variable
                        - y
                      - &2 !!perl/array:RDF::Query::Node::Variable
                        - name
                  - 1
              variables:
                - *1
                - *2
      -
        - &3 !!perl/array:RDF::Query::Node::Variable
          - name
  variables:
    - *3
---
- EXISTS filter
- |
  SELECT *
  WHERE {
    {}
    FILTER(EXISTS { ?s a <type> })
  }
- method: SELECT
  namespaces: {}
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Function
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - sparql:exists
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - s
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - type
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern []
      - &1 []
  variables: *1
---
- NOT EXISTS filter
- |
  SELECT *
  WHERE {
    ?s a <type>
    FILTER(NOT EXISTS { ?s a <type2> })
  }
- method: SELECT
  namespaces: {}
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Unary
          - '!'
          - !!perl/array:RDF::Query::Expression::Function
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - sparql:exists
            - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
              - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
                - !!perl/array:RDF::Query::Algebra::Triple
                  - !!perl/array:RDF::Query::Node::Variable
                    - s
                  - !!perl/array:RDF::Query::Node::Resource
                    - URI
                    - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
                  - !!perl/array:RDF::Query::Node::Resource
                    - URI
                    - type2
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - s
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - type
      -
        - &1 !!perl/array:RDF::Query::Node::Variable
          - s
  variables:
    - *1
---
- SELECT expression
- |
  PREFIX  dc:  <http://purl.org/dc/elements/1.1/>
  PREFIX  ns:  <http://example.org/ns#>
  SELECT  ?title (?p*(1-?discount) AS ?price)
     { ?x ns:price ?p .
       ?x dc:title ?title . 
       ?x ns:discount ?discount 
     }
- method: SELECT
  namespaces:
    dc: http://purl.org/dc/elements/1.1/
    ns: http://example.org/ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Extend
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - x
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://example.org/ns#price
              - !!perl/array:RDF::Query::Node::Variable
                - p
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - x
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://purl.org/dc/elements/1.1/title
              - !!perl/array:RDF::Query::Node::Variable
                - title
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - x
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://example.org/ns#discount
              - !!perl/array:RDF::Query::Node::Variable
                - discount
        -
          - &1 !!perl/array:RDF::Query::Expression::Alias
            - alias
            - &2 !!perl/array:RDF::Query::Node::Variable
              - price
            - !!perl/array:RDF::Query::Expression::Binary
              - '*'
              - !!perl/array:RDF::Query::Node::Variable
                - p
              - !!perl/array:RDF::Query::Expression::Binary
                - -
                - !!perl/array:RDF::Query::Node::Literal
                  - 1
                  - ~
                  - http://www.w3.org/2001/XMLSchema#integer
                - !!perl/array:RDF::Query::Node::Variable
                  - discount
      -
        - &3 !!perl/array:RDF::Query::Node::Variable
          - title
        - *2
  variables:
    - *3
    - *1
---
- GROUP_CONCAT Aggregate
- |
  PREFIX  dc:  <http://purl.org/dc/elements/1.1/>
  PREFIX  ns:  <http://example.org/ns#>
  SELECT (GROUP_CONCAT(?title) AS ?titles)
     { ?x dc:title ?title . 
       ?x ns:discount ?discount 
     }
  GROUP BY ?discount
- method: SELECT
  namespaces:
    dc: http://purl.org/dc/elements/1.1/
    ns: http://example.org/ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Extend
        - !!perl/array:RDF::Query::Algebra::Aggregate
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - x
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://purl.org/dc/elements/1.1/title
                - !!perl/array:RDF::Query::Node::Variable
                  - title
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - x
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://example.org/ns#discount
                - !!perl/array:RDF::Query::Node::Variable
                  - discount
          -
            - !!perl/array:RDF::Query::Node::Variable
              - discount
          -
            - GROUP_CONCAT(?title)
            -
              - GROUP_CONCAT
              - {}
              - !!perl/array:RDF::Query::Node::Variable
                - title
        -
          - &1 !!perl/array:RDF::Query::Expression::Alias
            - alias
            - &2 !!perl/array:RDF::Query::Node::Variable
              - titles
            - !!perl/array:RDF::Query::Node::Variable::ExpressionProxy
              - GROUP_CONCAT(?title)
      -
        - *2
  variables:
    - *1
---
- Aggregate with HAVING Clause
- |
  PREFIX : <http://books.example/>
  SELECT (SUM(?lprice) AS ?totalPrice)
  WHERE {
    ?org :affiliates ?auth .
    ?auth :writesBook ?book .
    ?book :price ?lprice .
  }
  GROUP BY ?org
  HAVING (SUM(?lprice) > 10)
- method: SELECT
  namespaces:
    __DEFAULT__: http://books.example/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Binary
          - '>'
          - !!perl/array:RDF::Query::Node::Variable::ExpressionProxy
            - SUM(?lprice)
          - !!perl/array:RDF::Query::Node::Literal
            - 10
            - ~
            - http://www.w3.org/2001/XMLSchema#integer
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::Extend
            - !!perl/array:RDF::Query::Algebra::Aggregate
              - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
                - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
                  - !!perl/array:RDF::Query::Algebra::Triple
                    - !!perl/array:RDF::Query::Node::Variable
                      - org
                    - !!perl/array:RDF::Query::Node::Resource
                      - URI
                      - http://books.example/affiliates
                    - !!perl/array:RDF::Query::Node::Variable
                      - auth
                  - !!perl/array:RDF::Query::Algebra::Triple
                    - !!perl/array:RDF::Query::Node::Variable
                      - auth
                    - !!perl/array:RDF::Query::Node::Resource
                      - URI
                      - http://books.example/writesBook
                    - !!perl/array:RDF::Query::Node::Variable
                      - book
                  - !!perl/array:RDF::Query::Algebra::Triple
                    - !!perl/array:RDF::Query::Node::Variable
                      - book
                    - !!perl/array:RDF::Query::Node::Resource
                      - URI
                      - http://books.example/price
                    - !!perl/array:RDF::Query::Node::Variable
                      - lprice
              -
                - !!perl/array:RDF::Query::Node::Variable
                  - org
              -
                - SUM(?lprice)
                -
                  - SUM
                  - {}
                  - !!perl/array:RDF::Query::Node::Variable
                    - lprice
            -
              - &1 !!perl/array:RDF::Query::Expression::Alias
                - alias
                - &2 !!perl/array:RDF::Query::Node::Variable
                  - totalPrice
                - !!perl/array:RDF::Query::Node::Variable::ExpressionProxy
                  - SUM(?lprice)
      -
        - *2
  variables:
    - *1
---
- single triple; no prefix
- |
  SELECT ?node
  WHERE {
    ?node a <http://kasei.us/e/ns/mt/blog> .
  }
- method: SELECT
  namespaces: {}
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - node
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://kasei.us/e/ns/mt/blog
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - node
  variables: *1
---
- simple DESCRIBE
- |
  DESCRIBE ?node
  WHERE { ?node a <http://kasei.us/e/ns/mt/blog> }
- method: DESCRIBE
  namespaces: {}
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
      - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
        - !!perl/array:RDF::Query::Algebra::Triple
          - !!perl/array:RDF::Query::Node::Variable
            - node
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - http://kasei.us/e/ns/mt/blog
  variables:
    - !!perl/array:RDF::Query::Node::Variable
      - node
---
- SELECT, WHERE
- |
  PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX	dcterms: <http://purl.org/dc/terms/>
  PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  SELECT	?page
  WHERE	{
  			?person foaf:name "Gregory Todd Williams" .
  			?person foaf:homepage ?page .
  		}
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - person
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/name
            - !!perl/array:RDF::Query::Node::Literal
              - Gregory Todd Williams
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - person
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/homepage
            - !!perl/array:RDF::Query::Node::Variable
              - page
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - page
  variables: *1
---
- SELECT, WHERE; variables with "$"
- |
  PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX	dcterms: <http://purl.org/dc/terms/>
  PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  SELECT	$page
  WHERE	{
  			$person foaf:name "Gregory Todd Williams" .
  			$person foaf:homepage $page .
  		}
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - person
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/name
            - !!perl/array:RDF::Query::Node::Literal
              - Gregory Todd Williams
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - person
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/homepage
            - !!perl/array:RDF::Query::Node::Variable
              - page
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - page
  variables: *1
---
- VarUri EQ OR constraint, numeric comparison constraint
- |
  PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX	dcterms: <http://purl.org/dc/terms/>
  PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  SELECT	?image ?point ?lat
  WHERE	{
  			?point geo:lat ?lat .
  			?image ?pred ?point .
  			FILTER(
  				(?pred = <http://purl.org/dc/terms/spatial> || ?pred = <http://xmlns.com/foaf/0.1/based_near>)
  				&&		?lat > 52.988674
  				&&		?lat < 53.036526
  			) .
  }
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Function
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - sparql:logical-and
          - !!perl/array:RDF::Query::Expression::Function
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - sparql:logical-or
            - !!perl/array:RDF::Query::Expression::Binary
              - ==
              - !!perl/array:RDF::Query::Node::Variable
                - pred
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://purl.org/dc/terms/spatial
            - !!perl/array:RDF::Query::Expression::Binary
              - ==
              - !!perl/array:RDF::Query::Node::Variable
                - pred
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/based_near
          - !!perl/array:RDF::Query::Expression::Binary
            - '>'
            - !!perl/array:RDF::Query::Node::Variable
              - lat
            - !!perl/array:RDF::Query::Node::Literal
              - 52.988674
              - ~
              - http://www.w3.org/2001/XMLSchema#decimal
          - !!perl/array:RDF::Query::Expression::Binary
            - <
            - !!perl/array:RDF::Query::Node::Variable
              - lat
            - !!perl/array:RDF::Query::Node::Literal
              - 53.036526
              - ~
              - http://www.w3.org/2001/XMLSchema#decimal
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - point
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://www.w3.org/2003/01/geo/wgs84_pos#lat
              - !!perl/array:RDF::Query::Node::Variable
                - lat
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - image
              - !!perl/array:RDF::Query::Node::Variable
                - pred
              - !!perl/array:RDF::Query::Node::Variable
                - point
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - image
        - !!perl/array:RDF::Query::Node::Variable
          - point
        - !!perl/array:RDF::Query::Node::Variable
          - lat
  variables: *1
---
- regex constraint; no trailing '.'
- |
  PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX	dcterms: <http://purl.org/dc/terms/>
  PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  SELECT	?person ?homepage
  WHERE	{
  			?person foaf:name "Gregory Todd Williams" .
  			?person foaf:homepage ?homepage .
  			FILTER	REGEX(?homepage, "kasei")
  		}
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Function
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - sparql:regex
          - !!perl/array:RDF::Query::Node::Variable
            - homepage
          - !!perl/array:RDF::Query::Node::Literal
            - kasei
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - person
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/name
              - !!perl/array:RDF::Query::Node::Literal
                - Gregory Todd Williams
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - person
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/homepage
              - !!perl/array:RDF::Query::Node::Variable
                - homepage
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - person
        - !!perl/array:RDF::Query::Node::Variable
          - homepage
  variables: *1
---
- filter with variable/function-call equality
- |
  PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX	dcterms: <http://purl.org/dc/terms/>
  PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  PREFIX    func: <http://example.com/>
  SELECT	?person ?homepage
  WHERE	{
  			?person foaf:name "Gregory Todd Williams" .
  			?person ?pred ?homepage .
  			FILTER( ?pred = func:homepagepred() ) .
  		}
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
    func: http://example.com/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Binary
          - ==
          - !!perl/array:RDF::Query::Node::Variable
            - pred
          - !!perl/array:RDF::Query::Expression::Function
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.com/homepagepred
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - person
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/name
              - !!perl/array:RDF::Query::Node::Literal
                - Gregory Todd Williams
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - person
              - !!perl/array:RDF::Query::Node::Variable
                - pred
              - !!perl/array:RDF::Query::Node::Variable
                - homepage
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - person
        - !!perl/array:RDF::Query::Node::Variable
          - homepage
  variables: *1
---
- filter with variable/function-call equality
- |
  		PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  		PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  		PREFIX	dcterms: <http://purl.org/dc/terms/>
  		PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  		SELECT	?person ?homepage
  		WHERE	{
  					?person foaf:name "Gregory Todd Williams" .
  					?person ?pred ?homepage .
  					FILTER( ?pred = <func:homepagepred>() ) .
  				}
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Binary
          - ==
          - !!perl/array:RDF::Query::Node::Variable
            - pred
          - !!perl/array:RDF::Query::Expression::Function
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - func:homepagepred
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - person
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/name
              - !!perl/array:RDF::Query::Node::Literal
                - Gregory Todd Williams
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - person
              - !!perl/array:RDF::Query::Node::Variable
                - pred
              - !!perl/array:RDF::Query::Node::Variable
                - homepage
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - person
        - !!perl/array:RDF::Query::Node::Variable
          - homepage
  variables: *1
---
- filter with LANG(?var)/literal equality
- |
  PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX	dcterms: <http://purl.org/dc/terms/>
  PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  SELECT	?person ?homepage
  WHERE	{
  			?person foaf:name ?name .
  			FILTER( LANG(?name) = 'en' ) .
  		}
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Binary
          - ==
          - !!perl/array:RDF::Query::Expression::Function
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - sparql:lang
            - !!perl/array:RDF::Query::Node::Variable
              - name
          - !!perl/array:RDF::Query::Node::Literal
            - en
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - person
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/name
              - !!perl/array:RDF::Query::Node::Variable
                - name
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - person
        - !!perl/array:RDF::Query::Node::Variable
          - homepage
  variables: *1
---
- filter with LANGMATCHES(?var, 'literal')
- |
  PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX	dcterms: <http://purl.org/dc/terms/>
  PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  SELECT	?person ?homepage
  WHERE	{
  			?person foaf:name ?name .
  			FILTER( LANGMATCHES(?name, "foo"@en ) ).
  		}
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Function
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - sparql:langmatches
          - !!perl/array:RDF::Query::Node::Variable
            - name
          - !!perl/array:RDF::Query::Node::Literal
            - foo
            - en
            - ~
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - person
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/name
              - !!perl/array:RDF::Query::Node::Variable
                - name
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - person
        - !!perl/array:RDF::Query::Node::Variable
          - homepage
  variables: *1
---
- filter with isLITERAL(?var)
- |
  PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX	dcterms: <http://purl.org/dc/terms/>
  PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  SELECT	?person ?homepage
  WHERE	{
  			?person foaf:name ?name .
  			FILTER( isLITERAL(?name) ).
  		}
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Function
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - sparql:isliteral
          - !!perl/array:RDF::Query::Node::Variable
            - name
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - person
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/name
              - !!perl/array:RDF::Query::Node::Variable
                - name
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - person
        - !!perl/array:RDF::Query::Node::Variable
          - homepage
  variables: *1
---
- filter with DATATYPE(?var)/URI equality
- |
  PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX	dcterms: <http://purl.org/dc/terms/>
  PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  SELECT	?person ?homepage
  WHERE	{
  			?person foaf:name ?name .
  			FILTER( DATATYPE(?name) = rdf:Literal ) .
  		}
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Binary
          - ==
          - !!perl/array:RDF::Query::Expression::Function
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - sparql:datatype
            - !!perl/array:RDF::Query::Node::Variable
              - name
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - http://www.w3.org/1999/02/22-rdf-syntax-ns#Literal
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - person
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/name
              - !!perl/array:RDF::Query::Node::Variable
                - name
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - person
        - !!perl/array:RDF::Query::Node::Variable
          - homepage
  variables: *1
---
- multiple attributes using ';'
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  SELECT	?person ?homepage
  WHERE	{
  			?person foaf:name "Gregory Todd Williams" ; foaf:homepage ?homepage .
  		}
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Variable
              - person
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/name
            - !!perl/array:RDF::Query::Node::Literal
              - Gregory Todd Williams
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/homepage
            - !!perl/array:RDF::Query::Node::Variable
              - homepage
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - person
        - !!perl/array:RDF::Query::Node::Variable
          - homepage
  variables: *2
---
- predicate with full qURI
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  SELECT	?person
  WHERE	{
  			?person foaf:name "Gregory Todd Williams", "Greg Williams" .
  		}
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Variable
              - person
            - &2 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/name
            - !!perl/array:RDF::Query::Node::Literal
              - Gregory Todd Williams
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - *2
            - !!perl/array:RDF::Query::Node::Literal
              - Greg Williams
      - &3
        - !!perl/array:RDF::Query::Node::Variable
          - person
  variables: *3
---
- "'a' rdf:type"
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  SELECT	?person
  WHERE	{
  			?person <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> foaf:Person
  		}
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - person
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/Person
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - person
  variables: *1
---
- "'a' rdf:type; multiple attributes using ';'"
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  SELECT	?name
  WHERE	{
  			?person a foaf:Person ; foaf:name ?name .
  		}
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Variable
              - person
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/Person
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/name
            - !!perl/array:RDF::Query::Node::Variable
              - name
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - name
  variables: *2
---
- "blank node subject; multiple attributes using ';'"
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  SELECT	?nick
  WHERE	{
  			[ foaf:name "Gregory Todd Williams" ; foaf:nick ?nick ] .
  		}
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/name
            - !!perl/array:RDF::Query::Node::Literal
              - Gregory Todd Williams
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/nick
            - !!perl/array:RDF::Query::Node::Variable
              - nick
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - nick
  variables: *2
---
- "blank node subject; using brackets '[...]'; 'a' rdf:type"
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  SELECT	?name
  WHERE	{
  			[ a foaf:Person ] foaf:name ?name .
  		}
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/Person
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/name
            - !!perl/array:RDF::Query::Node::Variable
              - name
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - name
  variables: *2
---
- "blank node subject; empty brackets '[]'"
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  SELECT	?name
  WHERE	{
  			[] foaf:name ?name .
  		}
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/name
            - !!perl/array:RDF::Query::Node::Variable
              - name
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - name
  variables: *1
---
- blank node object
- |
  PREFIX dao: <http://kasei.us/ns/dao#>
  PREFIX dc: <http://purl.org/dc/elements/1.1/>
  PREFIX beer: <http://www.csd.abdn.ac.uk/research/AgentCities/ontologies/beer#>
  
  SELECT ?name
  WHERE {
  	?me dao:consumed [ a beer:Ale ; beer:name ?name ] .
  }
- method: SELECT
  namespaces:
    beer: http://www.csd.abdn.ac.uk/research/AgentCities/ontologies/beer#
    dao: http://kasei.us/ns/dao#
    dc: http://purl.org/dc/elements/1.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.csd.abdn.ac.uk/research/AgentCities/ontologies/beer#Ale
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.csd.abdn.ac.uk/research/AgentCities/ontologies/beer#name
            - !!perl/array:RDF::Query::Node::Variable
              - name
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - me
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://kasei.us/ns/dao#consumed
            - *1
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - name
  variables: *2
---
- blank node; using qName _:abc
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  SELECT	?name
  WHERE	{
  			_:abc foaf:name ?name .
  		}
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - abc
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/name
            - !!perl/array:RDF::Query::Node::Variable
              - name
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - name
  variables: *1
---
- select with ORDER BY
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  SELECT	?name
  WHERE	{
  			?person a foaf:Person; foaf:name ?name
  		}
  ORDER BY ?name
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Sort
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - &1 !!perl/array:RDF::Query::Node::Variable
                - person
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/Person
            - !!perl/array:RDF::Query::Algebra::Triple
              - *1
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/name
              - !!perl/array:RDF::Query::Node::Variable
                - name
        -
          - ASC
          - !!perl/array:RDF::Query::Node::Variable
            - name
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - name
  variables: *2
---
- select with DISTINCT
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  SELECT	DISTINCT ?name
  WHERE	{
  			?person a foaf:Person; foaf:name ?name
  		}
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Distinct
      - !!perl/array:RDF::Query::Algebra::Project
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - &1 !!perl/array:RDF::Query::Node::Variable
                - person
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/Person
            - !!perl/array:RDF::Query::Algebra::Triple
              - *1
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/name
              - !!perl/array:RDF::Query::Node::Variable
                - name
        - &2
          - !!perl/array:RDF::Query::Node::Variable
            - name
  variables: *2
---
- select with ORDER BY; asc()
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  SELECT	?name
  WHERE	{
  			?person a foaf:Person; foaf:name ?name
  		}
  ORDER BY asc( ?name )
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Sort
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - &1 !!perl/array:RDF::Query::Node::Variable
                - person
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/Person
            - !!perl/array:RDF::Query::Algebra::Triple
              - *1
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/name
              - !!perl/array:RDF::Query::Node::Variable
                - name
        -
          - ASC
          - !!perl/array:RDF::Query::Node::Variable
            - name
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - name
  variables: *2
---
- select with ORDER BY; DESC()
- |2
  		PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  		SELECT	?name
  		WHERE	{
  					?person a foaf:Person; foaf:name ?name
  				}
  		ORDER BY DESC(?name)
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Sort
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - &1 !!perl/array:RDF::Query::Node::Variable
                - person
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/Person
            - !!perl/array:RDF::Query::Algebra::Triple
              - *1
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/name
              - !!perl/array:RDF::Query::Node::Variable
                - name
        -
          - DESC
          - !!perl/array:RDF::Query::Node::Variable
            - name
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - name
  variables: *2
---
- select with ORDER BY; DESC(); with LIMIT
- |2
  		PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  		SELECT	?name
  		WHERE	{
  					?person a foaf:Person; foaf:name ?name
  				}
  		ORDER BY DESC(?name) LIMIT 10
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Limit
      - !!perl/array:RDF::Query::Algebra::Project
        - !!perl/array:RDF::Query::Algebra::Sort
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - &1 !!perl/array:RDF::Query::Node::Variable
                  - person
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/Person
              - !!perl/array:RDF::Query::Algebra::Triple
                - *1
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/name
                - !!perl/array:RDF::Query::Node::Variable
                  - name
          -
            - DESC
            - !!perl/array:RDF::Query::Node::Variable
              - name
        - &2
          - !!perl/array:RDF::Query::Node::Variable
            - name
      - 10
  variables: *2
---
- select with ORDER BY; DESC(); with LIMIT
- |2
  		PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  		SELECT	?name
  		WHERE	{
  					?person a foaf:Person; foaf:name ?name
  				}
  		ORDER BY DESC(?name) LIMIT 10 OFFSET 10
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Limit
      - !!perl/array:RDF::Query::Algebra::Offset
        - !!perl/array:RDF::Query::Algebra::Project
          - !!perl/array:RDF::Query::Algebra::Sort
            - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
              - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
                - !!perl/array:RDF::Query::Algebra::Triple
                  - &1 !!perl/array:RDF::Query::Node::Variable
                    - person
                  - !!perl/array:RDF::Query::Node::Resource
                    - URI
                    - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
                  - !!perl/array:RDF::Query::Node::Resource
                    - URI
                    - http://xmlns.com/foaf/0.1/Person
                - !!perl/array:RDF::Query::Algebra::Triple
                  - *1
                  - !!perl/array:RDF::Query::Node::Resource
                    - URI
                    - http://xmlns.com/foaf/0.1/name
                  - !!perl/array:RDF::Query::Node::Variable
                    - name
            -
              - DESC
              - !!perl/array:RDF::Query::Node::Variable
                - name
          - &2
            - !!perl/array:RDF::Query::Node::Variable
              - name
        - 10
      - 10
  variables: *2
---
- select with ORDER BY; DESC(); with LIMIT; variables with "$"
- |2
  		PREFIX foaf: <http://xmlns.com/foaf/0.1/>
  		PREFIX dc: <http://purl.org/dc/elements/1.1/>
  		 select $pic $thumb $date 
  		 WHERE { $pic foaf:thumbnail $thumb .
  		 $pic dc:date $date } order by desc($date) limit 10
- method: SELECT
  namespaces:
    dc: http://purl.org/dc/elements/1.1/
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Limit
      - !!perl/array:RDF::Query::Algebra::Project
        - !!perl/array:RDF::Query::Algebra::Sort
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - pic
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/thumbnail
                - !!perl/array:RDF::Query::Node::Variable
                  - thumb
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - pic
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://purl.org/dc/elements/1.1/date
                - !!perl/array:RDF::Query::Node::Variable
                  - date
          -
            - DESC
            - !!perl/array:RDF::Query::Node::Variable
              - date
        - &1
          - !!perl/array:RDF::Query::Node::Variable
            - pic
          - !!perl/array:RDF::Query::Node::Variable
            - thumb
          - !!perl/array:RDF::Query::Node::Variable
            - date
      - 10
  variables: *1
---
- FILTER function call 1
- |2
  		PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  		PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  		PREFIX	dcterms: <http://purl.org/dc/terms/>
  		PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  		PREFIX	mygeo: <http://kasei.us/e/ns/geo#>
  		SELECT	?image ?point ?lat
  		WHERE	{
  					?point geo:lat ?lat .
  					?image ?pred ?point .
  					FILTER( mygeo:distance(?point, +41.849331, -71.392) < 10 )
  				}
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    mygeo: http://kasei.us/e/ns/geo#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Binary
          - <
          - !!perl/array:RDF::Query::Expression::Function
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://kasei.us/e/ns/geo#distance
            - !!perl/array:RDF::Query::Node::Variable
              - point
            - !!perl/array:RDF::Query::Node::Literal
              - +41.849331
              - ~
              - http://www.w3.org/2001/XMLSchema#decimal
            - !!perl/array:RDF::Query::Node::Literal
              - -71.392
              - ~
              - http://www.w3.org/2001/XMLSchema#decimal
          - !!perl/array:RDF::Query::Node::Literal
            - 10
            - ~
            - http://www.w3.org/2001/XMLSchema#integer
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - point
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://www.w3.org/2003/01/geo/wgs84_pos#lat
              - !!perl/array:RDF::Query::Node::Variable
                - lat
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - image
              - !!perl/array:RDF::Query::Node::Variable
                - pred
              - !!perl/array:RDF::Query::Node::Variable
                - point
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - image
        - !!perl/array:RDF::Query::Node::Variable
          - point
        - !!perl/array:RDF::Query::Node::Variable
          - lat
  variables: *1
---
- OLDFILTER function call 2
- |2
  		PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  		PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  		PREFIX	dcterms: <http://purl.org/dc/terms/>
  		PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  		PREFIX	mygeo: <http://kasei.us/e/ns/geo#>
  		SELECT	?image ?point ?lat
  		WHERE	{
  					?point geo:lat ?lat .
  					?image ?pred ?point .
  					FILTER( mygeo:distance(?point, 41.849331, -71.392) < 5 + 5 )
  				}
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    mygeo: http://kasei.us/e/ns/geo#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Binary
          - <
          - !!perl/array:RDF::Query::Expression::Function
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://kasei.us/e/ns/geo#distance
            - !!perl/array:RDF::Query::Node::Variable
              - point
            - !!perl/array:RDF::Query::Node::Literal
              - 41.849331
              - ~
              - http://www.w3.org/2001/XMLSchema#decimal
            - !!perl/array:RDF::Query::Node::Literal
              - -71.392
              - ~
              - http://www.w3.org/2001/XMLSchema#decimal
          - !!perl/array:RDF::Query::Expression::Binary
            - +
            - !!perl/array:RDF::Query::Node::Literal
              - 5
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
            - !!perl/array:RDF::Query::Node::Literal
              - 5
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - point
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://www.w3.org/2003/01/geo/wgs84_pos#lat
              - !!perl/array:RDF::Query::Node::Variable
                - lat
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - image
              - !!perl/array:RDF::Query::Node::Variable
                - pred
              - !!perl/array:RDF::Query::Node::Variable
                - point
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - image
        - !!perl/array:RDF::Query::Node::Variable
          - point
        - !!perl/array:RDF::Query::Node::Variable
          - lat
  variables: *1
---
- OLDFILTER function call 3
- |2
  		PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  		PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  		PREFIX	dcterms: <http://purl.org/dc/terms/>
  		PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  		PREFIX	mygeo: <http://kasei.us/e/ns/geo#>
  		SELECT	?image ?point ?lat
  		WHERE	{
  					?point geo:lat ?lat .
  					?image ?pred ?point .
  					FILTER( mygeo:distance(?point, 41.849331, -71.392) < 5 * 5 )
  				}
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    mygeo: http://kasei.us/e/ns/geo#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Binary
          - <
          - !!perl/array:RDF::Query::Expression::Function
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://kasei.us/e/ns/geo#distance
            - !!perl/array:RDF::Query::Node::Variable
              - point
            - !!perl/array:RDF::Query::Node::Literal
              - 41.849331
              - ~
              - http://www.w3.org/2001/XMLSchema#decimal
            - !!perl/array:RDF::Query::Node::Literal
              - -71.392
              - ~
              - http://www.w3.org/2001/XMLSchema#decimal
          - !!perl/array:RDF::Query::Expression::Binary
            - '*'
            - !!perl/array:RDF::Query::Node::Literal
              - 5
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
            - !!perl/array:RDF::Query::Node::Literal
              - 5
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - point
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://www.w3.org/2003/01/geo/wgs84_pos#lat
              - !!perl/array:RDF::Query::Node::Variable
                - lat
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - image
              - !!perl/array:RDF::Query::Node::Variable
                - pred
              - !!perl/array:RDF::Query::Node::Variable
                - point
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - image
        - !!perl/array:RDF::Query::Node::Variable
          - point
        - !!perl/array:RDF::Query::Node::Variable
          - lat
  variables: *1
---
- multiple FILTERs; with function call
- |2
  		PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  		PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  		PREFIX	dcterms: <http://purl.org/dc/terms/>
  		PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  		PREFIX	mygeo: <http://kasei.us/e/ns/geo#>
  		SELECT	?image ?point ?name
  		WHERE	{
  					?image dcterms:spatial ?point .
  					?point foaf:name ?name .
  					FILTER( mygeo:distance(?point, 41.849331, -71.392) < 10 ) .
  					FILTER REGEX(?name, "Providence, RI")
  				}
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    mygeo: http://kasei.us/e/ns/geo#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Function
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - sparql:regex
          - !!perl/array:RDF::Query::Node::Variable
            - name
          - !!perl/array:RDF::Query::Node::Literal
            - 'Providence, RI'
        - !!perl/array:RDF::Query::Algebra::Filter
          - FILTER
          - !!perl/array:RDF::Query::Expression::Binary
            - <
            - !!perl/array:RDF::Query::Expression::Function
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://kasei.us/e/ns/geo#distance
              - !!perl/array:RDF::Query::Node::Variable
                - point
              - !!perl/array:RDF::Query::Node::Literal
                - 41.849331
                - ~
                - http://www.w3.org/2001/XMLSchema#decimal
              - !!perl/array:RDF::Query::Node::Literal
                - -71.392
                - ~
                - http://www.w3.org/2001/XMLSchema#decimal
            - !!perl/array:RDF::Query::Node::Literal
              - 10
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - image
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://purl.org/dc/terms/spatial
                - !!perl/array:RDF::Query::Node::Variable
                  - point
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - point
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/name
                - !!perl/array:RDF::Query::Node::Variable
                  - name
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - image
        - !!perl/array:RDF::Query::Node::Variable
          - point
        - !!perl/array:RDF::Query::Node::Variable
          - name
  variables: *1
---
- "optional triple '{...}'"
- |2
  		PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  		SELECT	?person ?name ?mbox
  		WHERE	{
  					?person foaf:name ?name .
  					OPTIONAL { ?person foaf:mbox ?mbox }
  				}
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::Optional
          - OPTIONAL
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - person
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/name
                - !!perl/array:RDF::Query::Node::Variable
                  - name
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - person
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/mbox
                - !!perl/array:RDF::Query::Node::Variable
                  - mbox
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - person
        - !!perl/array:RDF::Query::Node::Variable
          - name
        - !!perl/array:RDF::Query::Node::Variable
          - mbox
  variables: *1
---
- "optional triples '{...; ...}'"
- |2
  		PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  		SELECT	?person ?name ?mbox ?nick
  		WHERE	{
  					?person foaf:name ?name .
  					OPTIONAL {
  						?person foaf:mbox ?mbox; foaf:nick ?nick
  					}
  				}
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::Optional
          - OPTIONAL
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - person
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/name
                - !!perl/array:RDF::Query::Node::Variable
                  - name
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - &1 !!perl/array:RDF::Query::Node::Variable
                  - person
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/mbox
                - !!perl/array:RDF::Query::Node::Variable
                  - mbox
              - !!perl/array:RDF::Query::Algebra::Triple
                - *1
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/nick
                - !!perl/array:RDF::Query::Node::Variable
                  - nick
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - person
        - !!perl/array:RDF::Query::Node::Variable
          - name
        - !!perl/array:RDF::Query::Node::Variable
          - mbox
        - !!perl/array:RDF::Query::Node::Variable
          - nick
  variables: *2
---
- union; sparql 6.2
- |2
  		PREFIX dc10:  <http://purl.org/dc/elements/1.1/>
  		PREFIX dc11:  <http://purl.org/dc/elements/1.0/>
  		SELECT	?title ?author
  		WHERE	{
  					{ ?book dc10:title ?title .  ?book dc10:creator ?author }
  					UNION
  					{ ?book dc11:title ?title .  ?book dc11:creator ?author }
  				}
- method: SELECT
  namespaces:
    dc10: http://purl.org/dc/elements/1.1/
    dc11: http://purl.org/dc/elements/1.0/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::Union
          - UNION
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - book
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://purl.org/dc/elements/1.1/title
                - !!perl/array:RDF::Query::Node::Variable
                  - title
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - book
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://purl.org/dc/elements/1.1/creator
                - !!perl/array:RDF::Query::Node::Variable
                  - author
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - book
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://purl.org/dc/elements/1.0/title
                - !!perl/array:RDF::Query::Node::Variable
                  - title
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - book
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://purl.org/dc/elements/1.0/creator
                - !!perl/array:RDF::Query::Node::Variable
                  - author
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - title
        - !!perl/array:RDF::Query::Node::Variable
          - author
  variables: *1
---
- literal language tag @en
- |2
  		PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  		SELECT	?person ?homepage
  		WHERE	{
  					?person foaf:name "Gary P"@en ; foaf:homepage ?homepage .
  				}
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Variable
              - person
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/name
            - !!perl/array:RDF::Query::Node::Literal
              - Gary P
              - en
              - ~
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/homepage
            - !!perl/array:RDF::Query::Node::Variable
              - homepage
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - person
        - !!perl/array:RDF::Query::Node::Variable
          - homepage
  variables: *2
---
- typed literal ^^URI
- |2
  		PREFIX	dc: <http://purl.org/dc/elements/1.1/>
  		PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  		SELECT	?image
  		WHERE	{
  					?image dc:date "2005-04-07T18:27:56-04:00"^^<http://www.w3.org/2001/XMLSchema#dateTime>
  				}
- method: SELECT
  namespaces:
    dc: http://purl.org/dc/elements/1.1/
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - image
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://purl.org/dc/elements/1.1/date
            - !!perl/array:RDF::Query::Node::Literal
              - 2005-04-07T18:27:56-04:00
              - ~
              - http://www.w3.org/2001/XMLSchema#dateTime
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - image
  variables: *1
---
- typed literal ^^qName
- |2
  		PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  		PREFIX	dc: <http://purl.org/dc/elements/1.1/>
  		PREFIX  xs: <http://www.w3.org/2001/XMLSchema#>
  		SELECT	?image
  		WHERE	{
  					?image dc:date "2005-04-07T18:27:56-04:00"^^xs:dateTime
  				}
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
    dc: http://purl.org/dc/elements/1.1/
    xs: http://www.w3.org/2001/XMLSchema#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - image
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://purl.org/dc/elements/1.1/date
            - !!perl/array:RDF::Query::Node::Literal
              - 2005-04-07T18:27:56-04:00
              - ~
              - http://www.w3.org/2001/XMLSchema#dateTime
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - image
  variables: *1
---
- subject collection syntax
- |2
  		SELECT	?x
  		WHERE	{ (1 ?x 3) }
- method: SELECT
  namespaces: {}
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a1
            - &2 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#first
            - !!perl/array:RDF::Query::Node::Literal
              - 1
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - &3 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#rest
            - &4 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a2
          - !!perl/array:RDF::Query::Algebra::Triple
            - *4
            - *2
            - !!perl/array:RDF::Query::Node::Variable
              - x
          - !!perl/array:RDF::Query::Algebra::Triple
            - *4
            - *3
            - &5 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a3
          - !!perl/array:RDF::Query::Algebra::Triple
            - *5
            - *2
            - !!perl/array:RDF::Query::Node::Literal
              - 3
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::Triple
            - *5
            - *3
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
      - &6
        - !!perl/array:RDF::Query::Node::Variable
          - x
  variables: *6
---
- subject collection syntax; with pred-obj.
- |2
  		PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  		SELECT	?x
  		WHERE	{ (1 ?x 3) foaf:name "My Collection" }
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a1
            - &2 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#first
            - !!perl/array:RDF::Query::Node::Literal
              - 1
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - &3 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#rest
            - &4 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a2
          - !!perl/array:RDF::Query::Algebra::Triple
            - *4
            - *2
            - !!perl/array:RDF::Query::Node::Variable
              - x
          - !!perl/array:RDF::Query::Algebra::Triple
            - *4
            - *3
            - &5 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a3
          - !!perl/array:RDF::Query::Algebra::Triple
            - *5
            - *2
            - !!perl/array:RDF::Query::Node::Literal
              - 3
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::Triple
            - *5
            - *3
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/name
            - !!perl/array:RDF::Query::Node::Literal
              - My Collection
      - &6
        - !!perl/array:RDF::Query::Node::Variable
          - x
  variables: *6
---
- subject collection syntax; object collection syntax
- |2
  		PREFIX dc: <http://purl.org/dc/elements/1.1/>
  		SELECT	?x
  		WHERE	{ (1 ?x 3) dc:subject (1 2 3) }
- method: SELECT
  namespaces:
    dc: http://purl.org/dc/elements/1.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a1
            - &2 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#first
            - !!perl/array:RDF::Query::Node::Literal
              - 1
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - &3 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#rest
            - &4 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a2
          - !!perl/array:RDF::Query::Algebra::Triple
            - *4
            - *2
            - !!perl/array:RDF::Query::Node::Variable
              - x
          - !!perl/array:RDF::Query::Algebra::Triple
            - *4
            - *3
            - &5 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a3
          - !!perl/array:RDF::Query::Algebra::Triple
            - *5
            - *2
            - !!perl/array:RDF::Query::Node::Literal
              - 3
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::Triple
            - *5
            - *3
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
          - !!perl/array:RDF::Query::Algebra::Triple
            - &6 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a5
            - &7 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#first
            - !!perl/array:RDF::Query::Node::Literal
              - 1
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::Triple
            - *6
            - &8 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#rest
            - &9 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a6
          - !!perl/array:RDF::Query::Algebra::Triple
            - *9
            - *7
            - !!perl/array:RDF::Query::Node::Literal
              - 2
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::Triple
            - *9
            - *8
            - &10 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a7
          - !!perl/array:RDF::Query::Algebra::Triple
            - *10
            - *7
            - !!perl/array:RDF::Query::Node::Literal
              - 3
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::Triple
            - *10
            - *8
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://purl.org/dc/elements/1.1/subject
            - *6
      - &11
        - !!perl/array:RDF::Query::Node::Variable
          - x
  variables: *11
---
- object collection syntax
- |2
  		PREFIX test: <http://kasei.us/e/ns/test#>
  		SELECT	?x
  		WHERE	{
  					<http://kasei.us/about/foaf.xrdf#greg> test:mycollection (1 ?x 3) .
  				}
- method: SELECT
  namespaces:
    test: http://kasei.us/e/ns/test#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a1
            - &2 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#first
            - !!perl/array:RDF::Query::Node::Literal
              - 1
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - &3 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#rest
            - &4 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a2
          - !!perl/array:RDF::Query::Algebra::Triple
            - *4
            - *2
            - !!perl/array:RDF::Query::Node::Variable
              - x
          - !!perl/array:RDF::Query::Algebra::Triple
            - *4
            - *3
            - &5 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a3
          - !!perl/array:RDF::Query::Algebra::Triple
            - *5
            - *2
            - !!perl/array:RDF::Query::Node::Literal
              - 3
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::Triple
            - *5
            - *3
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://kasei.us/about/foaf.xrdf#greg
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://kasei.us/e/ns/test#mycollection
            - *1
      - &6
        - !!perl/array:RDF::Query::Node::Variable
          - x
  variables: *6
---
- SELECT *
- |2
  		SELECT *
  		WHERE { ?a ?a ?b . }
- method: SELECT
  namespaces: {}
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - a
            - !!perl/array:RDF::Query::Node::Variable
              - a
            - !!perl/array:RDF::Query::Node::Variable
              - b
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - a
        - !!perl/array:RDF::Query::Node::Variable
          - b
  variables:
    - !!perl/array:RDF::Query::Node::Variable
      - a
    - !!perl/array:RDF::Query::Node::Variable
      - b
---
- default prefix
- |2
  		PREFIX	: <http://xmlns.com/foaf/0.1/>
  		SELECT	?person
  		WHERE	{
  					?person :name "Gregory Todd Williams", "Greg Williams" .
  				}
- method: SELECT
  namespaces:
    __DEFAULT__: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Variable
              - person
            - &2 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/name
            - !!perl/array:RDF::Query::Node::Literal
              - Gregory Todd Williams
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - *2
            - !!perl/array:RDF::Query::Node::Literal
              - Greg Williams
      - &3
        - !!perl/array:RDF::Query::Node::Variable
          - person
  variables: *3
---
- select from named; single triple; no prefix
- |2
  			PREFIX foaf: <http://xmlns.com/foaf/0.1/>
  			SELECT ?src ?name
  			FROM NAMED <file://data/named_graphs/alice.rdf>
  			FROM NAMED <file://data/named_graphs/bob.rdf>
  			WHERE {
  				GRAPH ?src { ?x foaf:name ?name }
  			}
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources:
    -
      - !!perl/array:RDF::Query::Node::Resource
        - URI
        - file://data/named_graphs/alice.rdf
      - NAMED
    -
      - !!perl/array:RDF::Query::Node::Resource
        - URI
        - file://data/named_graphs/bob.rdf
      - NAMED
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::NamedGraph
          - GRAPH
          - &1 !!perl/array:RDF::Query::Node::Variable
            - src
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - x
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/name
                - !!perl/array:RDF::Query::Node::Variable
                  - name
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - src
        - !!perl/array:RDF::Query::Node::Variable
          - name
  variables: *2
---
- ASK FILTER; using <= (shouldn't parse as '<')
- |2
  				PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
  				ASK {
  					FILTER ( "1995-11-05"^^xsd:dateTime <= "1994-11-05T13:15:30Z"^^xsd:dateTime ) .
  				}
- method: ASK
  namespaces:
    xsd: http://www.w3.org/2001/XMLSchema#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Filter
      - FILTER
      - !!perl/array:RDF::Query::Expression
        - <=
        - !!perl/array:RDF::Query::Node::Literal
          - 1995-11-05
          - ~
          - http://www.w3.org/2001/XMLSchema#dateTime
        - !!perl/array:RDF::Query::Node::Literal
          - 1994-11-05T13:15:30Z
          - ~
          - http://www.w3.org/2001/XMLSchema#dateTime
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern []
  variables: []
---
- ORDER BY with expression
- |2
  		PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  		PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  		PREFIX	dcterms: <http://purl.org/dc/terms/>
  		PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  		PREFIX	xsd: <http://www.w3.org/2001/XMLSchema#>
  		SELECT	?image ?point ?lat
  		WHERE	{
  					?point geo:lat ?lat .
  					?image ?pred ?point .
  		}
  		ORDER BY ASC( xsd:decimal( ?lat ) )
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
    xsd: http://www.w3.org/2001/XMLSchema#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Sort
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - point
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://www.w3.org/2003/01/geo/wgs84_pos#lat
              - !!perl/array:RDF::Query::Node::Variable
                - lat
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - image
              - !!perl/array:RDF::Query::Node::Variable
                - pred
              - !!perl/array:RDF::Query::Node::Variable
                - point
        -
          - ASC
          - !!perl/array:RDF::Query::Expression::Function
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/2001/XMLSchema#decimal
            - !!perl/array:RDF::Query::Node::Variable
              - lat
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - image
        - !!perl/array:RDF::Query::Node::Variable
          - point
        - !!perl/array:RDF::Query::Node::Variable
          - lat
  variables: *1
---
- triple pattern with trailing internal '.'
- |
  PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  PREFIX foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX cyc: <http://www.cyc.com/2004/06/04/cyc#>
  PREFIX dcterms: <http://purl.org/dc/terms/>
  PREFIX dc: <http://purl.org/dc/elements/1.1/>
  SELECT ?place ?img ?date
  WHERE {
  	?region foaf:name "Maine" .
  	?p cyc:inRegion ?region; foaf:name ?place .
  	?img dcterms:spatial ?p .
  	?img dc:date ?date;  rdf:type foaf:Image .
  }
  ORDER BY DESC(?date)
  LIMIT 10
- method: SELECT
  namespaces:
    cyc: http://www.cyc.com/2004/06/04/cyc#
    dc: http://purl.org/dc/elements/1.1/
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Limit
      - !!perl/array:RDF::Query::Algebra::Project
        - !!perl/array:RDF::Query::Algebra::Sort
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - region
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/name
                - !!perl/array:RDF::Query::Node::Literal
                  - Maine
              - !!perl/array:RDF::Query::Algebra::Triple
                - &1 !!perl/array:RDF::Query::Node::Variable
                  - p
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://www.cyc.com/2004/06/04/cyc#inRegion
                - !!perl/array:RDF::Query::Node::Variable
                  - region
              - !!perl/array:RDF::Query::Algebra::Triple
                - *1
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/name
                - !!perl/array:RDF::Query::Node::Variable
                  - place
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - img
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://purl.org/dc/terms/spatial
                - !!perl/array:RDF::Query::Node::Variable
                  - p
              - !!perl/array:RDF::Query::Algebra::Triple
                - &2 !!perl/array:RDF::Query::Node::Variable
                  - img
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://purl.org/dc/elements/1.1/date
                - !!perl/array:RDF::Query::Node::Variable
                  - date
              - !!perl/array:RDF::Query::Algebra::Triple
                - *2
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/Image
          -
            - DESC
            - !!perl/array:RDF::Query::Node::Variable
              - date
        - &3
          - !!perl/array:RDF::Query::Node::Variable
            - place
          - !!perl/array:RDF::Query::Node::Variable
            - img
          - !!perl/array:RDF::Query::Node::Variable
            - date
      - 10
  variables: *3
---
- "[bug] query with predicate starting with 'a' (confused with { ?subj a ?type})"
- |2
  			PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  			PREFIX foaf: <http://xmlns.com/foaf/0.1/>
  			PREFIX cyc: <http://www.cyc.com/2004/06/04/cyc#>
  			PREFIX dcterms: <http://purl.org/dc/terms/>
  			PREFIX dc: <http://purl.org/dc/elements/1.1/>
  			PREFIX album: <http://kasei.us/e/ns/album#>
  			PREFIX p: <http://www.usefulinc.com/picdiary/>
  			SELECT ?img ?date
  			WHERE {
  				<http://kasei.us/pictures/parties/19991205-Tims_Party/> album:image ?img .
  				?img dc:date ?date ; rdf:type foaf:Image .
  			}
  			ORDER BY DESC(?date)
- method: SELECT
  namespaces:
    album: http://kasei.us/e/ns/album#
    cyc: http://www.cyc.com/2004/06/04/cyc#
    dc: http://purl.org/dc/elements/1.1/
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    p: http://www.usefulinc.com/picdiary/
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Sort
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://kasei.us/pictures/parties/19991205-Tims_Party/
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://kasei.us/e/ns/album#image
              - !!perl/array:RDF::Query::Node::Variable
                - img
            - !!perl/array:RDF::Query::Algebra::Triple
              - &1 !!perl/array:RDF::Query::Node::Variable
                - img
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://purl.org/dc/elements/1.1/date
              - !!perl/array:RDF::Query::Node::Variable
                - date
            - !!perl/array:RDF::Query::Algebra::Triple
              - *1
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/Image
        -
          - DESC
          - !!perl/array:RDF::Query::Node::Variable
            - date
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - img
        - !!perl/array:RDF::Query::Node::Variable
          - date
  variables: *2
---
- dawg/simple/01
- |2
  		PREFIX : <http://example.org/data/>
  		
  		SELECT *
  		WHERE { :x ?p ?q . }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/data/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/data/x
            - !!perl/array:RDF::Query::Node::Variable
              - p
            - !!perl/array:RDF::Query::Node::Variable
              - q
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - p
        - !!perl/array:RDF::Query::Node::Variable
          - q
  variables:
    - !!perl/array:RDF::Query::Node::Variable
      - p
    - !!perl/array:RDF::Query::Node::Variable
      - q
---
- single triple with comment; dawg/data/part1
- |2
  		# Get name, and optionally the mbox, of each person
  		
  		PREFIX foaf: <http://xmlns.com/foaf/0.1/>
  		
  		SELECT ?name ?mbox
  		WHERE
  		  { ?person foaf:name ?name .
  			OPTIONAL { ?person foaf:mbox ?mbox}
  		  }
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::Optional
          - OPTIONAL
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - person
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/name
                - !!perl/array:RDF::Query::Node::Variable
                  - name
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - person
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/mbox
                - !!perl/array:RDF::Query::Node::Variable
                  - mbox
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - name
        - !!perl/array:RDF::Query::Node::Variable
          - mbox
  variables: *1
---
- ask query
- |
  ASK {
    ?node a <http://kasei.us/e/ns/mt/blog> .
  }
- method: ASK
  namespaces: {}
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
      - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
        - !!perl/array:RDF::Query::Algebra::Triple
          - !!perl/array:RDF::Query::Node::Variable
            - node
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - http://kasei.us/e/ns/mt/blog
  variables: []
---
- blank-pred-blank
- |
  PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  PREFIX foaf: <http://xmlns.com/foaf/0.1/>
  SELECT ?name
  WHERE {
    [ foaf:name ?name ] foaf:maker []
  }
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/name
            - !!perl/array:RDF::Query::Node::Variable
              - name
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/maker
            - !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a2
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - name
  variables: *2
---
- Filter with unary-plus
- |
  PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX	dcterms: <http://purl.org/dc/terms/>
  PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  SELECT	?image ?point ?lat
  WHERE	{
  			?point geo:lat ?lat .
  			?image ?pred ?point .
  			FILTER( ?lat > +52 )
  }
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Binary
          - '>'
          - !!perl/array:RDF::Query::Node::Variable
            - lat
          - !!perl/array:RDF::Query::Node::Literal
            - +52
            - ~
            - http://www.w3.org/2001/XMLSchema#integer
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - point
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://www.w3.org/2003/01/geo/wgs84_pos#lat
              - !!perl/array:RDF::Query::Node::Variable
                - lat
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - image
              - !!perl/array:RDF::Query::Node::Variable
                - pred
              - !!perl/array:RDF::Query::Node::Variable
                - point
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - image
        - !!perl/array:RDF::Query::Node::Variable
          - point
        - !!perl/array:RDF::Query::Node::Variable
          - lat
  variables: *1
---
- Filter with isIRI
- |
  PREFIX	rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX	dcterms: <http://purl.org/dc/terms/>
  PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  SELECT	?image ?point ?lat
  WHERE	{
  			?point geo:lat ?lat .
  			?image ?pred ?point .
  			FILTER( isIRI(?image) )
  }
- method: SELECT
  namespaces:
    dcterms: http://purl.org/dc/terms/
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Function
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - sparql:isiri
          - !!perl/array:RDF::Query::Node::Variable
            - image
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - point
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://www.w3.org/2003/01/geo/wgs84_pos#lat
              - !!perl/array:RDF::Query::Node::Variable
                - lat
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - image
              - !!perl/array:RDF::Query::Node::Variable
                - pred
              - !!perl/array:RDF::Query::Node::Variable
                - point
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - image
        - !!perl/array:RDF::Query::Node::Variable
          - point
        - !!perl/array:RDF::Query::Node::Variable
          - lat
  variables: *1
---
- 'xsd:double'
- |
  PREFIX dc:  <http://purl.org/dc/elements/1.1/>
  SELECT ?node
  WHERE {
    ?node dc:identifier 1e4 .
  }
- method: SELECT
  namespaces:
    dc: http://purl.org/dc/elements/1.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - node
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://purl.org/dc/elements/1.1/identifier
            - !!perl/array:RDF::Query::Node::Literal
              - 1e4
              - ~
              - http://www.w3.org/2001/XMLSchema#double
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - node
  variables: *1
---
- boolean literal
- |
  PREFIX dc:  <http://purl.org/dc/elements/1.1/>
  SELECT ?node
  WHERE {
    ?node dc:identifier true .
  }
- method: SELECT
  namespaces:
    dc: http://purl.org/dc/elements/1.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - node
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://purl.org/dc/elements/1.1/identifier
            - !!perl/array:RDF::Query::Node::Literal
              - true
              - ~
              - http://www.w3.org/2001/XMLSchema#boolean
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - node
  variables: *1
---
- select with ORDER BY function call
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX	: <http://example.com/>
  SELECT	?name
  WHERE	{
  			?person a foaf:Person; foaf:name ?name
  		}
  ORDER BY :foo(?name)
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
    __DEFAULT__: http://example.com/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Sort
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - &1 !!perl/array:RDF::Query::Node::Variable
                - person
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/Person
            - !!perl/array:RDF::Query::Algebra::Triple
              - *1
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://xmlns.com/foaf/0.1/name
              - !!perl/array:RDF::Query::Node::Variable
                - name
        -
          - ASC
          - !!perl/array:RDF::Query::Expression::Function
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.com/foo
            - !!perl/array:RDF::Query::Node::Variable
              - name
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - name
  variables: *2
---
- select with bnode object as second pred-obj
- |
  PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  PREFIX foaf: <http://xmlns.com/foaf/0.1/>
  SELECT ?name
  WHERE {
    ?r foaf:name ?name ; foaf:maker [ a foaf:Person ]
  }
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/Person
          - !!perl/array:RDF::Query::Algebra::Triple
            - &2 !!perl/array:RDF::Query::Node::Variable
              - r
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/name
            - !!perl/array:RDF::Query::Node::Variable
              - name
          - !!perl/array:RDF::Query::Algebra::Triple
            - *2
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/maker
            - *1
      - &3
        - !!perl/array:RDF::Query::Node::Variable
          - name
  variables: *3
---
- select with qname with '-2' suffix
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX	wn: <http://xmlns.com/wordnet/1.6/>
  SELECT	?thing
  WHERE	{
  	?image a foaf:Image ;
  		foaf:depicts ?thing .
  	?thing a wn:Flower-2 .
  }
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
    wn: http://xmlns.com/wordnet/1.6/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Variable
              - image
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/Image
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/depicts
            - !!perl/array:RDF::Query::Node::Variable
              - thing
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - thing
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/wordnet/1.6/Flower-2
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - thing
  variables: *2
---
- select with qname with underscore
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  SELECT	?name
  WHERE	{
  	?p a foaf:Person ;
  		foaf:mbox_sha1sum "2057969209f1dfdad832de387cf13e6ff8c93b12" ;
  		foaf:name ?name .
  }
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Variable
              - p
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/Person
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/mbox_sha1sum
            - !!perl/array:RDF::Query::Node::Literal
              - 2057969209f1dfdad832de387cf13e6ff8c93b12
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/name
            - !!perl/array:RDF::Query::Node::Variable
              - name
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - name
  variables: *2
---
- construct with one construct triple
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  CONSTRUCT { ?person foaf:name ?name }
  WHERE	{ ?person foaf:firstName ?name }
- method: CONSTRUCT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Construct
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - person
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/firstName
            - !!perl/array:RDF::Query::Node::Variable
              - name
      -
        - !!perl/array:RDF::Query::Algebra::Triple
          - !!perl/array:RDF::Query::Node::Variable
            - person
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - http://xmlns.com/foaf/0.1/name
          - !!perl/array:RDF::Query::Node::Variable
            - name
---
- construct with two construct triples
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  CONSTRUCT { ?person foaf:name ?name . ?person a foaf:Person }
  WHERE	{ ?person foaf:firstName ?name }
- method: CONSTRUCT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Construct
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - person
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/firstName
            - !!perl/array:RDF::Query::Node::Variable
              - name
      -
        - !!perl/array:RDF::Query::Algebra::Triple
          - !!perl/array:RDF::Query::Node::Variable
            - person
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - http://xmlns.com/foaf/0.1/name
          - !!perl/array:RDF::Query::Node::Variable
            - name
        - !!perl/array:RDF::Query::Algebra::Triple
          - !!perl/array:RDF::Query::Node::Variable
            - person
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - http://xmlns.com/foaf/0.1/Person
---
- construct with three construct triples
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  CONSTRUCT { ?person a foaf:Person  . ?person foaf:name ?name . ?person foaf:firstName ?name }
  WHERE	{ ?person foaf:firstName ?name }
- method: CONSTRUCT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Construct
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - person
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/firstName
            - !!perl/array:RDF::Query::Node::Variable
              - name
      -
        - !!perl/array:RDF::Query::Algebra::Triple
          - !!perl/array:RDF::Query::Node::Variable
            - person
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - http://xmlns.com/foaf/0.1/Person
        - !!perl/array:RDF::Query::Algebra::Triple
          - !!perl/array:RDF::Query::Node::Variable
            - person
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - http://xmlns.com/foaf/0.1/name
          - !!perl/array:RDF::Query::Node::Variable
            - name
        - !!perl/array:RDF::Query::Algebra::Triple
          - !!perl/array:RDF::Query::Node::Variable
            - person
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - http://xmlns.com/foaf/0.1/firstName
          - !!perl/array:RDF::Query::Node::Variable
            - name
---
- select with triple-optional-triple
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  SELECT	?person ?nick ?page
  WHERE	{
  	?person foaf:name "Gregory Todd Williams" .
  	OPTIONAL { ?person foaf:nick ?nick } .
  	?person foaf:homepage ?page
  }
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::Optional
          - OPTIONAL
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - person
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/name
                - !!perl/array:RDF::Query::Node::Literal
                  - Gregory Todd Williams
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - person
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/nick
                - !!perl/array:RDF::Query::Node::Variable
                  - nick
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - person
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/homepage
            - !!perl/array:RDF::Query::Node::Variable
              - page
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - person
        - !!perl/array:RDF::Query::Node::Variable
          - nick
        - !!perl/array:RDF::Query::Node::Variable
          - page
  variables: *1
---
- select with FROM
- |
  PREFIX	foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX	geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  SELECT	?lat ?long
  FROM	<http://kasei.us/code/rdf-query/test-data/greenwich.rdf>
  WHERE	{
  	?point a geo:Point ;
  		geo:lat ?lat ;
  		geo:long ?long .
  }
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
    geo: http://www.w3.org/2003/01/geo/wgs84_pos#
  sources:
    -
      - !!perl/array:RDF::Query::Node::Resource
        - URI
        - http://kasei.us/code/rdf-query/test-data/greenwich.rdf
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Variable
              - point
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/2003/01/geo/wgs84_pos#Point
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/2003/01/geo/wgs84_pos#lat
            - !!perl/array:RDF::Query::Node::Variable
              - lat
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/2003/01/geo/wgs84_pos#long
            - !!perl/array:RDF::Query::Node::Variable
              - long
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - lat
        - !!perl/array:RDF::Query::Node::Variable
          - long
  variables: *2
---
- select with graph-triple-triple
- |
  # select all the email addresses ever held by the person
  # who held a given email address on 2007-01-01
  PREFIX foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX t: <http://www.w3.org/2006/09/time#>
  SELECT ?mbox WHERE {
  	GRAPH ?time { ?p foaf:mbox <mailto:gtw@cs.umd.edu> } .
  	?time t:inside "2007-01-01" .
  	?p foaf:mbox ?mbox .
  }
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
    t: http://www.w3.org/2006/09/time#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::NamedGraph
          - GRAPH
          - &1 !!perl/array:RDF::Query::Node::Variable
            - time
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - p
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/mbox
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - mailto:gtw@cs.umd.edu
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - time
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/2006/09/time#inside
            - !!perl/array:RDF::Query::Node::Literal
              - 2007-01-01
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - p
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/mbox
            - !!perl/array:RDF::Query::Node::Variable
              - mbox
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - mbox
  variables: *2
---
- (DAWG) syn-leading-digits-in-prefixed-names.rq
- |
  PREFIX dob: <http://placetime.com/interval/gregorian/1977-01-18T04:00:00Z/P> 
  PREFIX t: <http://www.ai.sri.com/daml/ontologies/time/Time.daml#>
  PREFIX dc: <http://purl.org/dc/elements/1.1/>
  SELECT ?desc
  WHERE  { 
    dob:1D a t:ProperInterval;
           dc:description ?desc.
  }
- method: SELECT
  namespaces:
    dob: http://placetime.com/interval/gregorian/1977-01-18T04:00:00Z/P
    t: http://www.ai.sri.com/daml/ontologies/time/Time.daml#
    dc: http://purl.org/dc/elements/1.1/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://placetime.com/interval/gregorian/1977-01-18T04:00:00Z/P1D
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.ai.sri.com/daml/ontologies/time/Time.daml#ProperInterval
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://purl.org/dc/elements/1.1/description
            - !!perl/array:RDF::Query::Node::Variable
              - desc
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - desc
  variables: *2
---
- (DAWG) syn-07.rq
- |
  # Trailing ;
  PREFIX :   <http://example/ns#>
  SELECT * WHERE
  { :s :p :o ; FILTER(?x) }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example/ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Node::Variable
          - x
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://example/ns#s
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://example/ns#p
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://example/ns#o
      - &1 []
  variables: *1
---
- (DAWG) syn-08.rq
- |
  # Broken ;
  PREFIX :   <http://example/ns#>
  SELECT * WHERE
  { :s :p :o ; . }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example/ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example/ns#s
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example/ns#p
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example/ns#o
      - &1 []
  variables: []
---
- (DAWG) syn-11.rq
- |
  PREFIX : <http://example.org/>
  SELECT *
  WHERE
  {
    _:a ?p ?v .  FILTER(true) . [] ?q _:a
  }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Node::Literal
          - true
          - ~
          - http://www.w3.org/2001/XMLSchema#boolean
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Blank
                - BLANK
                - a
              - !!perl/array:RDF::Query::Node::Variable
                - p
              - !!perl/array:RDF::Query::Node::Variable
                - v
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Blank
                - BLANK
                - a1
              - !!perl/array:RDF::Query::Node::Variable
                - q
              - !!perl/array:RDF::Query::Node::Blank
                - BLANK
                - a
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - p
        - !!perl/array:RDF::Query::Node::Variable
          - v
        - !!perl/array:RDF::Query::Node::Variable
          - q
  variables:
    - !!perl/array:RDF::Query::Node::Variable
      - p
    - !!perl/array:RDF::Query::Node::Variable
      - v
    - !!perl/array:RDF::Query::Node::Variable
      - q
---
- (DAWG) syntax-form-describe01.rq
- |
  DESCRIBE <u>
- method: DESCRIBE
  namespaces: {}
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::GroupGraphPattern []
  variables:
    - !!perl/array:RDF::Query::Node::Resource
      - URI
      - u
---
- (DAWG) syntax-form-construct04.rq
- |
  PREFIX  rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  CONSTRUCT { [] rdf:subject ?s ;
                 rdf:predicate ?p ;
                 rdf:object ?o . }
  WHERE {?s ?p ?o}
- method: CONSTRUCT
  namespaces:
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Construct
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - s
            - !!perl/array:RDF::Query::Node::Variable
              - p
            - !!perl/array:RDF::Query::Node::Variable
              - o
      -
        - !!perl/array:RDF::Query::Algebra::Triple
          - &1 !!perl/array:RDF::Query::Node::Blank
            - BLANK
            - a1
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - http://www.w3.org/1999/02/22-rdf-syntax-ns#subject
          - !!perl/array:RDF::Query::Node::Variable
            - s
        - !!perl/array:RDF::Query::Algebra::Triple
          - *1
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - http://www.w3.org/1999/02/22-rdf-syntax-ns#predicate
          - !!perl/array:RDF::Query::Node::Variable
            - p
        - !!perl/array:RDF::Query::Algebra::Triple
          - *1
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - http://www.w3.org/1999/02/22-rdf-syntax-ns#object
          - !!perl/array:RDF::Query::Node::Variable
            - o
---
- (DAWG) syntax-lists-02.rq
- |
  PREFIX : <http://example.org/ns#> 
  SELECT * WHERE { ?x :p ( ?z ) }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#first
            - !!perl/array:RDF::Query::Node::Variable
              - z
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#rest
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - x
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/ns#p
            - *1
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - z
        - !!perl/array:RDF::Query::Node::Variable
          - x
  variables:
    - !!perl/array:RDF::Query::Node::Variable
      - z
    - !!perl/array:RDF::Query::Node::Variable
      - x
---
- (DAWG) syntax-qname-03.rq
- |
  PREFIX : <http://example.org/ns#> 
  SELECT *
  WHERE { :_1 :p.rdf :z.z . }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/ns#_1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/ns#p.rdf
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/ns#z.z
      - &1 []
  variables: []
---
- (DAWG) syntax-qname-08.rq
- |
  BASE   <http://example.org/>
  PREFIX :  <#>
  PREFIX x.y:  <x#>
  SELECT *
  WHERE { :a.b  x.y:  : . }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/#
    x.y: http://example.org/x#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/#a.b
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/x#
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/#
      - &1 []
  base: !!perl/array:RDF::Query::Node::Resource
    - URI
    - http://example.org/
  variables: []
---
- (DAWG) syntax-lit-07.rq
- |
  BASE   <http://example.org/>
  PREFIX :  <#> 
  SELECT * WHERE { :x :p 123 }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/#x
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/#p
            - !!perl/array:RDF::Query::Node::Literal
              - 123
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
      - &1 []
  base: !!perl/array:RDF::Query::Node::Resource
    - URI
    - http://example.org/
  variables: []
---
- (DAWG) syntax-lit-08.rq
- |
  BASE   <http://example.org/>
  PREFIX :  <#> 
  SELECT * WHERE { :x :p 123. . }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/#x
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/#p
            - !!perl/array:RDF::Query::Node::Literal
              - 123.
              - ~
              - http://www.w3.org/2001/XMLSchema#decimal
      - &1 []
  base: !!perl/array:RDF::Query::Node::Resource
    - URI
    - http://example.org/
  variables: []
---
- (DAWG) syntax-lit-12.rq
- |
  BASE   <http://example.org/>
  PREFIX :  <#> 
  SELECT * WHERE { :x :p '''Long''\'Literal''' }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/#x
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/#p
            - !!perl/array:RDF::Query::Node::Literal
              - Long'''Literal
      - &1 []
  base: !!perl/array:RDF::Query::Node::Resource
    - URI
    - http://example.org/
  variables: []
---
- (DAWG) syntax-lit-13.rq
- |
  BASE   <http://example.org/>
  PREFIX :  <#> 
  SELECT * WHERE { :x :p """Long\"""Literal""" }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/#x
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/#p
            - !!perl/array:RDF::Query::Node::Literal
              - Long"""Literal
      - &1 []
  base: !!perl/array:RDF::Query::Node::Resource
    - URI
    - http://example.org/
  variables: []
---
- (DAWG) syntax-general-07.rq
- |
  SELECT * WHERE { <a><b>+1.0 }
- method: SELECT
  namespaces: {}
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - a
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - b
            - !!perl/array:RDF::Query::Node::Literal
              - +1.0
              - ~
              - http://www.w3.org/2001/XMLSchema#decimal
      - &1 []
  variables: []
---
- (DAWG) syntax-general-09.rq
- |
  SELECT * WHERE { <a><b>1.0e0 }
- method: SELECT
  namespaces: {}
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - a
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - b
            - !!perl/array:RDF::Query::Node::Literal
              - 1.0e0
              - ~
              - http://www.w3.org/2001/XMLSchema#double
      - &1 []
  variables: []
---
- (DAWG) syntax-general-10.rq
- |
  SELECT * WHERE { <a><b>+1.0e+1 }
- method: SELECT
  namespaces: {}
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - a
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - b
            - !!perl/array:RDF::Query::Node::Literal
              - +1.0e+1
              - ~
              - http://www.w3.org/2001/XMLSchema#double
      - &1 []
  variables: []
---
- (DAWG) syntax-lists-03.rq
- |
  PREFIX : <http://example.org/>
  SELECT * WHERE { ( 
  ) :p 1 }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/p
            - !!perl/array:RDF::Query::Node::Literal
              - 1
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
      - &1 []
  variables: []
---
- (DAWG) syntax-lists-04.rq
- |
  PREFIX : <http://example.org/>
  SELECT * WHERE { ( 1 2
  ) :p 1 }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a1
            - &2 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#first
            - !!perl/array:RDF::Query::Node::Literal
              - 1
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - &3 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#rest
            - &4 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a2
          - !!perl/array:RDF::Query::Algebra::Triple
            - *4
            - *2
            - !!perl/array:RDF::Query::Node::Literal
              - 2
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::Triple
            - *4
            - *3
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/p
            - !!perl/array:RDF::Query::Node::Literal
              - 1
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
      - &5 []
  variables: []
---
- (DAWG) syntax-lists-02.rq
- |
  PREFIX : <http://example.org/>
  SELECT * WHERE { ( ) :p 1 }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/p
            - !!perl/array:RDF::Query::Node::Literal
              - 1
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
      - &1 []
  variables: []
---
- (DAWG) syntax-lists-04.rq
- |
  PREFIX : <http://example.org/>
  SELECT * WHERE { ( 1 2
  ) :p 1 }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a1
            - &2 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#first
            - !!perl/array:RDF::Query::Node::Literal
              - 1
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - &3 !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#rest
            - &4 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a2
          - !!perl/array:RDF::Query::Algebra::Triple
            - *4
            - *2
            - !!perl/array:RDF::Query::Node::Literal
              - 2
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::Triple
            - *4
            - *3
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/p
            - !!perl/array:RDF::Query::Node::Literal
              - 1
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
      - &5 []
  variables: []
---
- (DAWG) dawg-eval
- |
  PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
  PREFIX ex: <http://example.com/#>
  SELECT ?val
  WHERE {
    ex:foo rdf:value ?val .
    FILTER regex(str(?val), "example\\.com")
  }
- method: SELECT
  namespaces:
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
    ex: http://example.com/#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Function
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - sparql:regex
          - !!perl/array:RDF::Query::Expression::Function
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - sparql:str
            - !!perl/array:RDF::Query::Node::Variable
              - val
          - !!perl/array:RDF::Query::Node::Literal
            - example\.com
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://example.com/#foo
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://www.w3.org/1999/02/22-rdf-syntax-ns#value
              - !!perl/array:RDF::Query::Node::Variable
                - val
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - val
  variables: *1
---
- (DAWG) dawg-eval: sameTerm
- |
  PREFIX : <http://example.org/things#>
  SELECT * {
    ?x1 :p ?v1 .
    ?x2 :p ?v2 .
    FILTER ( !sameTerm(?v1, ?v2) && ?v1 = ?v2 )
  } 
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/things#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Function
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - sparql:logical-and
          - !!perl/array:RDF::Query::Expression::Unary
            - '!'
            - !!perl/array:RDF::Query::Expression::Function
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - sparql:sameterm
              - !!perl/array:RDF::Query::Node::Variable
                - v1
              - !!perl/array:RDF::Query::Node::Variable
                - v2
          - !!perl/array:RDF::Query::Expression::Binary
            - ==
            - !!perl/array:RDF::Query::Node::Variable
              - v1
            - !!perl/array:RDF::Query::Node::Variable
              - v2
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - x1
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://example.org/things#p
              - !!perl/array:RDF::Query::Node::Variable
                - v1
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - x2
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://example.org/things#p
              - !!perl/array:RDF::Query::Node::Variable
                - v2
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - x1
        - !!perl/array:RDF::Query::Node::Variable
          - v1
        - !!perl/array:RDF::Query::Node::Variable
          - x2
        - !!perl/array:RDF::Query::Node::Variable
          - v2
  variables: *1
---
- (DAWG) dawg-eval: basic/manifest#term-8
- |
  PREFIX : <http://example.org/ns#>
  PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
  # DOT is part of the decimal.
  SELECT * { :x ?p +5 }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/ns#
    xsd: http://www.w3.org/2001/XMLSchema#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/ns#x
            - !!perl/array:RDF::Query::Node::Variable
              - p
            - !!perl/array:RDF::Query::Node::Literal
              - +5
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - p
  variables:
    - !!perl/array:RDF::Query::Node::Variable
      - p
---
- (DAWG) dawg-eval: algebra/manifest#filter-nested-2
- |
  PREFIX : <http://example/>
  SELECT ?v { :x :p ?v . { FILTER(?v = 1) } }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example/x
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example/p
            - !!perl/array:RDF::Query::Node::Variable
              - v
        - !!perl/array:RDF::Query::Algebra::Filter
          - FILTER
          - !!perl/array:RDF::Query::Expression::Binary
            - ==
            - !!perl/array:RDF::Query::Node::Variable
              - v
            - !!perl/array:RDF::Query::Node::Literal
              - 1
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern []
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - v
  variables: *1
---
- (DAWG) dawg-eval: optional/manifest#dawg-optional-complex-4
- |
  PREFIX  foaf:   <http://xmlns.com/foaf/0.1/>
  PREFIX    ex:   <http://example.org/things#>
  SELECT ?name ?plan ?dept ?img
  FROM <...>
  FROM NAMED <...>
  WHERE { 
  	?person foaf:name ?name  
  	{ ?person ex:healthplan ?plan } UNION { ?person ex:department ?dept } 
  	OPTIONAL { 
  		?person a foaf:Person
  		GRAPH ?g { 
  			[] foaf:name ?name;
  			   foaf:depiction ?img 
  		} 
  	} 
  }
- method: SELECT
  namespaces:
    ex: http://example.org/things#
    foaf: http://xmlns.com/foaf/0.1/
  sources:
    -
      - !!perl/array:RDF::Query::Node::Resource
        - URI
        - ...
    -
      - !!perl/array:RDF::Query::Node::Resource
        - URI
        - ...
      - NAMED
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::Optional
          - OPTIONAL
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - person
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/name
                - !!perl/array:RDF::Query::Node::Variable
                  - name
            - !!perl/array:RDF::Query::Algebra::Union
              - UNION
              - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
                - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
                  - !!perl/array:RDF::Query::Algebra::Triple
                    - !!perl/array:RDF::Query::Node::Variable
                      - person
                    - !!perl/array:RDF::Query::Node::Resource
                      - URI
                      - http://example.org/things#healthplan
                    - !!perl/array:RDF::Query::Node::Variable
                      - plan
              - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
                - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
                  - !!perl/array:RDF::Query::Algebra::Triple
                    - !!perl/array:RDF::Query::Node::Variable
                      - person
                    - !!perl/array:RDF::Query::Node::Resource
                      - URI
                      - http://example.org/things#department
                    - !!perl/array:RDF::Query::Node::Variable
                      - dept
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - person
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://xmlns.com/foaf/0.1/Person
            - !!perl/array:RDF::Query::Algebra::NamedGraph
              - GRAPH
              - &1 !!perl/array:RDF::Query::Node::Variable
                - g
              - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
                - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
                  - !!perl/array:RDF::Query::Algebra::Triple
                    - &2 !!perl/array:RDF::Query::Node::Blank
                      - BLANK
                      - a1
                    - !!perl/array:RDF::Query::Node::Resource
                      - URI
                      - http://xmlns.com/foaf/0.1/name
                    - !!perl/array:RDF::Query::Node::Variable
                      - name
                  - !!perl/array:RDF::Query::Algebra::Triple
                    - *2
                    - !!perl/array:RDF::Query::Node::Resource
                      - URI
                      - http://xmlns.com/foaf/0.1/depiction
                    - !!perl/array:RDF::Query::Node::Variable
                      - img
      - &3
        - !!perl/array:RDF::Query::Node::Variable
          - name
        - !!perl/array:RDF::Query::Node::Variable
          - plan
        - !!perl/array:RDF::Query::Node::Variable
          - dept
        - !!perl/array:RDF::Query::Node::Variable
          - img
  variables: *3
---
- (DAWG) dawg-eval: i18n/manifest#kanji-1
- |
  PREFIX foaf: <http://xmlns.com/foaf/0.1/>
  PREFIX 食: <http://www.w3.org/2001/sw/DataAccess/tests/data/i18n/kanji.ttl#>
  SELECT ?name ?food WHERE {
    [ foaf:name ?name ;
      食:食べる ?food ] . }
- method: SELECT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
    食: http://www.w3.org/2001/sw/DataAccess/tests/data/i18n/kanji.ttl#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - &1 !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://xmlns.com/foaf/0.1/name
            - !!perl/array:RDF::Query::Node::Variable
              - name
          - !!perl/array:RDF::Query::Algebra::Triple
            - *1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/2001/sw/DataAccess/tests/data/i18n/kanji.ttl#食べる
            - !!perl/array:RDF::Query::Node::Variable
              - food
      - &2
        - !!perl/array:RDF::Query::Node::Variable
          - name
        - !!perl/array:RDF::Query::Node::Variable
          - food
  variables: *2
---
- (DAWG) dawg-syntax: syntax-sparql4/manifest#syn-10
- |
  PREFIX : <http://example.org/>
  SELECT *
  WHERE
  {
    { _:a ?p ?v .  _:a ?q _:a } UNION { _:b ?q _:c }
  }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::Union
          - UNION
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Blank
                  - BLANK
                  - a
                - !!perl/array:RDF::Query::Node::Variable
                  - p
                - !!perl/array:RDF::Query::Node::Variable
                  - v
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Blank
                  - BLANK
                  - a
                - !!perl/array:RDF::Query::Node::Variable
                  - q
                - !!perl/array:RDF::Query::Node::Blank
                  - BLANK
                  - a
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Blank
                  - BLANK
                  - b
                - !!perl/array:RDF::Query::Node::Variable
                  - q
                - !!perl/array:RDF::Query::Node::Blank
                  - BLANK
                  - c
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - p
        - !!perl/array:RDF::Query::Node::Variable
          - v
        - !!perl/array:RDF::Query::Node::Variable
          - q
  variables:
    - !!perl/array:RDF::Query::Node::Variable
      - p
    - !!perl/array:RDF::Query::Node::Variable
      - v
    - !!perl/array:RDF::Query::Node::Variable
      - q
---
- (DAWG) dawg-syntax: syntax-sparql1/manifest#syntax-pat-04
- |
  PREFIX : <http://example.org/ns#> 
  SELECT *
  {
    OPTIONAL{:x :y :z} 
    ?a :b :c 
    { :x1 :y1 :z1 } UNION { :x2 :y2 :z2 }
  }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::Optional
          - OPTIONAL
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern []
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://example.org/ns#x
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://example.org/ns#y
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://example.org/ns#z
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - a
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/ns#b
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/ns#c
        - !!perl/array:RDF::Query::Algebra::Union
          - UNION
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://example.org/ns#x1
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://example.org/ns#y1
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://example.org/ns#z1
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://example.org/ns#x2
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://example.org/ns#y2
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://example.org/ns#z2
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - a
  variables:
    - !!perl/array:RDF::Query::Node::Variable
      - a
---
- (DAWG) dawg-syntax: syntax-sparql1/manifest#syntax-struct-10
- |
  PREFIX :  <http://example.org/ns#> 
  SELECT *
  { OPTIONAL { :a :b :c } . ?x ?y ?z }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::Optional
          - OPTIONAL
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern []
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://example.org/ns#a
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://example.org/ns#b
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - http://example.org/ns#c
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - x
            - !!perl/array:RDF::Query::Node::Variable
              - y
            - !!perl/array:RDF::Query::Node::Variable
              - z
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - x
        - !!perl/array:RDF::Query::Node::Variable
          - y
        - !!perl/array:RDF::Query::Node::Variable
          - z
  variables: *1
---
- (DAWG) dawg-syntax: expr-equals/manifest#eq-2-1
- |
  PREFIX  xsd: <http://www.w3.org/2001/XMLSchema#>
  PREFIX  : <http://example.org/things#>
  SELECT  ?v1 ?v2
  WHERE
      { ?x1 :p ?v1 .
        ?x2 :p ?v2 . 
        FILTER ( ?v1 = ?v2 ) .
      }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/things#
    xsd: http://www.w3.org/2001/XMLSchema#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Binary
          - ==
          - !!perl/array:RDF::Query::Node::Variable
            - v1
          - !!perl/array:RDF::Query::Node::Variable
            - v2
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - x1
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://example.org/things#p
              - !!perl/array:RDF::Query::Node::Variable
                - v1
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - x2
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://example.org/things#p
              - !!perl/array:RDF::Query::Node::Variable
                - v2
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - v1
        - !!perl/array:RDF::Query::Node::Variable
          - v2
  variables: *1
---
- (DAWG) dawg-syntax: expr-ops/manifest#minus-1
- |
  PREFIX : <http://example.org/>
  SELECT ?s WHERE {
      ?s :p ?o .
      ?s2 :p ?o2 .
      FILTER(?o - ?o2 = 3) .
  }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Filter
        - FILTER
        - !!perl/array:RDF::Query::Expression::Binary
          - ==
          - !!perl/array:RDF::Query::Expression::Binary
            - -
            - !!perl/array:RDF::Query::Node::Variable
              - o
            - !!perl/array:RDF::Query::Node::Variable
              - o2
          - !!perl/array:RDF::Query::Node::Literal
            - 3
            - ~
            - http://www.w3.org/2001/XMLSchema#integer
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - s
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://example.org/p
              - !!perl/array:RDF::Query::Node::Variable
                - o
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - s2
              - !!perl/array:RDF::Query::Node::Resource
                - URI
                - http://example.org/p
              - !!perl/array:RDF::Query::Node::Variable
                - o2
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - s
  variables: *1
---
- (DAWG) dawg-syntax: syntax-qname-04.rq
- |
  PREFIX :  <http://example.org/ns#> 
  PREFIX a: <http://example.org/ns2#> 
  SELECT *
  WHERE { : a: :a . : : : . }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/ns#
    a: http://example.org/ns2#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/ns#
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/ns2#
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/ns#a
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/ns#
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/ns#
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/ns#
      - &1 []
  variables: *1
---
- (DAWG) dawg-syntax: syntax-union-02.rq
- |
  PREFIX : <http://example.org/ns#>
  SELECT *
  {
    { ?s ?p ?o } UNION { ?a ?b ?c } UNION { ?r ?s ?t }
  }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::Union
          - UNION
          - !!perl/array:RDF::Query::Algebra::Union
            - UNION
            - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
              - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
                - !!perl/array:RDF::Query::Algebra::Triple
                  - !!perl/array:RDF::Query::Node::Variable
                    - s
                  - !!perl/array:RDF::Query::Node::Variable
                    - p
                  - !!perl/array:RDF::Query::Node::Variable
                    - o
            - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
              - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
                - !!perl/array:RDF::Query::Algebra::Triple
                  - !!perl/array:RDF::Query::Node::Variable
                    - a
                  - !!perl/array:RDF::Query::Node::Variable
                    - b
                  - !!perl/array:RDF::Query::Node::Variable
                    - c
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Triple
                - !!perl/array:RDF::Query::Node::Variable
                  - r
                - !!perl/array:RDF::Query::Node::Variable
                  - s
                - !!perl/array:RDF::Query::Node::Variable
                  - t
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - s
        - !!perl/array:RDF::Query::Node::Variable
          - p
        - !!perl/array:RDF::Query::Node::Variable
          - o
        - !!perl/array:RDF::Query::Node::Variable
          - a
        - !!perl/array:RDF::Query::Node::Variable
          - b
        - !!perl/array:RDF::Query::Node::Variable
          - c
        - !!perl/array:RDF::Query::Node::Variable
          - r
        - !!perl/array:RDF::Query::Node::Variable
          - t
  variables: *1
---
- (DAWG) dawg-syntax: syntax-order-06.rq
- |
  PREFIX :      <http://example.org/ns#> 
  SELECT *
  { ?s ?p ?o }
  ORDER BY 
    DESC(?o+57) :func2(?o) ASC(?s)
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/ns#
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::Sort
        - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
          - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
            - !!perl/array:RDF::Query::Algebra::Triple
              - !!perl/array:RDF::Query::Node::Variable
                - s
              - !!perl/array:RDF::Query::Node::Variable
                - p
              - !!perl/array:RDF::Query::Node::Variable
                - o
        -
          - DESC
          - !!perl/array:RDF::Query::Expression::Binary
            - +
            - !!perl/array:RDF::Query::Node::Variable
              - o
            - !!perl/array:RDF::Query::Node::Literal
              - 57
              - ~
              - http://www.w3.org/2001/XMLSchema#integer
        -
          - ASC
          - !!perl/array:RDF::Query::Expression::Function
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/ns#func2
            - !!perl/array:RDF::Query::Node::Variable
              - o
        -
          - ASC
          - !!perl/array:RDF::Query::Node::Variable
            - s
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - s
        - !!perl/array:RDF::Query::Node::Variable
          - p
        - !!perl/array:RDF::Query::Node::Variable
          - o
  variables: *1
---
- (DAWG) dawg-syntax: syntax-bnode-02.rq
- |
  PREFIX : <http://example.org/>
  # Tab
  SELECT * WHERE { [ ] :p [
  	] }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example.org/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a1
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example.org/p
            - !!perl/array:RDF::Query::Node::Blank
              - BLANK
              - a2
      - &1 []
  variables: []
---
- (DAWG) dawg-syntax: syntax-esc-04.rq
- |
  PREFIX : <http://example/> 
  SELECT *
  WHERE { <\u0078> :\u0070 ?xx\u0078 }
- method: SELECT
  namespaces:
    __DEFAULT__: http://example/
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Project
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - x
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://example/p
            - !!perl/array:RDF::Query::Node::Variable
              - xxx
      - &1
        - !!perl/array:RDF::Query::Node::Variable
          - xxx
  variables: *1
---
- CONSTRUCT with LIMIT (github pull request 17, from kjetilk)
- |
  PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
  PREFIX  foaf:       <http://xmlns.com/foaf/0.1/>
  CONSTRUCT { ?s ?p ?o . }
  WHERE {
    ?s ?p ?o .
  } LIMIT 5
- method: CONSTRUCT
  namespaces:
    foaf: http://xmlns.com/foaf/0.1/
    rdf: http://www.w3.org/1999/02/22-rdf-syntax-ns#
  sources: []
  options:
    limit: 5
  triples:
    - !!perl/array:RDF::Query::Algebra::Construct
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - s
            - !!perl/array:RDF::Query::Node::Variable
              - p
            - !!perl/array:RDF::Query::Node::Variable
              - o
      -
        - !!perl/array:RDF::Query::Algebra::Triple
          - !!perl/array:RDF::Query::Node::Variable
            - s
          - !!perl/array:RDF::Query::Node::Variable
            - p
          - !!perl/array:RDF::Query::Node::Variable
            - o
---
- INSERT-DELETE-USING-WHERE
- |
  DELETE { GRAPH <g1> { ?x <b> <c> } } INSERT { GRAPH <g1> { ?x <y> <z> } } USING <g1> WHERE { ?x a <Foo> }
- method: UPDATE
  custom_update_dataset: 1
  namespaces: {}
  sources: []
  triples:
    - !!perl/array:RDF::Query::Algebra::Update
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::NamedGraph
          - GRAPH
          - &1 !!perl/array:RDF::Query::Node::Resource
            - URI
            - g1
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Quad
                - !!perl/array:RDF::Query::Node::Variable
                  - x
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - b
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - c
                - *1
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::NamedGraph
          - GRAPH
          - &2 !!perl/array:RDF::Query::Node::Resource
            - URI
            - g1
          - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
            - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
              - !!perl/array:RDF::Query::Algebra::Quad
                - !!perl/array:RDF::Query::Node::Variable
                  - x
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - y
                - !!perl/array:RDF::Query::Node::Resource
                  - URI
                  - z
                - *2
      - !!perl/array:RDF::Query::Algebra::GroupGraphPattern
        - !!perl/array:RDF::Query::Algebra::BasicGraphPattern
          - !!perl/array:RDF::Query::Algebra::Triple
            - !!perl/array:RDF::Query::Node::Variable
              - x
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - http://www.w3.org/1999/02/22-rdf-syntax-ns#type
            - !!perl/array:RDF::Query::Node::Resource
              - URI
              - Foo
      - default:
          - !!perl/array:RDF::Query::Node::Resource
            - URI
            - g1
      - 0
