From: Ricardo Wurmus <rekado@elephly.net>
To: tomas@tuxteam.de
Cc: 20339@debbugs.gnu.org
Subject: bug#20339: sxml simple: sxml->xml mishandles namespaces?
Date: Tue, 21 Apr 2015 11:24:03 +0200 [thread overview]
Message-ID: <87oamh25sc.fsf@mango.localdomain> (raw)
In-Reply-To: <20150415194714.GA30295@tuxteam.de>
Hi Tomás,
tomas@tuxteam.de writes:
> When transforming SXML to XML, namespaces don't seem to be handled
> properly:
>
[...]
>
> The problem is that SXML used the concatenated (full) namespace with the
> name as tag (and attribute) names for namespaced items. When serializing
> to XML it should try to find abbreviations for those namespaces and issue
> the corresponding namespace declarations.
>
> Instead, sxml->xml tries to split the (namespace:name) combination
> at the first colon and to check the name -- and fails miserably at
> (namespace:name) combinations à la "http://www.w3.org/1999/xlink:href"
> (procedure check-name). Since there are two colons, the name part
> has now a colon.
xml->sxml has an optional #:namespaces argument, where you can pass an
alist of keys to URLs to be used in the sxml output:
(let* ((ns '((svg . "http://www.w3.org/2000/svg")
(xlink . "http://www.w3.org/1999/xlink")))
(the-sxml (xml->sxml the-svg #:namespaces ns)))
(display the-sxml))
=> (*TOP*
(svg:svg
(svg:rect (@ (y 5)
(x 5)
(width 20)
(stroke-width 2)
(stroke purple)
(id rect1)
(height 20)
(fill yellow)))
(svg:rect (@ (xlink:href #rect1)
(y 5)
(x 30)
(width 20)
(stroke-width 2)
(stroke purple)
(ry 5)
(rx 8)
(height 20)
(fill blue)))))
Passing this to sxml->xml yields:
<svg:svg>
<svg:rect y="5" x="5"
width="20"
stroke-width="2"
stroke="purple"
id="rect1"
height="20"
fill="yellow" />
<svg:rect xlink:href="#rect1"
y="5" x="30"
width="20"
stroke-width="2"
stroke="purple"
ry="5" rx="8"
height="20"
fill="blue" />
</svg:svg>
Unfortunately, sxml->xml will not replace the namespace abbreviations,
nor will it add appropriate xmlns attributes, so "svg" and "xlink" are
devoid of any meaning.
Since xml->sxml accepts a namespace alist I suppose it would make sense
to extend sxml->xml to do the same.
~~ Ricardo
next prev parent reply other threads:[~2015-04-21 9:24 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-15 19:47 bug#20339: sxml simple: sxml->xml mishandles namespaces? tomas
2015-04-20 7:45 ` bug#20339: [PATCH] sxml->xml and namespaces: updated patch tomas
2015-04-21 9:24 ` Ricardo Wurmus [this message]
2015-04-21 9:44 ` bug#20339: sxml simple: sxml->xml mishandles namespaces? tomas
2015-04-22 14:29 ` Ricardo Wurmus
2015-04-23 6:57 ` tomas
2015-04-23 7:04 ` Ricardo Wurmus
2015-04-23 7:40 ` tomas
2015-04-25 20:25 ` tomas
2015-04-26 10:28 ` tomas
2016-06-23 19:32 ` Andy Wingo
2016-07-13 13:24 ` tomas
2016-07-13 18:08 ` tomas
2016-07-14 10:10 ` Andy Wingo
2016-07-14 10:26 ` tomas
2019-02-04 20:44 ` Ricardo Wurmus
2019-02-04 22:55 ` John Cowan
2019-02-05 9:12 ` Ricardo Wurmus
2019-02-05 12:57 ` Ricardo Wurmus
2019-04-08 12:14 ` tomas
2019-02-12 9:56 ` tomas
2019-02-12 20:30 ` Ricardo Wurmus
2019-05-03 10:46 ` bug#20339: Taking a step back (was: sxml simple: sxml->xml mishandles namespaces?) tomas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87oamh25sc.fsf@mango.localdomain \
--to=rekado@elephly.net \
--cc=20339@debbugs.gnu.org \
--cc=tomas@tuxteam.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).