Re: PostgreSQL vs SQL/XML Standards

From: Chapman Flack <chap(at)anastigmatix(dot)net>
To: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>, Markus Winand <markus(dot)winand(at)winand(dot)at>
Cc: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: PostgreSQL vs SQL/XML Standards
Date: 2018-12-30 02:46:00
Message-ID: 5C283168.8060001@anastigmatix.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 11/12/18 04:58, Pavel Stehule wrote:
> It is assigned to January commitfest.

When I build this patch against master (4203842), it builds, but breaks
make check. The diffs seem only incidental (loss of some error context
output), but there are no make check errors building 4203842 unmodified,
so the patch has introduced them. Example:

*** ../postgresql/src/test/regress/expected/xml.out Sat Dec 29 19:58:41 2018
--- src/test/regress/results/xml.out Sat Dec 29 19:59:11 2018
***************
*** 9,16 ****
LINE 1: INSERT INTO xmltest VALUES (3, '<wrong');
^
DETAIL: line 1: Couldn't find end of Start Tag wrong line 1
- <wrong
- ^

=== ABOUT THE DOCUMENTATION ===

While this patch fixes bugs in the embedding of XPath 1.0 into PostgreSQL,
and that is good, I still think there is an elephant in the room, namely
that XPath 1.0 isn't the right language to embed. Clearly, that can't be
fixed as long as we rely on libxml, but I think our documentation could
(should) do a better job of warning users of the surprises that result.

My ideas for improving the documentation are not yet so finished as to
offer a patch, but here are some thoughts:

Of the 13 mentions in func.sgml of XPath (not counting its appearances
in function and parameter names), only one specifically says XPath 1.0,
and it is buried down at functions-xml-processing, not somewhere common
to all of them, like the introduction to functions-xml.

Really, all of our functions that refer to "XPath" mean XPath 1.0,
and because that version was essentially thrown away to produce the 2.0
and later versions, and that happened a dozen years ago, the documentation
needs to make that clear. Users who have learned XQuery, or XPath in the
last dozen years, need to know this is something very different, to avoid
walking into the traps.

I think:

1) Every reference to "XPath" or an "XPath expression" (that is the first
in the description of a function or parameter) should be spelled out as
"XPath 1.0".

2) There should be a section in one central place (clearly applying to
all of the XML functions), perhaps in the functions-xml introduction,
or a <footnote> to a paragraph there, or in an appendix (new section
under SQL Conformance?) that summarizes the gulf between XPath 1.0
and the later, XQuery-compatible versions. There should be cross-
reference links to this section from the "XPath 1.0" mentions in
individual function descriptions. The section could be a condensation
of [1] (and perhaps contain a link to [1], if links out to the wiki
are allowed), and link to the W3C compatibility notes at [2] and [3].

3) Currently, the description of XMLEXISTS notes that "the SQL standard
specifies ... the construct to take an XQuery expression ... but
PostgreSQL currently only supports XPath, which is a subset of XQuery".
The description of XMLTABLE does not have such a note, and needs one.
In both cases, the note should probably be nearer the top of the
description (for XMLEXISTS, it is currently at the bottom, after the
examples).

4) That note currently says "only supports XPath, which is a subset
of XQuery". That would be a fair claim if we meant XPath 2.0
or later, but not XPath 1.0 (which was not a subset of any version
of XQuery, and has fundamental incompatibilities with it). The note,
for both XMLEXISTS and XMLTABLE, should simply say "only supports
XPath 1.0", with a link to the section summarizing the incompatibilities.

Those are my thoughts on how a patch to the documentation could be
organized. Do they seem reasonable?

-Chap

[1]
https://wiki.postgresql.org/wiki/PostgreSQL_vs_SQL/XML_Standards#Related_to_version_of_XPath
[2] https://www.w3.org/TR/xpath20/#id-backwards-compatibility
[3]
https://www.w3.org/TR/2010/REC-xpath-functions-20101214/#xpath1-compatibility

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message David Rowley 2018-12-30 02:50:34 Re: Using Btree to Provide Sorting on Suffix Keys with LIMIT
Previous Message Noah Misch 2018-12-30 02:40:14 Re: Augment every test postgresql.conf