为什么DBMS_XMLSCHEMA无法验证有效的xs:dateTime? [英] Why DBMS_XMLSCHEMA fails to validate a valid xs:dateTime?
问题描述
对于验证,我使用DBMS_XMLSCHEMA基本上这样:
- 伪代码跟随
声明
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;
结束
验证似乎工作,除了我已经运行XML模式类型的问题 xs:dateTime
,如下所示。
使用XML架构:
<?xml version =1.0encoding =UTF-8standalone =否?>
< xs:schema xmlns:xs =http://www.w3.org/2001/XMLSchema>
< xs:element name =datetime-issue>
< xs:complexType>
< xs:sequence>
< xs:element name =timetype =xs:dateTimemaxOccurs =unbounded/>
< / xs:sequence>
< / xs:complexType>
< / xs:element>
< / xs:schema>
验证以下XML:
<?xml version =1.0encoding =UTF-8?>
< datetime-issue>
< time> 2011-06-15T16:58:23< / time>
<! - Oracle不喜欢时区? - >
< time> 2011-06-15T16:58:23 + 02:00< / time>
< time> 2011-06-16T09:55:01< / time>
< / datetime-issue>
第二个时间元素意外失败:
ORA-30992:Xpath / datetime-issue / time [2]发生错误
ORA-01830:转换整个输入字符串之前结束的日期格式图片
ORA-06512:SYS.XMLTYPE,第354行
AFAICS 2011 -06-15T16:58:23 + 02:00
应该是一个有效的XML模式 xs:dateTime 值和DBMS_XMLSCHEMA不应该抱怨这一点。验证还应该独立于任何数据库日期格式设置,对吗?
这是Oracle的怪癖,如果是,有什么解决方法?还是应该配置Oracle和/或DBMS_XMLSCHEMA不同?或者我误解了某些东西或...
我正在运行Oracle数据库11g版本11.2.0.1.0。
如果上述XML模式和数据的示例与 exchangexml 正确验证是否值得,使用Xerces。
我想你可以通过添加来修复:
xdb:SQLType =TIMESTAMP WITH TIME ZONE
到XML模式中的元素。虽然这可能会在非时区记录上出错...
I'm going to validate and process XML provided by a third party. The XML conforms a standardized XML schema also provided by a third party.
For validation I use DBMS_XMLSCHEMA essentially this way:
-- 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;
Validation seems to work except that I've run an issue with XML schema type xs:dateTime
that is demonstrated below.
With XML schema:
<?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>
The validation of following 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>
Fails unexpectedly on the second time-element:
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
should be a valid XML schema xs:dateTime value and DBMS_XMLSCHEMA should not complain about that at all. Validation should also be independent on any database date format settings, right ?
So is this an Oracle quirk and if yes what are the workarounds ? Or should I configure Oracle and/or DBMS_XMLSCHEMA differently ? Or have I misinterpreted something or ...
I'm running Oracle Database 11g Release 11.2.0.1.0.
If it's worth of anything the example XML schema and data above validates correctly with exchangerxml that uses Xerces.
I think you can fix that by adding:
xdb:SQLType="TIMESTAMP WITH TIME ZONE"
to the element in the XML schema. Though that may error on the non-timezone records...
这篇关于为什么DBMS_XMLSCHEMA无法验证有效的xs:dateTime?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!