Re: BNODE(string) and joins



I think you are conflating solution mapping with the final solutions of the query.  The official spec simply says [1]:


A solution mapping is a mapping from a set of variables to a set of RDF terms.


i.e. it isn’t a solution to the entire query but merely a mapping of variables to terms.  If you search the spec for occurrences of the term you will see it used in reference to both the outputs and inputs to many different operators in the SPARL algebra.  


As for the confusion on the specific example each graph pattern is a separate operator in the algebra and as such has its own unique solution mapping(s) which when joined yield a new set of solution mapping(s)






From: Marcel Otto <>
Date: Monday, 8 October 2018 at 14:21
To: Axel Polleres <>
Cc: <>
Subject: Re: BNODE(string) and joins
Resent-From: <>
Resent-Date: Mon, 08 Oct 2018 13:20:19 +0000


I’ve provided an example in the conversation with Rob Vesse:


Meanwhile, I’ve implemented Rob’s interpretation, although it goes against my intuition about the semantics of solution mappings of which I thought as representing possible truthy interpretations of basic graph patterns, so I wouldn’t have thought that the merge of a join introduces a new solution mapping:


On 8. Oct 2018, at 14:53, Axel Polleres <> wrote:


Not 100% sure I understand the question,could you maybe provide a concrete example?

You are right , that implementations shall generate two different blank nodes on each bnode(s) call with the same string.

Once they are created, e.g. in a bind, further up in joins these should behave as any other bnodes. 


Dr. Axel Polleres  

url:  twitter: @AxelPolleres

On 04.10.2018, at 23:39, Marcel Otto <> wrote:



I'm implementing a SPARQL engine in Elixir ([1], [2]). Currently, I'm implementing the interpretation of group graph patterns and have the following question an the handling of blank nodes generated with `BNODE(string)`. When performing the merge of two solutions for a `join`, which of the two merged solutions should the merged solution be based on with respect to `BNODE(string)`? For example, let's say I have two sub groups using the `BNODE(string)` function to generate bnodes for the same string, which would result due to the locality of the `BNODE` function different bnodes. So, when the `BNODE` function is now called in the outer group above the two subgroups, again with the same string, what bnode should be returned? 

Kind regards,
Marcel Otto

[2] - announcement about the whole project on the public-lod mailing list


Received on Monday, 8 October 2018 13:51:40 UTC