What I'm also a little worried about is whether
when "../a = true()"
is actually checking the *existence* of leaf a.
In other words, could that expression be evaluated as enabling the when whether
leaf a is set to 'true' or if it is set to 'false' ? In either case it has a
value and exists.
Jason
> -----Original Message-----
> From: Sterne, Jason (Nokia - CA/Ottawa)
> Sent: Wednesday, August 8, 2018 9:37 AM
> To: 'Ivory, William' <[email protected]>; [email protected]
> Subject: RE: [netmod] false() vs 'false' in 'when' statements
>
> Thanks William.
> Please see below.
> Regards,
> Jason
>
> > -----Original Message-----
> > From: Ivory, William <[email protected]>
> > Sent: Wednesday, August 8, 2018 3:27 AM
> > To: Sterne, Jason (Nokia - CA/Ottawa) <[email protected]>;
> > [email protected]
> > Subject: Re: [netmod] false() vs 'false' in 'when' statements
> >
> > On 07/08/18 18:37, Sterne, Jason (Nokia - CA/Ottawa) wrote:
> > Hi all,
> >
> > When comparing the value of a boolean leaf in a 'when' statement (or a
> > 'must'
> > statement), is an equality comparison to 'true' or 'false' the same as a
> > check
> > against true() or false() ?
> >
> > For example:
> >
> > leaf a {
> > type boolean;
> > }
> > leaf b {
> > type uint32;
> > when ".../a = 'true'";
> > }
> > leaf c {
> > type uint32;
> > when ".../a = 'false'";
> > }
> > (note that neither b nor c can be configured if leaf a isn't explicitly
> > configured
> > with a value since there is no default)
> >
> > If I replace the two 'when' statements above with the following instead, is
> > the
> > behavior the same ?
> > ...
> > when ".../a = true()";
> > ...
> > when ".../a = false()";
> > ...
> >
> > Or does "../a = true()" behave as an existence check on leaf a and would be
> > enabled whether a is configured as true or false ?
> >
> > Regards,
> > Jason
> >
> >
> >
> > See https://www.w3.org/TR/1999/REC-xpath-19991116/#booleans
> >
> > (a) "../a = 'true'"
> >
> > Compares 'string-value' (same as value of node if a leaf, rather more
> > interesting if a list / container!) of each node in nodeset generated by
> > '../a'
> and
> > if any node in the nodeset matches 'true', expression is true.
>
> [>>JTS: ] In my specific example, leaf a is a single Boolean leaf. In that
> case, are
> these equivalent ?
> when ".../a = 'true'";
> when ".../a = true()";
> and are these also equivalent ?
> when ".../a = 'false'";
> when ".../a = false()";
> (sorry if I'm being dense here, but I'm not 100% positive if I'm interpreting
> your
> explanations correctly and getting the right conclusion. I've never seen
> must or
> when statements that use = false() or = true()).
>
> [>>JTS: ] Are the strings 'true' and 'false' the "string-value" (that you
> mention
> above) for a Boolean leaf ?
> 'a' is a single Boolean leaf so the nodeset is that single leaf and the value
> is
> 'true' or 'false'.
>
> >
> > (b) "../a = true()"
> >
> > Similar to above but after getting the string-value, this is converted to a
> > boolean before comparing with the boolean true.
>
> [>>JTS: ] I'm a bit confused here. Are you saying that the string-value of
> leaf a is
> converted to a Boolean ?
> Do the string-values of a convert to something that is equal to true() or
> false() ?
>
> >
> > (c) '../a'
> >
> > True if the nodeset generated by this expression is not empty.
> >
> > ---
> >
> > Caveats alluded to above are that if '../a' matches multiple nodes, then
> > only
> > one of these nodes needs to pass the test for the test to be true.
> > Separately,
> if
> > any of the nodes are not leaves, the 'string-value' is a concatenated
> > string of
> > the values of the node's child / grandchild leaves.
> >
> > Hope that helps. You wouldn't believe the number of unit tests I have to
> make
> > sure we get this logic right! Using '!=' when comparing a nodeset with >1
> node
> > with other values is very likely not to give the answer you expect (-:
> >
> > Regards,
> >
> > William
> >
_______________________________________________
netmod mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/netmod