xsl-list
[Top] [All Lists]

Re: [xsl] Friday challenge: XSLT thats creates XPaths for meaningfully equivalent comparisons of XML files

2007-04-13 08:21:02
On 4/13/07, David Carlisle <davidc(_at_)nag(_dot_)co(_dot_)uk> wrote:
<checkXML>
   <xml src="file:/C:/test.xml">
      <check>/root[1]/foo[1]/text[1] = 'foo'</check>
      <check>/root[1]/foo[1]/@fooatt = 'att'</check>
      <check>/root[1]/bar[1]/text[1] = 'bar'</check>
      <check>/root[1]/bar[2]/text[1] = 'baz'</check>
   </xml>
</checkXML>

If you were looking for an existing format for that you could write the above
as a schematron fairly easily.

I looked briefly at Schematron and I'm afraid I wasn't that impressed.
I didn't see the reason to learn a new language for it to be
converted into an XSLT 1.0 stylesheet that I could do a better job of
writing myself.

This is why CheckXML was born - apply XSDs, XPaths and XSLTs (and
XQueries and RNGs) to your XML to check the correctness - you have the
full expressive power of the checking language to give you the best
possible error message and you can write all the checks in the
language you're already familiar with.

Also, (and don't flame me if I'm too wide of the mark here) the assert
statements in XML Schema 1.1 will effectively make Schematron
redundant.


In either case though there is the usual nuisance about serialising
xpaths and reading them back later of getting the namespace context
right.

The beta Schematron has some code to generate namespace-safe xpaths
from any node, which could be used, see:
http://eccnet.eccnet.com/pipermail/schematron-love-in/2007-February/000558.html


In either case though it seems like you could be generating a lot of
xpaths and then having to iterate over them, while schematron, or what I
guess checkXML could do is more general, for the specific job of
checking two documents can't you have a stylesheet that just tree walks
over the two trees in tandem, that way you never (much) need to
generate namespace-safe xpaths, as you can get the relevant  node names
as Qnames and do namespace aware QName comparisons. It's just
serialising the names to an Xpath string that loses the context.

I'm planning on taking mappings from the xml... I know this may not be
the "correct" way, but I really think "/a:b/a:b" is an acceptable
xpath when applied against an XML document where the user has supplied
both the xpath and the xml document...

cheers
andrew

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

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