Folks,

We have got some strange behavior while dealing with XSP pages containing
a lot of nested/scoped xml:lang attributes as well as XML-Namaspaces
(which are not used for taglibs but simply to differentiate tags into the
XSLT space).

foo.xml:
        <?xml version="1.0" encoding="UTF-8"?>
        <?xml-stylesheet href="foo.xsl" type="text/xsl" ?>
        <page version="1.0" xml:lang="en" xhtml="http://www.w3.org/1999/xhtml";>
                <pagetitle xml:lang="en">English</pagetitle>
                <sourceLanguage>en</sourceLanguage>
                <sentence>
                        <key xml:lang="en">key1</key><value xml:lang="en">test 
in English</value>
                 </sentence>
        </page>

is processed fine; and yields (full output a the end of this message):

        .. cut..
        <body>
        <h1>test in English</h1>
        </body>
        .. cut..

when (full xsl at the end of this msg):
        <xsl:template match="*" mode="body">
        <body>
                <h1><xsl:value-of select="//sentence[key='key1']/[EMAIL 
PROTECTED]:lang='en']" disable-output-escaping="yes"/></h1>
        </body>

is applied but this XSP:

        <?xml version="1.0" encoding="UTF-8" ?>
        <?xml-stylesheet href="NULL" type="application/x-xsp" ?>
        <?xml-stylesheet href="foo.xsl" type="text/xsl" ?>
        <xsp:page
                xmlns:xsp="http://apache.org/xsp/core/v1";
                xmlns:param="http://axkit.org/NS/xsp/param/v1";
        >
        <page version="1.0" xml:lang="en" 
xmlns:xhtml="http://www.w3.org/1999/xhtml"; >
                <pagetitle xml:lang="en">English</pagetitle>
                <sourceLanguage>en</sourceLanguage>
                <sentence>
                        <key xml:lang="en">key1</key><value xml:lang="en">test 
in English</value>
                  </sentence>
        </page>
        </xsp:page>

(page .. /page byte by byte the same as in the xml file) yields:

        <body>
        <h1></h1>
        </body>

without the key value. Using AxTraceIntermediate we can see xml:lang
beeing preserved (see end of file for those internediate files).

We find that things do work if we

        - remove any xmlns:foo namespace we define
        - put the tags in a flat namespace (we're NOT using taglibs)
        - and do an overall 's/xml:lang/lang/g'

To us it looks like a bug into the AxKit XML NS processing code and/or in
relation to xml:lang (is that very special to AxKit?) - it seems there is
a mention something about it into TODO of 1.62 though. Any immediate hint
or patch to apply ? (We tried on FreeeBSD and MacOSX).

Any pointers or suggestions as how to solve this ?

Dw

Full stylesheet:
<?xml version="1.0" ?>
<xsl:stylesheet
    version="1.0"
    xml:lang="en"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
        xmlns:xhtml="http://www.w3.org/1999/xhtml";
        xmlns="http://www.w3.org/1999/xhtml";>

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" 
omit-xml-declaration="yes" media-type="text/html" />
<xsl:variable name="sourceLanguage"><xsl:value-of 
select="/page/sourceLanguage"/></xsl:variable>
<xsl:template match="/">
        <html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en">
        <xsl:apply-templates select="." mode="header" />
        <xsl:apply-templates select="." mode="body" />
        </html>
</xsl:template>

<xsl:template match="*" mode="header">
        <head>
                <title><xsl:value-of select="./pagetitle"/></title>
        </head>
</xsl:template>

<xsl:template match="*" mode="body">
        <body>
                <h1><xsl:value-of select="//sentence[key='key1']/[EMAIL 
PROTECTED]:lang='en']" disable-output-escaping="yes"/></h1>
        </body>
</xsl:template>

</xsl:stylesheet>


corect HTML from .xml:
<html xmlns="http://www.w3.org/1999/xhtml";
xmlns:xhtml="http://www.w3.org/1999/xhtml"; xml:lang="en">
<head>
<title>English</title>
</head>
<body>
<h1>test in English</h1>
</body>
</html>


broken output from .xsp:

<html xmlns="http://www.w3.org/1999/xhtml";
xmlns:xhtml="http://www.w3.org/1999/xhtml"; xml:lang="en">
<head>
<title>English</title>
</head>
<body>
<h1></h1>
</body>
</html>

Intermediat files

foo.xsp.0
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet href="NULL" type="application/x-xsp" ?>
<?xml-stylesheet href="foo.xsl" type="text/xsl" ?>
<xsp:page
        xmlns:xsp="http://apache.org/xsp/core/v1";
        xmlns:param="http://axkit.org/NS/xsp/param/v1";
        >
<page version="1.0" xml:lang="en" xmlns:xhtml="http://www.w3.org/1999/xhtml"; >
        <pagetitle xml:lang="en">English</pagetitle>
        <sourceLanguage>en</sourceLanguage>
        <sentence>
                <key xml:lang="en">key1</key><value xml:lang="en">test in 
English</value>
          </sentence>
</page>
</xsp:page>

foo.xsp.1
<?xml version="1.0" encoding="UTF-8"?>
<page version="1.0" xml:lang="en"
xhtml="http://www.w3.org/1999/xhtml";><pagetitle
xml:lang="en">English</pagetitle><sourceLanguage>en</sourceLanguage><sentence><key
 xml:lang="en">key1</key><value xml:lang="en">test in 
English</value></sentence></page>


foo.xsp.2
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"; 
xmlns:xhtml="http://www.w3.org/1999/xhtml"; 
xml:lang="en"><head><title>English</title></head><body><h1></h1></body></html>

foo.xsp.XSP
package
Apache::AxKit::Language::XSP::ROOT::usr::local::www::data::www_2dchinglish::mockup::login::data::tmp2::foo_2exsp;
use Apache;
use Apache::Constants qw(:common);
use XML::LibXML;
Apache::AxKit::Language::XSP::Page->import( qw(__mk_text_node
__mk_comment_node __mk_ns_element_node __mk_element_node) );
use utf8;#initialize xsp namespace
#initialize xsp namespace


@Apache::AxKit::Language::XSP::ROOT::usr::local::www::data::www_2dchinglish::mockup::login::data::tmp2::foo_2exsp::ISA
= ('Apache::AxKit::Language::XSP::Page');
sub xml_generator {
my $class = shift;
my ($r, $cgi, $document, $parent) = @_;

$parent = __mk_element_node($document, $parent, q|page|);
$parent->setAttribute(q|version|,q|1.0|);
$parent->setAttribute(q|xml:lang|,q|en|);
$parent->setAttribute(q|xhtml|,q|http://www.w3.org/1999/xhtml|);
$parent = __mk_element_node($document, $parent, q|pagetitle|);
$parent->setAttribute(q|xml:lang|,q|en|);
__mk_text_node($document, $parent, q|English|);
$parent = $parent->getParentNode;
$parent = __mk_element_node($document, $parent, q|sourceLanguage|);
__mk_text_node($document, $parent, q|en|);
$parent = $parent->getParentNode;
$parent = __mk_element_node($document, $parent, q|sentence|);
$parent = __mk_element_node($document, $parent, q|key|);
$parent->setAttribute(q|xml:lang|,q|en|);
__mk_text_node($document, $parent, q|key1|);
$parent = $parent->getParentNode;
$parent = __mk_element_node($document, $parent, q|value|);
$parent->setAttribute(q|xml:lang|,q|en|);
__mk_text_node($document, $parent, q|test in English|);
$parent = $parent->getParentNode;
$parent = $parent->getParentNode;
$parent = $parent->getParentNode;

return OK;
}

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to