IBM Books

Extension XML Administration et programmation

Création de la collection XML : préparation du fichier DAD

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 :

  1. A partir du répertoire c:\dxx\samples\cmd, ouvrez un éditeur de texte et créez un fichier getstart_xcollection.dad.
  2. Créez l'en-tête du fichier DAD en respectant la syntaxe suivante :
    <?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.

  3. Insérez les balises <DAD></DAD>. Toutes les autres balises sont imbriquées dans ces balises DAD.
  4. A l'aide des balises <validation> </validation>, indiquez que l'Extension XML doit valider la structure du document XML conformément à la DTD placée dans le référentiel des DTD.
    <validation>NO</validation>   
    
  5. A l'aide des balises <Xcollection></Xcollection>, définissez la méthode d'accès et de stockage collection XML. Cette méthode d'accès et de stockage indique que les données XML sont stockées dans une collection de tables DB2.
    <Xcollection>
    </Xcollection>
    
  6. A l'aide d'une instruction SQL, indiquez les tables et les colonnes à inclure dans la collection XML. Cette méthode, appelée mappage SQL, constitue l'un des deux modes possibles pour mapper des données relationnelles vers une structure de document XML. (Pour plus d'informations sur les schémas de mappage, reportez-vous à la section Types de schémas de mappage .) Entrez l'instruction suivante :
    <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 .

  7. Ajoutez les informations de prologue suivantes à utiliser dans le document XML en cours de composition.
    <prolog>?xml
    version="1.0"?</prolog> 
    

    Ce texte est obligatoire pour tous les fichiers DAD.

  8. Insérez les balises <doctype></doctype> à utiliser dans le document XML en cours de composition. La balise <doctype> contient le chemin d'accès à la DTD stockée sur le client.
    <doctype>!DOCTYPE Order SYSTEM "c:\dxx\samples\dtd\getstart.dtd"</doctype> 
    
  9. Définissez l'élément racine du document XML à l'aide des balises <root_node></root_node>. Dans root_node, indiquez les éléments et les attributs qui composent le document XML.
  10. Mappez la structure du document XML vers la structure des tables relationnelles DB2 à l'aide des trois types de noeuds suivants :

    noeud d'élément (element_node)
    Indique l'élément du document XML. Les noeuds d'éléments peuvent comporter des noeuds d'éléments enfants.

    noeud d'attribut (attribute_node)
    Indique l'attribut d'un élément du document XML.

    noeud de texte (text_node)
    Indique le contenu textuel d'un élément et les données de colonne d'une table relationnelle pour les noeuds d'éléments de niveau inférieur.

    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.

    1. Définissez une balise <element_node> pour chaque élément du document XML.
      <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.

    2. Définissez une balise <attribute_node> pour chaque attribut du document XML. Ces attributs sont imbriqués dans leur noeud d'élément. Les noeuds d'attributs ajoutés sont mis en évidence en gras :
      <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> 
      
    3. Pour chaque noeud d'élément de niveau inférieur, définissez des balises <text_node> pour indiquer que les éléments XML contiennent des données de type caractères à extraire de DB2 lors de la composition du document.
      <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> 
      
    4. Pour chaque noeud d'élément de niveau inférieur, définissez une balise <column>. Ces balises identifient la colonne source pour l'extraction de données lors de la composition du document XML et sont généralement imbriquées dans les balises <attribute_node> ou <text_node>. Nous vous rappelons que les colonnes définies ici doivent figurer dans la clause SELECT <SQL_stmt>.
      <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> 
      
  11. Vérifiez que vous avez placé une balise de fin </root_node> après la dernière balise </element_node>.
  12. Vérifiez que vous avez placé une balise de fin </Xcollection> après la dernière balise </root_node>.
  13. Vérifiez que vous avez placé une balise de fin </DAD> après la balise </Xcollection>.
  14. Sauvegardez le fichier sous le nom getstart_xcollection.dad.

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.


[ Début de page | Page précédente | Page suivante | Table des matières | Index ]