{"id":91,"date":"2010-01-02T12:14:00","date_gmt":"2010-01-02T12:14:00","guid":{"rendered":"\/lisa\/post\/2010\/01\/02\/No-means-NO-but-so-could-almost-anything-else.aspx"},"modified":"2010-01-02T12:14:00","modified_gmt":"2010-01-02T12:14:00","slug":"no-means-no-but-so-could-almost-anything-else","status":"publish","type":"post","link":"https:\/\/spacefold.com\/lisa\/2010\/01\/02\/no-means-no-but-so-could-almost-anything-else\/","title":{"rendered":"No means NO &#8212; but so could almost anything else"},"content":{"rendered":"<p>\nDecember just flew by.\n<\/p>\n<p>\nI last wrote at Thanksgiving.&nbsp; Here it is January, a new year, and I&#39;m still <a href=\"\/lisa\/2009\/11\/26\/All-things-must-pass-and-all-things-change\/\" title=\"blog post on Kami's going away\">missing Kami<\/a> and wondering why she&#39;s not visible.\n<\/p>\n<p>\nI&#39;m sure she&#39;s ignoring <strong>me<\/strong>, wherever she is.&nbsp; I just miss watching her do it. I guess we&#39;ll just have to get on with it.&nbsp; And maybe I&#39;ll take the occasion to discuss a topic that has often plagued me in integration work, not just with regard to cats.\n<\/p>\n<table border=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\"><img decoding=\"async\" src=\"\/lisa\/wp-non\/migrated\/2010\/1\/Kami2.JPG\" alt=\"Kami too\" \/><\/td>\n<td align=\"left\" valign=\"top\">\n<h3>A&nbsp;question of empty-ness and absence<\/h3>\n<p>\n\t\t\t&nbsp;\n\t\t\t<\/p>\n<p>\n\t\t\tIn working with Linda a couple of months ago, to figure out <a href=\"\/lisa\/2009\/10\/06\/Walkthrough-When-love-of-data-is-just-not-enough\/\" title=\"Blog post on no data on report open\">how to stop data from appearing when you don&#39;t want it<\/a>, I found I needed to have just such a discussion: How does the evaluating code know when you want to do this?\n\t\t\t<\/p>\n<p>\n\t\t\tUsually it comes down to figuring out some sort of negative condition.&nbsp; When the users haven&#39;t provided parameter values yet, the code should realize this and not do any unnecessary work.&nbsp;\n\t\t\t<\/p>\n<p class=\"NB\">\n\t\t\tReporting Services has a default way to deal with this; you omit a default value for a parameter, and you don&#39;t allow nulls for this parameter.&nbsp; The user is required to fill in that value before the work continues.&nbsp; However, the default UI for this is not pleasing to many people.\n\t\t\t<\/p>\n<p>\n\t\t\tIn this scenario, and in many integration scenarios that have nothing to do with reporting, you can be moving between environments that don&#39;t understand &quot;null&quot;, &quot;nil&quot;, &quot;nothing&quot;, &quot;blank&quot;, or even a straightforward boolean &quot;false&quot; exactly the same way.&nbsp; You have to find some way that the receiver can understand a boolean false, a blank, or an absence of viable content, as provided by the sender.\n\t\t\t<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p class=\"NB\">\nJust now, I started to write that this is the most annoying type casting and massaging scenario I know about &#8212; but.&nbsp; Don&#39;t get me started on dates and date times. Let&#39;s stick to one annoyance at a time.\n<\/p>\n<p>\nSo&#8230;&nbsp;&nbsp;\n<\/p>\n<h3>What&#39;s an appropriate strategy?<\/h3>\n<p>\nUsually I find two things have to be considered if I want my code to work with multiple calling environments:\n<\/p>\n<p>\n1- The receiving environment has to define the values it considers to be a boolean false and\/or a boolean true for a string according to the senders it expects.&nbsp; And it has to define these generously, and widely, not according to its own ideas (so, no, the default behavior of Boolean.TryParse isn&#39;t good enough, thank you very much).&nbsp;\n<\/p>\n<p>\n2 &#8211; The receiving environment has to figure out what it considers blank and what it will do with values that evaluate to null-or-empty.&nbsp; And here, as well, the receiving environment can publish its limitations and stick to its guns, but if it wants to&nbsp;have a usable and popular interface, it should bend over backwards to consider other people&#39;s ideas of proper input values, and offer some reasonable amount of choice (so, no, the default behavior of String.IsNullOrEmpty isn&#39;t good enough, either, thank you very much).\n<\/p>\n<h3>How do you carry it out?<\/h3>\n<p>\nBelow is an example, in VB.Net, of how you can allow the caller to specify what &quot;empty&quot; content should look like, in&nbsp;various ways:\n<\/p>\n<ul>\n<li>Do spaces &quot;count&quot;, are they significant to the value being evaluated? and, as a result of this,<\/li>\n<li>Does a string of spaces &quot;count&quot;&nbsp;as empty or not?&nbsp; <\/li>\n<li>Should &quot;emptiness&quot;, by default, result&nbsp;in an assumed True or an assumed False?<\/li>\n<\/ul>\n<p>\nYou can also see that I&#39;ve set up a relatively wide set of values that will evaluate as a Boolean True (including an Xbase version, .T.), as appropriate for the potential callers of this code.\n<\/p>\n<p>\nI don&#39;t say that the code is perfect, or that it fits every purpose.&nbsp; I&#39;m just saying that <strong>you really have to do&nbsp;this<\/strong> and that the concept can be &quot;translated&quot; into any environment.&nbsp;\n<\/p>\n<p>\nIf you don&#39;t like&nbsp;my particular way of organizing the logic in the VB code, I should probably add that I&#39;ve chosen this &quot;contains&quot; strategy because it translates particularly well to XSLT, another environment in which I code frequently.&nbsp;\n<\/p>\n<p>\nI&#39;ll add another example below, slightly different, but you&#39;ll see how the same ideas are preserved.&nbsp; I&#39;ve tried to make this obvious by naming the constants at the top of the VB snippet the same way as I&#39;ve named the parameters at the top of the XSLT snippet, in these examples.\n<\/p>\n<p>\nIn the case of the specific XSLT template I&#39;m showing, I&#39;m also rendering some HTML content&nbsp;in either a readonly or editing&nbsp;form for the calling application; that&#39;s why you see two branches that send back either a straight value or a checkbox with the current boolean result filled in.&nbsp; Not relevant to the current discussion, but you might find it useful.&nbsp; Also, I&nbsp;haven&#39;t handled the &quot;trimming&quot; issues because I know that my callers have already applied xslt&#39;s normalize-space to what they&#39;re sending.&nbsp; If I want to include a blank as a &quot;true&quot; value, I can do so by including a single blank in the strings evaluating to true (&quot;<font color=\"#000090\">| |&quot;<\/font>).\n<\/p>\n<p>\nFrom each according to its abilities, to each according to its needs.&nbsp; Which brings me to one&nbsp;more point&#8230;\n<\/p>\n<h3>Be gracious to your less-capable partner technologies<\/h3>\n<p>\nWhile I personally like to set the rule that the server should bend to benefit the caller, and provide the most &nbsp;flexibility possible, sometimes you don&#39;t have this option.&nbsp; Sometimes&nbsp;the caller has to do the work.\n<\/p>\n<p>\n<strong>Here&#39;s what I mean:<\/strong> the code you see below does translate really well to multiple environments. That includes creating an expression, such as <strong>Code!EvaluateStringToBoolean(&#8230;)<\/strong>, for use in an RDL.&nbsp;\n<\/p>\n<p>\nBut you don&#39;t always have the luxury of including the logic in that function at exactly the reporting-point where you need it most. Consider the scarcity of usable functions when you&#39;re writing code to create a calculated column in a Semantic Model:\n<\/p>\n<p align=\"center\">\n<img decoding=\"async\" src=\"\/lisa\/wp-non\/migrated\/2010\/1\/WhatIsNullInSemanticModelExpr.PNG\" alt=\"\" \/>\n<\/p>\n<p>\nThe somewhat ridiculous expression you see above takes care of considering a Percentage value that may be null.&nbsp; Null, not 0;&nbsp;zero is no problem.&nbsp;\n<\/p>\n<p>\nBelieve it or not, casting the Percentage to a text value and then checking to see if its length is 0 is the best way I&#39;ve found of saying the equivallent of IS NULL, IsBlank(), IsNothing, ==null, nil, or what-have-you, in the limited syntax allowed.&nbsp;\n<\/p>\n<p>\nIf you have a better idea, let me know.&nbsp; Meanwhile, I&#39;ll use what I can, whatever it is.\n<\/p>\n<h4>\nAnd now for&nbsp;those examples&#8230; <\/p>\n<\/h4>\n<p><\/p>\n<p class=\"code\">\n<span style=\"color: #0000ff\">Const<\/span> TheseStringsEvaluateToTrue = _<br \/>\n&nbsp;&nbsp; <span style=\"color: #a31515\">&quot;|YES|TRUE|ON|1|.T.|Y|RIGHT|CORRECT|YESSIREEBOB|&quot;<\/span> <br \/>\n<span style=\"color: #0000ff\">Const<\/span> TrueEvaluationsDelimiter = <span style=\"color: #a31515\">&quot;|&quot;<\/span> <br \/>\n<span style=\"color: #0000ff\"><br \/>\nPublic<\/span> <span style=\"color: #0000ff\">Shared<\/span> <span style=\"color: #0000ff\">Function<\/span> EvalStringToBoolean( _ <span style=\"color: #0000ff\"><br \/>\n&nbsp;&nbsp; ByVal<\/span> tSource <span style=\"color: #0000ff\">As<\/span> <span style=\"color: #0000ff\">String<\/span>, _<br \/>\n&nbsp;&nbsp; <span style=\"color: #0000ff\">Optional<\/span> <span style=\"color: #0000ff\">ByVal<\/span> tDefaultTarget <span style=\"color: #0000ff\">As<\/span> <span style=\"color: #0000ff\">Boolean<\/span> = <span style=\"color: #0000ff\">False<\/span>, _ <br \/>\n&nbsp;&nbsp; <span style=\"color: #0000ff\">Optional<\/span> <span style=\"color: #0000ff\">ByVal<\/span> tTrimString <span style=\"color: #0000ff\">As<\/span> <span style=\"color: #0000ff\">Boolean<\/span> = <span style=\"color: #0000ff\">True<\/span>) <span style=\"color: #0000ff\">As<\/span> <span style=\"color: #0000ff\">Boolean<\/span> <\/p>\n<p><span style=\"color: #0000ff\">Dim<\/span> result <span style=\"color: #0000ff\">As<\/span> <span style=\"color: #0000ff\">Boolean<\/span> <br \/>\n<span style=\"color: #0000ff\"><br \/>\nIf<\/span> <span style=\"color: #0000ff\">String<\/span>.IsNullOrEmpty(tSource) <span style=\"color: #0000ff\">Then<\/span> <br \/>\n&nbsp;&nbsp; result = tDefaultTarget <br \/>\n<span style=\"color: #0000ff\">Else<\/span> <br \/>\n<span style=\"color: #0000ff\"><br \/>\n&nbsp;&nbsp; If<\/span> tTrimString <span style=\"color: #0000ff\">Then<\/span> <br \/>\n<span style=\"color: #0000ff\"><br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim<\/span> source <span style=\"color: #0000ff\">As<\/span> <span style=\"color: #0000ff\">String<\/span> = _ <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TrueEvaluationsDelimiter &amp; _ <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tSource.Trim().ToUpper() &amp; _ <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TrueEvaluationsDelimiter <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = TheseStringsEvaluateToTrue.Contains(source) <\/p>\n<p><span style=\"color: #0000ff\">&nbsp;&nbsp; ElseIf<\/span> tDefaultTarget <span style=\"color: #0000ff\">AndAlso<\/span> _ <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Len(tSource) &gt; 0 <span style=\"color: #0000ff\">AndAlso<\/span> _ <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Len(tSource.Trim()) = 0 <span style=\"color: #0000ff\">Then<\/span> <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = tDefaultTarget <br \/>\n<span style=\"color: #008000\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39; return default if we have a string of spaces<\/span> <br \/>\n<span style=\"color: #008000\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39; and we&#39;re not trimming. <\/span><br \/>\n<span style=\"color: #008000\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39; According to this library&#39;s assumptions <\/span><br \/>\n<span style=\"color: #008000\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39; (your mileage may vary), <\/span><br \/>\n<span style=\"color: #008000\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39; this condition wouldn&#39;t<\/span> <br \/>\n<span style=\"color: #008000\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39; be handled properly by our set of &quot;True&quot; strings<\/span> <br \/>\n<span style=\"color: #008000\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39; if the default is True.<\/span> <br \/>\n<span style=\"color: #0000ff\">&nbsp;&nbsp; Else<\/span> <\/p>\n<p><span style=\"color: #0000ff\">&nbsp;&nbsp; &nbsp;&nbsp; Dim<\/span> source <span style=\"color: #0000ff\">As<\/span> <span style=\"color: #0000ff\">String<\/span> = _ <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TrueEvaluationsDelimiter &amp; _ <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tSource.ToUpper() &amp; _ <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TrueEvaluationsDelimiter <\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = TheseStringsEvaluateToTrue.Contains(source) <br \/>\n<span style=\"color: #0000ff\"><br \/>\n&nbsp;&nbsp; End<\/span> <span style=\"color: #0000ff\">If<\/span> <br \/>\n<span style=\"color: #0000ff\"><br \/>\nEnd<\/span> <span style=\"color: #0000ff\">If<\/span> <br \/>\n<span style=\"color: #0000ff\"><br \/>\nReturn<\/span> result <\/p>\n<p><span style=\"color: #0000ff\">End<\/span> <span style=\"color: #0000ff\">Function<\/span>\n<\/p>\n<p><\/p>\n<h4>Here&#39;s the XSLT version&#8230;<\/h4>\n<p class=\"code\">\n<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:param <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;StringsEvaluateToTrue&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> select=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;&#39;|1|true|True|T|Y|y|.T.|.t.|&#39;&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<span class=\"c9Y6TC\">&lt;<\/span><\/font><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:param <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;TrueEvaluationsDelimiter&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> select=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;&#39;|&#39;&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><\/p>\n<p><span class=\"c9Y6TC\">&lt;<\/span><\/font><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:template <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;Boolean&quot;<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:param <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;condition&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> select=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;false()&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:param <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;trueRepresentation&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> select=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;&#39;Y&#39;&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:param <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;falseRepresentation&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> select=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;&#39;&amp;amp;nbsp;&#39;&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:param <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;editname&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> select=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;&#39;&#39;&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:param <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;editable&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> select=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;false()&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:choose<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:when <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">test=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;string-length($editname) &amp;gt; 0&quot;<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cKJK\"><font color=\"#006800\">input <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">type=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;checkbox&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;{$editname}&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> value=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;ON&quot;<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:if <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">test=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;contains($StringsEvaluateToTrue,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;concat($TrueEvaluationsDelimiter,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string($condition),<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$TrueEvaluationsDelimiter))&quot;<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:attribute <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;checked&quot;<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;<\/font><\/span>ON<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">\/xsl:attribute<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">\/xsl:if<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:if <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">test=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;$editable=false()&quot;<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:attribute <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">name=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;disabled&quot;<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;<\/font><\/span>yes<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">\/xsl:attribute<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">\/xsl:if<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"cKJK\"><font color=\"#006800\">\/input<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">\/xsl:when<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:when <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">test=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;contains($StringsEvaluateToTrue,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;concat($TrueEvaluationsDelimiter,<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string($condition),<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$TrueEvaluationsDelimiter))&quot;<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:value-of <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">select=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;$trueRepresentation&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">\/xsl:when<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:otherwise<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">xsl:value-of <\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">select=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;$falseRepresentation&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\"> <br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disable-output-escaping=<\/font><\/span><span class=\"c5M9S0\"><font color=\"#000090\">&quot;yes&quot;<\/font><\/span><span class=\"c18YC0\"><font color=\"#d00020\">\/<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">\/xsl:otherwise<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">\/xsl:choose<\/font><\/span><font color=\"#0000ff\"><span class=\"c9Y6TC\">&gt;<\/span><br \/>\n<\/font>&nbsp;<span class=\"c9Y6TC\"><font color=\"#0000ff\">&lt;<\/font><\/span><span class=\"c49DIK\"><font color=\"#ac306d\">\/xsl:template<\/font><\/span><span class=\"c9Y6TC\"><font color=\"#0000ff\">&gt;<\/font><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>December just flew by. I last wrote at Thanksgiving.&nbsp; Here it is January, a new year, and I&#39;m still missing Kami and wondering why she&#39;s not visible. I&#39;m sure she&#39;s ignoring me, wherever she is.&nbsp; I just miss watching her do it. I guess we&#39;ll just have to get on with it.&nbsp; And maybe I&#39;ll<a class=\"more-link\" href=\"https:\/\/spacefold.com\/lisa\/2010\/01\/02\/no-means-no-but-so-could-almost-anything-else\/\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,5,6,10],"tags":[],"class_list":["post-91","post","type-post","status-publish","format-standard","hentry","category-general-techspeak","category-reporting","category-sql-server","category-xml-xslt"],"_links":{"self":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/posts\/91","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/comments?post=91"}],"version-history":[{"count":0,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/posts\/91\/revisions"}],"wp:attachment":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/media?parent=91"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/categories?post=91"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/tags?post=91"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}