Issue: Deprecation of the XML2 module 'xml_is_well_formed' function

Started by Mike Berrowover 15 years ago3 messages
#1Mike Berrow
mberrow@gmail.com

We need to make extensive use of the 'xml_is_well_formed' function provided
by the XML2 module.

Yet the documentation says that the xml2 module will be deprecated since
"XML syntax checking and XPath queries"
is covered by the XML-related functionality based on the SQL/XML standard in
the core server from PostgreSQL 8.3 onwards.

However, the core function XMLPARSE does not provide equivalent
functionality since when it detects an invalid XML document,
it throws an error rather than returning a truth value (which is what we
need and currently have with the 'xml_is_well_formed' function).

For example:

select xml_is_well_formed('<br></br2>');
xml_is_well_formed
--------------------
f
(1 row)

select XMLPARSE( DOCUMENT '<br></br2>' );
ERROR: invalid XML document
DETAIL: Entity: line 1: parser error : expected '>'
<br></br2>
^
Entity: line 1: parser error : Extra content at the end of the document
<br></br2>
^

Is there some way to use the new, core XML functionality to simply return a
truth value
in the way that we need?.

Thanks,
-- Mike Berrow

#2Robert Haas
robertmhaas@gmail.com
In reply to: Mike Berrow (#1)
Re: Issue: Deprecation of the XML2 module 'xml_is_well_formed' function

On Mon, Jun 28, 2010 at 11:03 AM, Mike Berrow <mberrow@gmail.com> wrote:

Is there some way to use the new, core XML functionality to simply return a
truth value
in the way that we need?.

Have you tried using a wrapper function like the one suggested
independently by Mike Rylander and David Fetter upthread? If so,
how'd it work out for you?

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise Postgres Company

#3Mike Berrow
mberrow@gmail.com
In reply to: Robert Haas (#2)
Re: Issue: Deprecation of the XML2 module 'xml_is_well_formed' function

Yes, I went ahead and tried the original suggestion.

Here is what the added function went in as:

CREATE OR REPLACE FUNCTION xml_is_ok(x text)
RETURNS boolean AS
$BODY$
BEGIN
PERFORM XMLPARSE( DOCUMENT x::XML );
RETURN TRUE;
EXCEPTION WHEN OTHERS THEN
RETURN FALSE;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
ALTER FUNCTION xml_is_ok(text) OWNER TO postgres;

It worked fine. Thanks Mike and David.

The only other issue is that when I benchmarked it on a 5,000 record data
set that I have,
the original XML2 function ('xml_is_well_formed') took about 9.5 seconds
and this (deprecation driven) replacement took about 17.2 seconds.

-- Mike Berrow

On Mon, Jun 28, 2010 at 7:51 PM, Robert Haas <robertmhaas@gmail.com> wrote:

Show quoted text

On Mon, Jun 28, 2010 at 11:03 AM, Mike Berrow <mberrow@gmail.com> wrote:

Is there some way to use the new, core XML functionality to simply return

a

truth value
in the way that we need?.

Have you tried using a wrapper function like the one suggested
independently by Mike Rylander and David Fetter upthread? If so,
how'd it work out for you?

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise Postgres Company