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="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

评论由:bendlas 提出

我在考虑一个替代机制来解决你的用例。结果,我对拒绝这事是错的。参见DXML-52以了解理由。

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