我正在尝试对PLSQL中的XML文档执行XSD验证,我遇到了让它运行的问题。
我创建了一个XMLTYPE
对象,当我调用isSchemaBased()
时,它返回0(false)。现在显然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);
是否有任何方法可以同时导入mainSchemaURL
和importedSchemaURL
,以便主模式中导入的模式引用不会导致失败;
ORA-31079: unable to result reference to type [type containing imported type]
非常感谢任何帮助或指示。
更新:我正在使用Oracle 11g版本
答案 0 :(得分:0)
答案由Oracle论坛上的'odie_63'提供[这里] [1] 最后,它是为importSchema
的导入指定schemaLocation的情况[1]:https://forums.oracle.com/message/11135111“使用多个模式的CreateSchemaBasedXML “