Subject: Re: [xsl] Avoiding boneheaded mistakes in XSLT?|
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Wed, 29 Dec 2010 10:31:21 -0500
On Wed, 29 Dec 2010 10:07:26 -0500 "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> wrote:
> Allow me to try again, please. > > Consider an XML document whose content model for <a> is: ( b, c?, d ) > > This is a valid instance: > > <a> > <b/> > <c/> > <d/> > </a> > > But, this is also a valid instance: > > <a> > <b/> > <d/> > </a> > > So, given the second instance, I run it against two stylesheets: > > Stylesheet 1: > > <xsl:if test="not(a/c)">I'll make an assumption about a missing > C</xsl:if> > > Stylesheet 2 (with a typo in it because the user mistyped): > > <xsl:if test="not(a/cc)">I'll make an assumption about a missing > C</xsl:if> > > Without a schema to know that <cc> is not an acceptable element, > there is no way to distinguish the two above if statements. With a > schema, the second one is clearly in error. But without a schema, it > does not make sense to issue an error or warning about the first > stylesheet, because it is a bona fide test I want to perform > regarding the absence of <c>. Hence, it cannot make the same > assumption about the second stylesheet, and so again cannot issue an > error or warning.
Again you're assuming the presence of a schema?
Review that given an input XML instance only.
The lack of a trigger for the xpath provides information that is useful IMHO.
<xsl:if test="c"> <newC>This is a new c: <xsl:value-of select="c"/></newC> </xsl:if>
<xsl:for-each select="c"> <newC>This is a new c: <xsl:value-of select="."/></newC> </xsl:for-each>
I'm not arguing that extra information may be gleaned from the Schema,
just that in many cases such a schema may not be available, an instance being used is more usually available.
-- Contact us for world-wide XML consulting & instructor-led training Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx Legal business disclaimers: http://www.CraneSoftwrights.com/legal