【发布时间】:2013-09-03 22:17:41
【问题描述】:
我正在尝试对 PLSQL 中的 XML 文档执行 XSD 验证,但无法正常工作。
我创建了一个XMLTYPE 对象,当我针对它调用isSchemaBased() 时,它返回0(假)。现在显然XMLTYPE 需要基于模式才能进行验证,我发现您可以通过针对XMLTYPE 调用createSchemaBasedXML 来制作基于模式的版本。我遇到的问题是我的架构分为两部分(不幸的是,组合架构文件不是一个选项),这意味着当我尝试并createSchemaBasedXML 指定主架构时它失败了,因为它无法解析引用它是从第二个 XSD 文档导入的。
-- lxml is the XMLTYPE which has been populated with the XML before this point
dbms_xmlschema.registerSchema(
schemaURL => mainSchemaURL,
schemaDoc => mainSchemaDoc,
local => true,
genTypes => true,
genTables => false,
force => true,
enableHierarchy => dbms_xmlschema.ENABLE_HIERARCHY_NONE);
dbms_xmlschema.registerSchema(
schemaURL => importedSchemaURL,
schemaDoc => importedSchemaDoc,
local => true,
genTypes => true,
genTables => false,
force => true,
enableHierarchy => dbms_xmlschema.ENABLE_HIERARCHY_NONE);
if lxml.isSchemaBased() = 1 then
dbms_output.put_line('Schema based');
else
dbms_output.put_line('Non-schema based');
end if;
dbms_ouput.put_line('About to apply schema');
lxml := lxml.createSchemaBasedXML(mainSchemaURL);
dbms_ouput.put_line('We don't get this far');
lxml := lxml.createSchemaBasedXML(importedSchemaURL);
有什么方法可以同时导入mainSchemaURL和importedSchemaURL,这样主架构中导入的架构引用就不会导致失败;
ORA-31079: unable to result reference to type [type containing imported type]
任何帮助或指点将不胜感激。
更新:我正在使用 Oracle 11g 版
【问题讨论】: