- From: Lee Feigenbaum <feigenbl@us.ibm.com>
- Date: Thu, 14 Dec 2006 14:59:21 -0500
- To: public-rdf-dawg@w3.org
As promised. I've mainly focused on wording and presentation techniques in
an effort to make this as clear as possible. The details of the algebra
per se are being worked out as separate matters.
Summary:I think it needs a bit more rigor in a few places I've tried to
explain below. I think it's excellent overall and (IBM hat on) will make
the specification far more accessible to implementors and those wishing to
study the query language. When we combine it with the example-driven
presentation of the rest of rq24, I think we'll be in very good shape
indeed.
Lee
--
X SPARQL The SPARQL Algebra
"""
The algebraic expression is derived from a query string by parsing and
transforming the abstract syntax tree.
"""
This sentence confuses me a bit as it can be read as "parsing ... the
abstract syntax tree". Perhaps better as:
"""
Parsing a query string yields an abstract syntax tree which can be
transformed into an algebraic expression.
"""
X.1.1 Mapping Graph Patterns
Having implemented the mapping based on rq23, this section is very
appreciated by me as being helpful to implementors looking for guidance in
associating the syntax of a query with its logical meaning. I think that
the content in its look fine, but the presentation / elucidation needs
some work to make the mapping from concrete to abstract syntax more
formal. In particular, I think that we should completely avoid conflating
concrete syntax tokens (e.g. GroupGraphPattern) with abstract syntax nodes
(e.g. Join(...)). So I think that we should list the relevant concrete
syntax rules (that's there already), list the abstract syntax nodes
(that's sort of there in the bullet list, but it should explicitly list
the names of the nodes -- "Join", "LeftJoin", etc.). Then when Step 1 says
"Replace all BasicGraphPattern elements by BGP(list of triple patterns)",
"BGP" will be the name of an abstract syntax node already introduced.
Similarly for the other steps.
[I read to the end; I think perhaps you're distinguishing between
"abstract syntax tree" and "abstract query"? If that's the case, I don't
think I agree with the distinction. I see a concrete syntax tree full of
OPTIONAL and GroupGraphPattern and the like, and then an abstract syntax
tree (== abstract query) full of Join() and LeftJoin(). The algebra
operates over this latter tree.]
Step 4 - I still have a TODO to write up some examples to see if I can
concerns about this step, but I'd really like to hear someone else's take
on the algorithm in Step 4.
Step 5 Simplification - While this doesn't hurt, we don't really need to
specify this sort of trivial transformation -- the evaluation of the
algebra should yield the same result regardless of how simplified the
abstract syntax tree is.
X.1.2
At least one example (preferably one involving left associativity) would
be useful which included the full transform of query string > concrete
syntax tree > abstract syntax tree
X.1.3
There's a typo - "Slide" should be "Slice"
[There's other typos in the document too, but I'm not enumerating them
until we've agreed on overall structure / semantics and integrated the
resulting text into rq24 proper.]
X.1.3 could use the same, formal treatment which maps from concrete syntax
to abstract expressions that X.1.1 receives.
X.2.1
Filter:
We don't define what mu(expression) means anywhere before this. It's
somewhat obvious, but should at least be defined. Also: "boolean effective
value" --> "effective boolean value".
Join:
You combine solutions here using just "x union y" rather than "x
set-union y" or "merge(x, y)" . Is this purposeful?
X.3
I like the concept of "active graph." If I recall correctly, the current
spec. is worded such that GRAPH <g> { ... } - basically sets a new default
graph for the stuff inside { ... }, and then BGP matching is defined to be
against the default graph. If we adopt this active graph terminology, we
should use it throughout, and make sure the BGP matching section refers to
the active graph.
Received on Thursday, 14 December 2006 19:59:38 UTC