Passing through entities unchanged when serializing

Monday, 9 September 2019 · 8 messages · last reply 10 Sep 2019
AM
Andreas Mixich9 Sep 2019 15:04 #
Hi, when serializing a string, that contains literal XML with entities, how do I pass through those entities unchanged? Example:
let $input := "<p>Lorem ipsum &apos; dolor sit amet </p>"
return serialize($input)
results in: &lt;p&gt;Lorem ipsum dolor sit amet, ' consectetur adipisicing elit.&lt;/p&gt; but I want: &lt;p&gt;Lorem ipsum dolor sit amet, &apos; consectetur adipisicing elit.&lt;/p&gt;
-- Minden jót, all the best, Alles Gute, Andreas Mixich
BD
Bridger Dyson-Smith9 Sep 2019 19:03 #
Hi Andreas - Have you tried using different serialization options? I.e., serialize.xq:
declare option output:method "xml";
declare option output:parameter-document "map.xml";
declare variable $input := "<p>Lorem ipsum, &apos; dolor sit amet.</p>";
serialize($input)
map.xml:
<serialization-parameters xmlns="
http://www.w3.org/2010/xslt-xquery-serialization">
  <use-character-maps>
    <character-map character="&apos;" map-string="&amp;apos;"/>
  </use-character-maps>
</serialization-parameters>
When run in the BaseX GUI, I get: &amp;lt;p&amp;gt;Lorem ipsum, &apos; dolor sit amet.&amp;lt;/p&amp;gt;, might be closer? I think you might have been experiencing the default 'basex' serialization option (see [1] for more). Hope that helps. Best, Bridger [1] http://docs.basex.org/wiki/Serialization
Quoted text · Andreas Mixich · 25 lines
On Mon, Sep 9, 2019 at 9:05 AM Andreas Mixich <mixich.andreas at gmail.com> wrote: > Hi, > > when serializing a string, that contains literal XML with entities, how do > I pass through those entities unchanged? > Example: > > let $input := "<p>Lorem ipsum &apos; dolor sit amet </p>" > return serialize($input) > > results in: > > &lt;p&gt;Lorem ipsum dolor sit amet, ' consectetur adipisicing > elit.&lt;/p&gt; > > but I want: > > &lt;p&gt;Lorem ipsum dolor sit amet, &apos; consectetur adipisicing > elit.&lt;/p&gt; > > -- > Minden jót, all the best, Alles Gute, > Andreas Mixich >
LQ
Liam R. E. Quinin reply to Andreas Mixich, 9 Sep 2019, 15:0410 Sep 2019 00:47 #
Quoted text · Andreas Mixich · 3 lines
On Mon, 2019-09-09 at 15:04 +0200, Andreas Mixich wrote: > when serializing a string, that contains literal XML with entities, > how do I pass through those entities unchanged?
One way is to use a character map, as Bridger Dyson-Smith described. Sometimes another way can be to have a version of the DTD in which the replacement text of the entity marks the presence of the entity, e.g. <!ENTITY eacute "&#38;eacute;"> but this will affect full-text searching of course. Liam
-- Liam Quin, https://www.delightfulcomputing.com/ Available for XML/Document/Information Architecture/XSLT/ XSL/XQuery/Web/Text Processing/A11Y training, work & consulting. Barefoot Webslave for old illustrations http://www.fromoldbooks.org/
AM
Andreas Mixich10 Sep 2019 02:59 #
I wonder why the serialization behaves that way. It does not make sense to me. If a user has the need to escape XML, it should be thorough, shouldn't it?
Quoted text · Liam R. E. Quin · 22 lines
On Mon, Sep 9, 2019 at 10:47 PM Liam R. E. Quin <liam at fromoldbooks.org> wrote: > On Mon, 2019-09-09 at 15:04 +0200, Andreas Mixich wrote: > > when serializing a string, that contains literal XML with entities, > > how do I pass through those entities unchanged? > > One way is to use a character map, as Bridger Dyson-Smith described. > > Sometimes another way can be to have a version of the DTD in which the > replacement text of the entity marks the presence of the entity, e.g. > <!ENTITY eacute "&#38;eacute;"> > but this will affect full-text searching of course. > > Liam > > -- > Liam Quin, https://www.delightfulcomputing.com/ > Available for XML/Document/Information Architecture/XSLT/ > XSL/XQuery/Web/Text Processing/A11Y training, work & consulting. > Barefoot Webslave for old illustrations http://www.fromoldbooks.org/ > >
-- Minden jót, all the best, Alles Gute, Andreas Mixich
AM
Andreas Mixichin reply to Liam R. E. Quin, 10 Sep 2019, 05:3710 Sep 2019 03:41 #
Quoted text · Liam R. E. Quin · 5 lines
On Tue, Sep 10, 2019 at 3:37 AM Liam R. E. Quin <liam at fromoldbooks.org> wrote: > XML entities are expanded by he XML parser, so by the time XQuery (or > XSLT) sees the document they are gone. >
Ah, yes, I totally forgot about that! Thanks for clarification!
BD
Bridger Dyson-Smithin reply to Andreas Mixich, 10 Sep 2019, 02:5910 Sep 2019 05:12 #
Hi Andreas - I'm not sure (way outside of my wheelhouse :), but I think because arbitrary serialization can generate invalid XML, so having a character map makes the possible invalidity explicit? Now that I've typed that, I'm not sure if that captures the rational or not. :) In any case, here's what the specifications have to say[1]. Best, Bridger [1] https://www.w3.org/TR/xslt-xquery-serialization-31/#character-maps
Quoted text · Andreas Mixich · 34 lines
On Mon, Sep 9, 2019 at 9:00 PM Andreas Mixich <mixich.andreas at gmail.com> wrote: > I wonder why the serialization behaves that way. It does not make sense to > me. If a user has the need to escape XML, it should be thorough, shouldn't > it? > > On Mon, Sep 9, 2019 at 10:47 PM Liam R. E. Quin <liam at fromoldbooks.org> > wrote: > >> On Mon, 2019-09-09 at 15:04 +0200, Andreas Mixich wrote: >> > when serializing a string, that contains literal XML with entities, >> > how do I pass through those entities unchanged? >> >> One way is to use a character map, as Bridger Dyson-Smith described. >> >> Sometimes another way can be to have a version of the DTD in which the >> replacement text of the entity marks the presence of the entity, e.g. >> <!ENTITY eacute "&#38;eacute;"> >> but this will affect full-text searching of course. >> >> Liam >> >> -- >> Liam Quin, https://www.delightfulcomputing.com/ >> Available for XML/Document/Information Architecture/XSLT/ >> XSL/XQuery/Web/Text Processing/A11Y training, work & consulting. >> Barefoot Webslave for old illustrations http://www.fromoldbooks.org/ >> >> > > -- > Minden jót, all the best, Alles Gute, > Andreas Mixich >
LQ
Liam R. E. Quinin reply to Andreas Mixich, 10 Sep 2019, 02:5910 Sep 2019 05:37 #
Quoted text · Andreas Mixich · 5 lines
On Tue, 2019-09-10 at 02:59 +0200, Andreas Mixich wrote: > I wonder why the serialization behaves that way. It does not make > sense to > me. If a user has the need to escape XML, it should be thorough, > shouldn't it?
XML entities are expanded by he XML parser, so by the time XQuery (or XSLT) sees the document they are gone. Consider an entity like <!ENTITY boy "<person><socks>black</socks><eyes>grey</eyes><name>Steven</name></pers on>">
<students>&boy</students>
It'd be really complex to have that visible to XPath and to have to write, e.g. ..../students/entity(*)/person If it's an external parsed entity it's visible in that the base-uri property changes, but that's all. Character entities like &rcedilla; (ŗ) are just special cases of general entities, and XML does not distinguish them. I wish it did, but we never got back to that work after publishing XML 1.0. Liam
-- Liam Quin, https://www.delightfulcomputing.com/ Available for XML/Document/Information Architecture/XSLT/ XSL/XQuery/Web/Text Processing/A11Y training, work & consulting. Web slave for vintage clipart http://www.fromoldbooks.org/
BD
Bridger Dyson-Smith10 Sep 2019 05:46 #
Ha ha, awesome Liam! Thank you for clarifying! Best, Bridger
Quoted text · Liam R. E. Quin · 38 lines
On Mon, Sep 9, 2019 at 9:37 PM Liam R. E. Quin <liam at fromoldbooks.org> wrote: > On Tue, 2019-09-10 at 02:59 +0200, Andreas Mixich wrote: > > I wonder why the serialization behaves that way. It does not make > > sense to > > me. If a user has the need to escape XML, it should be thorough, > > shouldn't it? > > XML entities are expanded by he XML parser, so by the time XQuery (or > XSLT) sees the document they are gone. > > Consider an entity like > <!ENTITY boy > "<person><socks>black</socks><eyes>grey</eyes><name>Steven</name></pers > on>"> > > <students>&boy</students> > > It'd be really complex to have that visible to XPath and to have to > write, e.g. > ..../students/entity(*)/person > > If it's an external parsed entity it's visible in that the base-uri > property changes, but that's all. > > Character entities like &rcedilla; (ŗ) are just special cases of > general entities, and XML does not distinguish them. I wish it did, but > we never got back to that work after publishing XML 1.0. > > Liam > > -- > Liam Quin, https://www.delightfulcomputing.com/ > Available for XML/Document/Information Architecture/XSLT/ > XSL/XQuery/Web/Text Processing/A11Y training, work & consulting. > Web slave for vintage clipart http://www.fromoldbooks.org/ > >

⚡Generated with XQuery