Subjects
Home
Xalan extension functions
Fomatting question serializing DOM with pretty print
xalan with pull parser
Cannot find the declaration
Apache Xalan drop support to run on JRE 1 1 x
Why does Doctype change processing of a document
Node set to XML string via Java extensions in Xalan J: possible?
Templates/Transformers + thread safety???
Problem evaluating xpath with muliple prefix with different namespace
remove an arbitrary attribute from xsl output
Xalan3 XSLT 2 0 XPath 2 0 support?
Problem using compiled translets with Xalan !!
Xalan and jstl 1 1 problem with transform tag
NullPointer in DOM2DTM getLocalName
URIResolvers base parameter with xsltc and cascaded imports
Performance problem for Xalan J on intel dual core
Standard libraries in JAXP?
Serializing a DOM tree to XML file, customize entities replacement
Library Conflict Involving BCEL Library
A question on how users are using <xsl:message >
Kevin Cormier as a new Apache Xalan J committer
Struggling to iterate over tokenized string
Xalan count() trouble
Problem with recursive xpath
Error when switching to java 1 5
document( ' ')
Problem with Xalan2 7 0 transformation
cr/lf options
entity encoded XML
can xalan transform 2 xml using one xslt?
Xalan J JIRA defect review Monday October 16, 2006 from 2:00 to 3:30 pm ED
xsl transform with cdata section elements
xslt parameters not expanded
Weird behavior of XPath evaluate()
How to avoid <xsl:message > instruction prints stylesheet file informations ?
Cannot find SimpleTransform subdirectory after installing Xalan J
recover from document not found exceptions
jdk1 5 and Xalan jar differences?
Performance Issue
Error/Bug adding floating point numbers
XPathAPI: eval exp using nodes with default namespace
modifying xalan to output invalid XML
NullPointerException
mege two separate xml nodes into one
Is this a XALAN document identification bug?
is StylesheetRoot really java io Serializable ?
transform() fails for DOMSource but succeeds for StreamSource
Thoughts on Transformer parameter passing
HELP, Xalan and jstl 1 1 problem with transformer
Problem with XPath namespace axis?
string utils:replace deleting search string if replacement string is an HTML
help with enumeration values pls
xalan 2 5 1 vs 2 7 performance question
How to insert/update in XML document
HTML Serialization and Handling of Ampersands in HREF Attributes
XHTML link tag stripping
SystemId Unknown; Line #24; Column #49; java lang NullPointerException
xpath text() help
Apostrophe problem with xalan 2 7 0
How to set variables in XML document?
Links
Home
Oracle database error code ...
 
Search:  
Power your search with and, or, +, -, or "some phrase" operators.
Why does Doctype change processing of a document

Why does Doctype change processing of a document

2007-05-02       - By Larry Trammell
Reply:     1     2     3     4     5     6     7  

I think I understand your example. I was actually thinking about a slightly
different problem. I have a conventional XHTML input document with the
conventional XHTML namespace, and I want the output document to have similar
namespace and !DOCTYPE identification eventually. It is a pure restructuring
of XHTML, and the intent is not to strip away the namespace, rather "use the
one that is there."

Typical of XHTML, the tags I get from the input document like <p> and <body>
don't have explicit namespace prefixes. Given a choice with plenty of
coffee, I would like tags that reads like <p> or <body> in the output also.
(When using <xsl:copy-of> I get these.) To match input document tags in the
XSL templates I added a namespace declaration in the stylesheet. I didn't
know about the other techniques you described, and I have yet to try all of
them. The elements I generate receive the namespace prefix that I added.
Perfectly valid, but it shouldn't be necessary in the output document. That
was was my intent with the exclude-result-prefixes feature, but I'm not
quite there yet.

At this point it is mostly cosmetic. I think your notes have given me all of
the information I need to figure out how to fine tune this from here. But if
you already know the answer (I'll bet you do!) and post it, I will
definitely work through that too.

Thanks!


-----Original Message-----
From: Erin Harris [mailto:eharris@(protected)]
Sent: Wednesday, May 02, 2007 3:12 PM
To: Larry Trammell
Cc: Ferdinand Soethe; xalan-j-users@(protected)
Subject: RE: [Fwd: Re: Why does Doctype change processing of a document]



Hi,

The namespace declaration will always get generated if it is used.  Exclude
result prefixes won't do anything in the case that you mention because the
namespace is used in the output document.  When <xhtml:div> gets put in the
output document, it needs the namespace declaration for xhtml.

Any time you copy an element or create an element in the output document, if
it has a namespace associated with it then that namespace declaration must
also be put in the output document.  So if you are trying to get rid of
namespace declarations in the output document then you need to make sure all
of the elements you are creating have no namespace.

Here is an example that produces the same output whether or not the
namespace declaration in the xml file is there or not:

Stylesheet:

<?xml version="1.0"?>
<xsl:stylesheet
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   version="1.0">
<xsl:output method="xml" indent="yes"/>

<xsl:template match="*[local-name()='doc']">
 <out>
   <xsl:apply-templates select="*"/>
 </out>
</xsl:template>

<xsl:template match="*">
 <xsl:element name="{local-name()}">
   <xsl:apply-templates
select="*|@*|text()|processing-instruction()|comment()"/>
 </xsl:element>
</xsl:template>

<xsl:template match="@*|text()|processing-instruction()|comment()">
 <xsl:copy>
   <xsl:apply-templates
select="*|@*|text()|processing-instruction()|comment()"/>
 </xsl:copy>
</xsl:template>

</xsl:stylesheet>

Input xml (remove the namespace declaration on the doc element to see that
you still get the same output with or without it):

<?xml version="1.0"?>
<doc xmlns="my.org">
 <a number="1">a1</a>
 <b number="1">b1</b>
 <c number="1">c1</c>
 <a number="2">a2</a>
 <b number="2">b2</b>
</doc>

Thanks.

Erin Harris





Larry Trammell <larryt@(protected)>


02/05/2007 07:21 PM


To
Erin Harris/Toronto/IBM@(protected), Ferdinand Soethe <ferdinand@(protected)>

cc
xalan-j-users@(protected)

Subject
RE: [Fwd: Re: Why does Doctype change processing of a document]

 




Thank you Erin... I'm sure your comments will keep two of us very busy
thinking for a while. Oh, the pain!

Would you say that a reasonable solution to Ferdinand's problem of sometimes
namespace-decorated, sometimes not-decorated tags, could be:  when
generating literal elements, generate them with a specified namespace, e.g.

  <xhtml:div> etc.  

and then use exclude-result-prefixes  for that specified namespace? (I'll
ignore the irony that in order to omit the namespace, you specify it.)


-----Original Message-----
From: Erin Harris [mailto:eharris@(protected)]
Sent: Wednesday, May 02, 2007 1:32 PM
To: Ferdinand Soethe
Cc: xalan-j-users@(protected)
Subject: Re: [Fwd: Re: Why does Doctype change processing of a document]



Hi,

> except for the div-element

The div element is a literal element so all of the currently in scope
namespaces get copied to literal elements in the output document (unless
they have already been copied to a parent element).  From the XSLT 1.0
Specification, Section 7.7.1 Literal Result Elements (
<http://www.w3.org/TR/xslt#literal-result-element>
http://www.w3.org/TR/xslt#literal-result-element)

The created element node will also have a copy of the namespace nodes that
were present on the element node in the stylesheet tree with the exception
of any namespace node whose string-value is the XSLT namespace URI
(http://www.w3.org/1999/XSL/Transform), a namespace URI declared as an
extension namespace (see  <http://www.w3.org/TR/xslt#extension-element>
[14.1 Extension Elements]), or a namespace URI designated as an excluded
namespace.

> And also: I expected to be able to do away with /*[local-name()='html']
> now that xhtml is default namespace. But it doesn't work that way. Why?

The default namespace is not used when matching nodes.  From the XPath 1.0
Specification, Section 2.3 Node Tests (
<http://www.w3.org/TR/xpath#node-tests>
http://www.w3.org/TR/xpath#node-tests):

A  <http://www.w3.org/TR/REC-xml-names#NT-QName> QName in the node test is
expanded into an  <http://www.w3.org/TR/xpath#dt-expanded-name>
expanded-name using the namespace declarations from the expression context.
This is the same way expansion is done for element type names in start and
end-tags except that the default namespace declared with xmlns is not used:
if the  <http://www.w3.org/TR/REC-xml-names#NT-QName> QName does not have a
prefix, then the namespace URI is null (this is the same way attribute names
are expanded).

> and try to remove xhtml with  exclude-result-prefixes then things turn
> around. div will no longer have a namespace attribute while all the
> copied element do. Misterious really.

The copied elements are in the http://www.w3.org/1999/xhtml namespace in the
input document so the way copy works is that it makes sure that those
elements are also in that namespace in the output document.  Because you
excluded the namespace it no longer appears on the <div> element (which I
assume is the parent of the copied nodes) so now it must appear on the
copied nodes themselves since there is no ancestor which has declared the
namespace.

If you don't want any namespace declarations showing up at all in the output
document then you will probably have to do your own copy such as:

<xsl:template match="*">
<xsl:element name="{local-name()}">
  <xsl:apply-templates
select="*|@*|text()|processing-instruction()|comment()"/>
</xsl:element>
</xsl:template>

<xsl:template match="@*|text()|processing-instruction()|comment()">
<xsl:copy>
  <xsl:apply-templates
select="*|@*|text()|processing-instruction()|comment()"/>
</xsl:copy>
</xsl:template>

Thanks.

Erin Harris