Frage zu XML Schema

  • VB.NET
  • .NET (FX) 4.0

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von Drahuverar.

    Frage zu XML Schema

    Hallo Forum,

    eine Frage zu einem XML Schema das ich erstellt habe bzw. erstellen möchte.
    Ich wollte fragen ob ihr mir vielleicht sagen könnt ob das Schema gut ist oder ob ihr etwas besser machen würdet.

    XML-Quellcode

    1. <Programm>
    2. <Index>1</Index>
    3. <Originaldatei>C:\Temp\Testfile.tfd</Originaldatei>
    4. <BearbeiteteDatei>C:\Temp\Testfile.chg</BearbeiteteDatei>
    5. <Werte>
    6. <X1>100</X1>
    7. <X2>100</X2>
    8. <Y1>200</Y1>
    9. <Y2>200</Y2>
    10. <Z1>300</Z1>
    11. <Z2>300</Z2>
    12. </Werte>
    13. <Index>2</Index>
    14. <Originaldatei>C:\Temp\Testfile.tfd</Originaldatei>
    15. <BearbeiteteDatei>C:\Temp\Testfile.chg</BearbeiteteDatei>
    16. <Werte>
    17. <X1>100</X1>
    18. <X2>100</X2>
    19. <Y1>200</Y1>
    20. <Y2>200</Y2>
    21. <Z1>300</Z1>
    22. <Z2>300</Z2>
    23. </Werte>
    24. </Programm>


    Ziel sollte sein, später anhand der Indizes, die Werte auslesen zu können.

    Grüße,
    Drahuverar
    Option Strict On!

    Drahuverar schrieb:

    besser
    Vielleicht anders.
    Hat es Zweck, die Xi, Yi, Zi zu einrm Paar (Point oder Size) zusammenzufassen:

    XML-Quellcode

    1. <Werte>
    2. <X>100, 100</X>
    3. <Y>200, 200</Y>
    4. <Z>300, 300</Z>
    5. </Werte>

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Gute Idee, 3 Zeilen gespart. :D

    Aber ansonsten ist an der Struktur nichts auszusetzen?

    Ich hab leider eine Meldung bekommen, beim lesen der Werte;
    "'EndElement' ist ein ungültiger XmlNodeType."
    Leider kann ich nicht nachvollziehen wieso,.. Liegt es daran das ich System.XML.Textreader nutze?
    Sollte ich XDocument nutzen?

    Oder gibt es noch andere wege?
    System.XML.TextReader scheint nicht gerade beliebt zu sein. 8|
    Option Strict On!

    Drahuverar schrieb:

    XDocument
    ist besser.
    Teste Deine struktur mit nem Standard XML-Viewer, meiner hat nix auszusetzen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wenn ich es mit einer normalen WinForm teste bringt es kein error,
    nur wenn ich es aus einem Programm aufrufe.. komisch.. Muss ich mal weitersuchen.

    @RodFromGermany
    ist besser.

    Hast du evtl. einen Link mit einem guten Beispiel?
    Dann würde ich direkt mit XDocument das Programm machen.

    Danke Dir.



    EDIT:
    Das ist ja ziemlich genial. Ein bisschen probiert und schon kommt mit ein wenig Code alles an info raus.. muss nur noch schauen das es auch sinnvoll rauskommt. ;)


    VB.NET-Quellcode

    1. Dim root As XElement = XDocument.Load("C:\Temp\Test.xml").Element("Programm")
    2. For Each elem As XElement In root.Elements
    3. MsgBox(elem)
    4. Next


    Solltest du noch Tipps/Links haben wäre ich Dir sehr dankbar.
    Option Strict On!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Drahuverar“ ()

    Drahuverar schrieb:

    Beispiel
    Müsste ich auch suchen.
    Frag Frau Google nach xdocument beispiel.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Jetzt merke ich doch das mein Schema etwas schwach ist, oder würdest du sagen ich soll es so lassen?

    Und zwar würde ich

    XML-Quellcode

    1. <Programm>
    2. <Index>1</Index>
    3. <Originaldatei>C:\Temp\Testfile.tfd</Originaldatei>
    4. <BearbeiteteDatei>C:\Temp\Testfile.chg</BearbeiteteDatei>
    5. <Werte>
    6. <X>100,200</X>
    7. <Y>200,300</Y>
    8. <Z>300,400</Z>
    9. </Werte>
    10. <Index>2</Index>
    11. <Originaldatei>C:\Temp\Testfile.tfd</Originaldatei>
    12. <BearbeiteteDatei>C:\Temp\Testfile.chg</BearbeiteteDatei>
    13. <Werte>
    14. <X>100,200</X>
    15. <Y>200,300</Y>
    16. <Z>300,400</Z>
    17. </Werte>
    18. </Programm>


    in

    XML-Quellcode

    1. <Programm>
    2. <Index id="1">
    3. <Originaldatei>C:\Temp\Testfile.tfd</Originaldatei>
    4. <BearbeiteteDatei>C:\Temp\Testfile.chg</BearbeiteteDatei>
    5. <Werte>
    6. <X>100,200</X>
    7. <Y>200,300</Y>
    8. <Z>300,400</Z>
    9. </Werte>
    10. </Index>
    11. <Index id="2">
    12. <Originaldatei>C:\Temp\Testfile.tfd</Originaldatei>
    13. <BearbeiteteDatei>C:\Temp\Testfile.chg</BearbeiteteDatei>
    14. <Werte>
    15. <X>100,200</X>
    16. <Y>200,300</Y>
    17. <Z>300,400</Z>
    18. </Werte>
    19. </Index>
    20. </Programm>


    umändern, um "besser" an die Informationen zu kommen... Schwachsinn oder Sinnvoll?
    Ich möchte später eine Sub schreiben in der ich z.B. "1" angebe um die Daten des 1. Index auszulesen.
    Option Strict On!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Drahuverar“ ()

    Drahuverar schrieb:

    <Index id="1"
    Da fehlt noch ne spitze Klammer zu >.
    Du kannst auch <id>1</id> schreiben. Kommt da ggf. noch ein Wert rein? Wenn nicht, brauchet Du nicht sowohl Index als auch id.
    Eines genügt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke, habe es abgeändert. Nicht das jemand den Fehler irgendwann übernimmt..

    Okay. Dann hab ich mal wieder einen Denkfehler...zumindest dachte ich, dass ich schneller an die Werte kommen würde.
    Na ja, habe ja eben erst XDocument entdeckt.. Muss ich mal schauen wie das am besten geht.

    Ich bekomme es nicht hin in einem gewissen Bereich zu bleiben. :S
    Option Strict On!

    Drahuverar schrieb:

    Ich bekomme es nicht hin
    Du solltest mal intensiv die Suchfunktion frequentieren, Du bist nicht der Erste mit diesem Problem.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich halts für keine gute Idee, zwei Zahlen kommagetrennt in ein Element zu stopfen.
    Wenn jede Zahl ein Element ist, kann man sowas leichter als Zahl verarbeiten - ZB kann man in einer Schema-Datei festlegen, dass es Zahlen sind. Bestimmt auch noch mehr - weiß ich nicht.
    Jdfs. wenn 2 zahlen kommagetrennt in ein Element gestopft sind, dann isses ein String.

    Benamung könnte man auch verbessern - worum gehts bei diesen Daten?
    Sind das wirklich Indexe, und was ist ein Index?
    Normal ist Index eine Eigenschaft, keine Entität (also abzubilden als Attribut, nicht als Element). Etwa Id ist ein(e Art) Index - also wir haben hier Indexe mit Indexen - hmm hmm - also wirklich besser wäre, man könnte lesen, worums geht.
    Auch die Werte - Es könnte sich jeweils um die Definition eines Rechtecks im 3D-Raum handeln - also wenns das ist, solls auch so heissen, etwa Rectangle3D

    achso - zu XDocument: Xml verarbeiten mit Intellisense (Schema und XDocument)
    @RodFromGermany
    Habe mich den ganzen Tag mit XDocument beschäftigt.. Bisher hatte ich kaum was damit zu tun.
    Momentan versuche ich so weit es geht ohne Google voranzukommen :/ Da ich bisher wenig meinen ObjectBrowser genutzt habe.

    @ErfinderDesRades
    Ok. Also lieber separieren :thumbsup:
    Macht ja dem Anwender im Endeffekt nichts, ich muss die Daten ja verarbeiten. ^^

    Nun zur Vorgehensweise:
    Der Anwender kopiert eine Datei auf dem Laufwerk. Diese führt er aus.
    In dem Programm, welches der Anwender nutzt, werden gewisse Variablen hinterlegt bzw. genutzt.
    Ich möchte diese Variablen Programm spezifisch sichern, und sobald die Datei auf dem Laufwerk vorhanden ist,
    anhand der XML die Daten dem Anwender als Vorschlag anzeigen und fragen ob er diese für das Folge-Programm nutzen möchte.
    Deswegen dieser Index. Es könnte ja sein das er eine Datei bearbeiten möchte, weswegen ich über den Index herausfinden kann welches Programm er gerade ausgewählt hat.

    Danke für eure Zeit
    Option Strict On!

    ErfinderDesRades schrieb:

    Sowas geht mir auf die Nerven.


    Das war nicht beabsichtigt gewesen... Ich dachte es würde reichen, wenn ich erwähne das es verschiedene Variablen sind.

    Es handelt sich bei den Werten, wie du richtig vermutet hast, um ein 3D Rechteck.

    Die Namensgebung habe ich nun unterteilt,.. Und das Schema habe ich auch verändert.

    XML-Quellcode

    1. <Programs>
    2. <Program>
    3. <ID>1</ID>
    4. <PathLocation>C:\Temp</PathLocation>
    5. <OriginalFile>Testfile.tfd</Original File>
    6. <ChangedFile>Testfile-1.chg<ChangedFile>
    7. <Values>
    8. <Rectangle3DX1>100</Rectangle3DX1>
    9. <Rectangle3DX2>100</Rectangle3DX2>
    10. <Rectangle3DY1>100</Rectangle3DY1>
    11. <Rectangle3DY2>100</Rectangle3DY2>
    12. <Rectangle3DZ1>100</Rectangle3DZ1>
    13. <Rectangle3DZ2>100</Rectangle3DZ2>
    14. <!-- Oder soll ich <Rectangle3D X1="100" X2="100" Y1="100"
    15. Y2="100" Z1="100" Z2="100"></Rectangle3D> machen?
    16. Dann wäre ich ja wieder bei den Strings..oder?-->
    17. </Values>
    18. </Program>
    19. ...
    20. </Programs>
    Option Strict On!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Drahuverar“ ()

    Drahuverar schrieb:

    Oder soll ich <Rectangle3D X1="100" X2="100" Y1="100" Y2="100" Z1="100" Z2="100"></Rectangle3D> machen?
    Ja, das wäre eine Möglichkeit

    Drahuverar schrieb:

    Dann wäre ich ja wieder bei den Strings..oder?
    Nein, das wären dann keine Multi-Wert-Strings, sondern das wären Attribute - jedes ein Wert.
    Ungewöhnlich, aber machbar (und eiglich konzeptionell sauberer)
    Gängiger ist aber wohl, ins RectAngle-Object 6 verschiedene Werte einzuschachteln.
    guggemol:

    XML-Quellcode

    1. <programs>
    2. <program>
    3. <id>1</id>
    4. <pathlocation>c:\temp</pathlocation>
    5. <originalfile>testfile.tfd</originalfile>
    6. <changedfile>testfile-1.chg</changedfile>
    7. <rectangle_3d x1="100" x2="100" y1="100" y2="100" z1="100" z2="100" />
    8. <!--oder-->
    9. <rectangle3d>
    10. <x1>100</x1>
    11. <y1>100</y1>
    12. <z1>100</z1>
    13. <x2>200</x2>
    14. <y2>200</y2>
    15. <z2>200</z2>
    16. </rectangle3d>
    17. </program>
    18. <!-- weitere program - elemente ... -->
    19. </programs>
    noch 3 Hinweise:
    1. VS hat einen tollen Xml-Editor. Bei der Bearbeitung deines "xml" hab ich gemerkt, dass du offsichtlich in Notepad rumwurstelst, odr? Die Tags haben vorn und hinten nicht gestimmt ;)
      Einfach einem Projekt ein New Item zufügen - Xml-Datei, und da kann man vernünftig Xml drinne schreiben
    2. in xml ist allgemeine Kleinschreibung üblich
    3. wie gesagt: Grad die id eines Elements wird meist glaub als Attribut angelegt
      Aber nicht immer, generiertes Xml, wie etwa das von Serialisierern verwenden afaik gar keine Attribute in den Daten - k.A., warum.

    wie gesagt: Ich fände es konzeptionell sauberer, wenn man Eigenschaften (mit primitiven Datentyp) als Attribute abbildete. Etwa in rectangle_3d kann es von jedem Attribut nur eines geben, während in rechtangle3d es vom Xml her auch möglich ist, dass 2 oder noch mehr <x1>-Elemente hineingeraten.

    Aber die Benamung ist jetzt top, findich :thumbsup:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    @Drahuverar
    Nurso eine Frage warum eigentlich XML und nicht irgendwie "Plain Text"? ^^ So ist das noch "lesbarer" und vielleicht auch ein wenig übersichtlicher (denn XML ist normalerweise nicht so mein Ding):

    Quellcode

    1. Programm DeinName
    2. Index 1
    3. Original C:\Temp\Testfile.tfd
    4. Bearbeitete C:\Temp\Testfile.chg
    5. x1 100
    6. x2 100
    7. y1 200
    8. y2 200
    9. z1 300
    10. z2 300
    11. Index 2
    12. Original C:\Temp\Testfile.tfd
    13. Bearbeitete C:\Temp\Testfile.chg
    14. x1 100
    15. x2 100
    16. y1 200
    17. y2 200
    18. z1 300
    19. z2 300

    Software being "Done" is like lawn being "Mowed". (Jim Benson)
    Lesbarkeit ist eiglich recht irrelevant - xml ist ein Standard zum Daten-Austausch.
    Um (ordentlich designete) Xml-Dateien zu verarbeiten gibts reichhaltige Unterstützung im Framework - eine Xml-Datei kann zB in ein XDocument eingelesen werden, und dann mit einer Sql-ähnlichen Abfragesprache ("XPath") abgefragt und manipuliert werden.
    Also eine Xml-Datei kann eine ganze kleine Datenbank sein.

    ErfinderDesRades schrieb:

    VS hat einen tollen Xml-Editor


    ..das stimmt, ich wurschtel immer mit dem Notepad++ rum. :D
    Ich nutze die IDE zu selten.. obwohl die ja alles mit sich mitbringt. Auch mit dem ObjectBrowser habe ich in den letzten Tage mehr zu tun gehabt als vorher. :thumbup:

    ErfinderDesRades schrieb:

    Gängiger ist aber wohl, ins RectAngle-Object 6 verschiedene Werte einzuschachteln.


    Das sieht auch viel besser aus, ich werde das wohl so übernehmen. :rolleyes:
    Ich glaube die das ich die id als Attribut angeben werde. Sieht auf jeden Fall auch besser aus. So umschließt es den kompletten "part". ^^

    KidRick schrieb:

    Nurso eine Frage warum eigentlich XML und nicht irgendwie "Plain Text"?


    Bisher habe ich immerzu XML Daten gesehen und dachte mir das ich dabei bleiben sollte... habe auch schon kleinere XMLs generiert, aber das ist ewig her.. fast 3 Jahre ^^
    Und mir gefällt die Unterteilung in XML besser, zumindest über den Editor. :D


    Vielen Dank für eure Zeit :)
    Option Strict On!

    ErfinderDesRades schrieb:

    Also eine Xml-Datei kann eine ganze kleine Datenbank sein.



    Wie du schon sagst "sein" ... Besteht die Möglichkeit Berechtigungen zu Regeln? Nur aus Interesse.
    Werde demnächst eine kleine Anwendung schreiben mit 2 Masken.
    Einmal die Eingabe von Werten und die andere Form soll die Ansicht dieser Eingaben werden.
    Allerdings sollte derjenige, der sich diese Tabelle ansieht (Wird wohl in Form einer Tabelle dargestellt (DataGridView)) gewisse Einträge entfernen können, nachdem diese abgearbeitet worden sind. Ich habe mir gedacht das ich hierzu dem jeweiligen Element (id) in der XML noch einen Zusatz wie z.B. "<erledigt>0|1</erledigt>" hinzufüge, damit diese nicht mehr aufgelistet werden.
    Es wäre natürlich interessant zu wissen, wie weit man gehen kann/könnte.
    Option Strict On!