【问题标题】:How to do XML canonical comparison with PostgreSQL?如何与 PostgreSQL 进行 XML 规范比较?
【发布时间】:2013-03-18 05:54:47
【问题描述】:

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

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

但只能转换为 text 数据类型,

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

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

如何用 PostgreSQL 做“Canonical XML 比较”?


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

许多关于 XML 比较的文档表明 Canonical XML 是该操作的参考格式。前任。 at Wikipedia 他们说,

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

但是,PostgreSQL docs/9.2 说,

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

嗯,对我来说这是一个false premise,并且可以隐藏一个真正缺乏重要的PostgreSQL问题。

【问题讨论】:

  • 你的说法是正确的。随意添加拓扑排序和规范化(sp?)功能以及比较运算符,并将其作为补丁提交。

标签: xml postgresql compare


【解决方案1】:

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

目前出现这种情况的原因有很多:

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

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

【讨论】:

  • 首先:人类使用 PostgreSQL 节省了数百万美元;与这个大型软件合作的所有人,有福了!非常感谢您在软件和文档方面的工作!当然,感谢您的回答。就我个人而言,对我来说就像是关于这个问题的“官方立场”,所以是一个明确的答案。
  • 具有 XML 标准的 PostgreSQL 是如此重要...公众如何投票支持优先事项? (例如投票优先考虑xmlcanonical type 实施)
  • 投资,无论是时间还是金钱,都需要回报。如果该模块是公共优先级,那么对公共软件模块的投资是好的......请参阅此站点(stackoverflow),我们有一个非常好的机制(!)来登记投票,并消退到加权投票上下文和投票-它。请参阅 PostgreSQL 站点:只有 primitive mailing lists... ;-)。好吧,我可以帮助 PostgreSQL 社区安装和管理像 askbot 这样的东西。
  • 好吧,我不是 C 或 C++ 程序员... PostreSQL Wiki 非常适合开放式协作。所以,我可以帮助谈话/写作和“投票”(大厅?)......我正在 PostgreSQL Wiki 上创建我的“Hello worl page”......创建。我现在能做什么,这将有助于推进xmlcanonical type?在XML_Todo wiki-page 中添加提示?一些文档?
  • @PeterKrauss 你总是可以为xmlcanonical 类型创建赏金,甚至en.wikipedia.org/wiki/Binary_XMLjsonb 类型平行。
猜你喜欢
  • 2011-07-11
  • 1970-01-01
  • 2011-05-06
  • 2020-07-20
  • 2018-06-18
  • 2012-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多