Ich möchte eine Frage zur Validierung von XML-Dokumenten mit den entsprechenden XML-Schemata stellen, und ich würde mich freuen, wenn Sie mir bitte eine Hand geben könnten. Eigentlich habe ich angefangen, etwas über XML-Schemata zu lernen (ich bin ein absoluter Anfänger). Ich habe das Buch "Definitives XML-Schema" von Priscilla Walmsley (2. Auflage) gekauft, das XML Schema 1.1 präsentiert (was meiner Meinung nach die neueste Version ist).Kann Oracle XML mithilfe eines XSD-Schemas im lokalen Dateisystem validieren?
Jetzt ist das Problem, dass in allen Beispielen und Übungen des Buches die Namespaces und der Speicherort der Schemadateien über eine Web-URL angegeben werden. Hier
ist ein Beispiel des Buchs:
Dies ist das 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>
Und die XML-Inhalte gegen die oben genannten validiert werden wird diese
<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>
Offensichtlich [ http://datypic.com/prod] ist eine Website, die vom Autor gepflegt wird, so dass ich keine Datei auf dieser Seite für meine Übungen hinzufügen oder löschen kann, während ich dieses Buch lese. Als Ergebnis muss ich sowohl XML- als auch XSD-Dokumente auf meiner lokalen Festplatte speichern (ich benutze Linux Fedora Core 17 X86_64). Was ich also tat, war, den Inhalt des Schemas in eine Datei mit dem Namen 'Example-01.xsd' und den XML-Inhalt in eine Datei mit dem Namen 'Example-01.xml' zu schreiben.
Ich benutze das Oracle PL/SQL-Paket DBMS_XMLSCHEMA (Enterprise Edition 11.2.0.1.0), um zuerst das Schema zu registrieren und dann die Validate-Methode des XMLType-Objekts aufzurufen, um mein XML-Dokument gegenüber dem Schema zu validieren der folgende Link:
https://forums.oracle.com/forums/thread.jspa?messageID=2462207
ich habe ein Verzeichnis (von CREATE DIRECTORY) Anweisung in oracle erstellt:
/home/Zug/Dokumente/myutl_file_dir/
Wo ich meine beiden XS2-Dokumente XML & ablegen. Hier ist genau, wie ich die oben genannten XML-Inhalte geändert, um zu verweisen lokal in XSD
<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>
Also, wenn Sie die neuen XML-Inhalte mit dem oben genannten Beispiel zu vergleichen, das einzige, was ich hinzugefügt war file:///home/train/Documents/myutl_file_dir/Example-01.xsd am Ende des Wertes von xsi: schemaLocation, um auf die lokale Festplatte verweisen. Ich fand diese Methode, hier:
http://lists.w3.org/Archives/Public/xmlschema-dev/2001Dec/0161.html
Nun, das Problem ist, dass es nicht funktioniert. Als ich mein Skript ausführen, um das Dokument zu validieren, indem die schemaValidate() -Methode des XMLType Objekts aufrufen, hier ist Oracle-Fehlermeldung:
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
Was ich von der Fehlermeldung "Methode ungültig für nicht verstehen Schemabasierte XML-Dokumente ist, dass Oracle den Dateipfad ignoriert hat, den ich für die Schemadatei definiert habe, und dass kein Schema für dieses XML-Dokument deklariert wurde.
Irgendeine Idee? Wie kann ich mit diesem Problem umgehen?
Vielen Dank im Voraus,
Dariyoosh
Nun, wie Sie sagten, ich das XML-Dokument ähnliche prod: product> Aber wieder bekomme ich den gleichen Fehler. –
dariyoosh
@ stefan nebesnak Ich verwende targetNameSpace und daher ist xsi: noNamespaceSchemaLocation für dieses Problem nicht geeignet. Außerdem ist nur das Schema integriert (ich meine in der Datenbank registriert), das XML-Dokument ist nur ein lokales XMLType-Objekt, dessen Geltungsbereich auf eine lokale DECLARE begrenzt ist ... BEGIN ... END; PL/SQL-Block, so dass Dokumente nicht gelöscht und neu geladen werden müssen, da sie nicht integriert sind. Trotzdem danke ich Ihnen für die Bemerkung (die ich nicht kannte) und die Links – dariyoosh