XML Schema

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • XML Schema

    Hallo zusammen

    es geht um Folgendes:

    ich hab einen complex Type "TeleType" definiert mit drei verschiedenen Elementen: Länderkennung, Netzugang und Rufnummer.
    Als Plausibilisierung ist verlangt, dass wenn eins der drei Elemente auftritt dass die anderen beiden nicht leer bleiben dürfen!

    Mein bisheriger Ansatz sieht folgendermaßen aus:
    <xs:complexType name="TeleType">
    <xs:all>
    <xs:element name="CC" minOccurs="0">
    <xs:simpleType>
    <xs:restriction base="xs:integer">
    <xs:totalDigits value="3"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="NDC" minOccurs="0">
    <xs:simpleType>
    <xs:restriction base="xs:integer">
    <xs:totalDigits value="5"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="SN" minOccurs="0">
    <xs:simpleType>
    <xs:restriction base="xs:integer">
    <xs:totalDigits value="10"/>
    </xs:restriction>
    </xs:simpleType>
    </xs:element>
    </xs:all>
    </xs:complexType>

    Mit der all-Gruppe hab ich erhofft die Anforderung um gesetzt zu haben aber es klappt irgendwie nicht. Das Instanzdokument ist auch dann validiert wenn 1 der 3en fehlt

    Danke für jede Hilfe

    Flat

  • #2
    Hi flatauge,

    willkommen in der Community!
    Interessant:
    registriert seit Jul 03
    1 Post vom 6.8.03

    Bist Du schüchtern... (kl. Scherz)

    Zum Thema - Mein Vorschlag;
    PHP-Code:
    <xs:complexType name="TeleType" minOccurs="0" maxOccurs="1" >
      <
    xs:complexContent>
        <
    xs:element name="CC" minOccurs="1">      
            <
    xs:restriction base="xs:integer">
              <
    xs:totalDigits value="3"/>
            </
    xs:restriction>
          </
    xs:simpleType>
       </
    xs:element>
       <
    xs:element name="NDC" minOccurs="1">
         <
    xs:restriction base="xs:integer">
           <
    xs:totalDigits value="5"/>
         </
    xs:restriction>
       </
    xs:element>
       <
    xs:element name="SN" minOccurs="1">
         <
    xs:restriction base="xs:integer">
           <
    xs:totalDigits value="10"/>
         </
    xs:restriction>
       </
    xs:element>
      </
    xs:complexContent>
    </
    xs:complexType
    all erlaubt nur, dass jede Teilmenge der Elemente die definiert sind, in jeder beliebigen Reihenfolge erscheinen darf, mit minoccurs=0 undmaxoccurs=1. Keine Aussage über den ComplexContent.
    Setz den minOccurs der Elemente doch auf eins.

    Vielleicht wäre auch ein Polymorphismus eines Basis-Elements unter xs sinnvoll. Kenne den Rest nicht

    cu

    Blaster
    Zuletzt geändert von Blaster; 07.08.2003, 02:04.
    Yuppi, endlich Elite ...

    Kommentar


    • #3
      Guten Morgen Blaster

      bitte genau hinschauen registriert seit dem 31-07-2003!
      Die paar Tage kannste mir doch kein Strick draus ziehen!

      Wie dem auch sei, zurück zum Thema:

      Erst mal Danke. Deinen Ansatz hatte ich auch schon in Erwägung gezogen, aber es bildet nicht die Abhängigkeiten der einzelnen Elemente untereinander ab. Mittlerweile denke ich das so eine höre Plausi gar nicht modellierbar ist im XML Schema.

      Deine Lösung ist zumindest besser als meine all-Gruppe. Schließlich macht die Reihenfolge eine TelefonNr aus! Bei wem ruf ich denn sonst an?

      >Vielleicht wäre auch ein Polymorphismus eines Basis-Elements unter xs sinnvoll.

      Was meinst Du damit?

      Cu Flat

      Kommentar


      • #4
        Original geschrieben von flatauge
        ...Deine Lösung ist zumindest besser als meine all-Gruppe. Schließlich macht die Reihenfolge eine TelefonNr aus! Bei wem ruf ich denn sonst an?
        Ach so! ... Telefonnummern!
        That´s overkill, Master!
        PHP-Code:
        <simpleType name="MeineZusammenfassung">
           <
        union memberTypes="string int"/>
        </
        simpleType>

        <
        simpleType name="TeleType">
          <
        union>
            
            <
        simpleType name="InternationaleTelefonnummer">
              <
        restriction base="string"/>
                 <
        pattern value="+[0-9]{2} (0)[0-9]{4} [0-9]{4-10}"/>
                 <!-- 
        z.B. +44 (0)5678 1202440055 -->
              </
        restriction>
            </
        simpleType>
            
            <
        simpleType name="NationaleTelefonnummer">
              <
        restriction base="string"/>
                 <
        pattern value="([0-9]{5}) [0-9]{4-10}"/>
                 <!-- 
        z.B. (056781202440 -->
              </
        restriction>
            </
        simpleType>
            
          </
        union>
        </
        simpleType
        Original geschrieben von flatauge
        ... Was meinst Du damit?
        Polymorphismus liegt dann vor, wenn Instanzen unterschiedlicher Typen gleich behandelt werden können. XML Schema bietet zwei Mechanismen für die Aktivierung - Vererbung und Substitutionsgruppen.

        cu

        Blaster
        Zuletzt geändert von Blaster; 07.08.2003, 21:06.
        Yuppi, endlich Elite ...

        Kommentar


        • #5
          Halloo

          ich seh nicht den zusammenhang zwischen MeineZusammenfassung und dem Rest?
          Wo zu brauchst Du MeineZusammenfassung??

          Dann noch eine Grundsätzliche Frage:
          Wie muss ich Elemente im XML Schema verstehen, sind sie jeweils für ein Eingabefeld zu denken oder muss das nicht zwangsläufig der Fall sein?!
          Meine Frage kommt daher weil ich ein Dialogeingabe in HTML als Vorlage habe und das in XML modelliere.

          Also Deine TeleType Konstruktion sieht ganz OK aus, jedoch hab ich so meine Probleme damit.
          1. relevant ist für mich nur die Internationale, Nationale spielen keine Rolle mit der ersten decke ich auch die Nationale ab. Muss ich dann Union weglassen? Bestimmt, oder? Oder bezieht sich das Union auch auf MeineZusammenfassung?
          2. wie schon oben erwähnt: Im HTML Formular hab ich 3 Felder einmal für Länderkennung (2-stellig), Netzzugang (5-stellig) und Rufnummer (10-stellig). Kann ich auch in diesem Fall Dein Schema verwenden um die TelefonNr richtig abzubilden.

          Danke!!!

          FLat

          Kommentar


          • #6
            Original geschrieben von flatauge
            Wo zu brauchst Du MeineZusammenfassung??.
            Die erste Typendefinition verwendet memberTypes, um die Typen aufzulisten, die in der Union enthalten sind.
            Die Elemente können string- und int- Elemente enthalten.

            Original geschrieben von flatauge
            Dann noch eine Grundsätzliche Frage:
            Wie muss ich Elemente im XML Schema verstehen, sind sie jeweils für ein Eingabefeld zu denken oder muss das nicht zwangsläufig der Fall sein?!
            Meine Frage kommt daher weil ich ein Dialogeingabe in HTML als Vorlage habe und das in XML modelliere.
            Die Validierung erfolgt beim Parsen. Wie die Werte gebildet werden - ob Du sie durch Stringaddition nachträchlich aus Formeingaben erstellst oder direkt eingibst - ist dabei unerheblich.

            Original geschrieben von flatauge
            1. relevant ist für mich nur die Internationale, Nationale spielen keine Rolle mit der ersten decke ich auch die Nationale ab. Muss ich dann Union weglassen? Bestimmt, oder? Oder bezieht sich das Union auch auf MeineZusammenfassung?
            Wenn Du keine Substitutionsgruppe benötigst. Weg damit - bilde aus base="sting", base="string int">

            Original geschrieben von flatauge
            2. wie schon oben erwähnt: Im HTML Formular hab ich 3 Felder einmal für Länderkennung (2-stellig), Netzzugang (5-stellig) und Rufnummer (10-stellig). Kann ich auch in diesem Fall Dein Schema verwenden um die TelefonNr richtig abzubilden.
            Ja! - 1000,- € Lizenzgebühren (kl. Scherz!)

            cu

            Blaster
            Yuppi, endlich Elite ...

            Kommentar


            • #7
              Danke

              Die erste Typendefinition verwendet memberTypes, um die Typen aufzulisten, die in der Union enthalten sind. Die Elemente können string- und int- Elemente enthalten.
              Aber Du verwendest nur String oder? Daher meine Frage. Ist da nicht MeineZusammenfassung nicht überflüssig?
              Oder braucht man sie damit nur die Möglichkeit sicher gestellt das base"string int" verwendet werden kann?

              ---------- --------- --------- ---------- -----------

              Eine Neue Frage


              PHP-Code:
              <xs:element name="Einzelpreis" minOccurs="0">
                                                  <
              xs:simpleType>
                                                      <
              xs:restriction base="xs:decimal">
                                                          <
              xs:totalDigits value="6"/>
                                                          <
              xs:fractionDigits value="2"/>
                                                      </
              xs:restriction>
                                                  </
              xs:simpleType>

                       </
              xs:element
              Zu dem obigen Einzelpreis will ich ein Währungsattribut anfügen. Aber leider ist das mit der Restriction nicht zu vereinbaren. Es verlangt eine vorhergehende Extension. Mein Problem: Restriction schließt Extension aus??

              Kommentar


              • #8
                Re: Danke

                Original geschrieben von flatauge
                Aber Du verwendest nur String oder? Daher meine Frage. Ist da nicht MeineZusammenfassung nicht überflüssig?
                Oder braucht man sie damit nur die Möglichkeit sicher gestellt das base"string int" verwendet werden kann?
                Ja, das weiß ich nicht, ob Du Ziffern oder Zahlen brauchst.
                Nach der Ableitung ist internaleTelefonnummer weiterhin vom
                Typ 'string int' auch wenn die Restriction vom Typ 'string' ist.

                ---------- --------- --------- ---------- -----------
                Original geschrieben von flatauge
                Eine Neue Frage
                Nicht wirklich! - Sie haben den Stoff einfach noch immer nicht verstanden, Hr. flatauge!
                "Ein komplexer Typ ist eine logische Gruppierung von Element- und/oder Attributedeklarationen - Ein einfacher Typ kann den Datentyp beschreiben, der in einen Element oder Attribute enthalten ist."
                Original geschrieben von flatauge
                Zu dem obigen Einzelpreis will ich ein Währungsattribut anfügen. Aber leider ist das mit der Restriction nicht zu vereinbaren. Es verlangt eine vorhergehende Extension. Mein Problem: Restriction schließt Extension aus??
                Nö!
                PHP-Code:
                <xs:element name="Einzelpreis" minOccurs="0">
                             <
                xs:complexContent>
                                    <
                xs:extension base="xs:decimal">
                                        <!-- 
                ob der Namespace und das Basiselement auf Dauer so geschickt gewählt ist .... -->                       
                                          <
                xs:element name="Waehrung" type="string">
                                             <
                xspattern value='[&euro;....] {1-3}' />
                                          </
                xs:element>
                                 
                                                    <
                xs:simpleType>
                                                        <
                xs:restriction base="xs:decimal">
                                                            <
                xs:totalDigits value="6"/>
                                                            <
                xs:fractionDigits value="2"/>
                                                        </
                xs:restriction>
                                                    </
                xs:simpleType>

                                   </
                xs:extension>
                             </
                xs:complexContent>
                 </
                xs:element
                Zuletzt geändert von Blaster; 16.08.2003, 12:54.
                Yuppi, endlich Elite ...

                Kommentar


                • #9
                  Hallo, danke erstmal für Deine Mühe Herr Blaster

                  aber ich muss sie leider enttäuschen -> Fr. Flatauge

                  so nun denn:

                  Ich gebe zu der Unterschied zwischen complex und simple Type war mir nicht so klar. Aber jetzt!

                  Dennoch, Dein Schema klappt nicht wirklich, ich habs mit XMLSpy validiert und der spuckt mir nach der extension vor dem Währungselement eine Fehlermeldung! "xs:element" is unexpected at this location/ unexpected childelment. Tja das ähnlich sah auch mein Problem aus.

                  Abgesehen davon wollte ich mein Element im Instanzdokument wie folgt:

                  <Einzelpreis währung="EUR">22.22</Einzelpreis>

                  Mein Problem an der Stelle ist, ich begrenze die Nachkomma Stellen des Preises mit einer Restriction und will noch ein Attribut anfügen mit Extension. Jedoch vertragen sich beide nicht gleichzeitig

                  Was tut man da?

                  Kommentar


                  • #10
                    Original geschrieben von flatauge
                    ...aber ich muss sie leider enttäuschen -> Fr. Flatauge
                    Opps! - Sorry!
                    Original geschrieben von flatauge
                    Dennoch, Dein Schema klappt nicht wirklich, ich habs mit XMLSpy validiert und der spuckt mir nach der extension vor dem Währungselement eine Fehlermeldung! "xs:element" is unexpected at this location/ unexpected childelment. Tja das ähnlich sah auch mein Problem aus.
                    Wundert mich gar nicht ... war einfach zuviel 'Pfusch am Bau'
                    ... Motto: "xs:decimal" ist ehe Sch**** und damit sowieso auch kein ComplexType.
                    Aber wenigstens vernünftiges Werkzeug bei der Arbeit (XMLSpy)!
                    Original geschrieben von flatauge
                    Abgesehen davon wollte ich mein Element im Instanzdokument wie folgt:
                    <Einzelpreis währung="EUR">22.22</Einzelpreis>

                    Mein Problem an der Stelle ist, ich begrenze die Nachkomma Stellen des Preises mit einer Restriction und will noch ein Attribut anfügen mit Extension. Jedoch vertragen sich beide nicht gleichzeitig

                    Was tut man da?
                    Das wird mir jetzt aber langsam ein wenig zu nooby...
                    Da Du erst seit kurzem Mitglied bist, kann ich auch deine Skills nicht einzätzen...
                    XML Schema ist wie die meisten XML Schlüsselspezifikationen und - standards ein direktes Abbild von OOT´s. D.h. die meisten Sprach- und semantische Elemente von OO-Programmiersprachen wie z.B. Java, C++ und C# flossen direkt in XML Schema mit ein. Ohne Verständnis der OO oder deren Kenntnis ist XML Schema schwer anwendbar:
                    PHP-Code:

                    <complexType name="Preise" abstract="true">
                          <
                    complexContent>
                               <
                    restriction base="decimal">
                                    <
                    totalDigits value="6"/>
                                    <
                    fractionDigits value="2"/>
                              </
                    restriction>
                         </
                    complexContent>
                    </
                    complexType>

                    <
                    element name="Einzelpreis">
                       <
                    complexContent>
                           <
                    extension base="Preise">
                               <
                    simpleType>
                                   <
                    attribute name="Waehrung" type="string">
                                         <
                    pattern value='[&euro;....] {1-3}' />
                                  </
                    attribute>
                                </
                    simpleType>
                           </
                    extension>
                       </
                    complexContent>
                    </
                    element
                    Hier wurde von mir die abstrakte Basisklasse Preise erstellt, so wie sie in Java mit den Begriff abstract oder in C++ durch die Deklaration einer sog. rein virtuellen Funktionen erstellt wird. D.h.: von diese Klasse kann keine Instanz erstellt werden, sondern nur von deren Ableitungen.
                    Die Ableitung des Elementes Einzelpreis ist vergleichbar der Ableitung z.b. in c++: class Einzelpreis : public Preise { ... vergleichbar
                    oder class Einzelpreis extends Preise { ... in PHP.

                    Alles in den Namespace 'xs' zu schreiben ist, wie ein gesamtes Programm in main() statt in Klassen.. Genau wie in den OO-Hochsprache, dient der namespace als freie Zusammenfassung und Zuweisung von Objektgruppen. Vielleicht wäre z.B. de Deklaration xmlns:vt="urn:Kosten" sinvoll. => base="vt:Preise"

                    Somit ist auch ein xsd eine Objektgruppe, für die Validierung verwendet man aber über die Bildung deren Instanz xsi. Deshalb funktioniert eine Validierung mit XML Schema meistens in der Form <Einzelpreise xsi:type="vt:waehrung"> .
                    Ich weiß nicht, wozu Du XML Schema brauchst, aber es ist ein komplexer Standard. Vielleicht kaufst Du Dir mal ein gutes Buch....

                    cu

                    Blaster
                    Yuppi, endlich Elite ...

                    Kommentar


                    • #11
                      Hi,

                      genau die Lösung hatte ich mir auch überlegt, aber leider hat ichs nicht so durchdacht für die Umsetzung. Klasse von Dir

                      Apropos Klasse(n), mir war die OO Sichtweise hier nicht so klar.
                      Aber mit Deinen Erklärungen leuchtet mir der Zusammenhang ein.
                      Mir ist durchaus die Basis für die OOP geläufig.

                      Bisher hab ich den XML Schema Primer vom www.w3.org nur als Stütze, falls Du andere Quellen als Empfehlungen hast, nur raus damit.

                      Ach ja noch was: Du hast doch nicht etwa zufällig eine Verwandschaft mit dem msBlaster Worm, ooder? (Sorry, kleiner Joke)
                      Mit dem hatte ich heute zum 2ten Mal meinen Spass, dacher meine unverschämte Assoziation mit Deinem Synonym

                      Danke nochmals

                      Gute N8

                      Flat

                      Kommentar


                      • #12
                        Original geschrieben von flatauge
                        Ach ja noch was: Du hast doch nicht etwa zufällig eine Verwandschaft mit dem msBlaster Worm, ooder? (Sorry, kleiner Joke)
                        Mit dem hatte ich heute zum 2ten Mal meinen Spass, dacher meine unverschämte Assoziation mit Deinem Synonym
                        Tja, das kommt darauf an von welcher Fraktion Du kommst :

                        Nach Leuten von der Ersten werden Stadte, Schule, Strassen und Krankenhäuser benannt...

                        Nach Leute der Zweiten Hariikans, Viren, Strahlenwaffen und Krachmacher... Also alles was "konstruktiv" ist .
                        Yuppi, endlich Elite ...

                        Kommentar


                        • #13
                          In der aktuellen c´t 18/03 S.190-195 ist eine gute Einführung in XML-Schema, XSL(T), XPath, DTD erscienen:

                          "Für Menschen und Maschinen- Vom leichtn Umgang mit XML Dokumenten"

                          ....
                          Yuppi, endlich Elite ...

                          Kommentar

                          Lädt...
                          X