> On 07 Sep 2016, at 19:44, Vladimir Vassilev <vladi...@transpacket.com> 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. Lada > > Vladimir >> >> /martin >> >> >> Vladimir Vassilev <vladi...@transpacket.com> 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 > netmod@ietf.org > https://www.ietf.org/mailman/listinfo/netmod -- Ladislav Lhotka, CZ.NIC Labs PGP Key ID: E74E8C0C _______________________________________________ netmod mailing list netmod@ietf.org https://www.ietf.org/mailman/listinfo/netmod