Manuali IBM

XML Extender - Gestione e programmazione


Lezione: Memorizzare un documento XML in una colonna XML

Scenario

L'attività da eseguire è l'archiviazione dei dati vendita per il settore assistenza clienti. I dati vengono memorizzati nei documenti XML che utilizzano la stessa DTD. Il settore assistenza clienti utilizzerà questi documenti XML per rispondere alle richieste e ai commenti dei clienti.

Il settore assistenza clienti fornisce una struttura standard per i documenti XML e specifica i dati degli elementi per i quali verranno effettuate interrogazioni più frequenti. E' necessario che i documenti XML memorizzati nella tabella SALES_TAB siano memorizzati nel database SALES_DB in modo da ricercarli rapidamente. La tabella SALES_DB contiene due colonne con i dati relativi a ciascuna vendita e una terza colonna in cui contenere il documento XML. Questa colonna è denominata ORDER.

I compiti dell'utente saranno quelli di determinare i tipi di dati XML, in cui memorizzare il documento XML, gli attributi e gli elementi XML per i quali verranno eseguite interrogazioni più frequenti. Successivamente, occorre impostare il database SALES_DB per XML, creare la tabella SALES_TAB e abilitare la colonna ORDER in modo da memorizzare il documento integro in DB2 e infine inserire una DTD per la convalida del documento XML che verrà memorizzato come tipo di dati XMLVARCHAR. Una volta abilitata la colonna, occorre definire le tabelle laterali per le quali creare un indice per la ricerca strutturale del documento in un file DAD (document access definition) e un documento XML che specifica la struttura delle tabelle laterali. Per visualizzare gli esempi del file DAD e il documento XML consultare l'Appendice B, Esempi.

La tabella SALES_TAB è descritta nella Tabella 1.

Tabella 1. Tabella SALES_TAB
Nome colonna Tipo di dati
INVOICE_NUM CHAR(6) NOT NULL PRIMARY KEY
SALES_PERSON VARCHAR(20)
ORDER XMLVARCHAR

Pianificazione

Prima di utilizzare XML Extender per la memorizzazione dei documenti, è necessario conoscere la struttura del documento XML in modo da stabilire le modalità di ricerca del documento. Una volta pianificate le modalità di ricerca del documento, è necessario determinare:

Le seguenti sezioni descrivono come individuare tali elementi.

La struttura del documento XML

La struttura del documento XML di questa lezione raccoglie le informazioni relative a un ordine specifico strutturato con la chiave ordine come primo livello, quindi il cliente, la parte e le informazioni sulla spedizione come livelli successivi. Il documento XML è descritto nella Figura 4.

Questa lezione inoltre fornisce una DTD di esempio che consente l'interpretazione e la convalida della struttura del documento XML. E' possibile consultare il file DTD nell'Appendice B, Esempi. Tale file corrisponde alla struttura nella Figura 4.

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


La struttura gerarchica della DTD e del documento XML

Determinazione del tipo di dati XML per la colonna XML

XML Extender fornisce gli UDT XML con cui definire una colonna per conservare i documenti XML. Questi tipi di dati sono:

In questa lezione, si memorizza un documento di piccole dimensioni in DB2 e si utilizzerà quindi, il tipo di dati XMLVarchar.

Determinazione degli elementi e degli attributi da ricercare

Una volta compresa la struttura del documento XML e i requisiti dell'applicazione, è possibile determinare gli elementi e gli attributi da ricercare, gli elementi e gli attributi che verranno ricercati o estratti frequentemente oppure quelli per i quali l'interrogazione è più complessa. Il settore assistenza clienti ha specificato come interrogazioni più frequenti quelle relative alla chiave ordine, al nome cliente, al prezzo e alla data di spedizione di un ordine e richiede un'esecuzione rapida per tali ricerca. Queste informazioni sono contenute negli elementi e negli attributi della struttura del documento XML. Tabella 2 descrive i percorsi dell'ubicazione di ciascun elemento e attributo.

Tabella 2. Gli elementi e agli attributi da ricercare
Dati Percorso di ubicazione
chiave ordine /Order/@key
cliente /Order/Customer/Name
prezzo /Order/Part/ExtendedPrice
data spedizione /Order/Part/Shipment/ShipDate

Associazione del documento XML alle tabelle laterali

In questo supporto didattico, verrà creato un file DAD per la colonna XML utilizzata per memorizzare il documento XML in DB2. Inoltre il contenuto degli attributi e degli elementi XML viene associato alle tabelle laterali DB2 utilizzate per l'indice che migliora l'esecuzione delle ricerche. Nell'ultima sezione, vengono riportati gli attributi e gli elementi da ricercare. In questa sezione, vengono fornite le informazioni complete relative all'associazione dei valori dell'attributo e dell'elemento alle tabelle DB2 che è possibile indicizzare.

Una volta identificati gli elementi e gli attributi da ricercare, stabilire le modalità di organizzazione di tali elementi nelle tabelle laterali, il numero di tabelle e il numero di colonne in ciascuna tabella. Generalmente, le tabelle laterali vengono organizzate immettendo informazioni simili nella stessa tabella. La struttura viene inoltre determinata dalla possibilità di ripetere più volte il percorso di ubicazione di ciascun elemento nel documento. Ad esempio nel documento di esempio, l'elemento della parte può essere ripetuto più volte e, di conseguenza, anche gli elementi data e prezzo possono ricorrere più volte. Gli elementi che ricorrono più volte devono essere presenti nelle relative tabelle.

Inoltre, è necessario determinare i tipi di base DB2 dei valori attributo o elemento da utilizzare. Generalmente il tipo di base DB2 è facilmente rilevabile dal formato dei dati. Se i dati sono di testo, scegliere VARCHAR, se i dati sono un valore intero, scegliere INTEGER oppure se i dati sono una data e si desidera effettuare una ricerca delimitata, scegliere DATE.

In questo supporto didattico, gli elementi e gli attributi vengono associati alle seguenti tabelle laterali:

ORDER_SIDE_TAB

Nome colonna Tipo di dati Percorso di ubicazione Ricorrenze multiple?
ORDER_KEY INTEGER /Order/@key No
CUSTOMER VARCHAR(16) /Order/Customer/Name No

PART_SIDE_TAB

Nome colonna Tipo di dati Percorso di ubicazione Ricorrenze multiple?
PRICE DECIMAL(10,2) /Order/Part/ExtendedPrice

SHIP_SIDE_TAB

Nome colonna Tipo di dati Percorso di ubicazione Ricorrenze multiple?
DATE DATE /Order/Part/Shipment/ShipDate

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_insertDTD.cmd
Inserisce la DTD utilizzata per convalidare il documento XML nella colonna XML.

getstart_createTabCol.cmd
Crea una tabella applicativa che avrà una colonna abilitata per XML.

getstart_alterTabCol.cmd
Modifica la tabella applicativa aggiungendo la colonna che sarà abilitata per XML.

getstart_enableCol.cmd
Abilita la colonna XML.

getstart_createIndex.cmd
Crea indici nelle tabelle laterali per la colonna XML.

getstart_insertXML.cmd
Inserisce il documento XML nella colonna XML.

getstart_queryCol.cmd
Esegue un'istruzione select nella tabella applicativa e restituisce il documento XML.

getstart_clean.cmd
Ripulisce l'ambiente del supporto didattico.

Impostazione

In questa sezione viene descritta la preparazione del database per l'utilizzo con XML Extender. Operazione da effettuare:

  1. Creare il database.
  2. Abilitare il database.

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.

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:

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 colonna XML

XML Extender fornisce un metodo per la memorizzazione e l'accesso a tutti i documenti XML contenuti nel database, tale metodo e denominato colonna XML. Utilizzando il metodo colonna XML, è possibile memorizzare il documento utilizzando i tipi di file XML, indicizzare la colonna nelle tabelle laterali e quindi interrogare o ricercare il documento XML. Questo metodo di memorizzazione è particolarmente utile per le applicazioni di archivio in cui i documenti non vengono frequentemente aggiornati. Per eseguire questo supporto didattico. il documento XML fornito verrà memorizzato nella colonna XML.

In questa lezione, il documento verrà memorizzato nella tabella SALES_TAB. Per memorizzare il documento:

  1. Inserire la DTD relativa al documento XML nella tabella di riferimento DTD, DTD_REF.
  2. Preparare un file DAD che specifichi l'ubicazione del documento XML e le tabelle laterali per la ricerca strutturale.
  3. Aggiungere una colonna nella tabella SALES_TAB con UDT XML di tipo XMLVARCHAR.
  4. Abilitare la colonna per XML.
  5. Indicizzare le tabelle laterali per la ricerca strutturale.
  6. Memorizzare il documento utilizzando una UDF fornita da XML Extender.

Memorizzazione della DTD nel magazzino DTD

E' possibile utilizzare una DTD per convalidare i dati XML in una colonna XML. XML Extender crea una tabella nel database abilitato per XML, denominata DTD_REF. La tabella è riconosciuta come riferimento DTD ed è disponibile per consentire la memorizzazione di DTD. Quando si decide di convalidare i documenti XML, è necessario memorizzare la DTD in questo magazzino. La DTD relativa a questo supporto didattico è c:\dxx\samples\dtd\getstart.dtd.

Per inserire la DTD:

Dalla finestra Comandi DB2, immettere il seguente comando SQL INSERT, sulla stessa riga:

DB2 CONNECT TO SALES_DB
DB2 INSERT into db2xml.dtd_ref values('c:\dxx\samples\dtd\getstart.dtd', 
    db2xml.XMLClobFromFile('c:\dxx\samples\dtd\getstart.dtd'), 0, 'user1', 
    'user1', 'user1')

E' inoltre possibile eseguire il seguente file dei comandi per inserire la DTD:

getstart_insertDTD.cmd

Preparazione del file DAD

Il file DAD della colonna XML presenta una struttura semplice. Specificare colonna XML come modalità di memorizzazione e definire le tabelle e le colonne per l'indicizzazione.

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_xcolumn.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, il valore <validation> è impostato su NO anziché su YES.

Per preparare il file DAD:

  1. Aprire un editor di testo e denominare il file getstart_xcolumn.dad

    Tenere presente che tutte le tag utilizzate nel file DAD sono sensibili al maiuscolo e minuscolo.

  2. Creare l'intestazione DAD, con dichiarazioni XML e Doctype.
    <?xml version="1.0"?> 
    <!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd"> 
    
    Il file DAD è un documento XML e richiede dichiarazioni XML.
  3. Inserire tag <DAD></DAD> di apertura e di chiusura. Tutte le altre tag sono situate all'interno di queste tag.
  4. Inserire le tag di apertura e di chiusura <DTDID></DTDID> per specificare l'identificativo ID DTD che associa la DAD alla DTD del documento XML e specifica l'ubicazione DAD sul client.
       <dtdid>c:\dxx\samples\dtd\getstart.dtd</dtdid> 
    

    Nella sezione Memorizzazione della DTD nel magazzino DTD verificare che questa stringa corrisponda al valore utilizzato come primo valore di parametro quando si inserisce la DTD nella tabella di riferimento DTD. Ad esempio, il percorso utilizzato per l'ID DTD deve essere differente dalla stringa sopra riportata se si sta utilizzano una macchina differente.

  5. Specificare le tag <validation></validation> di apertura e di chiusura per indicare che XML Extender deve convalidare la struttura del documento XML utilizzando la DTD inserita nella tabella del magazzino DTD.
      <validation>YES</validation>
    
    Il valore di <validation> deve essere espresso in maiuscolo.
  6. Inserire le tag <Xcolumn></Xcolumn> di apertura e di chiusura per definire colonna XML come metodo di memorizzazione. Il metodo definisce la memorizzazione dei dati XML in una colonna XML.
    <Xcolumn>
    </Xcolumn>
    
  7. Inserire le tag <table></table> di apertura e di chiusura per ciascuna tabella laterale che deve essere creata.
    <Xcolumn>
         <table name="order_side_tab">
    </table>
         <table name="part_side_tab">
    </table>
         <table name="ship_side_tab">
    </table>
    </Xcolumn>
    
  8. Inserire le tag <column></column> di apertura e di chiusura per ciascuna colonna da includere nelle tabelle laterali. Ciascuna tag <column> presenta quattro attributi:
    <Xcolumn>
         <table name="order_side_tab">
       <column name="order_key" 
               type="integer" 
               path="/Order/@key" 
               multi_occurrence="NO"/> 
       <column name="customer" 
               type="varchar(50)" 
               path="/Order/Customer/Name" 
              multi_occurrence="NO"/> 
    </table>
         <table name="part_side_tab"> 
             <column name="price" 
                type="decimal(10,2)" 
                path="/Order/Part/ExtendedPrice" 
              multi_occurrence="YES"/>
    </table>
         <table name="ship_side_tab">
             <column name="date" 
                type="DATE" 
                path="/Order/Part/Shipment/ShipDate" 
              multi_occurrence="YES"/> 
    </table>
    </Xcolumn>
    
  9. Accertarsi che sia presente una tag </Xcolumn> di chiusura dopo l'ultima tag </table>.
  10. Accertarsi che sia presente una tag </DAD> di chiusura dopo la tag </Xcolumn>.
  11. Salvare il file come getstart_xcolumn.dad.

E' possibile confrontare il file appena creato con il file di esempio, c:\dxx\samples\dad\getstart_xcolumn.dad. Questo file è una copia di lavoro del file DAD richiesto per abilitare la colonna XML e per creare le tabelle laterali. Il file di esempio contiene istruzioni di percorso che è possibile modificare in modo da soddisfare i requisiti dell'ambiente utilizzato.

Creazione della tabella SALES_TAB

In questa sezione viene creata la tabella SALES_TAB. Inizialmente, tale tabella presenta due colonne con le informazioni sulla vendita relative all'ordine.

Per creare la tabella:

Dalla finestra Comandi DB2, immettere la seguente istruzione CREATE TABLE:

DB2 CONNECT TO SALES_DB
 
DB2 CREATE TABLE SALES_TAB(INVOICE_NUM CHAR(6) NOT NULL PRIMARY KEY, 
         SALES_PERSON VARCHAR(20))
 

In alternativa, per creare la tabella è possibile eseguire il seguente file dei comandi:

getstart_createTabCol.cmd

Aggiunta della colonna di tipo XML

Aggiungere una nuova colonna nella tabella SALES_TAB. Questa colonna conterrà il documento XML integro creato precedentemente che deve essere di tipo UDT XML. XML Extender fornisce tipi di dati multipli, descritti nel XML Extender - UDT. In questo supporto didattico, il documento verrà memorizzato come XMLVARCHAR.

Per aggiungere la colonna di tipo XML:

Dalla finestra Comandi DB2, immettere la seguente istruzione SQL:

DB2 ALTER TABLE SALES_TAB ADD ORDER DB2XML.XMLVARCHAR 

In alternativa, per modificare la tabella è possibile eseguire il seguente file dei comandi:

getstart_alterTabCol.cmd

Abilitazione della colonna XML

Una volta creata la colonna di tipo XML, abilitarla per XML Extender. Quando si abilita la colonna, XML Extender legge il file DAD e crea le tabelle laterali. Prima di abilitare la colonna, è necessario:

Per abilitare la colonna per XML:

Dalla finestra Comandi DB2, immettere il seguente comando:

dxxadm enable_column SALES_DB SALES_TAB ORDER GETSTART_XCOLUMN.DAD
        -v SALES_ORDER_VIEW -r INVOICE_NUM

In alternativa, per abilitare la colonna per XML è possibile eseguire il seguente file dei comandi:

getstart_enableCol.cmd

XML Extender crea le tabelle laterali con la colonna INVOICE_NUM e crea la vista predefinita.

Importante: non modificare assolutamente le tabelle laterali. E' possibile solo aggiornare il documento XML utilizzando le UDF fornite da XML Extender. XML Extender automaticamente aggiornerà le tabelle laterali quando si aggiorna il documento XML nella colonna XML.

Visualizzazione della colonna e delle tabelle laterali

Quando si abilita la colonna XML, viene creata una vista della colonna XML e delle tabelle laterali. E' possibile utilizzare questa vista quando si lavora con la colonna XML.

Per visualizzare la colonna XML e le colonne delle tabella laterali:

Dalla finestra Comandi DB2, immettere la seguente istruzione SQL SELECT:

DB2 SELECT * FROM SALES_ORDER_VIEW

La vista riporta le colonne delle tabelle laterali come specificato nel file getstart_xcolumn.dad.

Creazione degli indici nelle tabelle laterali

La creazione degli indici nelle tabelle laterali consente di eseguire rapide ricerche strutturali del documento XML. In questo passo, vengono creati gli indici sulle colonne chiave delle tabelle laterali che sono state create quando è stata abilitata la colonna XML, ORDER. Il settore assistenza clienti specifica le colonne nelle quali gli impiegati effettueranno un numero maggiore di interrogazioni. La Tabella 3 descrive queste colonne da indicizzare:

Tabella 3. Colonne delle tabelle laterali da indicizzare
Colonna Tabella laterale
ORDER_KEY ORDER_SIDE_TAB
CUSTOMER ORDER_SIDE_TAB
PRICE PART_SIDE_TAB
DATE SHIP_SIDE_TAB

Per indicizzare le tabelle laterali:

Dalla finestra Comandi DB2, immettere ii seguenti comandi SQL:

DB2 CREATE INDEX KEY_IDX
      ON ORDER_SIDE_TAB(ORDER_KEY)
 
DB2 CREATE INDEX CUSTOMER_IDX
      ON ORDER_SIDE_TAB(CUSTOMER)
 
DB2 CREATE INDEX PRICE_IDX
      ON PART_SIDE_TAB(PRICE)
 
DB2 CREATE INDEX DATE_IDX
      ON SHIP_SIDE_TAB(DATE)

In alternativa, per creare gli indici è possibile eseguire il seguente file dei comandi:

getstart_createIndex.cmd

Memorizzazione del documento XML

Una volta abilitata una colonna per contenere il documento XML e indicizzato le tabelle laterali, è possibile memorizzare il documento utilizzando le funzioni fornite da XML Extender. Quando si memorizzano i dati in una colonna XML, utilizzare le funzioni cast predefinite o le UDF XML Extender. Poiché si deve memorizzare un oggetto di tipo di base VARCHAR in una colonna XML UDT XMLVARCHAR, è necessario utilizzare le funzioni cast predefinite. Per ulteriori informazioni sulle funzioni cast predefinite di memorizzazione e le UDF fornite da XML Extender consultare la sezione Memorizzazione dati.

Per memorizzare il documento XML:

Importante: aprire il documento XML c:\dxx\samples\xml\getstart.xml. Accertarsi che il percorso file in DOCTYPE corrisponda all'ID DTD specificato nel file DAD e durante l'inserimento della DTD nel magazzino DTD. E' possibile verificare tale corrispondenza eseguendo un'interrogazione della tabella db2xml.DTD_REF e controllando l'elemento DTDID nel file DAD. Se si utilizza un'unità e una struttura di indirizzario differenti da quelle predefinite, è necessario modificare il percorso nella dichiarazione DOCTYPE.

Dalla finestra Comandi DB2, immettere il seguente comando SQL INSERT:

DB2 INSERT INTO SALES_TAB (INVOICE_NUM, SALES_PERSON, ORDER) VALUES('123456', 
   'Sriram Srinivasan', db2xml.XMLVarcharFromFile('c:\dxx\samples\cmd\getstart.xml'))

Quando si memorizza il documento XML, XML Extender automaticamente aggiorna le tabelle laterali.

In alternativa, per memorizzare il documento è possibile eseguire il seguente file dei comandi:

getstart_insertXML.cmd

Per verificare che le tabelle siano stato aggiornate, dalla finestra Comandi DB2 eseguire le seguenti istruzioni SELECT relative alle tabelle:

DB2 SELECT * FROM SALES_TAB
 
DB2 SELECT * FROM PART_SIDE_TAB
 
DB2 SELECT * FROM ORDER_SIDE_TAB
 
DB2 SELECT * FROM SHIP_SIDE_TAB
 

Ricerca del documento XML

E' possibile ricercare il documento XML con un'interrogazione diretta nelle tabelle laterali. In questo passo, si ricercheranno tutti gli ordini con un prezzo superiore a 2500.00.

Per interrogare le tabelle laterali:

Dalla finestra Comandi DB2, immettere la seguente istruzione SELECT:

DB2 "SELECT DISTINCT SALES_PERSON FROM SALES_TAB S, PART_SIDE_TAB P 
   WHERE PRICE > 2500.00 AND 
   S.INVOICE_NUM=P.INVOICE_NUM"
 

La serie dei risultati è rappresentata dai nomi dei venditori degli articoli con prezzo superiore a 2500.00.

In alternativa, per ricercare il documento è possibile eseguire il seguente file dei comandi:

getstart_queryCol.cmd

Il supporto didattico di introduzione per la memorizzazione dei documenti XML nelle tabelle DB2 è stato completato. Una buona parte degli esempi di questa pubblicazione si basa sulle seguenti lezioni.


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