注册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
StringString
String
String2
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对于验证失败的结果抛出异常。