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.
Nome colonna | Tipo di dati |
---|---|
INVOICE_NUM | CHAR(6) NOT NULL PRIMARY KEY |
SALES_PERSON | VARCHAR(20) |
ORDER | XMLVARCHAR |
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 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
![]() |
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.
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 |
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:
Nome colonna | Tipo di dati | Percorso di ubicazione | Ricorrenze multiple? |
---|---|---|---|
ORDER_KEY | INTEGER | /Order/@key | No |
CUSTOMER | VARCHAR(16) | /Order/Customer/Name | No |
Nome colonna | Tipo di dati | Percorso di ubicazione | Ricorrenze multiple? |
---|---|---|---|
PRICE | DECIMAL(10,2) | /Order/Part/ExtendedPrice | Sì |
Nome colonna | Tipo di dati | Percorso di ubicazione | Ricorrenze multiple? |
---|---|---|---|
DATE | DATE | /Order/Part/Shipment/ShipDate | Sì |
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:
In questa sezione viene descritta la preparazione del database per l'utilizzo con XML Extender. Operazione da effettuare:
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:
DB2CMD
getstart_db.cmd
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
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:
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
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:
Tenere presente che tutte le tag utilizzate nel file DAD sono sensibili al maiuscolo e minuscolo.
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">Il file DAD è un documento XML e richiede dichiarazioni XML.
<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.
<validation>YES</validation>Il valore di <validation> deve essere espresso in maiuscolo.
<Xcolumn> </Xcolumn>
<Xcolumn> <table name="order_side_tab"> </table> <table name="part_side_tab"> </table> <table name="ship_side_tab"> </table> </Xcolumn>
<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>
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.
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
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
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.
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.
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
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
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.