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
by
评论由: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
by
评论由:bendlas

顺便说一句,使用当前的 xmlns 支持,您将像这样编写您的片段


(alias-uri 'R "http://www.w3.org/1999/02/22-rdf-syntax-ns")
(emit-str {:tag ::R/RDF})
0
by
评论由: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
by
评论由: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
by

评论由:brutasse

谢谢。我们必须应对许多语言中各种方式破坏的 XML 消费者,因此对输出拥有完全控制权非常重要。

目前我们已回退到0.0.8。我们将看看是否改为 * {} 表示法,但这读起来不太愉快。

0

评论由:bendlas 提出

我在考虑一种适用于您用例的替代机制。结果,我对此表示否定是错误的。参见DXML-52以了解理由。

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