DAWG Test Suite for SPOCQ
by
ARQ proposed a standard textual notation for abstract SPARQL algebra expressions, which it calls ‘symbolic SPARQL expressions’ (SSEs). The documentation describes expressions which are compatible with Lisp’s S-expressions and, given appropriate reader and printer support, can serve as the externalization for a model of abstract SPARQL algebra expressions represented as simple lists.
This approach has proven invaluable to the development of Dydra’s SPOCQ query engine. In the early phases, expositions in the literature on SPARQL 1.0 semantics made it relatively easy to implement the query processor in terms of a small collection of Lisp macros which constituted an operational semantics for SPARQL.
As the work progressed towards support for SPARQL 1.1, this abstract algebra model and the SSE notation made it easier to comprehend the intent of the W3C specification and to verify the query processor’s performance against the Data Access Working Group’s evolving test suite.
In order to document this aspect of our implementation, we have translated the query expressions from the original SPARQL form into SSEs and present them here for reference. We also record and publish our latest DAWG conformance test results here:
SPARQL 1.0
algebra
- filter-nested-1(.rq)
- filter-nested-2(.rq)
- filter-placement-1(.rq)
- filter-placement-2(.rq)
- filter-placement-3(.rq)
- filter-scope-1(.rq)
- join-combo-1(.rq)
- join-combo-2(.rq)
- opt-filter-1(.rq)
- opt-filter-2(.rq)
- opt-filter-3(.rq)
- two-nested-opt-alt(.rq)
- two-nested-opt(.rq)
- var-scope-join-1(.rq)
ask
basic
- base-prefix-1(.rq)
- base-prefix-2(.rq)
- base-prefix-3(.rq)
- base-prefix-4(.rq)
- base-prefix-5(.rq)
- bgp-no-match(.rq)
- list-1(.rq)
- list-2(.rq)
- list-3(.rq)
- list-4(.rq)
- prefix-name-1(.rq)
- quotes-1(.rq)
- quotes-2(.rq)
- quotes-3(.rq)
- quotes-4(.rq)
- spoo-1(.rq)
- term-1(.rq)
- term-2(.rq)
- term-3(.rq)
- term-4(.rq)
- term-5(.rq)
- term-6(.rq)
- term-7(.rq)
- term-8(.rq)
- term-9(.rq)
- var-1(.rq)
- var-2(.rq)
bnode-coreference
boolean-effective-value
- query-bev-1(.rq)
- query-bev-2(.rq)
- query-bev-3(.rq)
- query-bev-4(.rq)
- query-bev-5(.rq)
- query-bev-6(.rq)
- query-boolean-literal(.rq)
bound
cast
construct
- query-construct-optional(.rq)
- query-ident(.rq)
- query-reif-1(.rq)
- query-reif-2(.rq)
- query-subgraph(.rq)
dataset
- dataset-01(.rq)
- dataset-02(.rq)
- dataset-03(.rq)
- dataset-04(.rq)
- dataset-05(.rq)
- dataset-06(.rq)
- dataset-07(.rq)
- dataset-08(.rq)
- dataset-09(.rq)
- dataset-09b(.rq)
- dataset-10(.rq)
- dataset-10b(.rq)
- dataset-11(.rq)
- dataset-12(.rq)
- dataset-12b(.rq)
distinct
expr-builtin
- lang-case-sensitivity-eq(.rq)
- lang-case-sensitivity-ne(.rq)
- q-blank-1(.rq)
- q-datatype-1(.rq)
- q-datatype-2(.rq)
- q-datatype-3(.rq)
- q-iri-1(.rq)
- q-isliteral-1(.rq)
- q-lang-1(.rq)
- q-lang-2(.rq)
- q-lang-3(.rq)
- q-langMatches-1(.rq)
- q-langMatches-2(.rq)
- q-langMatches-3(.rq)
- q-langMatches-4(.rq)
- q-langMatches-de-de(.rq)
- q-str-1(.rq)
- q-str-2(.rq)
- q-str-3(.rq)
- q-str-4(.rq)
- q-uri-1(.rq)
- sameTerm-eq(.rq)
- sameTerm-not-eq(.rq)
- sameTerm(.rq)
expr-equals
- query-eq-1(.rq)
- query-eq-2(.rq)
- query-eq-3(.rq)
- query-eq-4(.rq)
- query-eq-5(.rq)
- query-eq-graph-1(.rq)
- query-eq-graph-2(.rq)
- query-eq-graph-3(.rq)
- query-eq-graph-4(.rq)
- query-eq-graph-5(.rq)
- query-eq2-1(.rq)
- query-eq2-2(.rq)
- query-eq2-graph-1(.rq)
expr-ops
- query-ge-1(.rq)
- query-le-1(.rq)
- query-minus-1(.rq)
- query-mul-1(.rq)
- query-plus-1(.rq)
- query-unminus-1(.rq)
- query-unplus-1(.rq)
graph
- graph-01(.rq)
- graph-02(.rq)
- graph-03(.rq)
- graph-04(.rq)
- graph-05(.rq)
- graph-06(.rq)
- graph-07(.rq)
- graph-08(.rq)
- graph-09(.rq)
- graph-10(.rq)
- graph-11(.rq)
i18n
open-world
- date-1(.rq)
- date-2(.rq)
- date-3(.rq)
- date-4(.rq)
- open-cmp-01(.rq)
- open-cmp-02(.rq)
- open-eq-01(.rq)
- open-eq-02(.rq)
- open-eq-03(.rq)
- open-eq-04(.rq)
- open-eq-05(.rq)
- open-eq-06(.rq)
- open-eq-07(.rq)
- open-eq-08(.rq)
- open-eq-09(.rq)
- open-eq-10(.rq)
- open-eq-11(.rq)
- open-eq-12(.rq)
optional
- q-opt-1(.rq)
- q-opt-2(.rq)
- q-opt-3(.rq)
- q-opt-complex-1(.rq)
- q-opt-complex-2(.rq)
- q-opt-complex-3(.rq)
- q-opt-complex-4(.rq)
optional-filter
reduced
regex
solution-seq
- slice-01(.rq)
- slice-02(.rq)
- slice-03(.rq)
- slice-04(.rq)
- slice-10(.rq)
- slice-11(.rq)
- slice-12(.rq)
- slice-13(.rq)
- slice-20(.rq)
- slice-21(.rq)
- slice-22(.rq)
- slice-23(.rq)
- slice-24(.rq)
sort
- query-sort-1(.rq)
- query-sort-10(.rq)
- query-sort-2(.rq)
- query-sort-3(.rq)
- query-sort-4(.rq)
- query-sort-5(.rq)
- query-sort-6(.rq)
- query-sort-9(.rq)
- query-sort-builtin(.rq)
- query-sort-function(.rq)
- query-sort-numbers(.rq)
syntax-sparql1
- syntax-basic-01(.rq)
- syntax-basic-02(.rq)
- syntax-basic-03(.rq)
- syntax-basic-04(.rq)
- syntax-basic-05(.rq)
- syntax-basic-06(.rq)
- syntax-bnodes-01(.rq)
- syntax-bnodes-02(.rq)
- syntax-bnodes-03(.rq)
- syntax-bnodes-04(.rq)
- syntax-bnodes-05(.rq)
- syntax-expr-01(.rq)
- syntax-expr-02(.rq)
- syntax-expr-03(.rq)
- syntax-expr-04(.rq)
- syntax-expr-05(.rq)
- syntax-forms-01(.rq)
- syntax-forms-02(.rq)
- syntax-limit-offset-01(.rq)
- syntax-limit-offset-02(.rq)
- syntax-limit-offset-03(.rq)
- syntax-limit-offset-04(.rq)
- syntax-lists-01(.rq)
- syntax-lists-02(.rq)
- syntax-lists-03(.rq)
- syntax-lists-04(.rq)
- syntax-lists-05(.rq)
- syntax-lit-01(.rq)
- syntax-lit-02(.rq)
- syntax-lit-03(.rq)
- syntax-lit-04(.rq)
- syntax-lit-05(.rq)
- syntax-lit-06(.rq)
- syntax-lit-07(.rq)
- syntax-lit-08(.rq)
- syntax-lit-09(.rq)
- syntax-lit-10(.rq)
- syntax-lit-11(.rq)
- syntax-lit-12(.rq)
- syntax-lit-13(.rq)
- syntax-lit-14(.rq)
- syntax-lit-15(.rq)
- syntax-lit-16(.rq)
- syntax-lit-17(.rq)
- syntax-lit-18(.rq)
- syntax-lit-19(.rq)
- syntax-lit-20(.rq)
- syntax-order-01(.rq)
- syntax-order-02(.rq)
- syntax-order-03(.rq)
- syntax-order-04(.rq)
- syntax-order-05(.rq)
- syntax-order-06(.rq)
- syntax-order-07(.rq)
- syntax-pat-01(.rq)
- syntax-pat-02(.rq)
- syntax-pat-03(.rq)
- syntax-pat-04(.rq)
- syntax-qname-01(.rq)
- syntax-qname-02(.rq)
- syntax-qname-03(.rq)
- syntax-qname-04(.rq)
- syntax-qname-05(.rq)
- syntax-qname-06(.rq)
- syntax-qname-07(.rq)
- syntax-qname-08(.rq)
- syntax-struct-01(.rq)
- syntax-struct-02(.rq)
- syntax-struct-03(.rq)
- syntax-struct-05(.rq)
- syntax-struct-06(.rq)
- syntax-struct-07(.rq)
- syntax-struct-08(.rq)
- syntax-struct-09(.rq)
- syntax-struct-10(.rq)
- syntax-struct-11(.rq)
- syntax-struct-12(.rq)
- syntax-struct-13(.rq)
- syntax-struct-14(.rq)
- syntax-union-01(.rq)
- syntax-union-02(.rq)
syntax-sparql2
- syntax-bnode-01(.rq)
- syntax-bnode-02(.rq)
- syntax-bnode-03(.rq)
- syntax-dataset-01(.rq)
- syntax-dataset-02(.rq)
- syntax-dataset-03(.rq)
- syntax-dataset-04(.rq)
- syntax-esc-01(.rq)
- syntax-esc-02(.rq)
- syntax-esc-03(.rq)
- syntax-esc-04(.rq)
- syntax-esc-05(.rq)
- syntax-form-ask-02(.rq)
- syntax-form-construct01(.rq)
- syntax-form-construct02(.rq)
- syntax-form-construct03(.rq)
- syntax-form-construct04(.rq)
- syntax-form-construct06(.rq)
- syntax-form-describe01(.rq)
- syntax-form-describe02(.rq)
- syntax-form-select-01(.rq)
- syntax-form-select-02(.rq)
- syntax-function-01(.rq)
- syntax-function-02(.rq)
- syntax-function-03(.rq)
- syntax-function-04(.rq)
- syntax-general-01(.rq)
- syntax-general-02(.rq)
- syntax-general-03(.rq)
- syntax-general-04(.rq)
- syntax-general-05(.rq)
- syntax-general-06(.rq)
- syntax-general-07(.rq)
- syntax-general-08(.rq)
- syntax-general-09(.rq)
- syntax-general-10(.rq)
- syntax-general-11(.rq)
- syntax-general-12(.rq)
- syntax-general-13(.rq)
- syntax-general-14(.rq)
- syntax-graph-01(.rq)
- syntax-graph-02(.rq)
- syntax-graph-03(.rq)
- syntax-graph-04(.rq)
- syntax-graph-05(.rq)
- syntax-keywords-01(.rq)
- syntax-keywords-02(.rq)
- syntax-keywords-03(.rq)
- syntax-lists-01(.rq)
- syntax-lists-02(.rq)
- syntax-lists-03(.rq)
- syntax-lists-04(.rq)
- syntax-lists-05(.rq)
syntax-sparql3
- syn-01(.rq)
- syn-02(.rq)
- syn-03(.rq)
- syn-04(.rq)
- syn-05(.rq)
- syn-06(.rq)
- syn-07(.rq)
- syn-08(.rq)
- syn-blabel-cross-filter(.rq)
- syn-blabel-cross-graph-bad(.rq)
- syn-blabel-cross-optional-bad(.rq)
- syn-blabel-cross-union-bad(.rq)
syntax-sparql4
syntax-sparql5
triple-match
type-promotion
- tP-byte-short-fail(.rq)
- tP-byte-short(.rq)
- tP-decimal-decimal(.rq)
- tP-double-decimal-fail(.rq)
- tP-double-decimal(.rq)
- tP-double-double(.rq)
- tP-double-float-fail(.rq)
- tP-double-float(.rq)
- tP-float-decimal-fail(.rq)
- tP-float-decimal(.rq)
- tP-float-float(.rq)
- tP-int-short(.rq)
- tP-integer-short(.rq)
- tP-long-short(.rq)
- tP-negativeInteger-short(.rq)
- tP-nonNegativeInteger-short(.rq)
- tP-nonPositiveInteger-short(.rq)
- tP-positiveInteger-short(.rq)
- tP-short-byte-fail(.rq)
- tP-short-decimal(.rq)
- tP-short-double(.rq)
- tP-short-float(.rq)
- tP-short-int-fail(.rq)
- tP-short-long-fail(.rq)
- tP-short-short-fail(.rq)
- tP-short-short(.rq)
- tP-unsignedByte-short(.rq)
- tP-unsignedInt-short(.rq)
- tP-unsignedLong-short(.rq)
- tP-unsignedShort-short(.rq)
SPARQL 1.1
aggregates
- agg-avg-01(.rq)
- agg-avg-02(.rq)
- agg-groupconcat-1(.rq)
- agg-groupconcat-2(.rq)
- agg-groupconcat-3(.rq)
- agg-max-01(.rq)
- agg-max-02(.rq)
- agg-min-01(.rq)
- agg-min-02(.rq)
- agg-sample-01(.rq)
- agg-sum-01(.rq)
- agg-sum-02(.rq)
- agg01(.rq)
- agg02(.rq)
- agg03(.rq)
- agg04(.rq)
- agg05(.rq)
- agg06(.rq)
- agg07(.rq)
- agg08(.rq)
- agg08b(.rq)
- agg09(.rq)
- agg10(.rq)
- agg11(.rq)
- agg12(.rq)
basic-update
- insert-01(.ru)
- insert-02(.ru)
- insert-03(.ru)
- insert-04(.ru)
- insert-data-named1(.rq)
- insert-data-named2(.rq)
- insert-data-spo1(.rq)
- insert-using-01(.ru)
bind
bindings
- bindings01(.rq)
- bindings02(.rq)
- bindings03(.rq)
- bindings04(.rq)
- bindings05(.rq)
- bindings06(.rq)
- bindings07(.rq)
- bindings08(.rq)
clear
construct
delete
- delete-01(.ru)
- delete-02(.ru)
- delete-03(.ru)
- delete-04(.ru)
- delete-05(.ru)
- delete-06(.ru)
- delete-07(.ru)
- delete-using-01(.ru)
- delete-using-02(.ru)
- delete-using-03(.ru)
- delete-using-04(.ru)
- delete-using-05(.ru)
- delete-using-06(.ru)
- delete-with-01(.ru)
- delete-with-02(.ru)
- delete-with-03(.ru)
- delete-with-04(.ru)
- delete-with-05(.ru)
- delete-with-06(.ru)
delete-data
- delete-data-01(.ru)
- delete-data-02(.ru)
- delete-data-03(.ru)
- delete-data-04(.ru)
- delete-data-05(.ru)
- delete-data-06(.ru)
delete-insert
- delete-insert-01(.ru)
- delete-insert-01b(.ru)
- delete-insert-01c(.ru)
- delete-insert-02(.ru)
- delete-insert-04(.ru)
- delete-insert-04b(.ru)
- delete-insert-05b(.ru)
delete-where
- delete-where-01(.ru)
- delete-where-02(.ru)
- delete-where-03(.ru)
- delete-where-04(.ru)
- delete-where-05(.ru)
- delete-where-06(.ru)
drop
entailment
- bind01(.rq)
- bind02(.rq)
- bind03(.rq)
- bind04(.rq)
- bind05(.rq)
- bind06(.rq)
- bind07(.rq)
- bind08(.rq)
- d-ent-01(.rq)
- lang(.rq)
- owlds01(.rq)
- owlds02(.rq)
- rdf01(.rq)
- rdf02(.rq)
- rdf03(.rq)
- rdf04(.rq)
- rdfs01(.rq)
- rdfs02(.rq)
- rdfs03(.rq)
- rdfs04(.rq)
- rdfs05(.rq)
- rdfs06(.rq)
- rdfs07(.rq)
- rdfs08(.rq)
- rdfs09(.rq)
- rdfs10(.rq)
- rdfs11(.rq)
- rdfs12(.rq)
- rdfs13(.rq)
functions
- abs01(.rq)
- bnode01(.rq)
- bnode02(.rq)
- ceil01(.rq)
- concat01(.rq)
- concat02(.rq)
- contains01(.rq)
- day-01(.rq)
- encode01(.rq)
- ends01(.rq)
- floor01(.rq)
- hours-01(.rq)
- in01(.rq)
- in02(.rq)
- iri01(.rq)
- isnumeric01(.rq)
- lcase01(.rq)
- length01(.rq)
- md5-01(.rq)
- md5-02(.rq)
- minutes-01(.rq)
- month-01(.rq)
- notin02(.rq)
- now01(.rq)
- plus-1(.rq)
- plus-2(.rq)
- rand01(.rq)
- round01(.rq)
- seconds-01(.rq)
- sha1-01(.rq)
- sha224-01(.rq)
- sha256-01(.rq)
- sha384-01(.rq)
- sha512-01(.rq)
- starts01(.rq)
- strdt01(.rq)
- strdt02(.rq)
- strdt03(.rq)
- strlang01(.rq)
- strlang02(.rq)
- strlang03(.rq)
- substring01(.rq)
- substring02(.rq)
- timezone-01(.rq)
- tz-01(.rq)
- ucase01(.rq)
- year-01(.rq)
grouping
json-res
negation
- set-equals-1(.rq)
- subset-01(.rq)
- subset-02(.rq)
- subset-03(.rq)
- subsetByExcl01(.rq)
- subsetByExcl02(.rq)
- temporalProximity01(.rq)
project-expression
- projexp01(.rq)
- projexp02(.rq)
- projexp03(.rq)
- projexp04(.rq)
- projexp05(.rq)
- projexp06(.rq)
- projexp07(.rq)
property-path
- path-2-1(.rq)
- path-2-2(.rq)
- path-2-3(.rq)
- path-3-1(.rq)
- path-3-2(.rq)
- path-3-3(.rq)
- path-3-4(.rq)
- path-ng-01(.rq)
- path-ng-02(.rq)
- path-p1(.rq)
- path-p2(.rq)
- path-p3(.rq)
- path-p4(.rq)
- pp01(.rq)
- pp02(.rq)
- pp03(.rq)
- pp04(.rq)
- pp05(.rq)
- pp06(.rq)
- pp08(.rq)
- pp09(.rq)
- pp10(.rq)
- pp11(.rq)
- pp12(.rq)
- pp13(.rq)
- pp14(.rq)
- pp15(.rq)
subquery
- sq01(.rq)
- sq02(.rq)
- sq03(.rq)
- sq04(.rq)
- sq05(.rq)
- sq06(.rq)
- sq07(.rq)
- sq08(.rq)
- sq09(.rq)
- sq10(.rq)
- sq11(.rq)
- sq12(.rq)
- sq13(.rq)
syntax-query
- syntax-aggregate-01(.rq)
- syntax-aggregate-02(.rq)
- syntax-aggregate-03(.rq)
- syntax-aggregate-04(.rq)
- syntax-aggregate-05(.rq)
- syntax-aggregate-06(.rq)
- syntax-aggregate-07(.rq)
- syntax-aggregate-08(.rq)
- syntax-aggregate-09(.rq)
- syntax-aggregate-10(.rq)
- syntax-aggregate-11(.rq)
- syntax-aggregate-12(.rq)
- syntax-aggregate-13(.rq)
- syntax-aggregate-14(.rq)
- syntax-aggregate-15(.rq)
- syntax-bind-02(.rq)
- syntax-bindings-01(.rq)
- syntax-bindings-02(.rq)
- syntax-bindings-03(.rq)
- syntax-bindings-04(.rq)
- syntax-bindings-05(.rq)
- syntax-bindings-09(.rq)
- syntax-construct-where-01(.rq)
- syntax-construct-where-02(.rq)
- syntax-exists-01(.rq)
- syntax-exists-02(.rq)
- syntax-exists-03(.rq)
- syntax-minus-01(.rq)
- syntax-not-exists-01(.rq)
- syntax-not-exists-02(.rq)
- syntax-not-exists-03(.rq)
- syntax-oneof-01(.rq)
- syntax-oneof-02(.rq)
- syntax-oneof-03(.rq)
- syntax-select-expr-01(.rq)
- syntax-select-expr-02(.rq)
- syntax-select-expr-03(.rq)
- syntax-select-expr-04(.rq)
- syntax-select-expr-05(.rq)
- syntax-subquery-01(.rq)
- syntax-subquery-02(.rq)
- syntax-subquery-03(.rq)
syntax-update-1
- syntax-update-01(.ru)
- syntax-update-02(.ru)
- syntax-update-03(.ru)
- syntax-update-04(.ru)
- syntax-update-05(.ru)
- syntax-update-06(.ru)
- syntax-update-07(.ru)
- syntax-update-08(.ru)
- syntax-update-09(.ru)
- syntax-update-10(.ru)
- syntax-update-11(.ru)
- syntax-update-12(.ru)
- syntax-update-13(.ru)
- syntax-update-14(.ru)
- syntax-update-15(.ru)
- syntax-update-16(.ru)
- syntax-update-17(.ru)
- syntax-update-18(.ru)
- syntax-update-19(.ru)
- syntax-update-20(.ru)
- syntax-update-21(.ru)
- syntax-update-22(.ru)
- syntax-update-23(.ru)
- syntax-update-24(.ru)
- syntax-update-25(.ru)
- syntax-update-26(.ru)
- syntax-update-27(.ru)
- syntax-update-28(.ru)
- syntax-update-29(.ru)
- syntax-update-30(.ru)
- syntax-update-31(.ru)
- syntax-update-32(.ru)
- syntax-update-33(.ru)
- syntax-update-34(.ru)
- syntax-update-35(.ru)
- syntax-update-36(.ru)
- syntax-update-37(.ru)