ここにファイルyo.svgがあります:
<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="50" stroke="black" stroke-width="2" fill="red" />
</svg>
Firefox と Chrome の両方で、黒い境界線のある赤い円としてレンダリングされます。(ただし、他のブラウザが何をするかはわかりません)。
以下はいくつかの clojure コード (バージョン 1.4) で、それを取得してyo.svgに書き出し、解析し、再エンコードして、結果をyo2.svgに書き出します。次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<svg width="200" height="200">
<circle cx="50" cy="50" r="50" stroke="black" stroke-width="2" fill="red"/>
</svg>
明らかに、clojure は変更を加えています。どちらのブラウザもyo2.svgをレンダリングしません。
私は何か間違ったことをしていると考えていますが、かなりの調査により当惑しました。
なぜ clojure がこれらの変更を行っているのか、また clojure.data.xml を無視して手動で xml を生成するのか、それとも clojure.data.xml を使用して中間処理を行い、独自のヘッダーを作成するのかを考えています。svg は xml の一種ですか?
これが私のclojureプログラムです:
(require 'clojure.data.xml)
(let [ xml-picture "<svg width=\"200\" height=\"200\" xmlns=\"http://www.w3.org/2000/svg\">
<circle cx=\"50\" cy=\"50\" r=\"50\" stroke=\"black\" stroke-width=\"2\" fill=\"red\" />
</svg>"
round-trip-picture (clojure.data.xml/indent-str
(clojure.data.xml/parse-str
xml-picture))]
(spit "yo.svg" xml-picture)
(spit "yo2.svg" round-trip-picture)
(println xml-picture)
(println "------------------")
(println round-trip-picture))