Re: Add XMLNamespaces to XMLElement - Mailing list pgsql-hackers

From Pavel Stehule
Subject Re: Add XMLNamespaces to XMLElement
Date
Msg-id CAFj8pRBMZcKQq3hgb2PntLWSG8vRGtZcrgmw9c_ct8E5Lpf8kw@mail.gmail.com
Whole thread Raw
Responses Re: Add XMLNamespaces to XMLElement
List pgsql-hackers
Hi

so 21. 12. 2024 v 0:51 odesílatel Jim Jones <jim.jones@uni-muenster.de> napsal:
Hi,

I'd like to propose the implementation of the XMLNamespaces option for
XMLElement.

XMLNAMESPACES(nsuri AS nsprefix)
XMLNAMESPACES(DEFAULT default-nsuri)
XMLNAMESPACES(NO DEFAULT)

* nsprefix:              Namespace's prefix.
* nsuri:                 Namespace's URI.
* DEFAULT default-nsuri: Specifies the DEFAULT namespace to use within
the scope of a namespace declaration.
* NO DEFAULT:            Specifies that NO DEFAULT namespace is to be
used within the scope of a namespace declaration.

This basically works pretty much like XMLAttributes, but with a few more
restrictions (see SQL/XML:2023, 11.2 <XML lexically scoped options>):

* XML namespace declaration shall contain at most one DEFAULT namespace
declaration item.
* No namespace prefix shall be equivalent to xml or xmlns.
* No namespace URI shall be identical to http://www.w3.org/2000/xmlns/
or to http://www.w3.org/XML/1998/namespace.
* The value of a namespace URI contained in an regular namespace
declaration item (no DEFAULT) shall not be a zero-length string.

Examples:

SELECT xmlelement(NAME "foo", xmlnamespaces('http://x.y' AS bar));
          xmlelement           
-------------------------------
 <foo xmlns:bar="http://x.y"/>

SELECT xmlelement(NAME "foo", xmlnamespaces(DEFAULT 'http://x.y'));
        xmlelement         
---------------------------
 <foo xmlns="http://x.y"/>

SELECT xmlelement(NAME "foo", xmlnamespaces(NO DEFAULT));
   xmlelement    
-----------------
 <foo xmlns=""/>

In transformXmlExpr() it seemed convenient to use the same parameters to
store the prefixes and URIs as in XMLAttributes (arg_names and
named_args), but I am still not so sure it is the right approach. Is
there perhaps a better way?

Any thoughts? Feedback welcome!

+1

Pavel

Best, Jim

pgsql-hackers by date:

Previous
From: Vik Fearing
Date:
Subject: Re: Discussion on a LISTEN-ALL syntax
Next
From: "Joel Jacobson"
Date:
Subject: Re: New "single" COPY format