Quando si pianifica un'applicazione che utilizza i documenti XML, occorre innanzitutto stabilire:
Successivamente sarà possibile pianificare le altre attività di gestione:
Le modalità di utilizzo di XML Extender variano a seconda dell'applicazione richiesta. Come indicato nella sezione Introduzione a XML Extender, è possibile eseguire la composizione dei documenti XML dai dati DB2 esistenti e memorizzare questi documenti nel DB2 come documenti intatti o dati DB2. Ciascuno di questi metodi di accesso e memorizzazione presenta requisiti di pianificazione differenti. Le seguenti sezioni descrivono le considerazioni sulla pianificazione.
XML Extender fornisce due metodi di accesso e pianificazione per utilizzare DB2 come un magazzino XML: Colonna XML e Raccolta XML. Selezionare il metodo più adatto alle proprie esigenze.
Il tipo di applicazione determina il metodo di accesso e memorizzazione da utilizzare e come strutturare i dati XML. I seguenti scenari descrivono le situazioni in cui viene utilizzato il metodo di accesso e memorizzazione appropriato.
Utilizzare le colonne XML nei casi in cui:
Utilizzare le raccolte XML nei casi in cui:
Viene utilizzato il file DAD (document access definition) per associare i dati XML alle tabelle DB2 tramite questi due metodi di accesso e memorizzazione.La Figura 7 indica come DAD specifica i metodi di accesso e memorizzazione.
![]() |
Il file DAD svolge un ruolo importante nella gestione di XML Extender. Definisce l'ubicazione dei file chiave, come DTD, e specifica come la struttura dei documenti XML viene associata ai dati DB2. Inoltre, definisce i metodi di accesso e memorizzazione da utilizzare nelle applicazioni.
Le seguenti sezioni descrivono le attività di pianificazione per le colonne XML.
Dopo aver scelto il metodo di accesso e memorizzazione, è possibile specificare la DAD e determinare se convalidate i propri dati. Convalidare i dati XML utilizzando una DTD. L'utilizzo di una DTD verifica se il documento XML è valido e consente di eseguire le ricerche strutturali sui dati XML. La DTD viene memorizzata nel magazzino DTD.
Consiglio: Convalidare i dati XML utilizzando una DTD, a meno che i documenti XML non vengano memorizzati a scopo di archiviazione. Per eseguire la convalida, è necessario che il magazzino XML Extender contenga una DTD. Per informazioni su come memorizzazione una DTD nel magazzino, consultare la sezione Memorizzazione di DTD in un magazzino DTD.
E' possibile convalidare i documenti nella stessa colonna XML utilizzando DTD differenti. In altri termini, è possibile avere dei documenti che presentano la stessa struttura, con elementi e attributi simili, che richiamano DTD differenti. Per fare riferimento a più DTD, utilizzare le seguenti indicazioni:
Importante: Specificare se si desidera eseguire la convalida prima di inserire i dati XML nel DB2. XML Extender non supporta la convalida dei dati già inseriti nel DB2.
Considerazioni:
Memorizzare un documento XML in una colonna XML come DTD. Per
informazioni sulle UDT disponibili, consultare la sezione Tabella 4.
Colonna UDT | Tipo di dati origine | Descrizione |
---|---|---|
XMLVARCHAR | VARCHAR(varchar_len) | Memorizza un intero documento XML come VARCHAR nel DB2. |
XMLCLOB | CLOB(clob_len) | Memorizza un intero documento XML come CLOB nel DB2. |
XMLFILE | VARCHAR(1024) | Memorizza il nome file di un documento XML nel DB2 e memorizza il documento XML in un file locale sul server DB2. |
Quando si esegue la pianificazione delle tabelle laterali, occorre stabilire le modalità in base alle quali si desidera organizzare le tabelle, il numero di tabelle da creare e se definire una vista predefinita per queste tabelle. Queste decisioni sono basate in parte su diverse condizioni: la ricorrenza degli elementi o attributi e i requisiti relativi alle prestazioni delle interrogazioni.
Quando per un documento ricorrono più percorsi di ubicazione, XML Extender aggiungerà una colonna DXX_SEQNO di tipo INTEGER in ogni tabella per memorizzare una traccia dell'ordine degli elementi che ricorrono più volte. Con DXX_SEQNO, è possibile richiamare un elenco di elementi che utilizza lo stesso ordine del documento XML originale specificando ORDER BY DXX_SEQNO in un'interrogazione SQL.
Quando si abilita una colonna XML, è possibile specificare un valore predefinito, una vista di sola lettura che collega la tabella applicativa alle tabelle laterali utilizzando un ID univoco, denominato ROOT ID. Con la vista predefinita è possibile ricercare documenti XML interrogando le tabelle laterali. Ad esempio, se si specifica la tabella applicativa SALES_TAB e le tabelle laterali ORDER_TAB, PART_TAB e SHIP_TAB:
SELECT sales_person FROM sales_order_view WHERE price > 2500.00
L'istruzione SQL restituisce i nomi dei venditori in SALES_TAB i cui ordini sono memorizzati nella colonna ORDER con il valore PRICE superiore a 2500.00.
L'interrogazione della vista predefinita consente la visualizzazione di una singola vista virtuale della tabella applicativa e delle tabelle laterali. Tuttavia, tenere presente che la complessità di un'interrogazione è direttamente proporzionale al numero di tabelle laterali create. Quindi, la creazione della vista predefinita è consigliata solo se il numero totale di colonne delle tabelle laterali è ridotto. Le applicazioni possono creare delle proprie viste, unendo le principali colonne delle tabelle laterali.
Per la pianificazione è necessario stabilire se indicizzare i documenti delle colonne XML. Questa decisione deve essere valutata in base alla frequenza di accesso ai dati e allo stato delle prestazioni durante le ricerche strutturali.
Quando si utilizzano le colonne XML contenenti documenti XML interi, è possibile creare le tabelle laterali per includere le colonne dei valori degli attributi e degli elementi XML e gli indici in queste colonne. E' necessario specificare gli elementi e gli attributi per i quali si desidera creare l'indice.
L'indicizzazione delle colonne XML consente l'interrogazione frequente dei vari tipi di dati, come integer o decimal, e la creazione dell'indice utilizzando il supporto di indice DB2 nativo dall'engine del database. XML Extender richiama i valori degli elementi e degli attributi XML dai documenti XML e li memorizza nelle tabelle laterali, consentendo la creazione degli indici in queste tabelle.
E' possibile specificare ogni colonna di una tabella laterale con un percorso di ubicazione che identifica un elemento o attributo XML e un tipo di dati SQL. La Figura 8 illustra una colonna XML con le tabelle laterali.
Figura 8. Una colonna XML con le tabelle laterali.
![]() |
XML Extender compila automaticamente la tabella laterale durante la memorizzazione dei documenti XML nella colonna XML.
Per una ricerca veloce, creare gli indici in queste colonne utilizzando la tecnologia DB2 Indicizzazione strutturata B. I metodi utilizzati per creare un indice variano a seconda del sistema operativo e XML Extender supporta questi metodi differenti.
Ad esempio, è possibile creare un indice in /Order/Part/ExtendedPrice e specificare il tipo di dati REAL per /Order/Part/ExtendedPrice. In questo caso, XML Extender memorizza il valore di /Order/Part/ExtendedPrice della colonna PRICE in una tabella laterale.
Se la chiave primaria singola non esiste nella tabella applicativa oppure non viene utilizzata, XML Extender modifica la tabella applicativa aggiungendovi una colonna DXXROOT_ID, che memorizza un ID univoco creato durante l'inserimento. Tutte le tabelle laterali avranno un colonna DXXROOT_ID con un ID univoco. Se la chiave primaria viene utilizzata come ROOT ID, tutte le tabelle laterali avranno una colonna con lo stesso nome della colonna della chiave primaria nella tabella applicativa e i dati delle chiavi primarie verranno memorizzati.
Un percorso di ubicazione è una sequenza di tag XML che identifica un elemento o attributo XML. Il percorso di ubicazione XML Extender viene utilizzato per i seguenti scopi:
La Figura 9 mostra un esempio di percorso di ubicazione e delle relative relazioni alla struttura del documento XML.
Figura 9. Memorizzazione dei documenti come documenti XML strutturati in una colonna di tabella DB2
![]() |
Il seguente elenco descrive la sintassi del percorso di ubicazione supportata da XML Extender.
Caratteri jolly: E' possibile sostituire un asterisco per un elemento in un percorso di ubicazione per la corrispondenza con altre stringhe.
Percorso di ubicazione semplice è una sequenza di
nomi dei tipi di elementi collegati da una barra (/). I valori degli
attributi sono racchiusi tra parentesi quadre seguiti dal tipo di
elemento. Le descrizioni della sintassi per 3 e 6 sono riportate nella
sezione Sintassi del percorso di ubicazione relativa ai percorsi di ubicazione semplici. Tabella 5 fornisce informazioni sulla
sintassi.
Tabella 5. Sintassi del percorso di ubicazione semplice
Argomento | Percorso di ubicazione | Descrizione |
---|---|---|
elemento XML | /tag1/tag2/..../tagn-1/tagn | Il contenuto di un elemento identificato dall'elemento denominato tagn e dai relativi elementi secondari |
attributo XML |
/tag_1/tag_2/..../tag_n-1/tag_n/@attr1
| Un attributo denominato attr1 dell'elemento identificato da tagn e dai relativi elementi secondari |
XML Extender presenta delle limitazioni nell'utilizzo del percorso di
ubicazione quando viene definito un elemento o attributo nel file DAD.
Poiché XML Extender utilizza l'associazione numericamente corrispondente
tra un elemento o attributo e una colonna DB2, occorrono speciali regole per
il percorso di ubicazione. La Tabella 6 descrive le limitazioni per il percorso di
ubicazione. I numeri specificati nella colonna del percorso di
ubicazione supportata fanno riferimenti agli esempi di sintassi riportati
nella sezione Sintassi del percorso di ubicazione.
Tabella 6. Limitazioni di XML Extender nell'utilizzo del percorso di ubicazione
Utilizzo del percorso di ubicazione | Percorso di ubicazione supportato |
---|---|
Elemento nella DAD | 3, 6 (percorso di ubicazione semplice descritto nella Tabella 5) |
UDF di estrazione | 1-9 |
UDF di ricerca Text Extender | 1-9 |
Per le colonne XML, la DAD specifica innanzitutto il modo in cui indicizzare i documenti memorizzati in una colonna XML. La DAD è un documento formattato in XML che risiede sul client. Se i sceglie di convalidare i documenti XML con una DTD, è possibile associare il file DAD a questa DTD. Il tipo di dati del file DAD è CLOB.
Il file DAD per le colonne XML contiene un'intestazione XML, che specifica i percorsi di indirizzario sul client per il file DAD e la DTD, e fornisce associazioni per tutti i dati XML memorizzati nelle tabelle laterali per l'indicizzazione.
Per specificare il metodo di accesso e memorizzazione delle colonne XML, utilizzare la seguente tag nel file DAD.
Una colonna abilitata per XML è di tipo UDF XML Extender. Le applicazioni possono includere la colonna in qualsiasi tabella utente. E' possibile accedere ai dati della colonna XML attraverso le istruzioni SQL e le UDF XML Extender.
E' possibile utilizzare il wizard di gestione XML Extender oppure un editor per creare e aggiornare la DAD.
Durante la pianificazioni delle raccolte XML, è possibile scegliere di eseguire la composizione dei documenti dai dati DB2, la scomposizione di un documento XML nei dati DB2 o entrambe. Le seguenti sezioni forniscono informazioni sulla pianificazione delle raccolte XML e considerazioni sulla composizione e scomposizione.
Dopo aver scelto il metodo di accesso e memorizzazione, è possibile determinare se convalidate i propri dati. Convalidare i dati XML utilizzando una DTD. L'utilizzo di una DTD verifica se il documento XML è valido e consente di eseguire le ricerche strutturali sui dati XML. La DTD viene memorizzata nel magazzino DTD.
Consiglio: Convalidare i dati XML utilizzando una DTD. Per eseguire la convalida, è necessario che il magazzino XML Extender contenga una DTD. Per informazioni su come memorizzazione una DTD nel magazzino, consultare la sezione Memorizzazione di DTD in un magazzino DTD. I requisiti DTD differiscono a seconda se si desidera eseguire la composizione o la scomposizione dei documenti XML.
Importante: Specificare se si desidera eseguire la convalida dei dati XML prima di inserire i dati XML nel DB2. XML Extender non supporta la convalida dei dati già inseriti nel DB2.
Considerazioni:
Per le raccolte XML, il file DAD associa la struttura del documento XML alle tabelle DB2 da cui è possibile eseguire la composizione o la scomposizione del documento.
Ad esempio, se si specifica un elemento denominato <Tax> nel documento XML, sarà necessario associare <Tax> alla colonna TAX. Definire la relazione tra i dati XML e quelli relazionali nel file DAD.
Il file DAD è specificato durante l'abilitazione di una raccolta o quando viene utilizzato nelle procedure memorizzate della raccolta XML. La DAD è un documento formattato in XML che risiede sul client. Se i sceglie di convalidare i documenti XML con una DTD, è possibile associare il file DAD a questa DTD. Se viene utilizzato come parametro di input delle procedure memorizzate XML Extender, il tipo di dati del file DAD è CLOB.
Per specificare il metodo di accesso e memorizzazione delle raccolte XML, utilizzare la seguente tag nel file DAD:
Una raccolta XML è un nome virtuale per una serie di tabelle relazionali che contengono i dati XML. Le applicazioni possono abilitare una raccolta XML delle tabelle di qualsiasi utente. Queste tabelle utente possono essere delle tabelle di dati aziendali esistenti o nuove tabelle create da XML Extender. E' possibile accedere ai dati delle raccolte XML tramite le procedure memorizzate fornite da XML Extender.
Il file DAD definisce la struttura ad albero dei documenti XML utilizzando i seguenti tipi di nodo:
La Figura 10 mostra un esempio del tipo di associazione utilizzato in un file DAD. I nodi associano il contenuto del documento XML alle colonne di tabella in una tabella referenziale.
Figura 10. Definizioni di nodo
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "c:\dtd\dad.dtd"> <DAD> ... <Xcollection> <SQL_stmt> ... </SQL_stmt> <prolog>?xml version="1.0"?</prolog> <doctype>!DOCTYPE DAD SYSTEM "c:\dxx\sample\dtd\getstart.dtd"</doctype> <root_node> <element_node name="Order"> --> Identifica l'elemento <Order> <attribute_node name="key"> --> Identifica l'attributo "key" <column name="order_key"/> --> Definisce il nome della colonna, "order_key", a cui vengono associati l'elemento e l'attributo. </attribute_node> <element_node name="Customer"> --> Identifica un elemento secondario di <Order> come <Customer> <text_node> --> Specifica il testo CDATA per l'elemento <Customer> <column name="customer"> --> Definisce il nome della colonna, "customer", a cui viene associato l'elemento secondario. </text_node> </element_node> ... </element_node> ... <root_node> </Xcollection> </DAD> |
In questo esempio, le prime due colonne nell'istruzione SQL presentano elementi e attributi ad esse associati.
E' possibile utilizzare il wizard di gestione XML Extender oppure un editor per creare e aggiornare il file DAD.
Se si sta utilizzando una raccolta XML, occorre selezionare uno schema di associazione che definisce la rappresentazione dei dati XML in un database relazionale. Poiché le raccolte XML associano la struttura gerarchica utilizzata nei documenti XML a una struttura relazionale, è necessario comprendere le caratteristiche delle due strutture. La Figura 11 indica come la struttura gerarchica può essere associata alle colonne della tabella relazionale.
Figura 11. Documento XML strutturato associato alle colonne della tabella relazionale
![]() |
XML Extender utilizza lo schema di associazione durante la composizione o scomposizione dei documenti XML ubicati in più tabelle relazionali. XML Extender fornisce un wizard di supporto nella creazione del file DAD. Comunque, prima di creare il file DAD, stabilire il modo in cui si desidera associare i dati XML alla raccolta XML.
Lo schema di associazione è specificato nell'elemento <Xcollection> del file DAD. XML Extender fornisce due tipi di schemi di associazione: associazione SQL e associazione RDB_node. Entrambi i metodi utilizzano il modello XSLT per definire la gerarchia del documento XML.
L'associazione SQL fornice agli utenti DB2 la possibilità di associare i dati utilizzando SQL. Quando si utilizza l'associazione SQL, occorre unire tutte le tabelle in un'istruzione SELECT per formare un'interrogazione. Se una sola istruzione SQL risulta insufficiente, utilizzare l'associazione RDB_node. Per raggruppare tutte le tabelle, si consiglia di eseguire l'associazione tra la chiave primaria e la chiave esterna di queste tabelle.
RDB_node che contiene una o più definizione di nodo relative alle tabelle, alle colonne e alle condizioni facoltative. Le tabelle e le colonne vengono utilizzate per definire come i dati XML devono essere memorizzati nel database. La condizione specifica i criteri di selezione dei dati XML o le modalità di unione delle tabelle della raccolta XML.
Per definire uno schema di associazione, creare una DAD con un elemento <Xcollection>. La Figura 12 mostra un file DAD di esempio con l'associazione SQL delle raccolte XML che compone una serie di documenti XML dai dati di tre tabelle relazionali.
Figura 12. Schema di associazione SQL
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "c:\dtd\dad.dtd"> <DAD> <dtdid>c:\dxx\samples\dad\getstart.dtd</dtdid> <validation>YES</validation> <Xcollection> <SQL_stmt> SELECT o.order_key, customer, p.part_key, quantity, price, tax, date, mode, comment FROM order_tab o, part_tab p, table(select substr(char(timestamp(generate_unique())), as ship_id, date, mode, from ship_tab) as s WHERE p.price > 2500.00 and s.date > "1996-06-01" AND p.order_key = o.order_key and s.part_key = p.part_key </SQL_stmt> <prolog>?xml version="1.0"?</prolog> <doctype>!DOCTYPE DAD SYSTEM "c:\dxx\samples\dtd\getstart.dtd"</doctype> <root_node> <element_node name="Order"> <attribute_node name="key"> <column_name="order_key"/> </attribute_node> <element_node name="Customer"> <text_node> <column name="customer"/> </text_node> <element_node> ... </element_node><!-end Part-> </element_node><!-end Order-> </root_node> </Xcollection> </DAD> |
XML Extender fornice diverse procedure memorizzate che gestiscono i dati in una raccolta XML. Queste procedure memorizzate supportano entrambi i tipi di associazione, ma richiedono che il file DAD rispetti le regole descritte nella sezione Requisiti dello schema di associazione.
Le seguenti sezioni descrivono i requisiti per ogni tipo di schema di associazione delle raccolte XML.
In questo schema di associazione, occorre specificare l'elemento SQL_stmt nell'elemento <Xcollection> DAD. SQL_stmt deve contenere una singola istruzione SQL che possa unire più tabelle relazionali al predicato dell'interrogazione. Inoltre, sono richieste le seguenti clausole:
SELECT o.order_key, customer, p.part_key, quantity, price, tax, ship_id, date, mode
In questo esempio, order_key e customer della tabella ORDER_TAB hanno il livello relazionale più alto poiché si trovano nella parte iniziale della struttura gerarchica del documento XML. Gli elementi ship_id, date e mode della tabella SHIP_TAB presentano un livello relazionale inferiore.
FROM order_tab as o, part_tab as p, table(select substr(char(timestamp(generate_unique())),16) as ship_id, date, mode from ship_tab) as s
In questo esempio, la funzione generate_unique() viene convertita nel tipo di dati CHAR di TIMESTAMP e viene assegnato un alias denominato ship_id.
WHERE p.price > 2500.00 AND s.date > "1996-06-01" AND p.order_key = o.order_key AND s.part_key = p.part_key
Anche se SQL_stmt presenta tali caratteristiche, le relative funzionalità non risultano ridotte poiché è possibile specificare un qualsiasi predicato nella clausola WHERE. In tal caso, è però necessario che l'espressione del predicato utilizzi le colonne delle tabelle.
Se si specifica questo metodo di associazione, non utilizzare SQL_stmt nell'elemento <Xcollection> del file DAD. Utilizzare invece l'elemento RDB_node in ciascun nodo iniziale per element_node e per ogni attribute_node e text_node.
Il primo element_node nel file DAD rappresenta l'elemento root del documento XML. Specificare un RDB_node per il primo element_node nel seguente modo:
<element_node name="Order"> <RDB_node> <table name="order_tab"/> <table name="part_tab"/> <table name="ship_tab"/> <condition> order_tab.order_key = part_tab.order_key AND part_tab.part_key = ship_tab.part_key </condition> </RDB_node>
<table name="part_tab" key="part_key, price"/>
Le informazioni specificate per la scomposizione vengono ignorate durante la composizione di un documento.
Specificare le singole lettere del nome tabella e del nome colonna.
In questo schema di associazione, i dati risiedono negli elementi attribute_node e text_node per ogni element_node. Quindi, è necessario specificare a XML Extender la posizione dei dati nel database per poter eseguire la ricerca. Specificare un RDB_node per ogni attribute_node e text_node, indicando alla procedura memorizzata la tabella, la colonna e la condizione in base alle quali è possibile richiamare i dati. Specificare i valori colonna e tabella; il valore della condizione è facoltativo.
<element_node name="Price"> <text_node> <RDB_node> <table name="part_tab"/> <column name="price"/> <condition> price > 2500.00 </condition> </RDB_node> </text_node> </element_node>
<column name="order_key" type="integer"/>
Le informazioni specificate per la scomposizione vengono ignorate durante la composizione di un documento.
Se si utilizza l'associazione RDB_node, non occorre specificare le istruzioni SQL. Tuttavia, l'inserimento di condizioni di collegamento complesse nell'elemento RDB_node può risultare molto difficile. Ad esempio, l'utilizzo di un'operazione o di un'espressione union risulta meno efficace di SQL per XML.
La scomposizione utilizza l'associazione RDB_node per specificare come un documento XML si scompone in tabelle DB2, estraendo i valori attributo ed elemento nelle righe della tabella. I valori di ciascun documento XML vengono memorizzati in uno o più tabelle DB2. Una tabella può presentare massimo 1024 righe scomposte da ciascun documento.
Ad esempio, se un documento XML si scompone in cinque tabelle, ogni tabella può presentare massimo 1024 righe per quel determinato documento. Se la tabella presenta righe per più documenti, è possibile che contenga massimo 1024 righe per ciascun documento. Se la tabella presenta 20 documenti, è possibile che contenga 20.480 righe, 1024 per ciascun documento.
L'utilizzo di elementi con ricorrenza multipla (elementi con percorsi di ubicazione multipla nella struttura XML) incide sul numero di righe. Ad esempio, un documento che contiene un elemento <Part> che ricorre 20 volte, è necessario che sia scomposto in 20 righe in una tabella. Quando si utilizzano elementi con ricorrenza multipla, considerare questa restrizione delle dimensioni di tabella.