Correspondance entre les noeuds XML et les champs du paquet de données

De RAD Studio
Aller à : navigation, rechercher

Remonter à Définition des transformations


XML fournit une méthode textuelle pour stocker ou décrire des données structurées. Les ensembles de données fournissent une autre méthode pour stocker et décrire des données structurées. Pour convertir un document XML en ensemble de données, vous devez donc identifier les correspondances entre les noeuds d'un document XML et les champs d'un ensemble de données.

Considérons, par exemple, un document qui représente un ensemble de messages électroniques. Ce document peut avoir l'apparence suivante (avec un seul message) :


<?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 components</subject>
      <content>
        Joe,
        Attached is the specification for the XML component support in Delphi.
        This looks like a good solution to our buisness-to-buisness application!
        Also attached, please find the project schedule. Do you think its reasonable?
           Dave.
      </content>
      <attachment attachfile="XMLSpec.txt"/>
      <attachment attachfile="Schedule.txt"/>
   </body>
</email>

Une correspondance naturelle entre ce document et un ensemble de données consisterait à mapper chaque message sur un enregistrement unique. L'enregistrement contiendrait des champs pour le nom et l'adresse de l'expéditeur. Comme un message électronique peut avoir plusieurs destinataires, le destinataire (<to>) serait mappé sur un ensemble de données imbriqué. De même, la liste cc serait mappée sur un ensemble de données imbriqué. La ligne de sujet serait mappée sur un champ de type chaîne de caractères tandis que le message lui-même (<content>) serait probablement mappé sur un champ mémo. Les noms des fichiers joints seraient mappés sur un ensemble de données imbriqué, car un message peut avoir plusieurs fichiers joints. Par conséquent, le message électronique ci-dessus serait mappé sur un ensemble de données comme suit :

SenderName SenderAddress To CC Subject Content Attach

Dave Boss

dboss@MyCo.Com

(DataSet)

(DataSet)

Composants XML

(MEMO)

(DataSet)


où l'ensemble de données imbriqué dans le champ "To" est

Nom Adresse

Joe Engineer

jengineer@MyCo.Com


l'ensemble de données imbriqué dans le champ "CC" est

Nom Adresse

Robin Smith

rsmith@MyCo.Com

Leonard Devon

ldevon@MyCo.Com



et l'ensemble de données imbriqué dans le champ "Attach" est

Attachfile

XMLSpec.txt

Schedule.txt

La définition de telles correspondances implique l'identification dans le document XML des noeuds qui peuvent être répétés, et leur correspondance avec des ensembles de données imbriqués. Les éléments balisés qui ont des valeurs et apparaissent une fois seulement (comme <content>...</content>) sont mappés sur des champs dont le type de données reflète le type des données pouvant apparaître comme valeurs. Les attributs d'une balise (comme l'attribut AttachFile de la balise de pièce jointe) sont également mappés sur des champs.

Notez que les balises du document XML n'apparaissent pas toutes dans l'ensemble de données correspondant. Par exemple, l'élément <head>...<head/> ne possède pas d'élément correspondant dans l'ensemble de données résultant. Généralement, seuls les éléments qui ont des valeurs, les éléments qui peuvent être répétés ou les attributs d'une balise sont mappés sur les champs (y compris les champs d'un ensemble de données imbriqué) d'un ensemble de données. Un noeud père du document XML qui est mappé sur un champ dont la valeur est composée à partir des valeurs des noeuds fils constituerait toutefois une exception à cette règle. Par exemple, un document XML peut contenir un ensemble de balises de la forme

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

qui peuvent être mappées sur un champ d'ensemble de données unique avec la valeur

Mr. John Smith

Voir aussi