XML-Schema -> XML Dokument

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

  • XML-Schema -> XML Dokument

    Hallo,

    ich habe folgende 2 XML-Schema Dokumente:

    gesmes.xsd:

    Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <xs:schema targetNamespace="http://www.gesmes.org/xml/2002-08-01";
    3. xmlns:ecb="http://www.ecb.int/vocabulary/2002-08-01/eurofxref";
    4. xmlns:xs="http://www.w3.org/2001/XMLSchema";
    5. xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01";
    6. elementFormDefault="qualified">
    7. <xs:import
    8. namespace="http://www.ecb.int/vocabulary/2002-08-01/eurofxref";
    9. schemaLocation="ecb.xsd"/>
    10. <xs:complexType name="subjectType"/>
    11. <xs:complexType name="SenderType">
    12. <xs:sequence>
    13. <xs:element name="name" type="xs:string"/>
    14. </xs:sequence>
    15. </xs:complexType>
    16. <xs:complexType name="rootType">
    17. <xs:sequence>
    18. <xs:element name="subject" type="xs:string"/>
    19. <xs:element name="Sender" type="gesmes:SenderType"/>
    20. <xs:element ref="ecb:Cube"/>
    21. </xs:sequence>
    22. </xs:complexType>
    23. <xs:element name="Envelope" type="gesmes:rootType"/>
    24. </xs:schema>
    Alles anzeigen


    ecb.xsd:

    Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <xs:schema
    3. targetNamespace="http://www.ecb.int/vocabulary/2002-08-01/eurofxref";
    4. xmlns:ecb="http://www.ecb.int/vocabulary/2002-08-01/eurofxref";
    5. xmlns:xs="http://www.w3.org/2001/XMLSchema";
    6. elementFormDefault="unqualified">
    7. <xs:complexType name="CubeType3">
    8. <xs:attribute name="currency" type="xs:string"/>
    9. <xs:attribute name="rate" type="xs:decimal"/>
    10. </xs:complexType>
    11. <xs:complexType name="CubeType2">
    12. <xs:sequence>
    13. <xs:element name="Cube" type="ecb:CubeType3" minOccurs="0"
    14. maxOccurs="unbounded"/>
    15. </xs:sequence>
    16. <xs:attribute name="time" type="xs:date"/>
    17. </xs:complexType>
    18. <xs:complexType name="CubeType">
    19. <xs:sequence>
    20. <xs:element name="Cube" type="ecb:CubeType2" minOccurs="0"
    21. maxOccurs="unbounded"/>
    22. </xs:sequence>
    23. </xs:complexType>
    24. <xs:element name="Cube" type="ecb:CubeType"/>
    25. </xs:schema>
    Alles anzeigen


    Es wäre nett, wenn mir jemand sagen kann wie die entprechenden XML-Instanzdokumente aussehen würden oder zumindest ein Teil davon, da ich das nach zig versuchen einfach nicht auf die Reihe gebracht habe...

    Vielen Dank.
    Gruß
  • Es wäre nett, wenn du einen 2ten Blick darauf werfen könntest ;)

    Du kannst mir ja mal bissl was vorgeben, wie du das machen würdest, da mir meine Anfänge damit noch etwas zu peinlich sind...

    Wäre nett, wenn du das machen könntest. ich kanns ja dann versuchen zu ende zu bringen und dann post ich mein Ergebnis?

    Gruß
  • Ich muss sagen ich habe gar kein Schema Validator und das letzte Schema, dass ich geschrieben habe, ist schon ein paar Jahre her.
    Aber mir ist nichts zu peinlich ;)

    Quellcode

    1. <Envelope
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://www.gesmes.org/xml/2002-08-01 gesmes.xsd">
    4. <subject>string</subject>
    5. <Sender>
    6. <name>string</name>
    7. </Sender>
    8. <Cube>
    9. <Cube>
    10. <Cube>
    11. <currency>string</currency>
    12. <rate>decimal</rate>
    13. </Cube>
    14. <time>date</time>
    15. </Cube>
    16. </Cube>
    17. </Envelope>
    Alles anzeigen
  • Uff....das sieht ja bisher ganz anders aus als ich es gemacht hätte.
    Warum hast du als einstiegspunkt eigentlich "subject" gewählt? Das erste Element ist doch "subjectType"?
    Und warum machst du "Cube" dreimal auf?
    Ich glaube du musst mir bitte noch mehr vorgeben, da ich damit irgendwie noch nicht zurecht komme.

    Aber vielen vielen Dank bisher, du hilfst mir ungemein.

    Bitte nicht lachen über meine Fragen, bin noch ziemlich neu auf diesem Gebiet.
  • also "gesmes" ist das Hauptschema.
    Ich hab dort nach dem ersten Element auf oberster Ebene gesucht. Das ist Envelope.
    Dessen Typ ist keinen simpleType wie xsd:string oder decimal, sondern ein complexType namens rootType.
    Also suchst du im Namespace gesmes nach einem complexType namens rootType.
    Der besteht aus dem Element subject mit dem simpleType string... es kommen also keine Kindknoten mehr inner halb von subject.
    Sender referenziert wieder auf den complexType SenderType und das ELEMENT Cube wird aus dem anderen Namespace geladen.
    Also gehts dort von vorne los. Cube hat den Typ CubeType dieser hat unendlich viele Cubes vom Typ CubeType2, und diese.......
  • Aha ok. Aber warum schließt du darauf, dass rootType das Elemen auf der obersten Ebene ist? Es ist doch das letzte Element in gesmes.xsd? Kommst du nur durch den namen "root" darauf?
    Auf diese Zeile wird überhaupt keine Rücksicht genommen oder?:

    <xs:complexType name="subjectType"/>


    Und bei welchem CubeType machts du dann weiter in ecb.xsd? Es sind doch hier 3 Elemente mit dem namen "Cube" enthalten:

    1. <xs:element name="Cube" type="ecb:CubeType3" minOccurs="0" maxOccurs="unbounded"/>

    2. <xs:element name="Cube" type="ecb:CubeType2" minOccurs="0" maxOccurs="unbounded"/>

    3. <xs:element name="Cube" type="ecb:CubeType"/>

    Von deiner Formulierung her müsstest du ja hier bei dem 2ten ansetzten, da hier der CubeType2 drin ist, aber warum?
  • Der subjectType wird wirklich nirgendwo verwendet. Aber es ist ja nur ein Typ, vielleicht wird er wieder von anderen Dateien referenziert.

    jack26 schrieb:

    Und bei welchem CubeType machts du dann weiter in ecb.xsd? Es sind doch hier 3 Elemente mit dem namen "Cube" enthalten:

    ich nehme immer das erste Element auf der Root-Ebene. Da gibts nur eins. Eigentlich kann es auch nur ein root-Element geben.

    Hast du einen Schema-Validator? Ich verkaufe hier wirklich nur Halbwissen ;) Für mich wirkt es logisch, aber getested habe ich es nicht.
  • Also ich hab mir jetzt dein Schma nochmal zu Gemüte geführt und ich hätte es so gelöst:

    Quellcode

    1. <gesmes: Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://www.gesmes.org/xml/2002-08-01 gesmes.xsd"
    3. xmlns:ecb="http://www.ecb.int/vocabulary/2002-08-01/eurofxref"
    4. xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01">
    5. <gesmes: subject>string</gesmes: subject>
    6. <gesmes: Sender>
    7. <gesmes: name>string</gesmes: name>
    8. </gesmes: Sender>
    9. <ecb: Cube>
    10. <ecb: Cube time="date">
    11. <ecb: Cube currency="string" rate="decimal">
    12. </ecb: Cube>
    13. </ecb: Cube>
    14. </ecb: Cube>
    15. </gesmes: Envelope>
    Alles anzeigen

    Der einzige Unterschied ist, dass ich die Attribute time, currency und rate eben direkt zu den Elementen zugeordnet habe, da es ja bei einem Instanzdokument so der Fall ist und die namespaces ecb und gesmes geaddet habe.

    Was hälst du davon? Stimmt dies so mit den Attributen und Namespaces?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von jack26 ()

  • Jetzt muss ich dich nur noch einmal nerven ;)
    XMLSpy hat mir folgendes generiert:

    Quellcode

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!--Sample XML file generated by XMLSpy v2008 sp1 (http://www.altova.com)-->
    3. <gesmes:Envelope xsi:schemaLocation="http://www.gesmes.org/xml/2002-08-01 test.xsd" xmlns:ecb="http://www.ecb.int/vocabulary/2002-08-01/eurofxref" xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    4. <gesmes:subject>String</gesmes:subject>
    5. <gesmes:Sender>
    6. <gesmes:name>String</gesmes:name>
    7. </gesmes:Sender>
    8. <ecb:Cube>
    9. <Cube time="1967-08-13">
    10. <Cube currency="String" rate="0.0"/>
    11. <Cube currency="String" rate="0.0"/>
    12. </Cube>
    13. <Cube time="1967-08-13">
    14. <Cube currency="String" rate="0.0"/>
    15. <Cube currency="String" rate="0.0"/>
    16. </Cube>
    17. </ecb:Cube>
    18. </gesmes:Envelope>
    Alles anzeigen


    Hier ist ein kleiner Unterschied zu unserer Lösung. Kannst du mir sagen, warum zum Beispiel
    <Cube currency="String" rate="0.0"/>
    zweimal vorkommt? Und anchließend wieder zweimal?