Martin Bjorklund <[email protected]> writes:
> Juergen Schoenwaelder <[email protected]> wrote:
>> On Tue, May 24, 2016 at 10:33:29AM +0200, Martin Bjorklund wrote:
>> > Juergen Schoenwaelder <[email protected]> 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
[email protected]
https://www.ietf.org/mailman/listinfo/netmod