xsl-list
[Top] [All Lists]

[xsl] XSLT is not an editor [ was: [xsl] retaining entity declarations while converting from one xml format to another]

2009-12-16 10:53:47

I had a similar problem, and while searching thru the archives
( since I was sure it must be a FAQ ) I found a thread with a
good explanation by Ken Holman of why XSLT is NOT an EDITOR
that helped me to think about these problems:

        http://www.stylusstudio.com/xmldev/200905/post60080.html

        http://www.stylusstudio.com/xmldev/200905/post60090.html

The short version:
* XSLT constructs a new output (write-only) document from an input (read-only) document.
 * XSLT does not process XML syntax -- it processes XML infoset trees.

I suggest anyone who is confused about why you can't do this sort of thing
in XSLT read that thread. See also:
 Amelia Lewis: http://www.stylusstudio.com/xmldev/200905/post10080.html
 Michael Kay:  http://www.stylusstudio.com/xmldev/200905/post30080.html


However, despite the fact that XSLT was not designed for this sort of job, it does get used as an editor or filter of xml documents, for lack of a better
solution. ( Is XQuery with update intended to fill this gap ?  )

[1] We have tried using a perl script that:
        grabs and saves everything before the root element,
translates '&' character into some other character that doesn't occur in the document.
        ( settable on the command line )
        calls out to do an xslt transform ( with Saxon or xsltproc )
        pastes the saved prefix onto the output
        and does the reverse character translation back to '&'
( There may be some document cases where those steps would fail, but it works
   for our selection. )


[2] It's probably possible to do something similar to the above strictly in XSLT by reading the document as both XML and unparsed text. See Michesl Saxon's article
    on "Up-conversion using XSLT" :
                 http://www.saxonica.com/papers/ideadb-1.1/mhk-paper.xml
for input tips. Pasting the two output streams back together may also require some tricks. [ This is probably more complex that the perl solution above, but doing it all
      in XSLT may have workflow advantages in some cases. ]

[3] Other have mentioned Andrew Welch's LexEv, which is an XMLReader that converts lexical
    events (syntax) into markup:

        
http://ajwelch.blogspot.com/2008/08/lexev-xmlreader-converts-lexical-events.html

This seems like a much cleaner way to handle the pass thru of syntax elements, but it requires explicitly encoding the inverse operation in the stylesheet.
    Some examples in:

        
http://ajwelch.blogspot.com/2008/08/some-sample-templates-for-use-with.html

[4] Before finding the simpler solution (#1 above) I considered writing a tool that would pass thru all of the xml unchanged except for fragments that matched an xpath expression -- those fragments would be processed thru an xslt stylesheet.

Does anyone have any other tips on how to handle this sort of problem ?
Are there any XML editors that can work in batch mode using XPath expressions ? Is XQuery with update intended to solve this problem ? ( and are there any good
  implementations for this use ? )
[ This may be a bit off topic for xsl-list, but it does seem to be a FAQ. ]

-- Steve Majewski / UVA Alderman Library




--~------------------------------------------------------------------
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>
--~--