xml-Schema mit besonderem mixed content erstellen

RalU

Mitglied
Hallo,

ich habe eine XML-Datei, die beispielsweise unter anderem folgende Einträge aufweisen kann.
Code:
....
<step>Dies ist der 1. Bearbeitungsschritt (mit einem Bild)
    <picbin format="JPG">/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEyccHhcgLikxMC4pLSwzOko....</picbin> </step>
<step>noch ein Bearbeitungsschritt (diesmal ohne Bild)</step>
<step>3. Bearbeiungsschritt (mal wieder mit Bild
    <picbin format="BMP">/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAA0JCgsKCA0LCgsODg0PEyAVExISEyccHhcgLikxMC4pLSwzOko...</picbin></step>
...
Folgende Infos hab ich:
1) <step>muss in jedem Fall einen String enthalten (PCDATA)
2) innerhalb von <step> darf entweder vor oder nach dem String aus 1) ein Element vom Typ <picbin

format="BMP/JPEG/PNG/TIF">(MIME64Code-String der Grafikdatei)></picbin> folgen.

Der String unter 1) kann beliebig sein.
<picbin hat also ein attribut "format" das eines der oben genannten Dateiendungen aufnehmen kann (BMP/JPEG/PNG/TIF),

als Elementwert folgt dann ein MIME64-Codestring.

Wie kann man diesen Sachverhalt in einer XSD-Datei (Schemadatei) abbilden?


Mein bisheriger Vorschlag innerhalb der XSD-Datei:
Code:
                <xs:element name ="step" type="xs:string">
                    <xs:complexType mixed="true">
                      <xs:all> //wohl nicht erforderlich?
                            <xs:element name="picbin" use="optinal">
                                <xs:complexType>
                                    <xs:attribute name="format" type="xs:string" use="required"/>
                                </xs:complexType>
                            </xs:element>
                        </xs:all>
                    </xs:complexType>
                </xs:element>
Ich bin mir aber nicht sicher, ob es überhaupt erlaubt ist, zu schreiben:
<xs:element name ="step" type="xs:string">, da danach ja ein complextype folgt.
Also insbesondere dieses type="xs:string"... Andererseits soll ja in Step auch PCDATA (string) auftauchen...


Bei einer vergleichsweisen DTD müßte dort etwa folgendes definiert sein:
Code:
...
<!ELEMENT step(#PCDATA|picbin)*>
<!ELEMENT picbin (#PCDATA)
<!ATTLIST picbin
    format CDATA #requiered>
...
Gruß, Ralf
 
Zurück