我正在尝试对 PLSQL 中的 XML 文档执行 XSD 验证,但在使其正常工作时遇到问题。
我创建了一个XMLTYPE
对象,当我调用isSchemaBased()
它时返回 0(假)。现在显然XMLTYPE
需要基于模式才能进行验证,我发现您可以通过调用createSchemaBasedXML
. XMLTYPE
我遇到的问题是我的架构分为两部分(不幸的是,组合架构文件不是一个选项),这意味着当我尝试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);
有什么方法可以同时导入 themainSchemaURL
和 the importedSchemaURL
,以便主架构中导入的架构引用不会导致失败;
ORA-31079: unable to result reference to type [type containing imported type]
任何帮助或指示将不胜感激。
更新:我正在使用 Oracle 版本 11g