Announcement

Collapse
No announcement yet.

Notenliste mit XML

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Notenliste mit XML

    Hallo,

    ich soll eine Notenliste in XML erstellen.

    Folgende Aufgabenstellung:

    "Im Rahmen der 2. Aufgabe sollen Sie einen persönlichen Notenausdruck (Übersicht der Ergebnisse all ihrer bis zum Ausdruck der Liste abgelegten Prüfungen, inkl. der jeweiligen ECTS-Punkte und Prüfungsdaten) als Xml-Datei abbilden sowie ein Xml-Schema erstellen, um die Xml-Notenliste zu validieren."

    Habe dann erstmal die XML Datei erstellt:

    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <Notenliste>
      <Student>
      <Matrikelnummer>123456</Matrikelnummer>
      <Name>
        <first>Hans</first>
        <last>Mustermann</last>
      </Name>
     
      <Leistungen>
        <Modul Bezeichnung="Mathematik 1" Note="3,7" CreditPoints="8" Versuch="1" Prüfungsdatum="2011-10-10"/>
        <Modul Bezeichnung="Technische Mechanik 1" Note="2,3" CreditPoints="5" Versuch="1" Prüfungsdatum="2011-10-10"/>
        <Modul Bezeichnung="Physik 1" Note="5.0" CreditPoints="5" Versuch="1" Prüfungsdatum="2011-10-10"/>
        <Modul Bezeichnung="Werkstoffkunde" Note="3,0" CreditPoints="4" Versuch="1" Prüfungsdatum="2011-10-10"/>
        <Modul Bezeichnung="Fertigungstechnik" Note="2,7" CreditPoints="2" Versuch="1" Prüfungsdatum="2011-10-10"/>
        <Modul Bezeichnung="Technisches Englisch 1" Note="2,0" CreditPoints="2" Versuch="1" Prüfungsdatum="2011-10-10"/>
      </Leistungen>
      </Student>
      
    </Notenliste>
    jetzt soll ich damit ja ein Schema erstellen und dann z.B. die Eingabe der Matrikelnummer so steuern, dass nur eine 6-Stellige Zahl eingegeben werden kann.
    Noten können ja nur 1,0 1,3 1,7 2,0 2,3 2,7 3,0 3,3 3,7 4,0 oder 5,0 sein...

    das soll über diese Eingabe funktionieren : [1,2,3].[0,3,7] | [4,5].0

    Die Creditpoints sollen von 0,5 bis 8 möglich sein. Die maximale Anzahl an Versuchen ist 3. Wie bringe ich das jetzt im Schema unter?

    Mein Schema sieht bis jetzt so aus:

    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="Notenliste">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Student">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Matrikelnummer" type="xs:unsignedInt" />
                  <xs:element name="Name">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="first" type="xs:string" />
                        <xs:element name="last" type="xs:string" />
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="Leistungen">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element maxOccurs="unbounded" name="Modul">
                          <xs:complexType>
                            <xs:attribute name="Bezeichnung" type="xs:string" use="required" />
                            <xs:attribute name="Note" type="xs:string" use="required" />
                            <xs:attribute name="CreditPoints" type="xs:unsignedByte" use="required" />
                            <xs:attribute name="Versuch" type="xs:unsignedByte" use="required" />
                            <xs:attribute name="Prüfungsdatum" type="xs:date" use="required" />
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>
    Wäre über ein paar Tipps dankbar, habe keinerlei Erfahrung mit XML.

    MfG

  • #2
    Ansatz für die CreditPoints:

    Code:
    <xs:attribute name="CreditPoints" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:decimal">
          <xs:minInclusive value="0.5"/>
          <xs:maxInclusive value="8"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    Versuch entsprechend als Ganzzahltyp formulieren.

    Comment


    • #3
      Originally posted by Thomas Meinike View Post
      Ansatz für die CreditPoints:

      Code:
      <xs:attribute name="CreditPoints" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:decimal">
            <xs:minInclusive value="0.5"/>
            <xs:maxInclusive value="8"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      Versuch entsprechend als Ganzzahltyp formulieren.
      Danke für die schnelle Antwort, aber was meinst du mit Ganzzahltyp?

      Comment


      • #4
        Z. B. xs:integer oder hier bei Werten > 0 besser xsositiveInteger und dann eine analoge Restriktion 1 bis 3 verwenden.

        Comment


        • #5
          So jetzt habe ich folgenden Code, sollte ja soweit stimmen. Fehlt dann noch die richtige Eingabe der Matrikelnummer. Wie gebe ich an, dass ich eine 6-Stellige Zahl gefordert ist? Wie bei den Noten? [0-9]{6} ?

          Code:
           <xs:attribute name="Note" type="xs:string" use="required" >
                                    <xs:simpleType>
                                      <xs:restriction>
                                        <xs:pattern value="[1,2,3].[0,3,7] | [4,5].0"
                                        </xs:pattern>
                                      </xs:restriction>
                                    </xs:simpleType>
                                  </xs:attribute>
          Fehler : "Ein Name darf nicht mit dem Zeichen < hexdecimaler wert 0x3C beginnen." Was hab ich da falsch gemacht?

          Hier nochmal der komplette Code


          Code:
          <?xml version="1.0" encoding="utf-8"?>
          <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <xs:element name="Notenliste">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="Student">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element name="Matrikelnummer" type="xs:unsignedInt" />
                        <xs:element name="Name">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element name="first" type="xs:string" />
                              <xs:element name="last" type="xs:string" />
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                        <xs:element name="Leistungen">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element maxOccurs="unbounded" name="Modul">
                                <xs:complexType>
                                  <xs:attribute name="Bezeichnung" type="xs:string" use="required" />
                                  <xs:attribute name="Note" type="xs:string" use="required" >
                                    <xs:simpleType>
                                      <xs:restriction>
                                        <xs:pattern value="[1,2,3].[0,3,7] | [4,5].0"
                                        </xs:pattern>
                                      </xs:restriction>
                                    </xs:simpleType>
                                  </xs:attribute>
                                  <xs:attribute name="CreditPoints" use="required">
                                    <xs:simpleType>
                                      <xs:restriction base="xs:decimal">
                                        <xs:minInclusive value="0.5"/>
                                        <xs:maxInclusive value="8"/>
                                      </xs:restriction>
                                    </xs:simpleType>
                                  </xs:attribute>
                                  <xs:attribute name="Versuch" use="required">
                                    <xs:simpleType>
                                      <xs:restriction base="xs:positiveInteger">
                                        <xs:minInclusive value="1"/>
                                        <xs:maxInclusive value="3"/>
                                      </xs:restriction>
                                    </xs:simpleType>
                                  </xs:attribute>
                                  <xs:attribute name="Prüfungsdatum" type="xs:date" use="required" />
                                </xs:complexType>
                              </xs:element>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:schema>
          Zuletzt editiert von Olli85; 12.04.2011, 14:26.

          Comment


          • #6
            xs:restriction --> <xsattern value="..."/>

            Comment


            • #7
              Code:
               <xs:attribute name="Note" type="xs:string" use="required" >
                                        <xs:simpleType>
                                          <xs:restriction>
                                            <xs:pattern value="[1,2,3].[0,3,7] | [4,5].0" />
                                          </xs:restriction>
                                        </xs:simpleType>
                                      </xs:attribute>
              Jetzt habich nen neuen Fehler drin.... "Die Simpletype Einschränkung muss das Basisattribut oder ein untergeordnetes Simple Type Element aufweisen, um den Basistyp für die Ableitung anzugeben"

              Fehler habe ich jetzt raus, ergibt das auch Sinn was ich gemacht habe?

              Code:
                     <xs:attribute name="Note" use="required" >
                                        <xs:simpleType id="Note">
                                          <xs:restriction base="xs:decimal">
                                            <xs:pattern value="[1,2,3].[0,3,7] | [4,5].0" />
                                          </xs:restriction>
                                        </xs:simpleType>
                                      </xs:attribute>

              Code:
                           <xs:element name="Matrikelnummer">
                              <xs:simpleType>
                                <xs:restriction base="xs:string">
                                  <xs:minLength value="6" />
                                  <xs:maxLength value="6" />
                                </xs:restriction>
                              </xs:simpleType>  
                            </xs:element>
              Das mit der Matrikelnummer läuft soweit, wie stelle ich das jetzt nur auf Zahlen um? Bei string ist ja die Eingabe von Buchstaben möglich... Wenn ich base auf "decimal" ändere, wird der Längenausdruck ungültig....

              MfG
              Zuletzt editiert von Olli85; 12.04.2011, 15:19.

              Comment


              • #8
                Warum nicht das oben genannte Pattern: [0-9]{6}?

                Comment


                • #9
                  habs jetzt mal so gemacht:

                  Code:
                     <xs:element name="Matrikelnummer">
                                  <xs:simpleType>
                                    <xs:restriction base="xs:decimal">
                                      <xs:pattern value="[0-9]{=6}"/>
                                    </xs:restriction>
                                  </xs:simpleType>  
                                </xs:element>
                  Problem ist, dass der jetzt bei ner zufällig erzeugten XML-Datei (in MS Visual Studio) die Matrikelnummer 1 setzt! Die Matrikelnummer muss aber die 6 Stellen haben. Wie gebe ich das da an?

                  Code:
                   <xs:element name="Matrikelnummer">
                                  <xs:simpleType>
                                    <xs:restriction base="xs:integer">
                                      <xs:pattern value="[0-9][0-9][0-9][0-9][0-9][0-9]"/>
                                    </xs:restriction>
                                  </xs:simpleType>  
                                </xs:element>
                  So sollte es klappen
                  Zuletzt editiert von Olli85; 12.04.2011, 18:05.

                  Comment


                  • #10
                    Das Gleichheitszeichen gehört nicht vor die 6.

                    Comment


                    • #11
                      okay habe es entfernt. womit validiere ich eine xml datei jetzt mit diesem erstellen schema?

                      Comment


                      • #12
                        Im XML-Editor der Wahl wie z. B. XMLSpy, <oXygen/> oder XML Copy Editor (frei) auf Knopfdruck. Alternativ mittels Konsolentools wie XMLStarlet via Parameter (xml val -s name.xsd name.xml).
                        Zuletzt editiert von Thomas Meinike; 13.04.2011, 17:54.

                        Comment

                        Working...
                        X