Subject:Different XPath results when using builit-in XQuery and Saxon Author:Philip Young Date:14 Jun 2007 10:21 AM
I use an XQuery to check for some error conditions in XML files that conform to the same schema. In the enclosed attachment you will see two XML files in the xml-error folder that I believe should produce error messages when the XQuery testerr.xql in the xql folder is applied.
I do get the expected errors when I use the built-in XQuery processor in Stylus Studio 2007 Enterprise R2 but if I switch to the Saxon processor the XQuery completes without errors.
Subject:Different XPath results when using builit-in XQuery and Saxon Author:Minollo I. Date:14 Jun 2007 10:45 AM
I tried your XQuery using both built-in, Saxon and DataDirect XQuery; and they all reported the same error.
You may want to update your installation to the latest maintenance package, to make sure you are not experiencing a problem that has been fixed in the recent past (http://www.stylusstudio.com/update).
Subject:Different XPath results when using builit-in XQuery and Saxon Author:Philip Young Date:14 Jun 2007 11:38 AM
I think you need to try the other file in the xml-error folder, i.e. reader-GIS009.xml.
I'm attaching a screen shot of the (correct) error message I get when I use the built-in XQuery processor. Saxon XQuery runs without error, i.e. it sends two lines of text to stdout.
Subject:Different XPath results when using builit-in XQuery and Saxon Author:Philip Young Date:14 Jun 2007 11:12 AM
I just upgraded to build 894i. Now both the built-in and Saxon XQuery processors correctly produce an error message for the test file readerList-GIS006.xml.
However, the built-in processor correctly flags reader-GIS009.xml but saxon does not. DataDirect complains about import-schema.
Subject:Different XPath results when using builit-in XQuery and Saxon Author:Minollo I. Date:14 Jun 2007 04:56 PM
Saxon is more aggressively optimizing your XQuery; as you do "if (empty(for ...", Saxon gets out of the loop as soon as it knows that the empty() function will return false, i.e. the first time the loop hits a good value.
This is a typical error in trying to use XQuery as a procedural language, rather than a purely functional one... You will need to adjust your XQuery to make sure it doesn't make assumptions on the way the XQuery is internally optimized; for example:
(for $rdr in $profile/gis:readerList/gis:reader
return
if ((xs:int($rdr/gis:numberMarksFront/@number) eq count($rdr/gis:readerMarkList/gis:readerMarkInfo[@loc-side = 'front']))
and (xs:int($rdr/gis:numberMarksBack/@number) eq count($rdr/gis:readerMarkList/gis:readerMarkInfo[@loc-side = 'back'])))
then ()
else error(xs:QName('gis:GIS009'), 'Mismatch between the number of marks and their locations')),
"Passed test reader-GIS009"