1

我正在尝试对 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

4

1 回答 1

0

答案是由 Oracle 论坛上的“odie_63”[这里][1] 提供的。最后是为导入的模式指定 schemaLocation

[1]:https ://forums.oracle.com/message/11135111“使用多个模式的CreateSchemaBasedXML”

于 2013-09-03T14:17:41.493 回答