cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jeff Turner <je...@apache.org>
Subject Re: Saxon broken -- DOMStreamer question
Date Sun, 16 Mar 2003 11:18:42 GMT
On Sun, Feb 16, 2003 at 10:21:58AM +0100, Bruno Dumon wrote:
> On Sun, 2003-03-16 at 09:02, Jeff Turner wrote:
> > Hi,
> > 
> > Currently, DOMStreamer.setNormalizeNamespaces() is hardcoded to true.
> > This fixes the xmlns problem with Xalan, but breaks it with Saxon.
> > 
> > Shouldn't we be doing the
> > AbstractTextSerializer.needsNamespacesAttributes() check in DOMSerializer
> > too?
> 
> I think it's more related to the "namespace-prefixes" parameter of the
> xml-parser component (see the cocoon.xconf). So it would make more sense
> to add a method createDOMStreamer to the Parser interface.
>
> But the decission to create xmlns attributes is in fact something that
> every SAX-generating component in the pipeline should be aware of and
> honor. And AFAIK most/all transformers only generate
> start/endPefixMapping events, and no xmlns attributes. So it seems only
> logical that the DOMStreamer also shouldn't generate xmlns attributes.

I agree; that is the default SAX2 behaviour.  DOMStreamer is currently
emulating namespace-prefixes=true, and as the JaxpParser javadoc says, Saxon
doesn't like this:

 * <li>namespace-prefixes (boolean, default = <code>false</code>) : do we
want
 *     namespaces declarations also as 'xmlns:' attributes ?<br>
 *     <i>Note</i> : setting this to <code>true</code> confuses some
XSL
 *     processors (e.g. Saxon).

So, by switching off xmlns attributes in DOMStreamer, Saxon is happy, and the
needsNamespacesAsAttribute pipe adapts things for Xalan.

I imagine things will still break with Saxon if users switch
'namespace-prefixes' to true in the XML parser, but that is nothing new, and
more of a Saxon enhancement than a Cocoon bug.

Thanks, it's all much less confusing now.

--Jeff

> If you want to quickly disable this behaviour in DOMStreamer so you can
> get on with your work, just disable the following lines:
> String pr1 = pr.equals("") ? "xmlns" : pr;
> String qn = pr.equals("") ? "xmlns" : "xmlns:" + pr;
> newAttrs.addAttribute("", pr1, qn, "CDATA", ns);
> 
> -- 
> Bruno Dumon                             http://outerthought.org/
> Outerthought - Open Source, Java & XML Competence Support Center
> bruno@outerthought.org                          bruno@apache.org
> 

Mime
View raw message