Vorrei fare una domanda sulla convalida del documento XML rispetto ai suoi schemi XML corrispondenti e sarei grato se potessi gentilmente darmi una mano. In realtà, ho appena iniziato a conoscere gli schemi XML (sono totalmente un principiante). Ho acquistato il libro "Definitive XML Schema" scritto da Priscilla Walmsley (2a edizione) che presenta XML Schema 1.1 (che credo sia la versione più recente).Oracle può convalidare XML utilizzando uno schema XSD sul file system locale?
Ora il problema è che in tutti gli esempi e gli esercizi del libro, gli spazi dei nomi e la posizione dei file dello schema vengono forniti utilizzando un URL web.
Ecco un esempio del libro:
Questo è lo schema
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://datypic.com/prod"
xmlns:prod="http://datypic.com/prod">
<xs:element name="product" type="prod:ProductType"/>
<xs:complexType name="ProductType">
<xs:sequence>
<xs:element name="number" type="xs:integer"/>
<xs:element name="size" type="prod:SizeType"/>
</xs:sequence>
<xs:attribute name="effDate" type="xs:date"/>
</xs:complexType>
<xs:simpleType name="SizeType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="2"/>
<xs:maxInclusive value="18"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
E il contenuto XML per essere convalidati in base al sopra citato è presente
<prod:product xmlns:prod="http://datypic.com/prod"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://datypic.com/prod prod.xsd"
effDate="2011-04-12">
<number>557</number>
<size>10</size>
</prod:product>
Ovviamente, [ http://datypic.com/prod] è un sito gestito dall'autore, quindi non posso aggiungere o CANCELLARE alcun file su questo sito per i miei esercizi mentre sto leggendo questo libro. Di conseguenza ho bisogno di mettere entrambi i documenti XML e XSD sul mio disco rigido locale (sto usando Linux Fedora Core 17 X86_64). Quindi, ciò che ho fatto è stato inserire il contenuto dello schema in un file chiamato per esempio 'Esempio-01.xsd' e il contenuto XML in un file denominato 'Esempio-01.xml'.
Uso il pacchetto oracle PL/SQL DBMS_XMLSCHEMA (Enterprise Edition 11.2.0.1.0) per registrare prima lo schema e quindi chiamare il metodo di convalida dell'oggetto XMLType per convalidare il mio documento XML rispetto allo schema, simile a il seguente link:
https://forums.oracle.com/forums/thread.jspa?messageID=2462207
ho creato una directory (per creare la directory) dichiarazione in Oracle:
/home/treno/Documents/myutl_file_dir/
Dove ho inserito entrambi i miei documenti XML & XSD. Ecco esattamente come ho cambiato il contenuto XML di cui sopra, al fine di fare riferimento a XSD localmente
<prod:product xmlns:prod="http://datypic.com/prod"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://datypic.com/prod file:///home/train/Documents/myutl_file_dir/Example-01.xsd"
effDate="2011-04-12">
<number>557</number>
<size>10</size>
</prod:product>
Quindi, se si confronta il nuovo contenuto XML con l'esempio di cui sopra, l'unica cosa che ho aggiunto era file:///home/train/Documents/myutl_file_dir/Example-01.xsd alla fine del valore di xsi: schemaLocation per fare riferimento al disco rigido locale. Ho trovato questo metodo, qui:
http://lists.w3.org/Archives/Public/xmlschema-dev/2001Dec/0161.html
Ora, il problema è che non funziona. Quando eseguo il mio script per validare il documento chiamando il metodo schemaValidate() dell'oggetto XMLType, ecco il messaggio di errore Oracle:
BEGIN
*
ERROR at line 1:
ORA-19030: Method invalid for non-schema based XML Documents.
ORA-06512: at "SYS.XMLTYPE", line 354
ORA-06512: at "TRAIN2012.ZXML_PKG", line 176
ORA-06512: at line 2
Quello che ho capito dal messaggio di errore 'Metodo non valido per non Documenti XML basati sullo schema ' è che oracle ha semplicemente ignorato il percorso file che ho definito per il file dello schema e ritiene che non ci sia stato alcun schema dichiarato per questo documento XML.
Qualche idea? Come posso affrontare questo problema?
Grazie in anticipo,
Dariyoosh
Beh, come lei ha detto che ho cambiato il documento XML come questo prod: product> Ma ancora ottengo lo stesso errore. –
dariyoosh
@ stefan nebesnak Uso targetNameSpace e quindi xsi: noNamespaceSchemaLocation non è appropriato per questo problema. Inoltre, solo lo schema è incorporato (intendo registrato nel database) il documento XML è solo un oggetto XMLType locale il cui ambito è limitato a un DECLARE locale ... BEGIN ... END; Blocco PL/SQL, quindi non è necessario eliminare e ricaricare i documenti poiché non sono integrati. Eppure, ti ringrazio per l'osservazione (che non sapevo) e per i link – dariyoosh