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;