Re: enclose output of transform in CDATA section
Thanks for your responses. I agree it is inappropriate to place an xml document in a CDATA section and will attempt to get the requirements changed. However as I am producing output for a client's existing system I will probably have to use one of the "dirty" solutions provided.
I completely disagree with Mike Kay on this issue: there is nothing in the XML specification that in any way suggests that it is "inappropriate" to include a syntactic XML document in a CDATA section and I can think of several cases when it would be useful to do so.
How is an XML document embedded in a CDATA section any different then, for example, an EPS graphic embedded inline in an fo:instream-graphic? In both cases you have one complete syntactic unit embedded inside another--the semantics of those syntactic units is irrelevant. And the processing of the embedded data is entirely an application-level issue that is not affected in any way by the syntax issues involved.
The XML specification provides no other way to truly embed one document inside another such that all the document-scoped name spaces (in the generic sense) maintain that scope in the embedded document. That is, while the XML Namespace spec allows you to embed one *element tree* inside another and keep the element type and attribute names distinct, it does not provide a way to keep the notation, entity, and ID name spaces unique and appropriately scoped--these can only be scoped by syntactic isolation. [And let me note that such embedding mechanisms have been discussed at length over the last 10 years, always coming to the conclusion that any markup-level solution would be so complicated as to be untenable, especially when you try to satisfy requirements for some sort of "schema import" mechanism.]
In addition, what if your outer XML document is some sort of payload wrapper (e.g., something like a SOAP message)? If the payload to be wrapped is another, syntactically distinct, XML document then putting that contained document inside a CDATA section is entirely appropriate.
Or said another way, there's no useful difference between embedding a syntactic XML document in which you escape all the markup and one in which you do not by dint of using a CDATA section--the semantic result is the same.
Note that the identity of an XML document *as a storage object* is entirely well defined when it is inside a CDATA marked section--simply address it by XPath relative to its containing document.
If you want to be 100% clear about what the purpose of your CDATA section is you should use a containing element whose content notation is "XML", e.g.:
<?xml version="1.0"?> <!DOCTYPE mywrapper [ <!NOTATION xml PUBLIC "http://www.w3.org/TR/xml" > <!ATTLIST mywrapper datatype NOTATION #FIXED "xml" > ]> <mywrapper> <![CDATA[ <?xml version="1.0"?> <mydoc/> ]]> </mywrapper>
Given this set of declarations, the syntax and the semantics of the embedded XML document are clear (although the XML declaration is sufficient to make the notation of the CDATA content clear in this case).
E. -- W. Eliot Kimber, eliot@xxxxxxxxxx Consultant, ISOGEN International
1016 La Posada Dr., Suite 240 Austin, TX 78752 Phone: 512.656.4139
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format