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

Reply via email to