请在 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 提供

这是一个回归问题。如果您已使用 0.0.8 版本的数据.xml 生成以下 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="

如何使用0.2修改为{{<RDF xmlns="
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 "
输出

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

评论者:brutasse

感谢。我们必须应对多种编程语言的XML消费者,它们存在各种问题,因此完全控制输出非常重要。

目前我们已退回到0.0.8版本。我们将看看是否切换到* }表示法,但这不太容易阅读。

0

评论由:bendlas 提供

我正在考虑为一个特定的使用场景制定替换机制。结果,我关于拒绝这个的方法是错误的。请参见DXML-52以了解原因。

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