Subject: Re: [xsl] My XPath mistakenly referenced an element that doesn't exist and I got no error message ... is this bad language design? From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Thu, 14 Oct 2021 16:22:09 -0000 |
> 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.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] My XPath mistakenly refer, David Birnbaum djbpi | Thread | Re: [xsl] My XPath mistakenly refer, Michael Kay mike@xxx |
Re: [xsl] My XPath mistakenly refer, David Birnbaum djbpi | Date | Re: [xsl] My XPath mistakenly refer, Michael Kay mike@xxx |
Month |