Announcement

Collapse
No announcement yet.

xml-schema und dataset

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

  • xml-schema und dataset

    Hallo,

    weiss jemand wie ein Dataset der als Grundlage ein XML-schema hat, die Anzahl der möglichen Fehler verhindert bzw. kann jemand ganz generell erklären, was es auf sich hat mit dem xml-schema?
    die reiten da bei den Prüfungsfragen ziemlich drauf rum
    Herzliche Grüße

    Markus Lemcke
    barrierefreies Webdesign

  • #2
    Hallo Markus,

    tut mir leid, aber diese Frage ist viel zu allgemein gehalten und enthält zu viele Aspekte. Deshalb kann ich auch nur allgemein auf einige Punkte hinweisen.

    Ein Xml-Schema dient (wie jede Html-Datei und jedes Xml-Dokument) zum problemlosen Datenaustausch außerhalb von Anwendungen.

    Die Struktur kannst Du Dir selbst erzeugen und mit einem beliebigen Editor ansehen. Ich nehme an, Du hast "irgendwo" schon ein Dataset, möglichst mit mehreren Tabellen und DataRelations (d.h. Foreign Keys). Dann speichere dessen Struktur:
    Code:
    MyDataset.WriteXmlSchema("MyDataset.xsd");
    Am Ende der Schema-Datei stehen PrimaryKeys, UniqueConstraints und ForeignKeys.

    Fehlerprüfungen: Da kommst es doch sehr auf die Art der Fehler an. Teilweise sind sie durch die vorstehenden Hinweise geregelt.

    Praktischer Sinn von Xml-Schemata ist auch Folgendes: Visual Studio erzeugt automatisch typisierte Datasets. In anderen IDEs (z.B. Delphi oder #D) und bei manchen Datenbanken (z.B. Firebird unter VS C# Express) muss man Umwege gehen. Dazu hilft ein Xml-Schema zusammen mit dem NET-Tool xsd.exe.

    Ich hoffe, ich konnte Dir einige Hinweise geben. Jürgen

    Comment


    • #3
      Hallo Jürgen,

      bei WriteXml gibt es als Parameter verschiedene WriteModies.
      wozu brauche ich die?
      Herzliche Grüße

      Markus Lemcke
      barrierefreies Webdesign

      Comment


      • #4
        Ich wollte nur das Schema speichern, also WriteXmlSchema() verwenden. Bitte genauer lesen, dort geht es nicht um WriteMode. Jürgen

        Comment


        • #5
          Hallo Jürgen,

          meine Rückfrage bezog sich auf eine meiner Prüfungsfragen und nicht auf deinen Beitrag! habe gestern abend noch bißchen gelesen in einem c#-buch über xml. wenn ich es richtig verstanden habe, steht in so einem schema, welcher xml-tag vom welchem typ ist! richtig?
          Herzliche Grüße

          Markus Lemcke
          barrierefreies Webdesign

          Comment


          • #6
            Originally posted by markus lemcke View Post
            meine Rückfrage bezog sich auf eine meiner Prüfungsfragen und nicht auf deinen Beitrag! habe gestern abend noch bißchen gelesen in einem c#-buch über xml. wenn ich es richtig verstanden habe, steht in so einem schema, welcher xml-tag vom welchem typ ist! richtig?
            Kann sein, weiß ich so allgemein nicht. Deine Ausgangsfrage bezog sich auf DataSet, und darauf beziehen sich meine Antworten.

            Das Xml-Schema ist eine Erweiterung von Xml, hat also ursprünglich nichts mit DataSet zu tun. Die Definition bietet auch eine kurze Einführung.

            Das Xml-Schema zu einem Dataset nutzt diese Definition, um außerhalb einer Anwendung die Datenstruktur zu beschreiben bzw. festzulegen.

            Ich schlage Dir nochmals vor, aus einem vorhandenen (Dir bekannten) Dataset eine Schemadatei zu erstellen und diese zu lesen. Dann solltest Du den Sinn eines solchen Schemas schon verstehen.

            WriteXml() befasst sich grundsätzlich mit dem Speichern der Daten (nicht der Datenstruktur). Durch die XmlWriteMode-Enumeration (siehe SDK-Doku) wird gesteuert, wieweit dabei das Schema berücksichtigt wird.

            Ich hoffe, ich habe jetzt nicht zu weiterer Verwirrung beigetragen. Jürgen

            Comment


            • #7
              Hallo Markus,

              weiss jemand wie ein Dataset der als Grundlage ein XML-schema hat, die Anzahl der möglichen Fehler verhindert ...
              vielleicht hilft die folgende "Abkürzung" weiter:

              a) DataSet ohne XML-Schema (.xsd): Untypisiertes DataSet

              b) DataSet mit XML-Schema (.xsd): Typisiertes DataSet, weil Visual Studio oder das Kommandozeilen-Tool Microsoft (R) Xml Schemas/DataTypes support utility (XSD.EXE) aus dem .NET Framework aus der XSD-Datei den Quelltext der Klasse des typisierten DataSets automatisch generieren kann.

              ...bei WriteXml gibt es als Parameter verschiedene WriteModies...
              Die DataSet-Klasse ist sehr komplex und unterstützt zahlreiche Sonderfälle. Zum Beispiel kann das DataSet je Datensatz verschiedenen Zustände speichern. Wenn zum Beispiel der originale Feldinhalt sowie der vom Anwender geänderte Feldinhalt in einer XML-Datei gespeichert werden soll, wird ein DiffGram angefordert:

              Code:
              dataSet1.WriteXml(sXmlFileName, XmlWriteMode.DiffGram);
              Der Anwender kann seine Änderungen somit erst durch einen späteren Update-Aufruf des TableAdapters in die Datenbank einarbeiten lassen (Beispiel: Außendienst-Mitarbeiter tippt die Änderungen im Notebook ein, ohne das eine Verbindung zum Firmennetzwerk besteht).

              Durch die zahlreichen überladenen Methoden können wir (die Entwickler) das Verhalten der DataSet-Klasse an die eigenen Anforderungen besser anpassen.

              Comment


              • #8
                Hallo Andreas,

                danke für Deine tolle Antwort! DiffGram kommt auch in eine meiner Prüfungsfragen drin und dank deines beitrages habe ich nun geblickt zu was es gut ist!
                typisiertes dataset deutet daraufhin, dass im xml-schema die datentypen der einzelnen spalten gespeichert werden. ist das richtig?
                Herzliche Grüße

                Markus Lemcke
                barrierefreies Webdesign

                Comment


                • #9
                  Originally posted by markus lemcke View Post
                  typisiertes dataset deutet daraufhin, dass im xml-schema die datentypen der einzelnen spalten gespeichert werden. ist das richtig?
                  Stimmt nur bedingt: Im Xml-Schema werden immer die Datentypen der einzelnen Spalten gespeichert, ebenso (soweit vorhanden) z.B. PrimaryKeys und ForeignKeys. Manche Sachen werden durch WriteXmlSchema nicht gespeichert, z.B. Feldattribute wie AutoIncrement. Das hat aber nichts (!) damit zu tun, ob das Dataset typ. ist oder nicht.

                  Das typisierte Dataset ist (im Vergleich zu einem untypisierten) eigentlich nichts anderes als eine Sammlung von Quellcode, die einen typsicheren Datenzugriff gewährleistet, ohne dass der Programmierer dies zu jedem Datenfeld und jedem PrimaryKey/ForeignKey selbst schreiben muss. Auch dazu hilft der Blick in den Quelltext. In einer früheren Antwort an Dich hatte ich Code wie folgt angegeben:
                  Code:
                  //  Nutzung eines untypisierten Dataset:
                  DataRow dr = MyDataSet.Tables["Kunden"].Rows[17];
                  string Kundenname = (string)dr["Name"];
                  //  Nutzung eines typisierten Dataset:
                  KundenRow dr = MyDataSet.Kunden.Rows[17];
                  string Kundenname = dr.Name;
                  Aber schau Dir einmal im Quelltext des Datasets an, welche Klimmzüge erforderlich sind, damit die Objekte Kunden und Name bekannt sind! Auch das sollte Dir den Unterschied zwischen typisiert und untypisiert verdeutlichen.

                  Es ist relevant, in welcher Reihenfolge die Objekte erzeugt werden:
                  • Wenn Du ein Dataset mit Visual Studio erzeugst, wird (wenn ich die Erläuterungen z.B. von Andreas Kosch richtig verstehe) zuerst ein Xml-Schema erstellt und dann daraus automatisch ein typ. Dataset erzeugt.
                  • Wenn Du ein Dataset mit Delphi erzeugst, wird ein "einfaches" Dataset erstellt. Wenn dann mit WriteXmlSchema() ein Xml-Schema erzeugt wird, steht alles drin, was Du manuell im Dataset eingetragen ist.
                  • Wenn Du zu einem manuell erstellen Xml-Schema das Tool XSD.exe aufrufst, hast Du immer ein typ. Dataset mit allen Festlegungen, die in der xsd-Datei stehen. (Dabei ist es gleichgültig, ob das Xml-Schema durch WriteXmlSchema entsteht oder ob Du es in Notepad manuell schreibst.)

                  Bist Du meinem früheren Vorschlag gefolgt, ein Xml-Schema in einem einfachen Editor zu lesen? Das sollte wirklich viele Deiner Nachfragen klären!

                  Also nochmal: Das Xml-Schema hat im Prinzip nichts (nichts!) damit zu tun, ob ein Dataset typisiert ist oder nicht; bei einem typ. Dataset ist es als Hilfsmittel (vermutlich) immer vorhanden, aber es kann genausogut bei einem untypisierten Dataset benutzt werden.

                  Jürgen

                  Comment

                  Working...
                  X