oracle xdb插件报错,注册XML Schema到ORACLE XDB并对XML进行验证

注册XML Schema到ORACLE XDB可以方便生成XML的验证。

What is an XML Schema?

An XML Schema is a language for expressing constraints about XML documents. There are several different schema languages in widespread use, but the main ones are Document Type Definitions (DTDs), Relax-NG, Schematron and W3C XSD (XML Schema Definitions). From this page you can find out more about DTDs and W3C XSD, since those are the primary schema languages defined at W3C.

the schema file ("shiporder.xsd"):

解锁xdb帐号,在xdb下注册xsd:

SQL> conn / as sysdba

Connected as SYS

SQL> alter user xdb account unlock identified by ******;

User altered

SQL> conn xdb/oracle;

Connected as xdb

使用DBMS_XMLSCHEMA.REGISTERSCHEMA注册xsd注册到xdb:

SQL> begin

dbms_xmlschema.registerschema(schemaurl => 'shiporder.xsd'

,schemadoc => bfilename('XMLDIR', 'shiporder.xsd')

,local => false

,gentypes => true

,genbean => false

,gentables => false

,force => false

,owner => 'XDB');

end;

/

PL/SQL procedure successfully completed

其中'XMLDIR'是ORACLE目录对象名,shiporder.xsd文件在这个目录下。

查看注册对象状态:

SQL> select s.schema_url, o.object_type, o.status

from user_xml_schemas s, user_objects o

where s.int_objname = o.object_name;

SCHEMA_URL OBJECT_TYPE STATUS

-------------------------------------------------- ------------------- -------

shiporder.xsd XML SCHEMA VALID

对于一些schema定义有递归引用,可能报错不能注册成功。参数force设为true强制注册,然后再进行编译。

SQL> DBMS_XMLSCHEMA.COMPILESCHEMA(schemaurl => 'shiporder.xsd');

DBMS_XMLSCHEMA.REGISTERSCHEMA有多种实现,详细说明参见官方文档。

注册之后可以验证xml文件了:

SQL> declare

v_xmldoc xmltype;

v_valid number;

begin

v_xmldoc := xmltype('<?xml version="1.0" encoding="UTF-8"?>

String

String

String

String

String

String

2

0.0

');

select v_xmldoc.isschemavalid('shiporder.xsd', 'shiporder') into v_valid from dual;

dbms_output.put_line('validate result is :' || v_valid);

if (v_valid <> 1) then

v_xmldoc.schemavalidate;

end if;

end;

/

validate result is :1

v_xmldoc.schemavalidate对于验证失败的结果抛出异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值