Serialization question (#2)
Added by Anonymous over 15 years ago
Legacy ID: #7269076 Legacy Poster: David Lee (daldei)
This is a further discusion of the thread "XdmNode toString, Processor.writeXdmValue prb " but it was getting so indented its hard to read. I ran into another related problem in searializing using Processor.writeXmmValue and XdmValue.toString() and also using the xquery run() method. Suppose I have a document with declared namespaces: -------- <t:test xmlns:t="http://xproc.org/ns/testsuite" xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" xmlns:err="http://www.w3.org/ns/xproc-error"> <t:input port="source"> <t:document> <doc>Text</doc> </t:document> </t:input> </t:test> ---------- If I run the xquery '//doc' and serialize with XQueryEvaluator.run() or with Processor.writeXdmValue() I get ------ <doc xmlns:t="http://xproc.org/ns/testsuite" xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" xmlns:err="http://www.w3.org/ns/xproc-error">Text</doc> ----- My first question is: Is this the expected output ? Should the unused namespace declarations be output on this node ? Second, if instead I use my own serializer using the ComplexContentOutputter I get ----- <doc>Text</doc> ---- This is what I would nievely assume is correct. Now here's the fun part. If instead I run the xquery <wrap>{//doc}</wrap> Using my serializer I get -------- <wrap> <doc xmlns:t="http://xproc.org/ns/testsuite" xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" xmlns:err="http://www.w3.org/ns/xproc-error">Text</doc> </wrap> --------- And when I run document { //doc } I get ------ <doc xmlns:t="http://xproc.org/ns/testsuite" xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" xmlns:err="http://www.w3.org/ns/xproc-error">Text</doc> -------- SO what appears to be happening to me is that the ComplexContentOutputter is only removing redundant namespace declarations if they appear on the root node (either an element or a document). My questions are 1) What is the expected behaviour ? Is it expected that unused namespace declarations be output ? 2) Any suggestions on a seraialization strategy which universally removes unused namespace declarations from all child elements ? Is that a reasonable thing to expect possible ? Thanks for any suggestions -David
Replies (2)
RE: Serialization question (#2) - Added by Anonymous over 15 years ago
Legacy ID: #7269104 Legacy Poster: Michael Kay (mhkay)
>My first question is: Is this the expected output ? Should the unused namespace declarations be output on this node ? Yes, it is correct. The XDM data model effectively replicates the namespaces on all elements where they are in scope. It's not implemented like that internally in Saxon, but that's the model. >if instead I use my own serializer using the ComplexContentOutputter I can't really comment on what your code is doing without studying it in detail. >Any suggestions on a seraialization strategy which universally removes unused namespace declarations from all child elements ? Architecturally, it's not the job of the serializer to add or remove namespaces. That's a transformation task. Internally, however, it can be done at a low level using the different options of the NodeInfo.copy() method.
RE: Serialization question (#2) - Added by Anonymous over 15 years ago
Legacy ID: #7269248 Legacy Poster: David Lee (daldei)
Thank you. Knowing whats expected output is a great help. I'll take a look at the NodeInfo.copy method.
Please register to reply