【问题标题】:dbms_xmlschema fail to validate with complexTypedbms_xmlschema 无法使用 complexType 验证
【发布时间】:2011-02-18 13:34:45
【问题描述】:

前言:这适用于一个 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

但架构有效(通过此在线测试:http://www.xmlme.com/Validator.aspx

-- 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;

现在,如果我对架构定义进行消化并在 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;

【问题讨论】:

    标签: xml oracle xsd oracle11g


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      • 2023-02-13
      • 2018-11-10
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      相关资源
      最近更新 更多