请在 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 版本的 data.xml 生成以下 XML 并更新到 0.2.0,将破坏您的代码:

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

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


`

0

评论区留言:yegortimoshenko

...

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报告)
...