Ich versuche, ein XML mit einem XSD zu validieren. Aber es wirft einen seltsamen Fehler über das Datumsformat:Oracle XML Schema Validierungsdatum Musterfehler
[1]: LSX-00333: wörtliche "2016-05-26T16: 37: 42,000000" ist nicht gültig in Bezug auf das Muster
Allerdings ist es das, was ich in meinem XML haben:
<?xml version="1.0" encoding="UTF-8"?>
<root DataFeed="2016-04"
VersionXSD="2.0"
Currency="USD"
DataProcessDate="2016-05-26T16:37:42"
xmlns="http://www.millicom.com">
ich habe dies in meinem XSD:
<xs:attribute name="DataProcessDate"
use="required"
type="DateTimeType"/>
<xs:simpleType name="DateTimeType">
<xs:restriction base="xs:dateTime">
<xs:pattern value=".+(\-10:00|\-09:00|\-08:00|\-07:00|\-06:00|\-05:00|\-04:00|\+00:00|Z|-04:00)"/>
</xs:restriction>
</xs:simpleType>
Und das ist mein Code:
DECLARE
v_schema_url VARCHAR2 (200) := 'MyFact.xsd';
v_blob BLOB;
v_clob CLOB;
v_xml XMLTYPE;
xml_file BFILE;
xmlClob CLOB;
src_offset number := 1 ;
dest_offset number := 1 ;
lang_ctx number := DBMS_LOB.DEFAULT_LANG_CTX;
warning integer;
res integer;
BEGIN
dbms_xmlschema.deleteschema(v_schema_url);
DBMS_XMLSCHEMA.registerschema (schemaurl => v_schema_url,
schemadoc => bfilename ('DIR_XSD','MyFact.xsd'),
local => TRUE);
xml_file := BFILENAME('DIR_XSD', 'Test.xml');
DBMS_LOB.CREATETEMPORARY(xmlClob, true);
DBMS_LOB.FILEOPEN(xml_file, DBMS_LOB.FILE_READONLY);
DBMS_LOB.LOADCLOBFROMFILE(xmlClob, xml_file, DBMS_LOB.LOBMAXSIZE, src_offset,
dest_offset, DBMS_LOB.DEFAULT_CSID, lang_ctx, warning);
v_xml := XMLType.createXML(xmldata=>xmlClob,schema=>v_schema_url);
DBMS_LOB.FILECLOSEALL();
DBMS_LOB.FREETEMPORARY(xmlClob);
v_xml.schemaValidate();
IF v_xml.isschemavalid (v_schema_url) = 1 THEN
DBMS_OUTPUT.put_line ('valid');
ELSE
DBMS_OUTPUT.put_line ('not valid');
END IF;
END;
Aus irgendeinem Grund fügt es die Mikrosekunden und es fehlschlägt die Musterprüfung. Wie kann ich das vermeiden? Mein gewünschtes Verhalten ist eine korrekte Ausführung mit einer Ausgabe von "gültig"
Bearbeitet, um zu enthalten, was Sie angegeben haben – Fermin
Ohne die Erklärung Ihres 'DateTimeType' ist es schwer zu sagen, was falsch läuft. –
Es tut mir Leid, dass ich es vergessen habe, und habe es bearbeitet. Obwohl die Antwort, die Arkadiusz Łukasiewicz mir gegeben hat, mir geholfen hat. – Fermin