[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: My XPath mistakenly referenced an element that do

Subject: Re: My XPath mistakenly referenced an element that doesn't exist and I got no error message ... is this bad language design?
From: "Alan Painter alan.painter@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Thu, 14 Oct 2021 16:39:29 -0000
Re:  My XPath mistakenly referenced an element that  do
I wanted to put a plug in for the schema-aware usage.

When I was working with a team converting one complex vocabulary to another
complex vocabulary, the error reporting from the schema-aware processing
was incredibly helpful.

Obviously, this only works for cases where those vocabularies exist, but in
those cases, schema-aware error reporting is a fabulous tool.

On Thu, Oct 14, 2021 at 6:22 PM Dimitre Novatchev dnovatchev@xxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> > Even adding req() as a synonym for one-or-more() might be enough to
> encourage people to write req(Document)/req(foo) in order to get better
> diagnostics.
>
> Why not just:
>
>        req(Document/foo)
>
>
> Thanks,
> Dimitre
>
> On Thu, Oct 14, 2021 at 8:17 AM Michael Kay mike@xxxxxxxxxxxx <
> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
>> Having said all this, of course you (and your friend) are perfectly
>> correct: the fact that "void paths" are not statically detected is a major
>> cause of debugging headaches, and a solution to the problem that prevents
>> those headaches would be highly desirable.
>>
>> I've sometimes wondered whether a "soft" checker (lint-like) that warns
>> you of potentially void paths (by reference to a schema and/or instance
>> document) might not be a valuable tool.
>>
>> Or a run-time checker might be less complicated than a compile-time
>> checker: Add an option selection="strict" at the xsl:transform level, and
>> then
>>
>> Document/foo is treated as one-or-more(Document)/one-or-more(foo)
>>
>> while if you want zero-or-more(Document)/zero-or-more(foo)
>>
>> then you have to use some new syntax like opt(Document)/opt(foo)
>>
>> Even adding req() as a synonym for one-or-more() might be enough to
>> encourage people to write req(Document)/req(foo) in order to get better
>> diagnostics.
>>
>> Or perhaps a "\" operator that behaves like "/" except the RHS is not
>> allowed to be empty.
>>
>> Michael Kay
>> Saxonica
>>
>> > On 14 Oct 2021, at 16:06, Michael Kay mike@xxxxxxxxxxxx <
>> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>> >
>> > This was the thinking that led to the design of the "static typing"
>> feature in XQuery 1.0, which has been a notable failure. Even it its
>> diluted form as implemented in schema-aware XPath/XQuery without static
>> typing (where Saxon will potentially give you a warning here) it has not
>> been a conspicuous success.
>> >
>> > The main reason, I think, is it requires extra coding effort up-front,
>> and only gives you returns when debugging, later, if you don't get things
>> right first time. Not many people are prepared to make that investment.
>> >
>> > Looking at your example, match="/" will match the document node of any
>> XML document, whatever its type. To catch an error here, you first have to
>> make it clear that the rule is only intended to apply to a particular kind
>> of document, for example by writing
>> >
>> > match="document-node(schema-element(Document))"
>> >
>> > which is quite a bit more verbose than your original; and it also
>> requires you (a) to import the schema for this document type, and (b) to
>> validate the instance against the schema before applying the stylesheet.
>> >
>> > I would still encourage people to do that: it will detect many of your
>> coding mistakes. But realistically, we're all inclined to take the path of
>> least resistance, even if that path leads you into dragon-infested
>> territory.
>> >
>> > Michael Kay
>> > Saxonica
>> >
>> >> On 14 Oct 2021, at 14:45, Roger L Costello costello@xxxxxxxxx <
>> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>> >>
>> >> 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
>> >>
>> >>
>> >
>> >
>>
>>
>>
>
> --
> Cheers,
> Dimitre Novatchev
> ---------------------------------------
> Truly great madness cannot be achieved without significant intelligence.
> ---------------------------------------
> To invent, you need a good imagination and a pile of junk
> -------------------------------------
> Never fight an inanimate object
> -------------------------------------
> To avoid situations in which you might make mistakes may be the
> biggest mistake of all
> ------------------------------------
> Quality means doing it right when no one is looking.
> -------------------------------------
> You've achieved success in your field when you don't know whether what
> you're doing is work or play
> -------------------------------------
> To achieve the impossible dream, try going to sleep.
> -------------------------------------
> Facts do not cease to exist because they are ignored.
> -------------------------------------
> Typing monkeys will write all Shakespeare's works in 200yrs.Will they
> write all patents, too? :)
> -------------------------------------
> Sanity is madness put to good use.
> -------------------------------------
> I finally figured out the only reason to be alive is to enjoy it.
>
> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list>
> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/552232> (by
> email <>)

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.