> On 30 May 2016, at 10:49, Martin Bjorklund <[email protected]> wrote: > > 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.
Then a definition of "value space" needs to be added to the Terminology section. So far, this term has been used in 6020bis only in relation to a data type, not a leaf/leaf-list instance. Lada > >> 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 -- Ladislav Lhotka, CZ.NIC Labs PGP Key ID: E74E8C0C _______________________________________________ netmod mailing list [email protected] https://www.ietf.org/mailman/listinfo/netmod
