Hallo Thomas,
Aber wieso eigentlich 0.3?
Es gibt zu 1.0 ein RELAX NG (compact)-Schema, vielleicht hilft dir das?
Weil 0.3 nun mal existiert ;-)) Ein Validator sollte schon alle gängigen Versionen unterstützen.
Für 0.3 gibt es auch ein Schema; Müll ist da noch ein Kompliment...
Ja, z.B. mit:
<xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
(was <xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/> entspricht: ##any = Any well-formed XML from any namespace (default))
Super, genau das habe ich gesucht, vielen Dank.
Meinst du wirklich ein Schema schreiben zu wollen?
Wäre es nicht einfacher in irgendeiner Sprache einen zugeschnittenen Validator zu schreiben?
Das hatte ich schon mal vor geraumer Zeit probiert (da hatten wir noch keinen Schemavalidator). Das war wirklich grausig, für jede Version die Regeln per Programmcode abzufragen - ein Faß ohne Boden... Ein Schema hat nun mal den großen Vorteil der Datentypen, das müsste man alles nachbilden.
Regel wie: "atom:feed elements MUST contain one or more atom:author elements, unless all of the atom:feed element's child atom:entry elements contain at least one atom:author element." sind grausig (wenn nicht unmöglich bei Atom) in Schema umzusetzen.
Das ist noch harmlos, da gibt es bei anderen Versionen noch viel schlimmere Sachen (die ganze RSS/Feed-Geschichte ist ein echtes Frickelwerk).
Ich werde die Sache mit einen "weichen" Schema mit nachgeschalteten Programmcode erledigen (DOM).
Mit <xs:choice maxOccurs="unbounded"> hat man die Möglichkeit das mehrfache Vorkommen von Elementen, und das in beliebiger Reihenfolge, zuzulassen.
Die Sache hat aber den Nachteil das es keine muß-Elemente mehr gibt und jedes Element fehlen oder mehrfach vorkommen darf (aber min. ein Element muß vorhanden sein).
Diese Einschränkungen kann man ganz einfach mit DOM abfragen (es geht ja nur um "wie oft vorhanden"). DOM wird eh benötigt, siehe Dein Beispiel.
Somit würde sich der Programmieraufwand auf ein Minimum beschränken, den 0/8/15-Plunder kann ein Schema besser ;-)
Grüße
Thomas