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