On Wed, Sep 7, 2016 at 11:21 AM, Ladislav Lhotka <[email protected]> wrote:
> > > On 07 Sep 2016, at 19:44, Vladimir Vassilev <[email protected]> > wrote: > > > > On 09/07/2016 02:18 PM, Martin Bjorklund wrote: > >> Hi, > >> > >> Your example is not circular, and it is legal. However, the 'when' > >> expression refers to the node in which the when expression is defined. > >> Note that this expression will always evaluates to 'false' (see the > >> third bullet in 7.21.5 in RFC 7950). > > This is true for YANG 1.1 due to that 3rd bullet in 7.21.5. > > > > However it should be noted that in YANG 1.0 nothing says the data node > for which the "when" statement is defined will be replaced with dummy node > without a value so that this expression always evaluates to 'false'. In > YANG 1.0 the expression can evaluate to 'true' when a+b=100. > > Using "when" expressions that refer to the context node or its descendants > could easily lead to deadlocks in YANG 1.0, so this part was underspecifed > and ill-defined. The new 1.1 procedure for evaluating "when" expressions is > thus a bug fix. Although it is somewhat tricky and sometimes (as in your > example) counter-intuitive at first sight, it leads to unambiguous and > stable results. > > >> > >> Take a step back and consider what the 'when' statement means - it is > >> used to indicate if the node can be present or not. As such, it > >> doesn't make any sense to refer to the node itself in the xpath > >> expression. > > > >> In your case, you probably want to use a 'must' expression. This is > >> evaluated once the node is present, in order to enforce some > >> constraint. > >> > > I agree. I think the conclusion can be generalized to: there is no point > in using "when" expressions directly depending on the value of the data > node for which the "when" statement is defined or its children when the > parent is not 'augment', 'uses', 'case' or 'choice' statement in YANG 1.1 > because the 'when' statement will always evaluate to 'false' and the data > node will never exist. > > Not necessarily. The following expression is always true: > > leaf foo { > when "."; > ... > } > > > > > Would be helpful if model validation tools could issue at least warning > in such cases. > > This is rather difficult to detect in general. XPath is a complicated > beast. > > I think it helps that "real" YANG developers are attempting to create operationally useful data structures. This is much different than a tool developer trying to construct a test case for a YANG compiler. The when-stmt says "add foo to bar when XXX is true" It seems obvious to real developers that XXX has to do with testing the values in bar, not foo, > Lada > Andy > > > > > Vladimir > >> > >> /martin > >> > >> > >> Vladimir Vassilev <[email protected]> wrote: > >>> Hi, > >>> > >>> Is there any practical value of 'when' statements with circular > >>> dependency to the value of the parent (in case it is a leaf) or any > >>> children of the parent? > >>> > >>> container circular-dependency-when { > >>> leaf a { > >>> when "(. + ../b) = 100"; > >>> type uint16 { > >>> range "0 .. 100"; > >>> } > >>> } > >>> leaf b { > >>> type uint16 { > >>> range "0 .. 100"; > >>> } > >>> } > >>> } > >>> > >>> > > > > _______________________________________________ > > netmod mailing list > > [email protected] > > https://www.ietf.org/mailman/listinfo/netmod > > -- > Ladislav Lhotka, CZ.NIC Labs > PGP Key ID: E74E8C0C > > > > > _______________________________________________ > netmod mailing list > [email protected] > https://www.ietf.org/mailman/listinfo/netmod >
_______________________________________________ netmod mailing list [email protected] https://www.ietf.org/mailman/listinfo/netmod
