Subject: Re: Is an XPath processor responsible for catching misspelled tag names when there is an associated Schema?
From: "Colin Adams" <colinpauladams@xxxxxxxxxxxxxx>
Date: Thu, 21 Feb 2008 13:26:10 +0000
|
As far as an XSLT processor is concerned, there is no such thing as a
mis-spelt element in an XPath. If the XPath is syntatically correct,
then that is fine.
Consider a variation on the identity template that has a template that
matches on child::authr. you can run this against any input document,
whether validated or not. If you confine yourself to validated-only
documents, then some documents may be validated against schemas were
authr is a valid element name.
On 21/02/2008, Costello, Roger L. <costello@xxxxxxxxx> wrote:
> Hi Folks,
>
> Consider this XML document:
>
> <?xml version="1.0"?>
> <Book>
> <Title>My Life and Times</Title>
> <Author>Paul McCartney</Author>
> <Date>1998</Date>
> <ISBN>1-56592-235-2</ISBN>
> <Publisher>McMillan Publishing</Publisher>
> </Book>
>
> Here is an XPath expression to count the number of <Author> elements:
>
> count(/Book/Authr)
>
> Notice that Author has been accidentally misspelled in the XPath
> expression.
>
> The XML document conforms to this XML Schema:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
> elementFormDefault="qualified">
> <xs:element name="Book">
> <xs:complexType>
> <xs:sequence>
> <xs:element ref="Title" />
> <xs:element ref="Author" minOccurs="0"
> maxOccurs="unbounded" />
> <xs:element ref="Date" />
> <xs:element ref="ISBN" />
> <xs:element ref="Publisher" />
> </xs:sequence>
> </xs:complexType>
> </xs:element>
> <xs:element name="Title" type="xs:string"/>
> <xs:element name="Author" type="xs:string"/>
> <xs:element name="Date" type="xs:string"/>
> <xs:element name="ISBN" type="xs:string"/>
> <xs:element name="Publisher" type="xs:string"/>
> </xs:schema>
>
> I executed the XPath using the non-schema-aware version of SAXON and
> got the result: 0
>
> That is what I expected.
>
> Then I executed the XPath using the schema-aware version of SAXON and
> got the same result.
>
> That is NOT what I expected.
>
> I expected SAXON to detect, by consulting the XML Schema, that Authr is
> not a legal child of Book and generate an error at compile-time.
>
> Note that this is a particularly troubling problem, since the XML
> Schema declares the number of occurrences of the <Author> element to be
> 0-to-unbounded; thus, a result of 0 is a legitimate value and the
> misspelling error may go undetected for a long time.
>
> QUESTIONS
>
> 1. Is it the responsibility of a schema-aware processor to catch
> misspelled tag names in XPath expressions?
>
> 2. Is there a flag that I can set in SAXON to tell it to catch such
> misspelling errors?
>
> 3. Are there any XSLT/XPath 2.0 processors that will match such
> misspelling errors?
>
> 4. Let me assume the answers to the three questions are No. Then ...
>
> 4.1 Is there a way to redesign the XPath such that the misspelling
> error would be caught?
>
> 4.2 Is there a way to redesign the XPath such that the misspelling
> error would be caught, regardless of whether a schema-aware or
> non-schema-aware processor is being used?
>
> Thanks!
>
> /Roger
|