【发布时间】:2016-11-22 21:59:51
【问题描述】:
我将验证和处理第三方提供的 XML。 XML 符合同样由第三方提供的标准化 XML 模式。
为了验证,我基本上以这种方式使用 DBMS_XMLSCHEMA:
-- pseudocode follows
declare
xmldoc xmltype;
begin
dbms_xmlschema.registerschema(schemaurl => name,
schemadoc => xmltype(schema),
local => true,
gentypes => false,
gentables => false
);
xmldoc := xmltype(xml).createSchemaBasedXML(schema_name);
xmldoc.schemavalidate;
end;
验证似乎有效,只是我遇到了 XML 模式类型 xs:dateTime 的问题,如下所示。
使用 XML 架构:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="datetime-issue">
<xs:complexType>
<xs:sequence>
<xs:element name="time" type="xs:dateTime" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
以下 XML 的验证:
<?xml version="1.0" encoding="UTF-8"?>
<datetime-issue>
<time>2011-06-15T16:58:23</time>
<!-- Oracle doesn't like timezone ? -->
<time>2011-06-15T16:58:23+02:00</time>
<time>2011-06-16T09:55:01</time>
</datetime-issue>
在第二个时间元素上意外失败:
ORA-30992: error occurred at Xpath /datetime-issue/time[2]
ORA-01830: date format picture ends before converting entire input string
ORA-06512: at "SYS.XMLTYPE", line 354
AFAICS 2011-06-15T16:58:23+02:00 应该是一个有效的 XML 模式 xs:dateTime 值,并且 DBMS_XMLSCHEMA 根本不应该抱怨这一点。验证也应该独立于任何数据库日期格式设置,对吧?
那么这是 Oracle 的怪癖吗?如果是,解决方法是什么?或者我应该以不同的方式配置 Oracle 和/或 DBMS_XMLSCHEMA 吗?还是我误解了什么或......
我正在运行 Oracle Database 11g 版本 11.2.0.1.0。
如果有任何价值,上面的示例 XML 架构和数据可以通过使用 Xerces 的 exchangerxml 正确验证。
【问题讨论】:
标签: oracle validation datetime xsd oracle11g