📄 syn-sparql.sh
字号:
#!/bin/bash# Query syntax examplesfunction fname{ R="$1" N="$2" E="$3" [ "$E" = "" ] && E="rq" echo $(printf "$R%02d.$E" $N)}## BasicN=0N=$((N+1)) ; testGood $(fname "syntax-basic-" $N) <<EOFSELECT *WHERE { }EOFN=$((N+1)) ; testGood $(fname "syntax-basic-" $N) <<EOFSELECT * {}EOFN=$((N+1)) ; testGood $(fname "syntax-basic-" $N) <<EOF# No trailing dotPREFIX : <http://example.org/ns#> SELECT *WHERE { ?x ?y ?z }EOFN=$((N+1)) ; testGood $(fname "syntax-basic-" $N) <<EOF# With trailing dotSELECT *WHERE { ?x ?y ?z . }EOFN=$((N+1)) ; testGood $(fname "syntax-basic-" $N) <<EOF# Two triples : no trailing dotSELECT *WHERE { ?x ?y ?z . ?a ?b ?c }EOFN=$((N+1)) ; testGood $(fname "syntax-basic-" $N) <<EOF# Two triples : with trailing dotSELECT *WHERE { ?x ?y ?z . ?a ?b ?c . }EOF## QNamesN=0N=$((N+1)) ; testGood $(fname "syntax-qname-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT *{ ?x :p ?z }EOFN=$((N+1)) ; testGood $(fname "syntax-qname-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT *WHERE { :x :p :z . }EOFN=$((N+1)) ; testGood $(fname "syntax-qname-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT *WHERE { :_1 :p.rdf :z.z . }EOFN=$((N+1)) ; testGood $(fname "syntax-qname-" $N) <<EOFPREFIX : <http://example.org/ns#> PREFIX a: <http://example.org/ns2#> SELECT *WHERE { : a: :a . : : : . }EOFN=$((N+1)) ; testGood $(fname "syntax-qname-" $N) <<EOFPREFIX : <> SELECT *WHERE { : : : . }EOFN=$((N+1)) ; testGood $(fname "syntax-qname-" $N) <<EOFPREFIX : <#> SELECT *WHERE { : : : . }EOFN=$((N+1)) ; testGood $(fname "syntax-qname-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT *WHERE { : : : . }EOFN=$((N+1)) ; testGood $(fname "syntax-qname-" $N) <<EOFBASE <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## LiteralsN=0N=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p "x" }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p 'x' }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p "x\\"y'z" }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p 'x"y\\'z' }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p "x\\"" }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p 'x\\'' }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p 123 }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p 123. . }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p """Long""Literal""" }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p '''Long'' """Literal''' }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p """Long""\\"Literal""" }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p '''Long''\\'Literal''' }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p """Long\\"""Literal""" }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p '''Long\\'''Literal''' }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p '''Long '' Literal''' }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p '''Long ' Literal''' }EOF# Escapes after quotesN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p '''Long''\\\\Literal with '\\\\ single quotes ''' }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p """Long "" Literal""" }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p """Long " Literal""" }EOFN=$((N+1)) ; testGood $(fname "syntax-lit-" $N) <<EOFBASE <http://example.org/>PREFIX : <#> SELECT * WHERE { :x :p """Long""\\\\Literal with "\\\\ single quotes""" }EOF## StructureN=0N=$((N+1)) ; testGood $(fname "syntax-struct-" $N) <<EOF# OperatorPREFIX : <http://example.org/ns#> SELECT *{ OPTIONAL { } }EOFN=$((N+1)) ; testGood $(fname "syntax-struct-" $N) <<EOF# OperatorPREFIX : <http://example.org/ns#> SELECT *{ OPTIONAL { :a :b :c } }EOFN=$((N+1)) ; testGood $(fname "syntax-struct-" $N) <<EOF# Triple, no DOT, operatorPREFIX : <http://example.org/ns#> SELECT *{ :p :q :r OPTIONAL { :a :b :c } }EOF# Duplicate - skip## N=$((N+1)) ; testGood $(fname "syntax-struct-" $N) <<EOF## # Triple, DOT, operator## PREFIX : <http://example.org/ns#> ## SELECT *## { :p :q :r . OPTIONAL { :a :b :c } }## EOFN=$((N+1))N=$((N+1)) ; testGood $(fname "syntax-struct-" $N) <<EOF# Triple, DOT, operatorPREFIX : <http://example.org/ns#> SELECT *{ :p :q :r . OPTIONAL { :a :b :c } }EOFN=$((N+1)) ; testGood $(fname "syntax-struct-" $N) <<EOF# Triple, DOT, operator, DOTPREFIX : <http://example.org/ns#> SELECT *{ :p :q :r . OPTIONAL { :a :b :c } . }EOFN=$((N+1)) ; testGood $(fname "syntax-struct-" $N) <<EOF# Operator, no DOTPREFIX : <http://example.org/ns#> SELECT *{ OPTIONAL { :a :b :c } }EOFN=$((N+1)) ; testGood $(fname "syntax-struct-" $N) <<EOF# Operator, DOTPREFIX : <http://example.org/ns#> SELECT *{ OPTIONAL { :a :b :c } . }EOFN=$((N+1)) ; testGood $(fname "syntax-struct-" $N) <<EOF# Operator, triplePREFIX : <http://example.org/ns#> SELECT *{ OPTIONAL { :a :b :c } ?x ?y ?z }EOFN=$((N+1)) ; testGood $(fname "syntax-struct-" $N) <<EOF# Operator, DOT triplePREFIX : <http://example.org/ns#> SELECT *{ OPTIONAL { :a :b :c } . ?x ?y ?z }EOFN=$((N+1)) ; testGood $(fname "syntax-struct-" $N) <<EOF# Triple, semi, operatorPREFIX : <http://example.org/ns#>SELECT *{ :p :q :r ; OPTIONAL { :a :b :c } }EOFN=$((N+1)) ; testGood $(fname "syntax-struct-" $N) <<EOF# Triple, semi, DOT, operatorPREFIX : <http://example.org/ns#>SELECT *{ :p :q :r ; . OPTIONAL { :a :b :c } }EOFN=$((N+1)) ; testGood $(fname "syntax-struct-" $N) <<EOF# Two elements in the groupPREFIX : <http://example.org/ns#>SELECT *{ :p :q :r . OPTIONAL { :a :b :c } :p :q :r . OPTIONAL { :a :b :c } }EOFN=$((N+1)) ; testGood $(fname "syntax-struct-" $N) <<EOF# Two elements in the groupPREFIX : <http://example.org/ns#>SELECT *{ :p :q :r OPTIONAL { :a :b :c } :p :q :r OPTIONAL { :a :b :c } }EOF## Syntactic sugarN=0## Lists (RDF collections)N=$((N+1)) ; testGood $(fname "syntax-lists-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT * WHERE { ( ?x ) :p ?z }EOFN=$((N+1)) ; testGood $(fname "syntax-lists-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT * WHERE { ?x :p ( ?z ) }EOFN=$((N+1)) ; testGood $(fname "syntax-lists-" $N) <<EOFSELECT * WHERE { ( ?z ) }EOFN=$((N+1)) ; testGood $(fname "syntax-lists-" $N) <<EOFSELECT * WHERE { ( ( ?z ) ) }EOFN=$((N+1)) ; testGood $(fname "syntax-lists-" $N) <<EOFSELECT * WHERE { ( ( ) ) }EOF## BlankNodesN=0N=$((N+1)) ; testGood $(fname "syntax-bnodes-" $N) <<EOFPREFIX : <http://example.org/ns#>SELECT * WHERE { [:p :q ] }EOFN=$((N+1)) ; testGood $(fname "syntax-bnodes-" $N) <<EOFPREFIX : <http://example.org/ns#>SELECT * WHERE { [] :p :q }EOFN=$((N+1)) ; testGood $(fname "syntax-bnodes-" $N) <<EOFPREFIX : <http://example.org/ns#>SELECT * WHERE { [ ?x ?y ] :p [ ?pa ?b ] }EOFN=$((N+1)) ; testGood $(fname "syntax-bnodes-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT *WHERE { [ :p :q ; ] }EOFN=$((N+1)) ; testGood $(fname "syntax-bnodes-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT *WHERE { _:a :p1 :q1 . _:a :p2 :q2 . }EOF## Mixed formsN=0N=$((N+1)) ; testGood $(fname "syntax-forms-" $N) <<EOFPREFIX : <http://example.org/ns#>SELECT * WHERE { ( [ ?x ?y ] ) :p ( [ ?pa ?b ] 57 ) }EOFN=$((N+1)) ; testGood $(fname "syntax-forms-" $N) <<EOFPREFIX : <http://example.org/ns#>SELECT * WHERE { ( [] [] ) }EOF## OptionalN=0## UnionN=0N=$((N+1)) ; testGood $(fname "syntax-union-" $N) <<EOFPREFIX : <http://example.org/ns#>SELECT *{ { ?s ?p ?o } UNION { ?a ?b ?c } }EOFN=$((N+1)) ; testGood $(fname "syntax-union-" $N) <<EOFPREFIX : <http://example.org/ns#>SELECT *{ { ?s ?p ?o } UNION { ?a ?b ?c } UNION { ?r ?s ?t }}EOF## GraphN=0## ExpressionsN=0## No longer legal## N=$((N+1)) ; testGood $(fname "syntax-expr-" $N) <<EOF## SELECT *## WHERE { ?s ?p ?o . FILTER ?o }## EOFN=$((N+1)) ; testGood $(fname "syntax-expr-" $N) <<EOFSELECT *WHERE { ?s ?p ?o . FILTER (?o) }EOFN=$((N+1)) ; testGood $(fname "syntax-expr-" $N) <<EOFSELECT *WHERE { ?s ?p ?o . FILTER REGEX(?o, "foo") }EOFN=$((N+1)) ; testGood $(fname "syntax-expr-" $N) <<EOFSELECT *WHERE { ?s ?p ?o . FILTER REGEX(?o, "foo", "i") }EOFN=$((N+1)) ; testGood $(fname "syntax-expr-" $N) <<EOFPREFIX xsd: <http://www.w3.org/2001/XMLSchema#>SELECT *WHERE { ?s ?p ?o . FILTER xsd:integer(?o) }EOFN=$((N+1)) ; testGood $(fname "syntax-expr-" $N) <<EOFPREFIX : <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, OFFSETN=0N=$((N+1)) ; testGood $(fname "syntax-order-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT *{ ?s ?p ?o }ORDER BY ?oEOFN=$((N+1)) ; testGood $(fname "syntax-order-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT *{ ?s ?p ?o }ORDER BY (?o+5)EOFN=$((N+1)) ; testGood $(fname "syntax-order-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT *{ ?s ?p ?o }ORDER BY ASC(?o)EOFN=$((N+1)) ; testGood $(fname "syntax-order-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT *{ ?s ?p ?o }ORDER BY DESC(?o)EOFN=$((N+1)) ; testGood $(fname "syntax-order-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT *{ ?s ?p ?o }ORDER BY DESC(:func(?s, ?o))EOFN=$((N+1)) ; testGood $(fname "syntax-order-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT *{ ?s ?p ?o }ORDER BY DESC(?o+57) :func2(?o) ASC(?s)EOFN=$((N+1)) ; testGood $(fname "syntax-order-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT *{ ?s ?p ?o }ORDER BY str(?o)EOF## Limit and offsetN=0N=$((N+1)) ; testGood $(fname "syntax-limit-offset-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT *{ ?s ?p ?o }ORDER BY ?oLIMIT 5EOFN=$((N+1)) ; testGood $(fname "syntax-limit-offset-" $N) <<EOF# LIMIT and OFFSET can be in either orderPREFIX : <http://example.org/ns#> SELECT *{ ?s ?p ?o }ORDER BY ?oLIMIT 5OFFSET 3EOFN=$((N+1)) ; testGood $(fname "syntax-limit-offset-" $N) <<EOF# LIMIT and OFFSET can be in either orderPREFIX : <http://example.org/ns#> SELECT *{ ?s ?p ?o }ORDER BY ?oOFFSET 3LIMIT 5EOFN=$((N+1)) ; testGood $(fname "syntax-limit-offset-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT *{ ?s ?p ?o }ORDER BY ?oOFFSET 3EOF## Pattern syntax : DOTsN=0N=$((N+1)) ; testGood $(fname "syntax-pat-" $N) <<EOFPREFIX : <http://example.org/ns#> SELECT *{ }EOFN=$((N+1)) ; testGood $(fname "syntax-pat-" $N) <<EOF# No DOT after optionalPREFIX : <http://example.org/ns#> SELECT *{ ?a :b :c OPTIONAL{:x :y :z} :x ?y ?z }EOFN=$((N+1)) ; testGood $(fname "syntax-pat-" $N) <<EOF# No DOT between non-triples patternsPREFIX : <http://example.org/ns#> SELECT *{ ?a :b :c OPTIONAL{:x :y :z} { :x1 :y1 :z1 } UNION { :x2 :y2 :z2 }}EOFN=$((N+1)) ; testGood $(fname "syntax-pat-" $N) <<EOF# No DOT between non-triples patternsPREFIX : <http://example.org/ns#> SELECT *{ OPTIONAL{:x :y :z} ?a :b :c { :x1 :y1 :z1 } UNION { :x2 :y2 :z2 }}EOF## ## Query pattern special## N=0## ## N=$((N+1)) ; testGood $(fname "syntax-query-pat-" $N) <<EOF## PREFIX : <http://example.org/ns#> ## SELECT *## WHERE## ?a ?b ?c## EOF## ## N=$((N+1)) ; testGood $(fname "syntax-query-pat-" $N) <<EOF## # No trailing DOT in a query pattern## PREFIX : <http://example.org/ns#> ## SELECT *## WHERE## :a :p ?x .## :x :p ?x .## :x :p ?x ; :q ?v## EOF## ## N=$((N+1)) ; testGood $(fname "syntax-query-pat-" $N) <<EOF## # Trailing DOT in a query pattern## PREFIX : <http://example.org/ns#> ## SELECT *## WHERE## :a :p ?x .## :x :p ?x .## :x :p ?x ; :q ?v .## EOF## ## N=$((N+1)) ; testGood $(fname "syntax-query-pat-" $N) <<EOF## PREFIX : <http://example.org/ns#> ## SELECT *## WHERE## ?a ?b ?c## LIMIT 5## EOF## ## N=$((N+1)) ; testGood $(fname "syntax-query-pat-" $N) <<EOF## PREFIX : <http://example.org/ns#> ## SELECT *## WHERE## ?a ?b ?c .## LIMIT 5## EOF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -