Zuordnungen zwischen XML-Knoten und Datenpaketfeldern

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Transformationen definieren


In XML werden strukturierte Daten anhand von Textangaben beschrieben und gespeichert. Datenmengen stellen eine weitere Möglichkeit dar, solche Daten zu beschreiben und zu speichern. Zum Konvertieren eines XML-Dokuments in eine Datenmenge sind daher die Entsprechungen zwischen den Knoten in einem XML-Dokument und den Feldern in einer Datenmenge anzugeben.

Angenommen, ein XML-Dokument stellt eine Gruppe von E-Mail-Nachrichten dar. Es könnte beispielsweise wie folgt aussehen (wobei es nur eine einzige Nachricht enthält):



 <?xml version="1.0" standalone="yes"?>
 <email>
    <head>
       <from>
          <name>Dave Boss</name>
          <address>dboss@MyCo.com</address>
       </from>
       <to>
          <name>Joe Engineer</name>
          <address>jengineer@MyCo.com</address>
       </to>
       <cc>
          <name>Robin Smith</name>
          <address>rsmith@MyCo.com</address>
       </cc>
       <cc>
          <name>Leonard Devon</name>
          <address>ldevon@MyCo.com</address>
       </cc>
    </head>
    <body>
       <subject>XML-Komponenten</subject>
       <content>
         Hallo Joe,
         anbei die Spezifikation für die XML-Komponentenunterstützung in Delphi.
         Sieht so aus, als wäre sie für unsere B2B-Anwendung gut geeignet!
         Anbei außerdem der Projektplan. Denken Sie, der ist so machbar?
            Dave.
       </content>
       <attachment attachfile="XMLSpec.txt"/>
       <attachment attachfile="Schedule.txt"/>
    </body>
 </email>



Eine natürliche Zuordnung zwischen diesem Dokument und einer Datenmenge würde darin bestehen, jede E-Mail-Nachricht einem einzelnen Datensatz zuzuordnen. Der Datensatz enthielte Felder für den Namen und die Adresse des Absenders. Da eine E-Mail-Nachricht an mehrere Empfänger gesendet werden kann, würde der Empfänger (<to>) einer verschachtelten Datenmenge zugeordnet. Gleichfalls würde die Liste der Kopie-Empfänger (<cc>) einer verschachtelten Datenmenge zugeordnet. Die Betreffzeile (<subject>) würde einem String-Feld zugeordnet, der Text der Nachricht selbst (<content>) wahrscheinlich einem Memofeld. Auch die Namen der Anlagen würden wiederum einer verschachtelten Datenmenge zugeordnet, weil mit einer Nachricht mehrere Anlagen versendet werden können. Daher lautet in diesem Fall die Zuordnung der Knoten aus der E-Mail-Nachricht zu einer Datenmenge wie folgt:



SenderName SenderAddress To CC Subject Content Attach

Dave Boss

dboss@MyCo.Com

(DataSet)

(DataSet)

XML-Komponenten

(MEMO)

(DataSet)



Die verschachtelte Datenmenge für das Feld To sieht folgendermaßen aus:



Name Address

Joe Engineer

jengineer@MyCo.Com



Die verschachtelte Datenmenge für das Feld CC sieht folgendermaßen aus:



Name Address

Robin Smith

rsmith@MyCo.Com

Leonard Devon

ldevon@MyCo.Com



Die verschachtelte Datenmenge für das Feld Attach sieht folgendermaßen aus:



Attachfile

XMLSpec.txt

Schedule.txt



Bei der Definition einer solchen Zuordnung müssen Sie diejenigen Knoten im XML-Dokument suchen, die mehrfach vorkommen können, und sie verschachtelten Datenmengen zuordnen. Tag-Elemente mit Werten, die nur einmal vorkommen (beispielsweise <content>...</content>) werden Feldern zugeordnet, deren Datentyp den Datentyp widerspiegelt, der darin als Wert enthalten ist. Tag-Attribute (beispielsweise das Attribut AttachFile im Tag für die Anlage) werden ebenfalls Feldern zugeordnet.

Beachten Sie, dass nicht alle im XML-Dokument enthaltenen Tags in der entsprechenden Datenmenge vorhanden sind. So gibt es z.B. zum Tag <head>...<head/> kein entsprechendes Element in der Datenmenge. In der Regel werden nur Elemente mit Werten, sich wiederholende Elemente oder die Tag-Attribute den Feldern (einschließlich den verschachtelten Datenmengenfeldern) einer Datenmenge zugeordnet. Eine Ausnahme hiervon bildet der Fall, in dem ein übergeordneter Knoten im XML-Dokument einem Feld zugeordnet wird, dessen Wert ausgehend von den Werten der untergeordneten Knoten generiert wurde. Beispiel: Ein XML-Dokument könnte die folgenden Tags enthalten:



 <FullName>
    <Title> Mr. </Title>
    <FirstName> John </FirstName>
    <LastName> Smith </LastName>
 </FullName>



Diese könnten einem einzigen Datenmengenfeld mit dem folgenden Wert zugeordnet werden:

Mr. John Smith

Siehe auch