Martin Bjorklund <m...@tail-f.com> writes:

> Juergen Schoenwaelder <j.schoenwael...@jacobs-university.de> wrote:
>> On Tue, May 24, 2016 at 10:33:29AM +0200, Martin Bjorklund wrote:
>> > Juergen Schoenwaelder <j.schoenwael...@jacobs-university.de> wrote:
>> > > On Mon, May 23, 2016 at 05:29:42PM +0200, Ladislav Lhotka wrote:
>> > > 
>> > > [...]
>> > >  
>> > > > This mixes up paths in the data tree with those in the schema tree. 
>> > > > The XPath expression in the "path" statement is evaluated in the 
>> > > > context of a data tree, but if the result is an empty node set, then 
>> > > > "this leaf node" makes no sense.
>> > > > 
>> > > > A specific example:
>> > > > 
>> > > > leaf fooref {
>> > > >   type leafref {
>> > > >     path "../foo";
>> > > >     require-instance false;
>> > > >   }
>> > > > }
>> > > > 
>> > > > leaf foo {
>> > > >   type uint8;
>> > > >   when "../bar < 42";
>> > > > }
>> > > > 
>> > > > leaf bar {   
>> > > >   type uint8;
>> > > >   default 100;
>> > > > }
>> > > > 
>> > > > If there is neither "foo" nor "bar" in the data tree, what is the 
>> > > > value space of "fooref"?
>> > > >
>> > > 
>> > > Hm. Is it not both? The path refers to a schema node in order to
>> > > determine the base type (which is the base value set if
>> > > require-instance is false). If require-instance is true, then there is
>> > > an additional constraint that refers to a set of data nodes that
>> > > essentially determine a (possibly empty) subset of the value space.
>> > > 
>> > > If you agree with this, then we essentially have to phrase this
>> > > clearly.
>> > 
>> > Exactly.  My proposal was:
>> > 
>> > OLD:
>> > 
>> >    The leafref type is used to declare a constraint on the value space
>> >    of a leaf, based on a reference to a set of leaf instances in the
>> >    data tree.  The "path" substatement (Section 9.9.2) selects a set of
>> >    leaf instances, and the leafref value space is the set of values of
>> >    these leaf instances.
>> > 
>> >    If the leaf with the leafref type represents configuration data, and
>> >    the "require-instance" property (Section 9.9.3) is "true", the leaf
>> >    it refers to MUST also represent configuration.  Such a leaf puts a
>> >    constraint on valid data.  All such nodes MUST reference existing
>> >    leaf instances or leafs with default values in use (see Section 7.6.1
>> >    and Section 7.7.2) for the data to be valid.  This constraint is
>> >    enforced according to the rules in Section 8.
>> > 
>> > NEW:
>> > 
>> >    The leafref type is used to declare a constraint on the value space
>> >    of a leaf, based on a reference to a set of leaf instances in the
>> >    data tree.  The "path" substatement (Section 9.9.2) is used to refer
>> >    to another leaf node.  The leafref value space is the value space of
>> >    this leaf node.
>> > 
>> >    If the "require-instance" property is "true", there MUST exist an
>> >    instance, or a leaf with a default value in use (see Section 7.6.1
>> >    and Section 7.7.2), of the leaf being referred to with the same value
>> >    as the leafref value in a valid data tree.
>> > 
>> >    If the leaf with the leafref type represents configuration data, and
>> >    the "require-instance" property (Section 9.9.3) is "true", the leaf
>> >    it refers to MUST also represent configuration.
>> > 
>> > 
>> > Please comment and/or suggest improvements to this proposal.
>> >
>> 
>> I will give it a try. I think it is helpful to define referring node
>> and referred node
>
> Ok.
>
>> and I think it is useful to first state the purpose
>> of the leafref type.
>> 
>>   The leafref type is restricted to the value set of some leaf node in
>>   the schema tree and optionally further restricted by corresponding
>>   instance nodes in the data tree. More precisely, the leafref type
>>   declares a constraint on the value space of a leaf node (the
>>   referring leaf node), based on a reference to a another leaf node in
>>   the schema tree (the referred leaf node). The "path" substatement
>>   (Section 9.9.2) is used to identify the referred leaf node in the
>>   schema tree. The value set of the referring leaf node is the value
>>   set of the referred leaf node if the "require-instance" property is
>>   "false".
>
> Maybe remove the second sentence.  Also s/value set/value space/.
> Also the last sentence isn't correct; the value space is always the
> value space of the referred node.
>
>>   If the "require-instance" property is "true", there MUST exist an node
>>   in the data tree, or a node with a default value in use (see Section
>>   7.6.1 and Section 7.7.2), of the referred schema tree leaf node with
>>   the same value as the leafref value in a valid data tree.
>> 
>>   If the referring leaf node represents configuration data, and the
>>   "require-instance" property (Section 9.9.3) is "true", the referred
>>   leaf node MUST also represent configuration.
>
> Also, the text needs to mention leaf-lists.  This gives:
>
>
>   The leafref type is restricted to the value space of some leaf or
>   leaf-list node in the schema tree and optionally further restricted
>   by corresponding instance nodes in the data tree.  The "path"
>   substatement (Section 9.9.2) is used to identify the referred leaf
>   or leaf-list node in the schema tree. The value space of the
>   referring node is the value space of the referred node.

The term "value space" is not defined in 6020bis, but IMO this is not correct.
For example:

  leaf foo {
    type uint8;
    must ". mod 2 = 0";
  }

Arguably, the value space of this leaf consists only of even numbers. If
"bar" is a leafref that refers to "foo", what is its value space? My
understanding is that it is the whole uint8 range, i.e. the value space
of the *type* of "foo".

Lada

>
>   If the "require-instance" property is "true", there MUST exist an
>   node in the data tree, or a node with a default value in use (see
>   Section 7.6.1 and Section 7.7.2), of the referred schema tree leaf
>   or leaf-list node with the same value as the leafref value in a
>   valid data tree.
>
>   If the referring node represents configuration data, and the
>   "require-instance" property (Section 9.9.3) is "true", the referred
>   node MUST also represent configuration.
>
>
>
> /martin

-- 
Ladislav Lhotka, CZ.NIC Labs
PGP Key ID: E74E8C0C

_______________________________________________
netmod mailing list
netmod@ietf.org
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to