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

欢迎!有关如何使用本网站的更多信息,请参阅关于页面。

0
data.xml
在data.xml中,目前没有与XML标签上的`xmlns="..."`等效的功能。空命名空间的标签保持原样。


(emit-str {:tag :xmlns.goo/bar
           :attrs {:xmlns "goo"}})
           :content [
             {:tag :foo}]})


求解为


"<?xml version=\"1.0\" encoding=\"UTF-8\"?><foo xmlns=\"goo\"><foo xmlns=\"\" xmlns:a=\"goo\"/></foo>"


- 原因是为了实现解析XML的完美返回和值等价性-

然而,将空命名空间映射到默认命名空间对于许多用例来说是有效的,包括

- 符号简洁性
- 处理HTML解析器的输出

尽管符号简洁性看起来像是一个可以用词法作用域宏的好处,但似乎没有明确的使用案例,而且在XML片段中使用任意代码的可能性降低,这可能会使其使用不便。

另一方面,处理需要动态作用域的转换,而且许多用于符号简洁性的用例也可以使用这种方法实现。

因此,实现动态作用域转换的使用案例是合理的。
至于API,设置:xmlns属性有几个原因是有益的

- 不会影响往返
  以上被删除的的原因不适用,因为解析器永远不会产生包含:xmlns属性的片段
- 有限的影响组合性
  设置:xmlns属性将会在另一个:xmlns上应用转换,无法区分
- 可忽略的API中断(对于-alpha)
  设置:xmlns属性当前用作将属性设置为元数据的快捷方式。
  - 是新行为的一个子集,
  - 仅在将未命名空间XML嵌入到具有覆盖:xmlns的片段时才会打破(可能性不大),
  - 可以通过设置元数据的函数来复制
- 知识迁移自XML语法

因此,应通过设置:xmlns属性来公开动态作用域的默认xmlns功能。

https://dev.clojure.org/display/DXML/Namespaced+XML应更新,以反映此逻辑。

DXML-43已经建议这样做,所以它也将被重新打开。

1 个回答

0
by
参考:https://clojure.atlassian.net/browse/DXML-52(由bendlas报告)
...