> It's the identity transform - that should not do anything except store the
> DOMSource in a Result.

Not if you're pretty printing with some kind of indent flag. That can't 
possibly do what it says if it's really an identity transform....

> Isn't the whole idea of XML Signature and Canonicalisation that exactly this
> should not happen?

Yes, but they don't work well, and it very much depends on namespace handling 
and the specifics of your document whether you'll break something by running it 
through a c14n step yourself. That can affect the namespaces in a destructive 
manner depending on the c14n the signature or reference(s) are using. Many 
serializers also affect namespaces in odd ways.

> When I hand XML over to some HTTP agent, there are almost
> certainly small changes (linefeeds etc.) that happen on the way to the
> destination.

If you change the whitespace, you're dead. None of the standard c14n algorithms 
will handle that. Whitespace is significant in XML, so it *will* change the 
digest. This is often surprising to people, but it's true. If you have some way 
to recover the original XML by knowing what whitespace was added or removed, 
then sure, you could deal with it, but in effect that's like having a new c14n 
or transform algorithm.

> In essence, what I need is to transfer the XML between sender and receiver.
> What kind of serialisation would you recommend for the transfer?

I definitely wouldn't use code that was likely to affect the DOM in any way. I 
would simply write out the DOM node by node using a serializer that was 
designed to do nothing else to it. Namespaces are another matter...it's often 
necessary to have a layer of code that handles namespace declarations up front 
so that the serializer isn't responsible for guaranteeing well-formedness.

And that doesn't even cover extension namespace issues, xsi:types, and so 
forth, where c14n itself has problems. My project has an entire library layer 
around DOM and xmlsec to address that stuff.

But you have to be *very* certain about no whitespace changes, above all else. 
That's the one thing we know will break it. That can have implications for your 
parser, of course, since you don't want it collapsing whitespace, and schema 
normalization will also affect linefeeds (not that you're validating, but it's 
an example).

-- Scott


Reply via email to