Hi Hugh,

Did you see Christian’s reply, archived at https://mailman.uni-konstanz.de/pipermail/basex-talk/2018-August/013490.html⁠?

He essentially said that, for your second approach, he saw the same behavior on BaseX 9.x as I saw on 8.6.5. So there doesn’t seem to be a regression.

I agree with you that xslt:transform-text() is not a solution.

Gerrit


On 01.08.2018 23:47, Hugh Guiney wrote:
Thanks for testing Gerrit, that's good to know. Sounds like a
regression then. Shall I go ahead and file this on Github or does it
need further confirmation?

Christian, your suggestion seems to work around the issue; the CDATA
sections do come in that way. Except, all the elements get sent back
entity-escaped for some reason. I have to manually reverse it back
into XML using `result.replace( /&gt;/gi, '>' ).replace( /&lt;/gi, '<'
)` in JavaScript. Not sure if that is a separate issue or expected
behavior.

On Wed, Aug 1, 2018 at 2:50 PM, Imsieke, Gerrit, le-tex
<gerrit.imsi...@le-tex.de> wrote:
Hi Hugh,

The second version where you specify the serialization options in XQuery
works for me (BaseX GUI 8.6.5 with Saxon PE 9.6.0.7):

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns="http://backend.userland.com/rss2";
xmlns:content="http://purl.org/rss/1.0/modules/content/"; version="2.0">
   <content:encoded><![CDATA[hi]]></content:encoded>
   <content:encoded><![CDATA[howdy]]></content:encoded>
   <content:encoded/>
</rss>

The first version cannot generate CDATA sections since the XSLT processor is
not serializing anything; it’s the XQuery processor that serializes the
result.

The error that you are seeing, XPST0081, would be generated if there were no
namespace declaration for the prefix 'content', maybe caused by an
indistinguishable look-alike non-ASCII character in 'content'. Doesn’t seem
to be the case. Maybe this is a bug that is specific to BaseX 9?

Gerrit



On 01.08.2018 21:17, Hugh Guiney wrote:

Hello,

First off, loving BaseX so far! Using it as the backend for an API I’m
building. However, I’m running into an issue. I’m trying to transform
my database XML into an RSS 2.0 feed. It’s mostly working fine, but I
can’t output CDATA content at all, which I need to do for
`content:encoded` elements.

Specs:

- BaseX 9.0.2 (started via basexserver script)
- Saxon-HE 9.8.0.12J from Saxonica
- java version "1.8.0_112"
- basex 0.9.0 (NodeJS)
- macOS Sierra 10.12.6

### First Attempt

I set `cdata-section-elements` in the XSLT.

rss.xq:
```
xquery version "3.0";
declare option output:omit-xml-declaration "no";

let $in :=
    <root>
      <child>hello</child>
    </root>
let $style := doc( 'rss.xslt' )
return xslt:transform( $in, $style )
```

rss.xslt:
```
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform
    version="3.0"
    xmlns="http://backend.userland.com/rss2";
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    xmlns:content="http://purl.org/rss/1.0/modules/content/";


    <xsl:output
      omit-xml-declaration="no"
      cdata-section-elements="content:encoded"
    />
    <xsl:template match="/">
      <rss version="2.0">
        <content:encoded>hi</content:encoded>
        <content:encoded><xsl:text>howdy</xsl:text></content:encoded>
        <content:encoded><xsl:value-of select="//child"
/></content:encoded>
      </rss>
    </xsl:template>
</xsl:transform>
```

Result:
```
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns="http://backend.userland.com/rss2";
xmlns:content="http://purl.org/rss/1.0/modules/content/";
version="2.0">
    <content:encoded>hi</content:encoded>
    <content:encoded>howdy</content:encoded>
    <content:encoded>hello</content:encoded>
</rss>
```

No CDATA sections.

### Second Attempt

I set `cdata-section-elements` in the XQuery.

rss.xq:
```
xquery version "3.0";
declare namespace content = "http://purl.org/rss/1.0/modules/content/";;
declare option output:omit-xml-declaration "no";
declare option output:cdata-section-elements "content:encoded";

let $in :=
    <root>
      <child>hello</child>
    </root>
let $style := doc( 'rss.xslt' )
return xslt:transform( $in, $style )
```

rss.xslt:
[Unchanged]

Result:
[XPST0081] No namespace declared for 'content:encoded'.

Clearly I declared the namespace two lines up.

This looks like a bug to me, but any help appreciated if I’ve missed a
step here.

Thanks,
Hugh



--
Gerrit Imsieke
Geschäftsführer / Managing Director
le-tex publishing services GmbH
Weissenfelser Str. 84, 04229 Leipzig, Germany
Phone +49 341 355356 110, Fax +49 341 355356 510
gerrit.imsi...@le-tex.de, http://www.le-tex.de

Registergericht / Commercial Register: Amtsgericht Leipzig
Registernummer / Registration Number: HRB 24930

Geschäftsführer / Managing Directors:
Gerrit Imsieke, Svea Jelonek, Thomas Schmidt

Reply via email to