Я собираюсь проверить и обработать 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 value, а DBMS_XMLSCHEMA вообще не должна на это жаловаться.Валидация также должна быть независимой от любых настроек формата даты базы данных, верно?
Так что же это за странность Oracle, и если да, то какие обходные пути?Или я должен настроить Oracle и / или DBMS_XMLSCHEMA по-разному?Или я что-то неверно истолковал или ...
Я использую Oracle Database 11g Release 11.2.0.1.0.
Если что-то стоит, приведенная выше примерная XML-схема и данные корректно проверяются с помощью exchangerxml , использующий Xerces.