Ladislav Lhotka <[email protected]> wrote: > 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.
No. The value space is all of uint8. In the candidate you can have foo = 43. The "must" expression adds a constraint. > 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". Yes. /martin > > 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
