XML/XSD ... ( <xs:all> && maxOccurs>1 ) || (<xs:sequence && beliebige Reihenfolge)
-
Hallo,
ich hab die Ehre für ein XML eines Kunden nachträglich das XSD zu entwerfen.
Nachdem ich sowieso schon die ganze Zeit über die Unzulänglichkeiten von XML/XSD und diversen unterschiedlich toleranten Parsern gestolpert bin, sieht es nun so aus also ob ich an einem Punkt bin, an dem ich sagen kann: Für dieses "XML" ist kein XSD möglich. (Ist das dann eigentlich überhaupt noch ein XML?)Was ich suche ist: Entweder eine Bestätigung dafür, dass es nicht möglich ist, oder ein Fingerzeig wie es doch geht.
Das XML (pseudo):<?xml version="1.0" encoding="ISO-8859-1"?> <data> <field1>sfdg</field1> <field2>fdsg</field2> <field3>asd</field3> ... </field22>xyz</field22> <group23> <blafasel>234</blafasel> </group23> <group23> <blafasel>235</blafasel> </group23> <group23> <blafasel>236</blafasel> </group23> </data>
Die Elemente "field1" bis "field22" kommen in beliebiger Reihenfolge vor - xs:sequence fällt also raus und ich muss auf xs:all ausweichen.
Da ist nun aber "group23", das lustigerweise mehrfach vorkommen kann. xs:all lässt aber nur maxOccurs="1" zu - sonst nichts.
Wenn ich das richtig sehe, dann war es das an dieser Stelle, oder? Fällt jemanden noch was ein? Mir nicht mehr.Wenn man den Kunden fragt, ob er nicht irgendwie sicherstellen kann, dass "field1" bis "field22" in fester Reihenfolge erscheinen (oder auch nur nicht mehr als ein Mal), so dass ich xs:sequence benutzen kann, dann bekommt man als Antwort übrigens: "Viel zu teuer und aufwändig.". Wir machen seit Wochen an dem Thema rum. Zuvor hat der Kunde selber versucht ein XSD zu erstellen, nachdem wir ihm erklärt haben was das ist, aber da fehlt schon das Grundverständnis für die einfachsten Sachen.
Die Daten kommen aus einer uralten COBOL-Bankensoftware die anscheinend nur noch von Zombies supported werden kann deren Exhumierung zu viel Geld kostet.
Andererseits hat sich da bei Projektstart jemand überlegt, dass man doch mal was Modernes wagen will und XML statt Flatfile ausgibt ...
-
Hallo Illuminator!
Das XML File kannst Du wahrscheinlich nur über ein Script z.B. Regex konvertieren. XSLT funzt nicht, weil Du kein XSD bauern kannst. Für Regex Verarbeitung von Tags ist XSD (XSLT) nicht ausgelegt.
Dann machst Du aus <field1> z.B. <field no="1"> das reif für XSD Valdierung oder XSLT ist.
cu
P84