1

我需要将 XML 值与 PostgreSQL 9.X 进行比较。例子:

 SELECT 1 FROM t WHERE xml1=xml2; -- error for XML datatype

但只能转换为文本数据类型,

 SELECT 1 FROM t WHERE xml1::text=xml2::text; -- OK, but is a text-comparison

这不是最好的方法。我需要一个更好的比较算法...寻找它,我发现,也许可以比较“Canonical XML”。

如何使用 PostgreSQL 进行“规范 XML 比较”?


注意:PostgreSQL 团队假设 XML 比较的前提是错误的?

许多关于 XML 比较的文档表明规范 XML是该操作的参考格式。前任。在维基百科,他们说,

根据 W3C,如果两个 XML 文档具有相同的规范形式,那么这两个文档在给定的应用程序上下文中在逻辑上是等效的。

但是,PostgreSQL docs/9.2说,

xml 数据类型的不寻常之处在于它不提供任何比较运算符。这是因为对于 XML 数据没有定义良好且普遍有用的比较算法。

好吧,对我来说这是一个错误的前提,并且可以隐藏一个重要的 PostgreSQL 问题的真正缺乏。

4

1 回答 1

4

我为 PostgreSQL 中的 XML 类型实现做出了贡献,并且可能编写了您引用的大部分文档。

目前的情况有很多原因:

  • SQL 标准没有为 type 指定比较运算符xml
  • 在开始实施时,Canonical XML 并没有被广泛使用和理解(至少被相关人员认为是这样)。
  • XML 规范化不起作用存在某些限制。尽管这些在实践中可能很少见,但这会产生无法比较数据类型的某些值的情况,这会导致例如索引问题。(浮点类型的 NaN 值由于类似原因被分配了一个排序位置。)
  • 通过规范化进行比较是否适用于所有用途以及用户始终想要的内容仍然存在争议。

用于可选使用的 XML 规范化函数的实现肯定会受到欢迎。我实际上希望看到一个单独的xmlcanonical类型,但这将是相当多的工作。

于 2013-03-17T21:54:47.027 回答