Les données existant dans plusieurs tables, vous allez créer une collection XML pour associer ces tables au document XML. Avant de créer une collection XML, vous la définissez par la préparation d'un fichier DAD.
A la section Planification, vous avez identifié les colonnes de la base relationnelle contenant les données existantes. Vous avez également déterminé le mode selon lequel les données des tables doivent être structurées dans un document XML. Dans cette section, vous allez créer le schéma de mappage dans le fichier DAD pour indiquer la relation existant entre les tables et la structure du document XML.
Dans la procédure suivante, les éléments de la DAD sont appelés balises et ceux de la structure du document XML, éléments. Vous trouverez un fichier DAD exemple, identique à celui que vous allez créer, dans c:\dxx\samples\dad\getstart_xcollection.dad. Cet exemple comporte quelques légères différences par rapport au fichier qui sera généré au cours des étapes suivantes. Si vous l'utilisez pour le cours, notez que les chemins d'accès aux fichiers peuvent différer de ceux de votre environnement.
Pour créer la DAD de composition d'un document XML, procédez comme suit :
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">
L'Extension XML considère que vous avez installé le produit dans c:\dxx. Si cette valeur est incorrecte, remplacez-la, pour la présente étape et les suivantes, par l'unité et le répertoire appropriés.
<validation>NO</validation>
<Xcollection> </Xcollection>
<SQL_stmt> SELECT o.order_key, customer_name, customer_email, p.part_key, color, quantity, price, tax, ship_id, date, mode from order_tab o, part_tab p, table (select substr(char(timestamp(generate_unique())),16) as ship_id, date, mode, part_key from ship_tab) s WHERE o.order_key = 1 and p.price > 20000 and p.order_key = o.order_key and s.part_key = p.part_key ORDER BY order_key, part_key, ship_id </SQL_stmt>
Cette instruction SQL respecte les directives ci-après. Pour consulter la structure du document, reportez-vous à la Figure 6.
Pour prendre connaissance des exigences liées à l'écriture d'une instruction SQL, reportez-vous à la section Exigences liées aux schémas de mappage .
<prolog>?xml version="1.0"?</prolog>
Ce texte est obligatoire pour tous les fichiers DAD.
<doctype>!DOCTYPE Order SYSTEM "c:\dxx\samples\dtd\getstart.dtd"</doctype>
Pour plus d'informations sur ces noeuds, reportez-vous à la section Fichier DAD. La Figure 6 présente la structure hiérarchique du document XML et les colonnes de tables DB2. Elle indique également le type de noeuds utilisés. Les pavés en grisé indiquent les colonnes des tables DB2 à partir desquelles les données seront extraites pour composer le document XML.
La procédure ci-après permet d'ajouter chaque type de noeud, l'un après l'autre.
<root_node> <element_node name="Order"> <element_node name="Customer"> <element_node name="Name"> </element_node> <element_node name="Email"> </element_node> </element_node> <element_node name="Part"> <element_node name="key"> </element_node> <element_node name="Quantity"> </element_node> <element_node name="ExtendedPrice"> </element_node> <element_node name="Tax"> </element_node> <element_node name="Shipment" multi_occurrence="YES"> <element_node name="ShipDate"> </element_node> <element_node name="ShipMode"> </element_node> </element_node> <!-- end Shipment --> </element_node> <!-- end Part --> </element_node> <!-- end Order --> </root_node>
Notez que chaque élément enfant <Shipment> est associé à l'attribut multi_occurrence défini sur la valeur YES. Cet attribut est utilisé pour les éléments sans attribut répétés plusieurs fois dans un même document. L'élément <Part> n'utilise pas l'attribut multi_occurrence car il est doté d'un attribut color, ce qui le rend unique.
<root_node> <element_node name="Order"> <attribute_node name="key"> </attribute_node> <element_node name="Customer"> <element_node name="Name"> </element_node> <element_node names"Email"> </element_node> </element_node> <element_node name="Part"> <attribute_node name="color"> </attribute_node> <element_node name="key"> </element_node> <element_node name="Quantity"> </element_node> ... </element_node> <!-- end Part --> </element_node> <!-- end Order --> </root_node>
<root_node> <element_node name="Order"> <attribute_node name="key"> </attribute_node> <element_node name="Customer"> <element_node name="Name"> <text_node> </text_node> </element_node> <element_node name="Email"> <text_node> </text_node> </element_node> </element_node> <element_node name="Part"> <attribute_node name="color"> </attribute_node> <element_node name="key"> <text_node> </text_node> </element_node> <element_node name="Quantity"> <text_node> </text_node> </element_node> <element_node name="ExtendedPrice"> <text_node> </text_node> </element_node> <element_node name="Tax"> <text_node> </text_node> </element_node> <element_node name="Shipment" multi-occurrence="YES"> <element_node name="ShipDate"> <text_node> </text_node> </element_node> <element_node name="ShipMode"> <text_node> </text_node> </element_node> </element_node> <!-- end Shipment --> </element_node> <!-- end Part --> </element_node> <!-- end Order --> </root_node>
<root_node> <element_node name="Order"> <attribute_node name="key"> <column name="order_key"/> </attribute_node> <element_node name="Customer"> <element_node name="Name"> <text_node> <column name="customer_name"/> </text_node> </element_node> <element_node name="Email"> <text_node> <column name="customer_email"/> </text_node> </element_node> </element_node> <element_node name="Part"> <attribute_node name="color"> <column name="color"/> </attribute_node> <element_node name="key"> <text_node> <column name="part_key"/> </text_node> <element_node name="Quantity"> <text_node> <column name="quantity"/> </text_node> </element_node> <element_node name="ExtendedPrice"> <text_node> <column name="price"/> </text_node> </element_node> <element_node name="Tax"> <text_node> <column name="tax"/> </text_node> </element_node> <element_node name="Shipment" multi-occurrence="YES"> <element_node name="ShipDate"> <text_node> <column name="date"/> </text_node> </element_node> <element_node name="ShipMode"> <text_node> <column name="mode"/> </text_node> </element_node> </element_node> <!-- end Shipment --> </element_node> <!-- end Part --> </element_node> <!-- end Order --> </root_node>
Vous pouvez comparer le fichier que vous venez de créer au fichier exemple c:\dxx\samples\dad\getstart_xcollection.dad. Il s'agit d'une copie de travail du fichier DAD nécessaire à la composition du document XML. Le fichier exemple contient peut-être des instructions relatives aux chemins d'accès (path) qui doivent être adaptées à votre environnement pour pouvoir s'exécuter.
Dans votre application, si vous faites fréquemment appel à une collection XML pour composer des documents, vous pouvez l'activer afin de définir son nom. Lorsque vous activez une collection, vous l'enregistrez dans la table XML_USAGE. Vous pouvez ainsi améliorer les performances d'exécution en indiquant le nom de collection (plutôt que le nom de fichier DAD) lors de l'appel de procédures mémorisées. Dans ce cours, vous n'allez pas activer la collection. Pour plus d'informations sur l'activation des collections, reportez-vous à la section Activation de collections XML.