Hallo,
ich habe ein sehr spezielles Problem beim Erstellen eines XSD's (Xml Schema Datei). Ich verzweifle daran noch.
Ein Beispiel für ein valides Dokument.
Anhand von diesem XML möchte Ich eine Schema Datei erstellen, die:
Ich möchte außerdem alle Fehlermeldungen beim Validieren sammeln, parsen und ausgeben, damit man sieht wo der Schuh drückt.
Mein erster Ansatz war, das dass Element VALUE aus einem <xsd:all> besteht, das Problem war jedoch, dass:
Mein nächster Ansatz war, das dass Element VALUE aus einer <xsd:sequence> besteht, jedes Kind Element ist ein <xsd:choice> mit jeweils nur sich selbst und minOccurs="1"
Beispiel:
Alles anzeigen
da war aber das Problem, dass:
Eine Idee von mir war noch evtl. eine Abstraktionsebene mehr einzuführen, damit wenigstens weiter validiert wird, also z.B.
Also ist z.B. bei FOO was falsch, wird lediglich Row1 invalid, aber VALUE wird weiter versucht zu validieren.
Das Problem ist dann wieder die Reihenfolge, ist OOF am Anfang gibt es einen Fehler weil OOF ja nicht zu Row1 sondern zu Row2 gehört.
Kann mir da vielleicht irgendjemand helfen ein, den Anforderungen entsprechend, korrektes Schema zu erzeugen?
Lösungen, Ideen?
Ich validiere mit dem Tool xmllint. Beispielaufruf:
xmllint --noout --schema schemaFile.xsd document.xml
Viele Grüße
ich habe ein sehr spezielles Problem beim Erstellen eines XSD's (Xml Schema Datei). Ich verzweifle daran noch.
Ein Beispiel für ein valides Dokument.
Anhand von diesem XML möchte Ich eine Schema Datei erstellen, die:
- erkennt, wenn ein oder mehrere Elemente im VALUE-Tag fehlen
- erkennt, wenn ein oder mehrere Elemente im VALUE-Tag zuviel sind
- Elemente können doppelt vorkommen, müssen Sie aber nicht
- Die Reihenfolge kann auch anderst sein
Ich möchte außerdem alle Fehlermeldungen beim Validieren sammeln, parsen und ausgeben, damit man sieht wo der Schuh drückt.
Mein erster Ansatz war, das dass Element VALUE aus einem <xsd:all> besteht, das Problem war jedoch, dass:
- Nach dem ersten Auftreten eines Elements, dass nicht im Schema definiert ist, wird die Fehlermeldung ausgegeben, und der Validierungsprozess für den gesamten Elternknoten (Hier VALUE) abgebrochen,
ich kann also nichtmehr sehen ob noch andere Fehler im VALUE-Tag sind - Ein Element kann bei <xsd:all> nur maximal einmal auftreten (maxOccurs="1")
Mein nächster Ansatz war, das dass Element VALUE aus einer <xsd:sequence> besteht, jedes Kind Element ist ein <xsd:choice> mit jeweils nur sich selbst und minOccurs="1"
Beispiel:
Quellcode
da war aber das Problem, dass:
- Die Reihenfolge zwingend vorgegeben ist, ist ein Element also am falschen Platz wird sofort der Validierungsprozess des Eltern-Elements (VALUE) abgebrochen und andere eventuelle Fehler gehen unter.
Eine Idee von mir war noch evtl. eine Abstraktionsebene mehr einzuführen, damit wenigstens weiter validiert wird, also z.B.
Also ist z.B. bei FOO was falsch, wird lediglich Row1 invalid, aber VALUE wird weiter versucht zu validieren.
Das Problem ist dann wieder die Reihenfolge, ist OOF am Anfang gibt es einen Fehler weil OOF ja nicht zu Row1 sondern zu Row2 gehört.
Kann mir da vielleicht irgendjemand helfen ein, den Anforderungen entsprechend, korrektes Schema zu erzeugen?
Lösungen, Ideen?
Ich validiere mit dem Tool xmllint. Beispielaufruf:
xmllint --noout --schema schemaFile.xsd document.xml
Viele Grüße