2024 Clojure 状态调查! 分享您的想法。

欢迎!请参阅 关于 页面以获取更多关于该功能的信息。

0 投票
data.xml
影响版本 0.2.0-alpha2,0.0.8 没有这个问题。

user=> (require '[clojure.data.xml :as xml])
nil
user=> (xml/emit-str {:tag :RDF :attrs {:xmlns "http://www.w3.org/1999/02/22-rdf-syntax-ns"}})
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><RDF></RDF>"

10 答案

0 投票

评论者:bendlas

按设计工作:由于您发出的是一个普通、无命名空间的元素,称为 RDF,因此无法设置默认 xmlns。

0 投票

评论者:yegortimoshenko

这是一个回归。如果您使用 data.xml 并使用版本 0.0.8 生成以下 XML,则它会破坏您的代码:

`
<?xml version="1.0" encoding="utf-8"?>

<Description about="urn:mozilla:install-manifest">
      <em:id>jid1-3MbuIoOYk03BMg@jetpack</em:id>
</Description>


`

0 投票

评论者:yegortimoshenko

...然后更新到 0.2.0。

0 投票
_评论由:bendlas_ 提供

0.0.8 版本根本不支持 xmlns,因此这不算是一个回归(我们甚至无法进行带命名空间的 XML 的往返处理)。能够以这种方式发出带命名空间的 XML 是一个偶然。

0.2.0 确立了 XML 命名空间的语义,其中一部分规定 {:tag :RDF} 总是表示 <RDF>(在空命名空间中),以便于组合。请参考 README 和设计页面中的当前语义 http://dev.clojure.org/display/DXML/Namespaced+XML

我们仍在 -alpha 阶段,如果您有改变语义的想法,请自由提出,并参考当前的设计。
0 投票
_评论由:bendlas_ 提供

顺便说一下,使用当前的 xmlns 支持,你会这样写你的片段


(alias-uri 'R "http://www.w3.org/1999/02/22-rdf-syntax-ns")
(emit-str {:tag ::R/RDF})
0 投票
_评论由:brutasse_ 提供

在 -alpha5 中,这将生成带前缀的标签/属性

{{<?xml version="1.0" encoding="UTF-8"?><a:RDF xmlns:a="http://www.w3.org/1999/02/22-rdf-syntax-ns"/>}}

如何使用 0.2 发出 {{<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns"/>}}
0 投票
_评论由:bendlas_ 提供

由于任何非损坏的 XML 消费者都不应该关心这种差异,data.xml 会随意发出前缀。
然而,它确实试图将发出前缀保持在最小,您可以利用这种行为来获取所需的序列化。

(alias-uri 'R "http://www.w3.org/1999/02/22-rdf-syntax-ns")
(emit-str {:tag ::R/RDF :attrs {:xmlns "http://www.w3.org/1999/02/22-rdf-syntax-ns"}})

生成

<?xml version="1.0" encoding="UTF-8"?><RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns"/>
0 投票

评论由:brutasse

谢谢。我们必须处理许多语言中的大量 XML 消费者,它们以各种方式出现故障,因此对输出有完全控制权非常重要。

目前我们已经退回到0.0.8版本。我们会看看是否转换到* }记法,但它的可读性较差。

0 投票
by

评论者:bendlas

我在想找一个适用于您用例的替换机制。实际上,我关于推迟这个的判断是错误的。请参阅DXML-52以了解理由。

0 投票
by
参考:https://clojure.atlassian.net/browse/DXML-43(由yegortimoshenko报告)
...