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

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

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 并从未更新,则此问题会导致您的代码出现问题:

`
<?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="}}" rel="nofollow" target="_blank">http://www.w3.org/1999/02/22-rdf-syntax-ns

一个人如何使用0.2发出{{<RDF xmlns="" rel="nofollow" target="_blank">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 "
生成了

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

评论由:brutasse

谢谢。我们必须应对众多在许多语言中损坏的各种方式的XML消费者,因此完全掌握输出是非常重要的。

目前我们已回退到0.0.8版本。我们将看看是否切换到 * } 符号,但它阅读起来并不那么愉快。

0

评论人:bendlas

我在考虑一个适用于您的用例的替换机制。结果,我对于拒绝这一点是错误的。请参阅DXML-52以了解原因。

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