2010-05-12 17 views
0

前言:这适用于一个Oracle 11gR1(Solaris 64)数据库,而不是第二个,我们无法弄清楚两个数据库之间的区别。不知怎的,复杂类型导致验证失败,此错误:如果我肠道架构定义,只有离开dbms_xmlschema无法验证complexType

-- Cleanup any existing schema 
begin 
dbms_xmlschema.deleteschema('shiporder.xsd',dbms_xmlschema.DELETE_CASCADE); 
end; 


-- Define the problem schema (adapted from http://www.w3schools.com/schema/schema_example.asp) 
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"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="orderperson" type="xs:string"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 


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

-- Attempt to validate 
declare 
bbb xmltype; 
begin 

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

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

     XMLType.schemaValidate(bbb); 
end; 

现在:

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 

但是模式是有效的(http://www.xmlme.com/Validator.aspx通过这个在线测试)字符串在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; 

回答

1

解决方案竟然是重建XDB,但是当这样做以确保没有Oracle进程挂在身边在服务器上,因为它们阻止XDB被正确构建并导致验证器失败。