- From: Seaborne, Andy <andy.seaborne@hp.com>
- Date: Mon, 20 Sep 2004 17:41:00 +0100
- To: "RDF Data Access Working Group" <public-rdf-dawg@w3.org>
- Message-ID: <8D5B24B83C6A2E4B9E7EE5FA82627DC920E450@sdcexcea01.emea.cpqcorp.net>
I have done a first attempt at a grammar that parses the outline syntax
from the F2F.
It parses the example query. There is also a rather long query below
that exhibits most features at the end.
The grammar is more general than the example:
+ Has OPTIONAL as well as [] for optionals
+ Has grouping by () - this allows blocks after "SOURCE ?src"
One issue arose:
SOURCE ?src (?x ?y ?z) AND ?z < 2
Does the AND apply to the inner SOURCE triple
e.g. is it:
( SOURCE ?src (?x ?y ?z) ) AND ?z < 2
or
SOURCE ?src ( (?x ?y ?z) AND ?z < 2 )
Because SOURCE is a conjunctive element, the answer is the same even
though the parse trees are different. I hope!
Attached is an HTML file mechanically produced by jjdoc.
Terminals can be found in the full grammar.
Full details, including terminals in:
http://cvs.sourceforge.net/viewcvs.py/jena/BRQL/Grammar/dawg.jj?rev=1.5
but do check for the latest version. It takes a while for the web
interface to catch up with the true state of CVS.
Andy
---------------------------------------------------------
The example query was:
# Query from Bristol-F2F
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name1 ?name2 ?hpage2
WHERE
(?x foaf:knows ?y)
SOURCE <http:D2> (?x foaf:age ?n)
(?x foaf:age ?n)
AND ?n < 18
(?x foaf:name ?name1 )
SOURCE <http:D2> (?x foaf:status ?status)
SOURCE ?src (?x foaf:status1 ?status1)
SOURCE ?src (?x foaf:status2 ?status2)
[ ( ?y foaf:name ?name2 )
( ?y foaf:age ?m)
AND ?m < 18
]
---------------------------------------------------------
A long, and silly, query would be:
PREFIX : <http://example.org/>
SELECT *
WHERE
(?x ?y ?z) (?a ?b ?c)
# Optional, [] syntax
[ (?x ?y ?z) ]
[ (?x ?y ?z) AND ?z < 2 ]
[ (?x ?y ?z) (?x ?y ?z) ]
[ (?x ?y ?z) (?x ?y ?z) AND ?z < 2 ]
[ (?x ?y ?z) [ (?x ?y ?z) ] ]
# OPTIONAL keyword
OPTIONAL (?x ?y ?z)
OPTIONAL ( (?x ?y ?z) (?x ?y ?z) AND ?z < 2 )
# SOURCE
SOURCE ?src (?x ?y ?z)
SOURCE ?src ( (?x ?y ?z) (?a ?b ?c) )
# Careful - AND does not bind to the SOURCE pattern
SOURCE ?src (?x ?y ?z) AND ?z < 2
# It parses like (adding explicit grouping for clarity:)
( ( SOURCE ?src (?x ?y ?z) ) AND ?z < 2 )
# Not as:
SOURCE ?src ( (?x ?y ?z) AND ?z < 2 )
# SOURCE/OPTIONAL mix
SOURCE ?src [ (?x ?y ?z) ]
[ SOURCE ?src (?x ?y ?z) ]
OPTIONAL ( (?x ?y ?z) SOURCE ?src ( :x :y :z ) )
OPTIONAL ( (?x ?y ?z) OPTIONAL ( ( :x :y :z ) ) )
Attachments
- text/html attachment: dawg.html
Received on Monday, 20 September 2004 16:41:33 UTC