我將驗證並處理由第三方提供的XML。 XML符合也由第三方提供的標準化XML模式。爲什麼DBMS_XMLSCHEMA無法驗證有效的xs:dateTime?
爲了驗證我用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 value和DBMS_XMLSCHEMA不應該抱怨臨時表一點都不。驗證也應該獨立於任何數據庫日期格式設置,對嗎?
那麼,這是一個Oracle怪癖,如果是的是什麼是解決方法?或者我應該以不同的方式配置Oracle和/或DBMS_XMLSCHEMA?或者我誤解了某些東西或...
我正在運行Oracle數據庫11g版本11.2.0.1.0。
如果上面的示例XML模式和數據值得使用Xerces的exchangerxml正確驗證。
當我添加了[XML模式註釋](http://download.oracle.com/docs /cd/E11882_01/appdev.112/e16659/xdb05sto.htm#i1030452)到驗證通過的示例,並且沒有元素缺失的問題可選時區。另請參見[將XML模式數據類型映射到SQL數據類型](http://download.oracle.com/docs/cd/E11882_01/appdev.112/e16659/xdb05sto.htm#i1030995)。問題是註釋是特定於Oracle的,XML模式由第三方管理。但如何克服這一限制值得再次進行辯論。 – user272735 2011-06-17 06:05:37