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,则会破坏您的代码:

`
<?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

我们目前仍处于-alph阶段,因此如果您有关于更改语义的想法,请随时提出您的意见,并引用当前的设计。
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消费者都不应该关心这种差异,数据.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](https://clojure.atlassian.net/browse/DXML-43)(由yegortimoshenko报告)
...