Manuali IBM

XML Extender - Gestione e programmazione


Lezione: Composizione di un documento XML

Scenario del supporto didattico

L'utente ha il compito di raccogliere informazioni nel database degli ordini di acquisto esistente, SALES_DB, e di estrarre le informazioni chiave da memorizzare nei documenti XML. Il settore assistenza clienti utilizzerà questi documenti XML per rispondere alle richieste e ai commenti dei clienti. Il settore assistenza clienti richiede dati specifici da includere e fornisce una struttura standard per i documenti XML.

Utilizzando i dati esistenti, si comporrà un documento XML, getstart.xml, dai dati compresi in queste tabelle.

Inoltre si pianifica e si crea un file DAD che associa le colonne delle tabelle correlate a una struttura di documento XML che fornisce un record degli ordini di acquisto. Poiché questo documento si compone di più tabelle, si creerà una raccolta XML, associando le tabelle a una struttura XML e a una DTD. Utilizzare questa DTD per definire la struttura del documento XML. E' inoltre possibile utilizzarla per convalidare il documento XML composto nelle applicazioni.

I dati del database esistente relativi al documento XML è descritto nelle seguenti tabelle. I nomi di colonna specificati in corsivo sono le colonne richieste dal settore assistenza clienti nella struttura del documento XML.

ORDER_TAB

Nome colonna Tipo di dati
ORDER_KEY INTEGER
CUSTOMER VARCHAR(16)
CUSTOMER_NAME VARCHAR(16)
CUSTOMER_EMAIL VARCHAR(16)

PART_TAB

Nome colonna Tipo di dati
PART_KEY INTEGER
COLOR CHAR(6)
QUANTITY INTEGER
PRICE DECIMAL(10,2)
TAX REAL
ORDER_KEY INTEGER

SHIP_TAB

Nome colonna Tipo di dati
DATE DATE
MODE CHAR(6)
COMMENT VARCHAR(128)
PART_KEY INTEGER

Pianificazione

Prima di utilizzare XML Extender per la composizione dei documenti, è necessario stabilire la struttura del documento XML e la relativa corrispondenza alla struttura dei dati del database. Questa sezione fornisce una panoramica della struttura del documento XML richiesta dal settore assistenza clienti, della DTD da utilizzare per definire la struttura del documento XML e delle associazioni di questo documento con le colonne contenenti i dati utilizzati per compilare i documenti.

Determinazione della struttura del documento

La struttura del documento XML raccoglie le informazioni per un ordine specifico da più tabelle e crea un documento XML a esso relativo. Ciascuna di queste tabelle contiene informazioni relative all'ordine è possono essere unite nelle relative colonne chiave. Il settore assistenza clienti desidera che il documento sia strutturato con il numero ordine come primo livello, il cliente, la parte e le informazioni sulla spedizione come livelli successivi. Inoltre desidera che la struttura sia flessibile, con gli elementi che siano una descrizione dei dati anziché della struttura del documento. Ad esempio, il nome del cliente deve essere riportato nell'elemento denominato "cliente (customer)" e non in un paragrafo. A seconda della richiesta effettuata, la struttura gerarchica della DTD e del documento XML deve essere simile a quella descritta in Figura 5.

Una volta stabilita la struttura del documento, sarà necessario creare una DTD per descrivere la struttura del documento XML. Questo supporto didattico fornisce un documento XML e una DTD. E' possibile consultare il file DTD nell'Appendice B, Esempi. Tale file corrisponde alla struttura riportata nella Figura 5.

Figura 5. La struttura gerarchica della DTD e del documento XML


La struttura gerarchica della DTD e del documento XML

Associazione del documento XML alla relazione database

Una volta stabilita la struttura e creata la DTD, è necessario conoscere le relazioni tra la struttura del documento e le tabelle DB2 che verranno utilizzate per compilare gli elementi e gli attributi. E' possibile associare la struttura gerarchica alle colonne specifiche delle tabelle relazionali, come riportato nella Figura 6.

Figura 6. il documento XML associato alle colonne della tabella relazionale


il documento XML associato alle colonne della tabella relazionale

Utilizzare questa descrizione per creare file DAD che definiscono le relazioni tra i dati relazionali e la struttura del documento XML.

Per creare il file DAD della raccolta XML, è necessario comprendere le modalità di corrispondenza del documento XML alla struttura del database, come descritto nella Figura 6, in modo che sia possibile risalire alle tabelle e alle colonne di origine da cui derivano i dati della struttura del documento XML relativi agli elementi e agli attributi. Queste informazioni verranno utilizzate per creare il file DAD della raccolta XML.

In questo supporto didattico, viene fornita una serie di script per consentire l'impostazione dell'ambiente. Questi script si trovano nella directory DXX_INSTALL\samples\cmd (dove DXX_INSTALL è l'unità e la directory di installazione di XML Extender, ad esempio c:\dxx\samples\cmd) ed essi sono i seguenti:

getstart_db.cmd
Crea il database e compila quattro tabelle.

getstart_prep.cmd
Esegue il bind del database con le procedure memorizzate XML Extender e le CLI DB2.

getstart_stp.cmd
Esegue la procedura memorizzata per creare la raccolta XML.

getstart_exportXML.cmd
Esporta il documento XML dal database per l'utilizzo in un'applicazione.

getstart_clean.cmd
Ripulisce l'ambiente del supporto didattico.

Impostazione

Creazione del database

In questa sezione si utilizza un comando per l'impostazione del database. Questo comando crea un database di esempio, ne stabilisce il collegamento, crea le tabelle in cui memorizzare i dati e quindi inserisce i dati.

Importante: se la lezione sulla colonna XML è stata completata e non è stata eseguita la cancellazione dei dati dell'ambiente in uso, ignorare questo passo. Accertarsi di disporre di un database SALES_DB.

Per creare il database:

  1. Entrare nella directory DXX_INSTALL\samples\cmd, dove DXX_INSTALL è l'unità e la directory di installazione di XML Extender. In queste lezioni si utilizza la directory c:\dxx. Modificare tali valori se l'unità e la directory sono diverse.
  2. Aprire la finestra Comandi DB2 dal menu Avvio di Windows NT oppure immettere il seguente comando dal prompt dei comandi di Windows NT:
    DB2CMD
    
  3. Dalla finestra Comandi DB2, immettere il seguente comando:
    getstart_db.cmd
    

Abilitazione del database

Per memorizzare le informazioni XML nel database, è necessario abilitarlo per XML Extender. Quando si abilita un database per XML, XML Extender effettua le seguenti operazioni:

Importante: se la lezione sulla colonna XML è stata completata e non è stata eseguita la cancellazione dei dati dell'ambiente in uso, ignorare questo passo.

Per abilitare il database per XML:

Dalla finestra Comandi DB2, eseguire il seguente script per abilitare il database SALES_DB:

getstart_prep.cmd

Questo script esegue il bind del database con le procedure memorizzate XML Extender e le CLI DB2. Inoltre esegue l'opzione del comando dxxadm per abilitare il database:

dxxadm enable_db SALES_DB

Creazione della raccolta XML: preparazione del file DAD

Poiché i dati sono già presenti in più tabelle, si creerà una raccolta XML che associa le tabelle al documento XML. Per creare una raccolta XML, definirla preparando un file DAD.

Nella sezione Pianificazione sono state stabilite le colonne del database relazionale in cui sono presenti i dati e come i dati delle tabelle verranno strutturati in un documento XML. In questa sezione, si creerà lo schema di associazione nel file DAD che specifica la relazione tra le tabelle e la struttura del documento XML.

Nei seguenti passi, si fa riferimento agli elementi del file DAD come tag e agli elementi della struttura del documento XML come elementi. Un esempio di un file DAD simile a quello creato è nel percorso c:\dxx\samples\dad\getstart_xcollection.dad il quale presenta alcune differenze dal file generato nei seguenti passi. Se si utilizza tale file per la lezione, è possibile che i percorsi file differiscano dall'ambiente utilizzato.

Per creare il file DAD per la composizione di un documento XML:

  1. Dalla directory c:\dxx\samples\cmd, aprire un editor di testo e creare un file con nome getstart_xcollection.dad.
  2. Creare l'intestazione DAD, utilizzando il seguente testo:
    <?xml version="1.0"?> 
    <!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd"> 
    

    XML Extender presume che il prodotto sia stato installato in c:\dxx. In caso contrario, modificare, nel seguente passo e in quelli successivi, questo valore con quello relativo all'unità e alla directory specificata durante l'installazione del prodotto.

  3. Inserire le tag <DAD></DAD>. Tutte le altre tag sono situate all'interno di queste tag.
  4. Specificare le tag <validation> </validation> per indicare se XML Extender esegue la convalida della struttura del documento XML utilizzando la DTD inserita nella tabella del magazzino DTD.
    <validation>NO</validation>   
    
  5. Utilizzare le tag <Xcollection></Xcollection> per definire il metodo di memorizzazione e di accesso come raccolta XML. I metodi di memorizzazione e accesso consentono di definire se i dati XML sono memorizzati in una raccolta delle tabelle DB2.
    <Xcollection>
    </Xcollection>
    
  6. Specificare un'istruzione SQL per specificare le tabelle e le colonne utilizzate per la raccolta XML. Questo metodo è denominato Associazione SQL ed è uno dei due metodi di associazione dei dati relazionali alla struttura del documento XML. Per ulteriori informazioni sugli schemi di associazione, consultare la sezione Tipi di schema di associazione. Immettere la seguente istruzione:
    <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> 
    

    Questa istruzione SQL utilizza le seguenti indicazioni quando utilizza l'associazione SQL. Per la struttura del documento fare riferimento alla Figura 6.

    Per i requisiti relativi alla scrittura di un'istruzione SQL consultare la sezione Requisiti dello schema di associazione.

  7. Aggiungere il seguente prologo da utilizzare nel documento XML composto.
    <prolog>?xml version="1.0"?</prolog> 
    

    E' richiesto il testo esatto per tutti i file DAD.

  8. Aggiungere le tag <doctype></doctype> da utilizzare nel documento XML che si compone. La tag <doctype> contiene il percorso della DTD memorizzata nel client.
    <doctype>! DOCTYPE Order SYSTEM "c:\dxx\samples\dtd\getstart.dtd"</doctype> 
    
  9. Definire l'elemento root del documento XML utilizzando le tag <root_node></root_node>. Nella tag root_node, specificare gli elementi e gli attributi che costituiscono il documento XML.
  10. Associare la struttura del documento XML alla struttura della tabella relazionale utilizzando i seguenti tre tipi di nodi:

    element_node
    Specifica l'elemento nel documento XML. Element_nodes può presentare element_nodes secondari.

    attribute_node
    Specifica l'attributo di un elemento del documento XML.

    text_node
    Specifica il contenuto del testo di un elemento e i dati della colonna in una tabella relazionale per gli element_nodes di livello inferiore.

    Per ulteriori informazioni relative a questi nodi consultare la sezione File DAD. La Figura 6 illustra la struttura gerarchica del documento XML e le colonne della tabella DB2 e indica i tipi di nodi utilizzati. Le caselle a sfondo grigio indicano i nomi delle colonne delle tabelle DB2 da cui i dati verranno estratti per comporre il documento XML.

    Eseguire i seguenti passi per aggiungere i vari tipi di nodi, uno per volta.

    1. Definire una tag <element_node> per ciascun elemento del documento 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>
      

      Tenere presente che l'elemento secondario <Shipment> presenta l'attributo multi_occurence="YES". Questo attributo è utilizzato per gli elementi privi di attributo che si ripetono nel documento. L'elemento <Part> non utilizza l'attributo multi-occurence in quanto presenta un attributo color che lo rende unico.

    2. Definire una tag <attribute_node> per ciascun attributo del documento XML. Questi attributi sono nidificati nel relativo element_node. Gli ulteriori attribute_nodes sono evidenziati in grassetto:
          <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. Per ciascun element_node di livello inferiore, definire le tag <text_node> che indicano che l'elemento XML contiene dati carattere da estrarre da DB2 durante la composizione del documento.
          <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-occurence="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. Per ciascun element_node di livello inferiore, definire una tag <column>. Queste tag specificano le colonne da cui estrarre i dati durante la composizione del documento XML e generalmente sono interne alle tag <attribute_node> o <text_node>. Tenere presenta che le colonne definite devono essere comprese nella clausola <SQL_stmt> SELECT.
          <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-occurence="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. Verificare se viene posizionata una tag </root_node> dopo l'ultima tag </element_node>.
  12. Verificare se viene posizionata una tag </Xcollection> dopo la tag </root_node>.
  13. Verificare se viene posizionata una tag </DAD> dopo la tag </Xcollection>.
  14. Salvare il file come getstart_xcollection.dad

E' possibile confrontare il file appena creato con il file di esempio c:\dxx\samples\dad\getstart_xcollection.dad. Questo file è una copia di lavoro del file DAD richiesto per la composizione del documento XML. Il file di esempio contiene istruzioni di percorso che è possibile modificare in modo da soddisfare i requisiti dell'ambiente utilizzato.

Nell'applicazione, l'utente utilizzerà frequentemente una raccolta XML per comporre documenti, è possibile definire un nome di raccolta abilitando la raccolta. L'abilitazione della raccolta esegue la relativa registrazione nella tabella XML_USAGE e ne migliora le prestazione quando si specifica il nome della raccolta (e non il nome del file DAD) durante l'esecuzione delle procedure memorizzate. Nelle seguenti lezioni, non si eseguirà l'abilitazione della raccolta. Per ulteriori informazioni su tale operazione consultare la sezione Abilitazione delle raccolte XML.

Composizione del documento XML

In questo passo si utilizza la procedura memorizzata dxxGenXML() per comporre il documento XML specificato dal file DAD. Questa procedura restituisce il documento come XMLVARCHAR UDT.

Per comporre il documento XML:

  1. Dalla finestra Comandi DB2, immettere il seguente comando per eseguire la procedura memorizzata:
    getstart_stp.cmd
    

    Il documento XML viene composto e memorizzato nella tabella RESULT_TAB.

    Gli esempi delle procedure memorizzate che è possibile utilizzare in questo passo sono riportati nei seguenti file:

  2. Esportare il documento XML dalla tabella in un file che utilizza la funzione di richiamo di XML Extender, Content():
    DB2 CONNECT TO SALES_DB
     
    DB2 SELECT db2xml.Content(db2xml.xmlvarchar(doc), 
       'c:\dxx\samples\cmd\getstart.xml') FROM RESULT_TAB
    

    In alternativa, per esportare il file è possibile eseguire il seguente comando:

    getstart_exportXML.cmd
    

    Questa lezione illustra come utilizzare la funzione della serie dei risultati delle procedure memorizzate DB2 che consente la lettura sequenziale delle righe per richiamare il documento XML composto. E' possibile esportare in un file le righe richiamate dal documento, questo rappresenta il metodo più semplice per dimostrare tale funzione. Per dimostrazioni più efficienti della lettura sequenziale dei dati consultare gli esempi CLI riportati in c:\dxx\samples\cli.


[ Inizio pagina | Pagina precedente | Pagina successiva | Indice | Indice analitico ]