xsl-list
[Top] [All Lists]

[xsl] My XPath mistakenly referenced an element that doesn't exist and I got no error message ... is this bad language design?

2021-10-14 08:45:38
Hi Folks,

Here is my (very simple) XML document:

        <Document>Hello, world</Document>

My XSLT program contains a xsl:value-of with a simple XPath expression:

        <xsl:template match="/">
            <xsl:value-of select="Document/foo eq 'abc'"/>
        </xsl:template>

In the XPath expression I mistakenly referenced an element -- foo -- that does 
not exist.

I ran the XSLT program on the XML document. No error was generated.

My colleague argues that such behavior is bad language design:
---------------------------------------------------
Languages which define such mistakes to just return "empty" node lists or 
false, or such are not helping anybody. They just turn author mistakes into 
silent, hard-to-detect behaviors.  In my view this is a major mistake in the 
XPath language. 

All path expressions should be strongly, statically type-correct, so 
Document/foo has to be a possible path. But if element foo is optional, then 
any given instance may not have element foo and so a path like Document/foo can 
be type correct, but meaningless for a particular data document. One can 
explicitly test, e.g., 

if ( exists(Document/foo) ) then (Document/foo eq 'abc') else.... 

If you just use the expression without this test, and node foo doesn't exist, 
then it should cause a failure. 
---------------------------------------------------

Do you agree with my colleague's assessment? Is this behavior in XPath an 
indication of bad language design?

/Roger
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--


<Prev in Thread] Current Thread [Next in Thread>