- From: Axel Polleres <axel.polleres@deri.org>
- Date: Tue, 9 Mar 2010 17:08:54 +0000
- To: Andy Seaborne <andy.seaborne@talis.com>
- Cc: Lee Feigenbaum <lee@thefigtrees.net>, SPARQL Working Group <public-rdf-dawg@w3.org>
>>> ** BNODE() -> fresh blank node every call. is like [] in a CONSTRUCT, yes? Do we really need the function, or could we simply allow [] in a project expression? e.g. SELECT [] as ?X >>> BNODE(string) is like _:string in CONSTRUCT, yes? whereas it makes sense in CONSTRUCTs to create correlations between blank nodes, I am not entirely sure it is needed in SELECTs... we don't really have correlation, which couldn't just be made explicit by reusing the same variable ... What I mean is: What expressivity do we gain by BNODE("label")? Could someone give an example? >>> Do we also way bnodes scoped to the whole result set? >>> Replace the meaning of BNODE("label") or have another form? Well, I'd expect that (correct me if I am wrong) blank nodes per result set could be done by nested queries, or no? At least, that was the point for me suggesting to consider nested CONSTRUCTs, since by nesting/modularisation one could do exactly that. > BNODE("label", boolean) with "true" for result set (and BNODE/1 being default true). > > BNODE("A", false) and BNODE("A", true) are different bNodes. That workaround seems a bit "hacky" to be honest, and said the above, I am not convinced this is strictly needed. Other opinions? Examples? Axel On 23 Feb 2010, at 14:26, Andy Seaborne wrote: > On 23/02/2010 2:09 PM, Lee Feigenbaum wrote: >> Hi Andy, >> >> Thanks - my thoughts are below. >> >> On 2/23/2010 8:14 AM, Andy Seaborne wrote: >>> In an effort to progress the syntax issues ... >>> >>> http://www.w3.org/2009/sparq/wiki/Design:FunctionLibrary#SPARQL_specific >>> >>> We have some built-in functions proposed: >>> >>> ** BNODE() -> fresh blank node every call. >>> >>> ** BNODE(string) -> same blan k node as other use of BNODE(string) >>> >>> Scope is per binding (row) so >>> BNODE("a") is like _:a in CONSTRUCT templates. >>> >>> Do we also way bnodes scoped to the whole result set? >>> Replace the meaning of BNODE("label") or have another form? >> >> I don't have a strong feeling for this as I tend to shun bnodes anyway >> :) - but I do have a question: if BNODE("a") had result-set scope, is >> >> SELECT (_:a = BNODE("a") AS ?match) ... true or false (or illegal)? > > It's actually illegal currently (phew!) because you can't have a constant bnode in an expression. > > The general case of: > > ?x = _:a or <_:a> > SELECT (?x = BNODE("a") AS ?match) > > I suggest should be false. > > BNODE("a") does not create a bnode with that string - it creates a new bnode distinct from all other bnodes except those created by BNODE("a"). > > So the bnode from the data can't the same as the bnode from BNODE (any form). > > Steve wrote: > > > > Ah, maybe, I think I'd thought that's what this function did. Result-set > > scoped bNodes are not something you can mint currently. > > > > Related: do we have any consensus around a skolemisation function? > > SKOLEMISE(?bnode) -> URI. > > I'm not sure how many people want / could support such a thing. > > As an "illegal" URI like <_:label>? > > I support that. > > Alternative is to register a URI scheme. Or purloin some urn: scheme like urn:x-bnode:label. > > > > >> Replace the meaning of BNODE("label") or have another form? > > > > We maybe need both forms. Axel has some usecase IIRC? > > Yes - I think we do indeed need both. No idea how just at the moment how to express in syntax. > > BNODE("label", boolean) with "true" for result set (and BNODE/1 being default true). > > BNODE("A", false) and BNODE("A", true) are different bNodes. > > ---- > > Because you can't pass a bnode from one row to another, I don't think you can construct lists over result rows under any proposal so far. Is this an issue? > > Andy > >
Received on Tuesday, 9 March 2010 17:09:29 UTC