1

我正在学习 XQuery 和 MarkLogic。我遇到过一张地图,它似乎就像其他语言中的哈希,但似乎您只需使用结构化语言的内置功能即可完成您需要的操作。

与结构化语言相比,map:map() 有什么好处吗?

谢谢!

4

2 回答 2

2

我主要看到两个原因:

  • 将数据存储在 XML 片段中需要复制数据。如果您有大量数据,这可能会很昂贵。地图应该在内存中。
  • XQuery 3.0 使函数成为 XQuery 的一等公民,因此您可以将函数用作映射中的值项。使用 XML 这是不可能的。
于 2013-05-24T16:44:44.573 回答
2

地图已添加到 XSLT 3.0 工作草案中,并且一些 XQuery 供应商已经开始在将它们包含在 XQuery 语言中之前实现它们。

需要它们的原因有很多。XML 元素不能包含任意值:例如,XML 元素的属性不能是文档或元素节点,或者包含一个字符串后跟两个整数的序列,或者一个函数。此外,由于 XML 节点具有身份和父信息,因此复制它们是一项昂贵的操作,并且(除了在 XQuery 更新的有限范围内)您不能在不复制整个内容的情况下修改 XML 树。相比之下,即使使用非可变映射,使用 delta 也可以非常便宜地制作修改后的副本。

顺便说一句,地图有大量不同语言的不同名称。术语“hash”、“dictionary”、“associative array”、“object”都会遇到。“地图”一词似乎是现代函数式语言中最常见的一个。“哈希”强烈建议实现,建议必须将映射实现为哈希表是错误的。其他数据结构,如红黑树或手指树可能更合适。

于 2013-05-25T08:04:35.310 回答