dbms_xmlschema无法使用complexType进行验证

dbms_xmlschema无法使用complexType进行验证,xml,oracle,xsd,oracle11g,Xml,Oracle,Xsd,Oracle11g,前言:这可以在一个Oracle 11gR1(Solaris 64)数据库上运行,而不能在第二个数据库上运行,我们无法找出这两个数据库之间的区别。complexType以某种方式导致验证失败,并出现以下错误: ORA-31154: invalid XML document ORA-19202: Error occurred in XML processing LSX-00200: element "shiporder" not empty ORA-06512: at "SYS.XMLTYPE",

前言:这可以在一个Oracle 11gR1(Solaris 64)数据库上运行,而不能在第二个数据库上运行,我们无法找出这两个数据库之间的区别。complexType以某种方式导致验证失败,并出现以下错误:

ORA-31154: invalid XML document
ORA-19202: Error occurred in XML processing
LSX-00200: element "shiporder" not empty
ORA-06512: at "SYS.XMLTYPE", line 354
ORA-06512: at line 13
但架构有效(通过此在线测试:)

--清除任何现有架构
开始
deleteschema('shiporder.xsd',dbms_xmlschema.DELETE_CASCADE);
结束;
--定义问题模式(改编自http://www.w3schools.com/schema/schema_example.asp)
开始
dbms_xmlschema.registerSchema('shiporder.xsd','
'所有者=>'斯科特';
结束;
--尝试验证
声明
bbb-xmltype;
开始
bbb:=XMLType('
约翰·史密斯
');
XMLType.schemaValidate(bbb);
结束;
现在,如果我去掉模式定义,在XML中只留下一个字符串,那么验证就通过了:

begin
dbms_xmlschema.deleteschema('shiporder.xsd',dbms_xmlschema.DELETE_CASCADE);
end;


begin
dbms_xmlschema.registerSchema('shiporder.xsd','<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="shiporder" type="xs:string"/>

</xs:schema>',owner=>'SCOTT');
end;

DECLARE
    xml XMLTYPE;
BEGIN

xml := XMLTYPE('<?xml version="1.0" encoding="ISO-8859-1"?>

<shiporder 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
  John Smith
</shiporder>');

    XMLTYPE.schemaValidate(xml);
END;
开始
deleteschema('shiporder.xsd',dbms_xmlschema.DELETE_CASCADE);
结束;
开始
dbms_xmlschema.registerSchema('shiporder.xsd','
'所有者=>'斯科特';
结束;
声明
xml-XMLTYPE;
开始
xml:=XMLTYPE('
约翰·史密斯
');
schemaValidate(xml);
结束;

解决方案原来是重建XDB,但这样做是为了确保服务器上没有挂起Oracle进程,因为它们会阻止正确构建XDB并导致验证程序失败

begin
dbms_xmlschema.deleteschema('shiporder.xsd',dbms_xmlschema.DELETE_CASCADE);
end;


begin
dbms_xmlschema.registerSchema('shiporder.xsd','<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="shiporder" type="xs:string"/>

</xs:schema>',owner=>'SCOTT');
end;

DECLARE
    xml XMLTYPE;
BEGIN

xml := XMLTYPE('<?xml version="1.0" encoding="ISO-8859-1"?>

<shiporder 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="shiporder.xsd">
  John Smith
</shiporder>');

    XMLTYPE.schemaValidate(xml);
END;