Re: PostgreSQL vs SQL/XML Standards

Pavel Stehule <pavel.stehule@gmail.com>

From: Pavel Stehule <pavel.stehule@gmail.com>
To: Chapman Flack <chap@anastigmatix.net>
Cc: Markus Winand <markus.winand@winand.at>, Alvaro Herrera <alvherre@2ndquadrant.com>, Tom Lane <tgl@sss.pgh.pa.us>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2018-12-30T08:23:16Z
Lists: pgsql-hackers
ne 30. 12. 2018 v 3:46 odesílatel Chapman Flack <chap@anastigmatix.net>
napsal:

> 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
> xml19: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
> -       ^
>

Unfortunately, there is a different releases of libxml2 with different
error reporting and it is hard (impossible) to prepare for all variants. :-/

I prepare xml.out for my FC29 (fresh libxml2) and for no support xml. Other
I prepare by patching - and this error (in context) is expected.


> === 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?
>

I agree with more stronger detail description about difference between
XPath, XPath2 and XQuery.

Some like "The XPath 1.0 is ancestor of XPath 2.0, that is part of XQuery.
..."

I don't think so link to wiki with any proposals is good idea.
Documentation should to describe current state, not what can be at some
future.

Regards

Pavel


> -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
>

Commits

  1. Improve documentation about our XML functionality

  2. Improve documentation about our XML functionality.

  3. Add volatile qualifier missed in commit 2e616dee9.

  4. Fix crash with old libxml2

  5. Fix minor deficiencies in XMLTABLE, xpath(), xmlexists()

  6. Fix the BY {REF,VALUE} clause of XMLEXISTS/XMLTABLE

  7. doc: Update README.links

  8. XPath fixes: