Re: shapes-ISSUE-193 (Focus nodes): Targets can be refined; focus nodes do not change

On 4/11/2016 2:28, Karen Coyle wrote:
>
>
> On 11/2/16 11:44 PM, Holger Knublauch wrote:
>>
>>
>> On 3/11/2016 14:34, Karen Coyle wrote:
>>>
>>>
>>> On 11/2/16 6:31 PM, Holger Knublauch wrote:
>>>>
>>>>
>>>> On 28/10/2016 2:50, RDF Data Shapes Working Group Issue Tracker wrote:
>>>>> shapes-ISSUE-193 (Focus nodes): Targets can be refined; focus 
>>>>> nodes do
>>>>> not change
>>>>>
>>>>> http://www.w3.org/2014/data-shapes/track/issues/193
>>>>>
>>>>> Raised by: Karen Coyle
>>>>> On product:
>>>>>
>>>>> Focus nodes are defined as "A node in the data graph that is 
>>>>> validated
>>>>> against a shape is called a focus node."
>>>>>
>>>>> Section 2. further defines focus nodes like this:
>>>>>
>>>>> "The set of focus nodes for a shape may be identified as follows:
>>>>>
>>>>> *specified in a shape using targets and filters,
>>>>> *specified in any constraint that references a shape in parameters of
>>>>> shape-based constraint components (i.e. sh:shape) or logical
>>>>> constraint components (i.e. sh:or),
>>>>> *specified as input to the SHACL processor for validating specific
>>>>> nodes from the data graph against the shape, or
>>>>>
>>>>> Shapes can also provide non-validating information, such as labels 
>>>>> and
>>>>> comments."
>>>>>
>>>>> (That last sentence is a non sequitur because the section is about
>>>>> focus nodes only.)
>>>>>
>>>>> Section 2.1 says:
>>>>>
>>>>> "2.1 Targets
>>>>>
>>>>> A target provides one way to specify potential focus nodes for a
>>>>> shape."
>>>>>
>>>>> and
>>>>>
>>>>> "Not all target nodes become focus nodes. When a shape includes
>>>>> filters, filters can remove nodes specified by targets from the 
>>>>> set of
>>>>> the shape’s focus nodes."
>>>>>
>>>>> This seems to state that the nodes specified by targets ARE focus
>>>>> nodes. I would end this after "targets" in the second sentence.
>>>>
>>>> Done:
>>>> https://github.com/w3c/data-shapes/commit/c1855ed19630c9262bbe058e7880887e86dc56dd 
>>>>
>>>>
>>>>
>>>>
>>>>>
>>>>> Then, section 2.2 says:
>>>>>
>>>>> "2.2 Filter Shapes
>>>>>
>>>>> A filter is a shape in the shapes graph that further refines the 
>>>>> focus
>>>>> nodes in the data graph that are validated against a constraint or 
>>>>> all
>>>>> the constraints of a shape."
>>>>>
>>>>> Again, this says that there are focus nodes that are refined - but
>>>>> above it seems to say that only the actual nodes that are validated
>>>>> are focus nodes. Instead, filters act on targets, not focus nodes.
>>>>
>>>> No, filter shapes *do* act on focus nodes, not (only) on targets.
>>>> Filters are *always* evaluated, even if a shape is "directly"
>>>> referenced, e.g. by ShEx-style targetless invocation or when they 
>>>> are a
>>>> result of sh:shape only.
>>>
>>> This is what contradicts the definition of focus nodes. On the one
>>> hand, only nodes that are actually validated are focus nodes. On the
>>> other, focus nodes exist before filters are applied, since filters can
>>> act on them. So the question is: when is a focus node "born"? If a
>>> focus node is something that can be further refined with a filter,
>>> then the original definition is not correct because there are focus
>>> nodes that are not the final validation node, since filters (which I
>>> assume are not validations) can further refine them.
>>>
>>> Again, the statement in 2. is:
>>> "A node in the data graph that is validated against a shape is called
>>> a focus node."
>>>
>>> That defines focus nodes as "those that are validated against a shape."
>>>
>>> Then the definition for targets says:
>>> "Not all target nodes become focus nodes. When a shape includes
>>> filters, filters can remove nodes specified by targets." This doesn't
>>> mention focus nodes, and seems to me to be correct.
>>>
>>> This was my original question, and it goes something like this:
>>>
>>> Possibility A:
>>>
>>> Apply a target = focusNode1
>>> Apply a filter to focusNode1 = focusNode2
>>> Apply a constraint to focusNode2 = focusNode3
>>>
>>> Possibility B:
>>>
>>> Apply a target = targetResult
>>> Apply a filter to targetResult = filterResult
>>> Apply a constrain to filterResult = focusNode
>>>
>>> In other words which of these are focus nodes? From the definition, it
>>> seems like only the final nodes, after targets, filters, and
>>> constraints are applied, are focus nodes. But you seem to be referring
>>> to an "intermediate" focus node. I think that focus node should be
>>> reserved for the final selected node that is validated.
>>
>> The first sentence of the Targets section states
>>
>>     A target provides one way to specify *potential* focus nodes.
>>
>> Maybe "potential focus nodes" would be a term to use for the
>> "intermediate" filterResult nodes that are in between targets and
>> focusNodes?
>
> OK, so you do consider the intermediate results to be focus nodes that 
> will be further refined? In that case, the statement that focus nodes 
> are defined as nodes that are validated against a shape appears to be 
> in contradiction with that, and we have a moving target in the term 
> "focus nodes".
>
>
> I still suggest that the term "focus node" be used only for the final 
> result, and the intermediate steps not be given any specific name. So 
> the result of applying a target is simply a node, and that may or may 
> not become the focus node for the comparison process. So a target 
> identifies a node in the data graph. That's all. Then a filter may 
> filter that result. Some constraints (still undefined, I believe) can 
> be applied to the filter result. After all of this is completed, a 
> focus node has been identified.

Does this change set reflect this:

https://github.com/w3c/data-shapes/commit/003db0c5b3f8a172a4158f88d474bc75662a2207

If not, please point at other specific lines in the document where our 
use of "focus node" does not match your expectations.

Thanks
Holger


>
> kc
>
>
>
>>
>> Note that an engine may push the evaluation of the filters into the
>> validation itself. Each filterShape can be translated into an equivalent
>> sh:or. So a SPARQL query that is produced from a constraint that has a
>> filter may simply have a SPARQL FILTER at the beginning, before the
>> actual body of the query starts. This blurs the lines between those
>> stages quite a bit. Some implementations may indeed do the filtering as
>> a pre-processing step, others may treat them just like focus nodes and
>> do the filter as part of the constraint execution.
>>
>> I did a search for "focus node" across the current document I don't see
>> a specific contradiction of our use of that term. Is there still a
>> specific problem left?
>>
>> I also wonder how we can get feedback about this whole feature. This WG
>> seems to continue to struggle with the filter shape concept. We still
>> have the option to replace it with a sh:disabled true flag. The WG is
>> far from representative of the potential user group. If external people
>> struggle with this feature, we may do the adoption of SHACL a disservice
>> if we over-complicate it.
>>
>> Holger
>>
>>
>>
>

Received on Friday, 4 November 2016 00:49:00 UTC