XML-Schema



  • Hallo,

    ich habe hier ein xml-schema-file:

    <?xml version='1.0' encoding='UTF-8'?>
    
    <xs:schema
        xmlns:xs='http://www.w3.org/2001/XMLSchema'
        targetNamespace='jabber:x:event'
        xmlns='jabber:x:event'
        elementFormDefault='qualified'>
    
      <xs:annotation>
        <xs:documentation>
          The protocol documented by this schema is defined in
          JEP-0022: http://www.jabber.org/jeps/jep-0022.html
        </xs:documentation>
      </xs:annotation>
    
      <xs:element name='x'>
        <xs:complexType>
          <xs:sequence>
            <xs:element name='offline' minOccurs='0' type='empty'/>
            <xs:element name='delivered' minOccurs='0' type='empty'/>
            <xs:element name='displayed' minOccurs='0' type='empty'/>
            <xs:element name='composing' minOccurs='0' type='empty'/>
            <xs:element name='id' minOccurs='0' type='xs:NMTOKEN'/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    
      <xs:simpleType name='empty'>
        <xs:restriction base='xs:string'>
          <xs:enumeration value=''/>
        </xs:restriction>
      </xs:simpleType>
    
    </xs:schema>
    

    das war eins der vielen files. ich möchte in ein programm (cpp) einen xml-parser einbauen (z.B. tinyxml). nun möchte ich aber nich jedes einzelnde element auswerten, um zu sehen, um welche inforamtion es sich handelt. stattdessen will ich ein schema wie oben verwenden. übernehmen parser grundsätzlich diese aufgabe für mich (im speziellen fall -> tinyxml)? denn sonst wären solche schemen doch denkbar unbrauchbar. klar, als mensch kann man diese files zwar auch interpretieren, aber eine dokumentation liest sich besser.

    gruß Tobias



  • ja natürlich werten Parser die Schema und DTD Dateien aus. Aber nicht jeder und ich denke gerade tinyxml wird das nicht tun. Schau dir mal Xerces Parser an, der ist zwar ziemlich dick, bietet aber definitiv DTD Support...



  • ich hab in der dokumentation von tinixml auch nichts in der richtung gefunden. ich dachte, ich hätte ienfach nur was falsch gemacht.

    welchen parser ich nutzen möchte weiß ich noch nicht. ich hatte da unter anderem an xml-ccpdom gedacht, wobei das teil schon sehr komplex ist.



  • icvh habe da aber noch eine allgeime frage zu parsern. wie handlen die das. kann ich denen ein schmea vorgeben udn die passenden variablen und sie erstellen dementsprechend ein dokument nach dem schema und schlagen alarm, wenn was elementares fehlt?



  • jo, du sagst einfach (bzw. das Dokument verweist ja schon von sich selber auf ein entsprechendes Schema/DTD) die Datei entspricht dem Schema/DTD und der Parser liest das dann anhand von dem Schema aus und wenn das Dokument dagegen verstößt, dann meldet er einen Fehler.

    btw. XML-Schema ist noch relativ neu, die meisten Parser unterstützen eher DTD (auch wenn DTD wirklich kein spaß zu benutzen ist, aber was erwartet man bei XML schon ;))

    Ach, libxml2 ist eine kleine extrem schnelle C Library (bzw. libxml++ ist ein C++-Wrapper), die auf jeden Fall DTD Support hat.



  • das problem ist, dass die xml-brpcken, die ich reinbekomme nicht standalone sind und eben nur wie folgt aussehen:

    <message to='romeo@montague.net' id='message22'>
      <body>Art thou not Romeo, and a Montague?</body>
      <x xmlns='jabber:x:event'>
        <offline/>
        <delivered/>
        <composing/>
      </x>
    </message>
    

    sie können aber auch ganz anders aussehen. es wird also nicht verlingt, denn ich oder eben der server schickt nur ein wie oben dargestelltes teil. dann müsste ich also alle schemen, die das protokoll bietet, auswerten, richtig? Es handelt sich dabei übrigens um jabber 😉



  • oh, wenn du ein Stück XML hast und nicht weisst welchem Schema es entsprechen soll, dann ist das nicht gerade optimal, vorallem dürfte das durchtesten mehrere Schemen (wie viele sind das etwa?) länger dauern.

    Hast du keine Möglichkeit festzustellen, worum es sich handelt? Kannst du nicht die Schemen in ein Schema zusammenfassen?



  • naja, es handelt sich dabei um das jabber-protokoll. zusammenfassen? meinst du mehrere schemen in ein file packen? das problem is halt, dass ich nicht weiß was kommt. es kann eine nachricht sein oder eine statusveränderung. es gibt aber noch zich dinge, die auftreten könnten (http://www.jabber.org/protocol/)

    das einzige,w as ich machen könnte, ist einschränken, was ich erwarte. ich rbauch nicht mit einer loginbestätigung rechnen, wenn ich doch schon angemeldet bin. wäre es ne möglichkeit, festzulegen, was ich erwarte und das dann durchteste udn, wenn alles nich geht, soll er den rest testen udn zwar in einer reihenfolge, die sinn macht. zu den mit höherer priorität gehört zum beispiel der nachrichten empfang.

    ich hab da noch was gefunden: http://www.jabber.org/ietf/draft-ietf-xmpp-core-24.html#def unter punkt C gibt es die schemas, auf die ich prüfen muss. wenn ich die durchprobiere, wäre es dann schon zu viel aufwand?



  • leider habe ich selber nicht so tiefgehende Erfahrung mit XML Schema und Parsern. Am besten machst du mal eine kleine Benchmark und schaust mal ob es sich lohnt die Schemas alle durchzutesten. (Ist ja schnell geschrieben).


Anmelden zum Antworten