2024年Clojure状态调查!中分享您的观点。

欢迎!请参阅关于页面,了解更多关于此方法的信息。

0
data.xml
在data.xml中,目前没有与XML标签上的`xmlns="..."`等效的功能。空名称空间的标签将保留为空名称空间。


(emit-str {:tag :xmlns.goo/foo
           :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属性将与应用动态作用域下的转换区分不开。
- 不可忽略的API破坏(对于 alpha)
  设置::xmlns属性目前的用例是将它设置为元数据的快捷方式。
  - 是新行为的子集,
  - 只在尝试将非命名空间xml嵌入到具有覆盖::xmlns的片段时才会破裂(不太可能),
  - 可以通过一个函数来复制,设置元数据
- 知道xml语法

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

应更新https://dev.clojure.org/display/DXML/Namespaced+XML,以反映这一理由。

DXML-43已经建议了这一点,因此这也将重新开放。

1 个回答

0
...