- From: Seaborne, Andy <andy.seaborne@hp.com>
- Date: Mon, 8 Nov 2004 09:21:53 -0000
- To: "Peter F. Patel-Schneider" <pfps@research.bell-labs.com>
- Cc: <public-rdf-dawg-comments@w3.org>
> On the contrary, the syntax of the language permits a URI to be a
bNode
> (or at least something of the form of a bnode) via
>
> [43] URI ::= QuotedURI | QName
> [44] QName ::= <QName>
> [48] <QName> ::= (<NCNAME>)? ":" <NCNAME>
> [62] <NCNAME> ::= <NCCHAR1> (<NCCHAR1> | "." | "-" |
["0"-"9"] |
> "\u00B7" )* [61] <NCCHAR1> ::= ["A"-"Z"] | "_" | ...
>
> So a URI can be, for example, _:A
Interesting - the syntax for qnames is taken from the recommendations
for XML 1.1 and XML 1.1 namespaces.
http://www.w3.org/TR/xml-names11/
[4] NCName ::= NCNameStartChar NCNameChar*
/* An XML Name, minus the ":" */
http://www.w3.org/TR/xml11/#NT-NameStartChar
[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] |
[#xC0-#xD6] | [#xD8-#xF6] |
[#xF8-#x2FF] | [#x370-#x37D] |
[#x37F-#x1FFF] | [#x200C-#x200D] |
[#x2070-#x218F] | [#x2C00-#x2FEF] |
[#x3001-#xD7FF] | [#xF900-#xFDCF] |
[#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
Qnames are not bNodes. Given that some other syntaxes use _: for a
bNodes it can create confusion - to be balanced against following the
XML token definitions.
Andy
-------- Original Message --------
> From: Peter F. Patel-Schneider <mailto:pfps@research.bell-labs.com>
> Date: 7 November 2004 23:27
>
> [Continuing a discussion on the place of b-nodes in queries.]
>
> From: "Seaborne, Andy" <andy.seaborne@hp.com>
> Subject: Re: Coments on first working draft of SPARQL
> Date: Sun, 07 Nov 2004 17:16:51 +0000
>
> [...]
>
> > > > > How are blank nodes handled in triple patterns? For example,
> > > > > does the triple pattern ( ?x ex:r _:v )
> > > > > match the RDF graph
> > > > > ex:a ex:r _:a .
> > > > > ex:a ex:r _:b .
> > > >
> > > > Your comments suggest that a section devoted to the details
around
> > > > bNodes would be helpful. This has been started in the editors
> > > > working draft.
> > > >
> > > > The query syntax does not allow bNodes in queries. bNodes can
not
> > > > be put in query requests and that needs to be explained
somewhere.
> > >
> > >
> > > The working draft has explicit wording to the contrary.
> >
> > This definition is not the syntax for the language. The definitions
at
> > this point of the document set up terminiolgy that works on patterns
> > in queries. These graph patterns can be combined to produce other
> > patterns so allowing bnodes helps this if this is thought of as
> > subqueries. More below.
>
> HUH???????????????????????
>
> Then just what is this definition supposed to be about?
> To pick just a few (in context, I hope) bits of the section.
>
> 2.2 Triple Patterns
>
> The building blocks of queries are triple patterns.
> ...
> A triple pattern applied to a graph ...
> ...
> Definition: Triple Pattern
> The set of triple patterns is [something that allows blank nodes
in
> both the subject and object positions].
>
> This sure sounds like it is describing the language, particularly in
the
> absence of any other prose on the subject.
>
> > If you have suggestions for improving the approach taken in the
> > document, please let me know.
>
> Yes, please do not start out with a description of something that is
not
> part of the language. If bnodes are indeed not part of the language,
> then
> they should not be mentioned in any context related to the language.
>
> [...]
>
> > > The SPARQL grammar appears to agree with these definition. Of
> > > course, that grammar is not very well written, as it makes
literals
> > > include URIs.
> >
> > 'Literal' in the grammar isn't an RDF literal - it's a constant
term.
> > We will change the wording.
>
> Good.
>
> > Constants are URIs, RDF plain literals, typed
> > RDF literals and the convenience forms for xsd:integers and
> > xsd:doubles.
> >
> > [39] Literal ::= URI | NumericLiteral |
TextLiteral
> >
> > (TextLiterals include typed RDF literals - that could be better
named)
> >
> >
> > The production for a TriplePattern is:
> >
> > [16] TriplePattern ::= '(' VarOrURI VarOrURI
VarOrLiteral ')'
> > [17] VarOrURI ::= <VAR> | URI
> >
> > so RDF literals are not allowed as subjects. In the syntax of the
> > language, bNodes can't appear.
>
> On the contrary, the syntax of the language permits a URI to be a
bNode
> (or
> at least something of the form of a bnode) via
>
> [43] URI ::= QuotedURI | QName
> [44] QName ::= <QName>
> [48] <QName> ::= (<NCNAME>)? ":" <NCNAME>
> [62] <NCNAME> ::= <NCCHAR1> (<NCCHAR1> | "." | "-" |
["0"-"9"] |
> "\u00B7" )* [61] <NCCHAR1> ::= ["A"-"Z"] | "_" | ...
>
> So a URI can be, for example, _:A
>
> [...]
>
> > > Huh? How does this work? Is this really going to part of the
> > > SPARQL spec? If so, it exposes a part of RDF that I had safely
> > > thought was hidden.
> >
> > Which part of RDF did you think was hidden?
>
> My reading of the RDF specification indicates that there is no
> difference
> between
>
> _:a ex:b ex:c .
>
> and
>
> _:z ex:b ex:c .
>
> These are the ``same'' RDF graph, at least so far as RDF is concerned.
> This means that the identity of bnodes is hidden in RDF.
>
> > Many RDF toolkits do allow
> > access to bNodes - for example, the ability to add properties when
> > creating an RDF graph.
>
> Well then they are going beyond the RDF specification. That is their
> perogative, of course,
>
> > It's not a matter for DAWG to define how RDF APIs work.
>
> Agreed.
>
> > When used
> > remotely, SPARQL queries are serialized and results come back in
> > encoded form and there is no mechanism for maintaining bNodes across
> > the network - just a way to give a document scoped id so that within
> > the document, bNodes can be differentiated.
>
> Agreed, except that according to my reading of the working draft
bnodes
> are
> allowed in the syntax of the language, which means that they can
> somehow be
> transmitted across the network.
>
> > If used locally, how the implementation returns results from a query
> > is an implementation decision and is not going to be defined by
DAWG.
> > Some systems will return whatever graph object the query happens to
> > find - then this object can be used for further (non-query) API
> > operations such as adding properties.
>
> Sure, but this would be a non-sanctioned extension.
>
> > Example of local use might be:
> >
> > results = queryExecute(
> > "SELECT ?person WHERE ( ?person foaf:mbox <mailto:joe> )")
;
> > for ( solution in results)
> > {
> > x = solution.get("person") ;
> > x.addProperty(foaf.name,"Joe") ;
> > }
> >
> > the return type of solution.get will be whatever the RDF toolkit
> > chooses to do about implementing the graph.
> >
> > It also means that query structures could be created that do involve
> > bNodes - this can't be done in the syntax of the language
>
> See above.
>
> > but if the
> > abstract syntax tree is constructed programmatically, then local
> > object might be included - toolkit implementation decision and not
to
> > do with DAWG.
>
> Sure, but, again, this would be a non-sanctioned extension.
>
> > Making TriplePatterns more general (including bNodes) than the
> > syntax allows, is just a way of recognizing this direct use of query
> > on a local RDF graph.
>
> I do not think that this is a legitimate approach to take. In my view
> you
> are sanctioning something that should be a non-sanctioned extension.
>
> > I suspect we have different underlying views on how RDF applications
> > are going to be constructed. My hope is that SPAQRL is neutral to
> > that - if you see some approaches being made impossible, or
> > difficult, then please let us know.
>
> Hmm. Well if SPARQL does indeed not allow bnodes, then it may indeed
be
> neutral. However, the working draft is definitely not neutral - for
> repeatable results to queries using bnodes it requires RDF stores to
> maintain the identity of these bnodes, which I do not believe that an
> RDF
> store need do.
>
> peter
Received on Monday, 8 November 2004 09:22:27 UTC