请在 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 "
发出

<?xml version="1.0" encoding="UTF-8"?><RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns" rel="nofollow" target="_blank"></a>
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报告)
...