blob: f8c66ea8413707ab0b2f9b85cd811337e6212ccc [file] [log] [blame]
#!/bin/bash
# Query syntax examples
function fname
{
R="$1"
N="$2"
E="$3"
[ "$E" = "" ] && E="rq"
echo $(printf "$R%02d.$E" $N)
}
## Basic
N=0
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-basic-" $N) <<EOF
SELECT *
WHERE { }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-basic-" $N) <<EOF
SELECT * {}
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-basic-" $N) <<EOF
# No trailing dot
PREFIX : <http://example.org/ns#>
SELECT *
WHERE { ?x ?y ?z }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-basic-" $N) <<EOF
# With trailing dot
SELECT *
WHERE { ?x ?y ?z . }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-basic-" $N) <<EOF
# Two triples : no trailing dot
SELECT *
WHERE { ?x ?y ?z . ?a ?b ?c }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-basic-" $N) <<EOF
# Two triples : with trailing dot
SELECT *
WHERE { ?x ?y ?z . ?a ?b ?c . }
EOF
## QNames
N=0
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-qname-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
{ ?x :p ?z }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-qname-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
WHERE { :x :p :z . }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-qname-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
WHERE { :_1 :p.rdf :z.z . }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-qname-" $N) <<EOF
PREFIX : <http://example.org/ns#>
PREFIX a: <http://example.org/ns2#>
SELECT *
WHERE { : a: :a . : : : . }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-qname-" $N) <<EOF
PREFIX : <>
SELECT *
WHERE { : : : . }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-qname-" $N) <<EOF
PREFIX : <#>
SELECT *
WHERE { : : : . }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-qname-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT *
WHERE { : : : . }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-qname-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
PREFIX x.y: <x#>
SELECT *
WHERE { :a.b x.y: : . }
EOF
## OLD - has trailing dots
## BASE <http://example.org/>
## PREFIX : <#>
## PREFIX x.: <x#>
## SELECT *
## WHERE { :a. x.: : . }
## EOF
## Literals
N=0
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p "x" }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p 'x' }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p "x\\"y'z" }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p 'x"y\\'z' }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p "x\\"" }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p 'x\\'' }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p 123 }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p 123.0 . }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p """Long
""
Literal
""" }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p '''Long
'' """
Literal''' }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p """Long""\\"Literal""" }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p '''Long''\\'Literal''' }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p """Long\\"""Literal""" }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p '''Long\\'''Literal''' }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p '''Long '' Literal''' }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p '''Long ' Literal''' }
EOF
# Escapes after quotes
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p '''Long''\\\\Literal with '\\\\ single quotes ''' }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p """Long "" Literal""" }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p """Long " Literal""" }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lit-" $N) <<EOF
BASE <http://example.org/>
PREFIX : <#>
SELECT * WHERE { :x :p """Long""\\\\Literal with "\\\\ single quotes""" }
EOF
## Structure
N=0
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-struct-" $N) <<EOF
# Operator
PREFIX : <http://example.org/ns#>
SELECT *
{ OPTIONAL { } }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-struct-" $N) <<EOF
# Operator
PREFIX : <http://example.org/ns#>
SELECT *
{ OPTIONAL { :a :b :c } }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-struct-" $N) <<EOF
# Triple, no DOT, operator
PREFIX : <http://example.org/ns#>
SELECT *
{ :p :q :r OPTIONAL { :a :b :c } }
EOF
# Duplicate - skip
## N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-struct-" $N) <<EOF
## # Triple, DOT, operator
## PREFIX : <http://example.org/ns#>
## SELECT *
## { :p :q :r . OPTIONAL { :a :b :c } }
## EOF
N=$((N+1))
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-struct-" $N) <<EOF
# Triple, DOT, operator
PREFIX : <http://example.org/ns#>
SELECT *
{ :p :q :r . OPTIONAL { :a :b :c } }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-struct-" $N) <<EOF
# Triple, DOT, operator, DOT
PREFIX : <http://example.org/ns#>
SELECT *
{ :p :q :r . OPTIONAL { :a :b :c } . }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-struct-" $N) <<EOF
# Operator, no DOT
PREFIX : <http://example.org/ns#>
SELECT *
{ OPTIONAL { :a :b :c } }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-struct-" $N) <<EOF
# Operator, DOT
PREFIX : <http://example.org/ns#>
SELECT *
{ OPTIONAL { :a :b :c } . }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-struct-" $N) <<EOF
# Operator, triple
PREFIX : <http://example.org/ns#>
SELECT *
{ OPTIONAL { :a :b :c } ?x ?y ?z }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-struct-" $N) <<EOF
# Operator, DOT triple
PREFIX : <http://example.org/ns#>
SELECT *
{ OPTIONAL { :a :b :c } . ?x ?y ?z }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-struct-" $N) <<EOF
# Triple, semi, operator
PREFIX : <http://example.org/ns#>
SELECT *
{ :p :q :r ; OPTIONAL { :a :b :c } }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-struct-" $N) <<EOF
# Triple, semi, DOT, operator
PREFIX : <http://example.org/ns#>
SELECT *
{ :p :q :r ; . OPTIONAL { :a :b :c } }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-struct-" $N) <<EOF
# Two elements in the group
PREFIX : <http://example.org/ns#>
SELECT *
{ :p :q :r . OPTIONAL { :a :b :c }
:p :q :r . OPTIONAL { :a :b :c }
}
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-struct-" $N) <<EOF
# Two elements in the group
PREFIX : <http://example.org/ns#>
SELECT *
{ :p :q :r OPTIONAL { :a :b :c }
:p :q :r OPTIONAL { :a :b :c }
}
EOF
## Syntactic sugar
N=0
## Lists (RDF collections)
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lists-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT * WHERE { ( ?x ) :p ?z }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lists-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT * WHERE { ?x :p ( ?z ) }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lists-" $N) <<EOF
SELECT * WHERE { ( ?z ) }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lists-" $N) <<EOF
SELECT * WHERE { ( ( ?z ) ) }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-lists-" $N) <<EOF
SELECT * WHERE { ( ( ) ) }
EOF
## BlankNodes
N=0
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-bnodes-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT * WHERE { [:p :q ] }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-bnodes-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT * WHERE { [] :p :q }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-bnodes-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT * WHERE { [ ?x ?y ] :p [ ?pa ?b ] }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-bnodes-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
WHERE { [ :p :q ; ] }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-bnodes-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
WHERE { _:a :p1 :q1 .
_:a :p2 :q2 .
}
EOF
## Mixed forms
N=0
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-forms-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT * WHERE { ( [ ?x ?y ] ) :p ( [ ?pa ?b ] 57 ) }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-forms-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT * WHERE { ( [] [] ) }
EOF
## Optional
N=0
## Union
N=0
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-union-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
{
{ ?s ?p ?o } UNION { ?a ?b ?c }
}
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-union-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
{
{ ?s ?p ?o } UNION { ?a ?b ?c } UNION { ?r ?s ?t }
}
EOF
## Graph
N=0
## Expressions
N=0
## No longer legal
## N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-expr-" $N) <<EOF
## SELECT *
## WHERE { ?s ?p ?o . FILTER ?o }
## EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-expr-" $N) <<EOF
SELECT *
WHERE { ?s ?p ?o . FILTER (?o) }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-expr-" $N) <<EOF
SELECT *
WHERE { ?s ?p ?o . FILTER REGEX(?o, "foo") }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-expr-" $N) <<EOF
SELECT *
WHERE { ?s ?p ?o . FILTER REGEX(?o, "foo", "i") }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-expr-" $N) <<EOF
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT *
WHERE { ?s ?p ?o . FILTER xsd:integer(?o) }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-expr-" $N) <<EOF
PREFIX : <http://example.org/ns#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT *
WHERE { ?s ?p ?o . FILTER :myFunc(?s,?o) }
EOF
## ORDER BY, LIMIT, OFFSET
N=0
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-order-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
{ ?s ?p ?o }
ORDER BY ?o
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-order-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
{ ?s ?p ?o }
ORDER BY (?o+5)
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-order-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
{ ?s ?p ?o }
ORDER BY ASC(?o)
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-order-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
{ ?s ?p ?o }
ORDER BY DESC(?o)
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-order-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
{ ?s ?p ?o }
ORDER BY DESC(:func(?s, ?o))
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-order-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
{ ?s ?p ?o }
ORDER BY
DESC(?o+57) :func2(?o) ASC(?s)
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-order-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
{ ?s ?p ?o }
ORDER BY str(?o)
EOF
## Limit and offset
N=0
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-limit-offset-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
{ ?s ?p ?o }
ORDER BY ?o
LIMIT 5
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-limit-offset-" $N) <<EOF
# LIMIT and OFFSET can be in either order
PREFIX : <http://example.org/ns#>
SELECT *
{ ?s ?p ?o }
ORDER BY ?o
LIMIT 5
OFFSET 3
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-limit-offset-" $N) <<EOF
# LIMIT and OFFSET can be in either order
PREFIX : <http://example.org/ns#>
SELECT *
{ ?s ?p ?o }
ORDER BY ?o
OFFSET 3
LIMIT 5
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-limit-offset-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
{ ?s ?p ?o }
ORDER BY ?o
OFFSET 3
EOF
## Pattern syntax : DOTs
N=0
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-pat-" $N) <<EOF
PREFIX : <http://example.org/ns#>
SELECT *
{ }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-pat-" $N) <<EOF
# No DOT after optional
PREFIX : <http://example.org/ns#>
SELECT *
{ ?a :b :c OPTIONAL{:x :y :z} :x ?y ?z }
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-pat-" $N) <<EOF
# No DOT between non-triples patterns
PREFIX : <http://example.org/ns#>
SELECT *
{ ?a :b :c
OPTIONAL{:x :y :z}
{ :x1 :y1 :z1 } UNION { :x2 :y2 :z2 }
}
EOF
N=$((N+1)) ; testGood $SPARQL10 $(fname "syntax-pat-" $N) <<EOF
# No DOT between non-triples patterns
PREFIX : <http://example.org/ns#>
SELECT *
{
OPTIONAL{:x :y :z}
?a :b :c
{ :x1 :y1 :z1 } UNION { :x2 :y2 :z2 }
}
EOF