NAME
RDQL::Parser - A simple top-down LL(1) RDQL and SPARQL parser
SYNOPSIS
use
RDQL::Parser;
my
$parser
= RDQL::Parser->new();
my
$query
= <<QUERY;
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns
#>
PREFIX rss: <http://purl.org/rss/1.0/>
SELECT
?title ?
link
FROM
WHERE
(?item, rdf:type <rss:item>)
(?item, rss:title, ?title)
(?item, rss:
link
?
link
)
QUERY;
$parser
->parse(
$query
);
#parse the query
# I.e.
$parser
=
bless
( {
'distinct'
=> 0,
'constructPatterns'
=> [],
'prefixes'
=> {
},
'graphPatterns'
=> [
{
'constraints'
=> [],
'optional'
=> 0,
'triplePatterns'
=> [
[
0,
'?item'
,
'<rss:item>'
],
[
0,
'?item'
,
'?title'
],
[
0,
'?item'
,
'?link'
]
]
}
],
'sources'
=> [
],
'describes'
=> [],
'queryType'
=>
'SELECT'
,
'resultVars'
=> [
'?title'
,
'?link'
],
},
'RDQL::Parser'
);
$parser
->serialize(
*STDOUT
,
'N-Triples'
);
#print on STDOUT the RDQL query as N-Triples if possible (or an error)
DESCRIPTION
RDQL::Parser - A simple top-down LL(1) RDQL and SPARQL parser - see http://www.w3.org/TR/rdf-sparql-query/ and http://www.w3.org/Submission/2004/SUBM-RDQL-20040109/
CONSTRUCTORS
METHODS
- parse( PARSER, QUERY )
-
If
use
Data::Dumper(3) to actually dumpo out the content of the PARSER variable
after
invoching the parse() method it lokks like:
$VAR1
=
bless
( {
'distinct'
=> 0,
'constructPatterns'
=> [],
'prefixes'
=> {
},
'graphPatterns'
=> [
{
'constraints'
=> [],
'optional'
=> 0,
'triplePatterns'
=> [
[
0,
'?item'
,
'<rss:item>'
],
[
0,
'?item'
,
'?title'
],
[
0,
'?item'
,
'?link'
]
]
}
],
'sources'
=> [
],
'describes'
=> [],
'queryType'
=>
'SELECT'
,
'resultVars'
=> [
'?title'
,
'?link'
],
},
'RDQL::Parser'
);
NOTES
The RDQL implementation is actually an extension of the original RDQL spec (http://www.w3.org/Submission/2004/SUBM-RDQL-20040109/)
to allow more SQL-like Data Manipulation Language (DML) features like DELETE and INSERT - which is much more
close
to the original rdfdb
query language which SquishQL/RDQL are inspired to (see http://www.guha.com/rdfdb).
As well as the SPARQL one....?
SEE ALSO
DBD::RDFStore(3)
http://www.w3.org/TR/rdf-sparql-query/ http://www.w3.org/Submission/2004/SUBM-RDQL-20040109/ http://ilrt.org/discovery/2002/04/query/ http://www.hpl.hp.com/semweb/doc/tutorial/RDQL/ http://rdfstore.sourceforge.net/documentation/papers/HPL-2002-110.pdf
FAQ
- What's the difference between RDQL and SquishQL?
- None :-) The former is a bit of an extension of the original SquishQL proposal defining a proper BNF to the query language; the only practical difference is that triple patterns in the WHERE clause are expressed in a different order s,p,o for RDQL while SquishQL uses '(p s o)' without commas. In addition the URIs are expressed with angle brackets on RDQL while SquishQL do not. For more about differences between the two languages see http://rdfstore.sourceforge.net/documentation/papers/HPL-2002-110.pdf
- Is RDQL::Parser compliant to RDQL BNF?
- Yes
- Is RDQL::Parser compliant to SquishQL syntax ?
- Not yet :)
- What are RDQL::Parser extensions to RDQL BNF?
- RDQL::Parser leverage on RDFStore(3) to run proper free-text UTF-8 queries over literals; the two main extensions are
- * LIKE operator in AND clause
- * free-text triple matching like (?x, ?y, %"whatever"%)
AUTHOR
Alberto Reggiori <areggiori
@webweaving
.org>
Andy Seaborne <andy_seaborne
@hp
.com> is the original author of RDQL
Libby Miller <libby.miller
@bristol
.ac.uk> is the original author of SquishQL
8 POD Errors
The following errors were encountered while parsing the POD:
- Around line 1141:
'=item' outside of any '=over'
- Around line 1143:
You forgot a '=back' before '=head1'
- Around line 1145:
'=item' outside of any '=over'
- Around line 1202:
You forgot a '=back' before '=head1'
- Around line 1222:
'=item' outside of any '=over'
- Around line 1238:
Expected text after =item, not a bullet
- Around line 1240:
Expected text after =item, not a bullet
- Around line 1242:
You forgot a '=back' before '=head1'