XMLSchema - welche Vorteile?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • XMLSchema - welche Vorteile?

    Hallo!

    Ich möchte ein Schema für meine [coderwiki]Informationen/XML[/coderwiki] erstellen. Da stellen sich mir nun einige Probleme. Zunächst habe ich eine Allgemeine Frage. Was bringt ein Schema genau? Ich habe mit Hilfe eine Online-Validators einmal erfolgreich ein [coderwiki]Informationen/XML-Schema[/coderwiki] validiert. Dann habe ich einfach mal eine Zeile aus der XML Datei entfernt, mit dem Ergebniss, dass der Validator mir sagte, dass da was falsch ist, da ein anderer Wert erwartet wird. Der Browser hat trotzdem so getan als ob nix wäre. Ist das Schema also nur eine Kontrolle für mich, dass ich in kurzer Zeit eine große XML Datei auf ihre Richtigkeit überprüfen kann oder habe ich das Schema einfach falsch eingebunden, sodass der Browser dieses nicht nutzt?

    Das Stichwort einbinden bringt mich dann auch zu meiner nächsten Frage. Ich habe gelesen, dass ein Schema wie folgt in die XML eingebunden wird:

    <muster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="pan.xsd">

    Der Validator sagt mir allerdings, dass die untere Zeile falsch ist und erkennt das Schema nur dann als richtig, wenn ich diese wieder entferne. Dabei ist doch gerade die Zeile die Verbindung zum Schema oder nicht? Was ist daran falsch? Zumal ich das aus einer seriösen Quelle habe...

    Meine vorerst letzte Frage bezieht sich auf den complexType. Ich möchte einen complexType innerhalb eines complexTypes erstellen. Hierzu habe ich folgenden Code:

    [...]
    <xs:element name="transferdocs" type="transferdocsType"/>

    [...]
    <xs:complexType name="transferdocsType">
    <xs:sequence>
    <xs:element name="transferdoc" type="transferdocType"/>
    </xs:sequence>
    </xs:complexType>

    <xs:complexType name="transferdocType">
    <xs:sequence>
    <xs:element name="name" type="xs:string"/>
    </xs:sequence>
    </xs:complexType>

    Für den Browser is das wieder alles prima. Der macht genau das, was er soll. Der gute Validator sagt mir dann aber wieder, dass das alles völlig vermurkst ist. Er meint, dass unter "transferdocs" keine Kindelement "transferdoc" erwartet wird. Woran liegt das?

    Vielen Dank im Voraus für eure Hilfe!!!

    Gruß
    Rantan
  • Hi

    mit XML Schematas schaffts du Standards ;) Ist doch viel praktischer ein Datenformat über solch ein Schema zu beschreiben, anstatt sich mit regulären Ausdrücken seinen eigenen Validator zu programmieren.

    Weitere Infos findest du hier:
    http://de.wikipedia.org/wiki/XML_Schema

    Die Einbindung ins XML Dokument mittels noNamespaceSchemaLocation ist eigentlich korrekt. Wie lautet denn die genaue Fehlermeldung. Eine zusätzliche [coderwiki]Informationen/DTD[/coderwiki] hast du nicht drin, oder? Das würde nicht gehen.

    Zu deinem letzten Problem:
    xsd:string statt xs:string ?
  • Danke für die schnelle Antwort!

    Wofür ein Schema da ist hab ich verstanden. Ich wollte nur wissen, wie sich dieses Schema auswirkt. Als Information vorab: Ich benutze den Validator von http://tools.decisionsoft.com/schemaValidate/

    1. Die Fehlermeldung bei noNamespaceSchemaLocation kommt nicht mehr. Hab ziemlich viel probiert und jetzt gehts halt. Hatte vielleicht einfach nur irgendwas übersehen. Wenn ich es nochmal hinkriege, dann poste ich es sofort! ;)

    2. Der Validator sagt mir nun, dass alles in Ordnung ist. Verändere ich dann die XML, dann sagt er mir auch, dass in der XML was fehlt. Allles gut soweit. Die eigentlich Frage ist. Muss der Browser mir dann nicht auch sagen, dass da was in der XML fehlt? Oder soll ihn das gar nicht interessieren und er zeigt einfach das an, was er findet? So macht er das nämlich...

    3. Zu meinem dritten Problem. Hier wollte ich wissen, ob ich die complexTypes so verschachteln kann, wie ich es getan habe? Die Antwort müsste eigtl nein sein, weil der Validator das schließlich sagt. Die Fehlermeldung dazu lautet:
    "cvc-complex-type.2.4.d: Invalid content was found starting with element 'folder'. No child element is expected at this point."

    Das ist das Schema:

    Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <xs:schema elementFormDefault="qualified"
    3. xmlns:xs="http://www.w3.org/2001/XMLSchema">
    4. <xs:element name="subprojects">
    5. <xs:complexType>
    6. <xs:sequence>
    7. <xs:element name="subproject" type="subprojectType"/>
    8. </xs:sequence>
    9. </xs:complexType>
    10. </xs:element>
    11. <xs:complexType name="subprojectType">
    12. <xs:sequence>
    13. <xs:element name="name" type="xs:string"/>
    14. <xs:element name="description" type="xs:string"/>
    15. <xs:element name="folders" type="foldersType"/>
    16. <xs:element name="year" type="xs:integer"/>
    17. <xs:element name="custodian" type="xs:string"/>
    18. </xs:sequence>
    19. </xs:complexType>
    20. <xs:complexType name="foldersType">
    21. <xs:sequence>
    22. <xs:element name="folder" type="folderType"/>
    23. </xs:sequence>
    24. </xs:complexType>
    25. <xs:complexType name="folderType">
    26. <xs:sequence>
    27. <xs:element name="name" type="xs:string"/>
    28. </xs:sequence>
    29. </xs:complexType>
    30. </xs:schema>
    Alles anzeigen


    Gruß
    Rantan
  • Wenn der Browser das Schema strikt beachten würde, dann könnte man sich 95% aller Websites nicht anschauen.
    Soweit ich weiß, ist der [coderwiki]Informationen/Browser[/coderwiki] auch nicht zum Schema validieren gedacht. Zum validieren gibts andere Programme.

    Zu deinem Problem: Ich habe ja deine XML Datei nicht. Aber anhand deiner Schemas habe ich mir diese XML zusammengebaut.
    Und die ist gültig.

    Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <subprojects>
    3. <subproject>
    4. <name>asd</name>
    5. <description>asd</description>
    6. <folders>
    7. <folder>
    8. <name>asd</name>
    9. </folder>
    10. </folders>
    11. <year>2004</year>
    12. <custodian>asd</custodian>
    13. </subproject>
    14. </subprojects>
    Alles anzeigen
    [coderwiki][/coderwiki]
  • Ja, das ist auch völlig korrekt. So sieht meine auch aus. Allerdings gibt es mehrere Elemente vom Typ "folder". Mein Browser kommt auch damit klar und zeigt brav alle Einträge von Folder an. Es stört mich nur, dass das Schema anscheinend ein Problem damit hat, dass ich den complexType "folder" in den complexType "folders" gepackt habe. Und ich würde gerne verstehen, wo da das Problem liegt.
  • Also das hier sind meine Dateien:

    Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <?xml-stylesheet type="text/xsl" href="subprojects.xsl"?>
    3. <subprojects xsi:schemaLocation="dlr-eo/ file:subprojects.xsd">
    4. <subproject>
    5. <name>Hausbau</name>
    6. <description>Bau eines Hauses</description>
    7. <folders>
    8. <folder>
    9. <name>Haus1</name>
    10. </folder>
    11. <folder>
    12. <name>Haus2</name>
    13. </folder>
    14. <folder>
    15. <name>Haus3</name>
    16. </folder>
    17. </folders>
    18. <year>2003</year>
    19. <custodian>Peter</custodian>
    20. </subproject>
    21. </subprojects>
    Alles anzeigen


    Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <xs:schema elementFormDefault="qualified">
    3. <xs:element name="subprojects">
    4. <xs:complexType>
    5. <xs:sequence>
    6. <xs:element name="subproject" type="subprojectType"/>
    7. </xs:sequence>
    8. </xs:complexType>
    9. </xs:element>
    10. <xs:complexType name="subprojectType">
    11. <xs:sequence>
    12. <xs:element name="name" type="xs:string"/>
    13. <xs:element name="description" type="xs:string"/>
    14. <xs:element name="folders" type="foldersType"/>
    15. <xs:element name="year" type="xs:integer"/>
    16. <xs:element name="custodian" type="xs:string"/>
    17. </xs:sequence>
    18. </xs:complexType>
    19. <xs:complexType name="foldersType">
    20. <xs:sequence>
    21. <xs:element name="folder" type="folderType"/>
    22. </xs:sequence>
    23. </xs:complexType>
    24. <xs:complexType name="folderType">
    25. <xs:sequence>
    26. <xs:element name="name" type="xs:string"/>
    27. </xs:sequence>
    28. </xs:complexType>
    29. </xs:schema>
    Alles anzeigen


    Und hier noch einmal die Fehlermedlung vom Validator:
    cvc-complex-type.2.4.d: Invalid content was found starting with element 'folder'. No child element is expected at this point.