2010-05-12 19 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被正確構建並導致驗證器失敗。