- From: Andy Seaborne <andy.seaborne@talis.com>
- Date: Tue, 23 Feb 2010 14:26:40 +0000
- To: Lee Feigenbaum <lee@thefigtrees.net>
- CC: SPARQL Working Group <public-rdf-dawg@w3.org>
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, 23 February 2010 14:27:11 UTC