xmltype column and schema validation broken on xs:choice elements
Date: Fri, 31 Oct 2008 03:21:12 -0700 (PDT)
Message-ID: <a66c9e79-3750-440d-a5c1-9355657b37c2@d10g2000pra.googlegroups.com>
I have a problem with schema validation on table with xmltype
column.
I have very simple schema: "X" root element with one of the "A" or "B"
child.
BEGIN
DBMS_XMLSCHEMA.registerSchema(schemaURL => '/schemas/test',
schemaDoc =>
'<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:annotation>
</xs:annotation>
<xs:element name="X">
<xs:complexType>
<xs:choice> <xs:element name="A" type="xs:anyType"/> <xs:element name="B" type="xs:anyType"/> </xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>',
local => true);
END;
/
I have a table as well with a xmltype column, bound to the above
schema
create table xx_test (
xml xmltype
) XMLTYPE COLUMN xml
XMLSCHEMA "/schemas/test"
ELEMENT "X";
Now when I am trying to insert a valid XML document, it works:
SQL> -- expecting row inserted
SQL> insert into xx_test (xml) values ('<X><A/></X>');
1 row inserted
But I am surprised this row is inserted as well:
SQL> -- expecting row rejected
SQL> insert into xx_test (xml) values ('<X/>');
1 row inserted
It seems the schema validation works, because if I try to insert a
totally wrong document it is rejected:
SQL> -- expecting row rejected
SQL> insert into xx_test (xml) values ('<X><WRONG_ELEMENT/></X>');
ORA-30937: No schema definition for 'WRONG_ELEMENT' (namespace
'##local') in parent '/X'
What is more interesting isSchemaValid member function of XMLType
works as expected with the above documents:
SQL> SELECT t.txt,
2 decode(xmltype(t.txt).isschemavalid('/schemas/test', 'X'),
0, 'invalid', 'valid') v
3 FROM (SELECT '<X><A/></X>' txt
4 FROM dual 5 UNION ALL 6 SELECT '<X><WRONG_ELEMENT/></X>' txt 7 FROM dual 8 UNION ALL 9 SELECT '<X/>' txt 10 FROM dual) t; TXT V ----------------------- -------
<X><A/></X> valid
<X><WRONG_ELEMENT/></X> invalid
<X/> invalid
Can you help me please?
Tested on Oracle versions:
- Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
- Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit
Production
Received on Fri Oct 31 2008 - 05:21:12 CDT