Re: [xsl] Avoiding boneheaded mistakes in XSLT?

Subject: Re: [xsl] Avoiding boneheaded mistakes in XSLT?
From: Dave Pawson <davep@xxxxxxxxxxxxx>
Date: Wed, 29 Dec 2010 17:38:07 +0000
On Wed, 29 Dec 2010 10:31:21 -0500
"G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> wrote:


> >Again you're assuming the presence of a schema?
> 
> I am not, Dave.  My claim is that given only the input XML instance 
> it is unwarranted to emit any kind of error or warning for an XPath 
> address that does not resolve to the instance.
> 
> >Review that given an input XML instance only.
> 
> That is my original intent of what I wrote above.
> 
> >The lack of a trigger for the xpath provides information
> >that is useful IMHO.
> 
> I wholeheartedly disagree.  It is misleading information.  That an 
> element allowed to be absent is absent is not worthy of any message 
> at all. 

"allowed"? I'd interpret that as a validity statement wrt some schema?



> It is entirely an expected condition of the input instance 
> that my stylesheet may test for, or get the value for, or select 
> without an error.
> 
> For example, rather than:
> 
>    <xsl:if test="c">
>      <newC>This is a new c: <xsl:value-of select="c"/></newC>
>    </xsl:if>
> 
> I usually will type:
> 
>    <xsl:for-each select="c">
>      <newC>This is a new c: <xsl:value-of select="."/></newC>
>    </xsl:for-each>
> 
> There are three examples of addressing the absent <c> in my instance, 
> with a test, a value-of and a select, and just because <c> isn't in 
> my instance the processor has no license to issue any error or 
> warning message.  The next instance may, very well, have a <c>
> element in it.

So for some C you will have errors/unmatched xpaths
others you won't. 
  I'd prefer to know of them rather than 'assume'
they are OK. 



> >just that in many cases such a schema may not be available,
> >an instance being used is more usually available.
> 
> Absolutely an instance is more available, but because an instance 
> knows nothing of absent items that are allowed to be absent, the 
> processor cannot make an assumption that addressing something that is 
> absent is worthy of an error or warning message.
> 
> I hope this has finally convinced you.

No Ken, I'm looking at it as a means of getting more from the processor.
If as in your example/Schematron, the warning is something that I can
tick off, then great. Otherwise it's likely I've done something wrong
in writing that xpath expression.

Same problem, different perspectives.




-- 

regards 

-- 
Dave Pawson
XSLT XSL-FO FAQ.
http://www.dpawson.co.uk

Current Thread