Manuali IBM

XML Extender - Gestione e programmazione


Ricerca dei documenti XML

La tecnica di ricerca dei dati XML è simile a quella per il richiamo: entrambe le tecniche richiamano i dati per effettuare ulteriori manipolazioni utilizzando la clausola WHERE che definisce i predicati come criteri di richiamo.

XML Extender fornisce vari metodi di ricerca documenti XML in una colonna XML, a seconda dell'applicazione utilizzata. Inoltre fornisce la funzione di ricerca struttura documenti e restituisce i risultati in base al contenuto degli elementi e dei valori attributo. E' possibile ricercare una vista della colonna XML e delle relative tabelle laterali, ricercare direttamente le tabelle laterali per migliorare le prestazioni oppure utilizzare le UDF di estrazione con le clausole WHERE. Inoltre è possibile utilizzare Text Extender e ricercare i dati di colonna all'interno del contenuto strutturale relativo a una stringa di testo.

Con XML Extender è possibile utilizzare gli indici nelle colonne delle tabelle laterali contenenti i valori attributo o il contenuto degli elementi XML estratti dai documenti XML, per una ricerca con velocità elevata. Specificando il tipo di dati di un elemento o attributo, è possibile ricercare il tipo di dati SQL generico oppure effettuare ricerca delimitate. Nell'esempio degli ordini di acquisto, è possibile ricercare tutti gli ordini con prezzo superiore a 2500.00.

Inoltre, è possibile utilizzare DB2 UDB Text Extender per effettuare ricerche di testo strutturale o ricerche di testo completo. Ad esempio, è possibile disporre di una colonna RESUME che contiene il riepilogo in formato XML. Si desidera conoscere il nome delle applicazioni con funzioni Java. E' possibile utilizzare DB2 Text Extender per ricercare nei documenti XML tutte le ricorrenze in cui l'elemento <skill> contiene la stringa di caratteri JAVA.

Le seguenti sezioni descrivono i metodi di ricerca:

Ricerca di documenti XML in base alla struttura

Utilizzando le funzioni di ricerca XML Extender, è possibile ricercare dati XML in una colonna basata sulla struttura del documento, con elementi e attributi. Per ricercare i dati di colonna utilizzare un'istruzione SELECT in vari modi e restituire una serie di risultati sulla base delle corrispondenze agli elementi e attributi del documento. E' possibile ricercare i dati di colonna utilizzando i seguenti metodi:

Questi metodi sono descritti nelle sezioni riportate di seguito e utilizzano esempi con il seguente scenario. La tabella applicativa SALES_TAB presenta una colonna XML denominata ORDER. Questa colonna presenta tre tabelle laterali, ORDER_SIDE_TAB, PART_SIDE_TAB e SHIP_SIDE_TAB. La vista predefinita, sales_order_view, è stata specificata quando è stata abilitata la colonna ORDER e le tabelle vengono unite utilizzando la seguente istruzione CREATE VIEW:

CREATE VIEW sales_order_view(invoice_num, sales_person, order,
                                  order_key, customer, part_key, price, date) 
AS
     SELECT sales_tab.invoice_num, sales_tab.sales_person, sales_tab.order,
            order_side_tab.order_key, order_side_tab.customer, 
            part_side_tab.part_key, ship_side_tab.date
     FROM sales_tab, order_side_tab, part_side_tab, ship_side_tab
     WHERE sales_tab.invoice_num = order_side_tab.invoice_num 
                AND sales_tab.invoice_num = part_side_tab.invoice_num
                AND sales_tab.invoice_num = ship_side_tab.invoice_num

Ricerca con interrogazione diretta nelle tabelle laterali

L'interrogazione diretta con la ricerca di interrogazioni secondarie fornisce la migliore prestazione della ricerca strutturale quando le tabelle laterali sono indicizzate. E' possibile utilizzare un'interrogazione o un'interrogazione secondaria per ricercare correttamente le tabelle laterali.

Esempio: la seguente istruzione utilizza un'interrogazione e un'interrogazione secondaria per ricercare direttamente una tabella laterale:

SELECT sales_person from sales_tab
   WHERE invoice_num in
     (SELECT invoice_num from part_side_tab
      WHERE price > 2500.00)

In questo esempio, invoice_num è la chiave primaria nella tabella SALES_TAB.

Ricerca da una vista di unione

E' possibile che XML Extender effettui la creazione di una vista predefinita che unisce la tabella applicativa e le tabelle laterali utilizzando un ID univoco. E' possibile utilizzare questa vista predefinita oppure qualsiasi vista che unisce una tabella applicativa e le tabelle laterali, per ricercare dati di colonna e per effettuare interrogazioni nelle tabelle laterali. Questo metodo fornisce una vista virtuale singola della tabella applicativa e delle relative tabelle laterali. Tuttavia, tenere presente che la complessità di un'interrogazione è direttamente proporzionale al numero di tabelle laterali create.

Suggerimento: è possibile utilizzare root_id o DXXROOT_ID (creato da XML Extender), per unire le tabelle quando si crea la propria vista.

Esempio: la seguente istruzione ricerca la vista

SELECT sales_person from sales_order_view
   WHERE price > 2500.00

L'istruzione SQL restituisce i valori sales_person della tabella della vista di unione sales_order_view che presenta gli ordini di articoli con un prezzo superiore a 2500.00.

Ricerca con le UDF di estrazione

E' inoltre possibile utilizzare le UDF di estrazione di XML Extender per ricercare elementi o attributi, nel caso in cui non sono stati creati indici o tabelle laterali per la tabella applicativa. L'utilizzo delle UDF di estrazione per eseguire la scansione dei dati XML rende l'operazione molto complessa inoltre è necessario utilizzarle con le clausole WHERE che riducono il numero dei documenti XML inclusi nella ricerca.

Esempio: la seguente istruzione ricerca un'UDF di estrazione di XML Extender:

SELECT sales_person from sales_tab 
     WHERE extractVarchar(order, '/Order/Customer/Name') 
   			like '%IBM%' 	
				AND invoice_num > 100

In questo esempio, la UDF di estrazione estrae gli elementi </Order/Customer/Name> con il valore IBM.

Ricerca di elementi o attributi con ricorrenza multipla

Per la ricerca di elementi o attributi con ricorrenza multipla, utilizzare la clausola DISTINCT per evitare valori duplicati.

Esempio: la seguente istruzione ricerca la clausola DISTINCT:

SELECT sales_person from sales_tab  
            WHERE invoice_num in 
              (SELECT DISTINCT invoice_num from part_side_tab 
               WHERE price > 2500.00 )

In questo esempio, il file DAD specifica /Order/Part/Price con ricorrenza multipla e crea la tabella laterale PART_SIDE_TAB. La tabella PART_SIDE_TAB può presentare più di una riga con lo stesso invoice_num. Con DISTINCT vengono restituiti solo i valori univoci.

Utilizzo di Text Extender per la ricerca di testo strutturale

Quando si ricerca la struttura del documento XML, XML Extender ricerca i valori degli attributi e dell'elemento che sono stati convertiti nei tipi di dati generali, ma non ricerca il testo. E' possibile utilizzare DB2 UDB Text Extender per la ricerca di testo completo o strutturale in una colonna abilitata per XML. Text Extender supporta la ricerca del documento XML in DB2 UDB versione 6.1 o successiva.

Ricerca di testo strutturale
La ricerca di stringhe di testo che si basano sulla struttura ad albero del documento XML. Ad esempio, se si dispone della struttura del documento /Order/Customer/Name e si desidera ricercare la stringa di caratteri "IBM" all'interno dell'elemento secondario <Customer>, è possibile utilizzare la ricerca di testo strutturale. E' possibile che il documento contenga la stringa IBM in un elemento secondario <Comment> o come nome di parte del prodotto. Il testo strutturale viene ricercato solo negli elementi specificati per la stringa. In questo esempio, vengono rilevati solo i documenti che presentano IBM nell'elemento secondario </Order/Customer/Name>; i documenti che presentano IBM in altri elementi e non nell'elemento secondario </Order/Customer/Name> non vengono restituiti.

Ricerca testo completo
Ricerca stringhe di testo in qualsiasi punto della struttura del documento, senza tener conto degli elementi o degli attributi. Nell'esempio precedente, vengono restituiti tutti i documenti che presentano la stringa IBM senza considerare il punto in cui ricorre.

Per utilizzare la ricerca Text Extender, è necessario installare DB2 Text Extender e abilitare il database e le tabelle come descritto di seguito. Per le modalità di utilizzo della ricerca Text Extender, consultare il capitolo relativo alla ricerca con le UDF di Text Extender della pubblicazione DB2 Universal Database Text Extender Administration and Programming.

Abilitazione di una colonna XML per Text Extender

Si supponga di disporre di un database abilitato per XML, effettuare le seguenti operazioni per abilitare Text Extender per la ricerca del contenuto di una colonna abilitata per XML. Ad esempio, il database è denominato SALES_DB, la tabella ORDER e i nomi della colonna XML sono XVARCHAR e XCLOB:

  1. Consultare il file install.txt sul CD degli extender per le modalità di installazione di Text Extender.
  2. Immettere il comando txstart da una delle seguenti ubicazioni:
  3. Aprire la finestra della riga comandi di Text Extender. Questo esempio specifica un database denominato SALES_DB e una tabella denominata ORDER, con due colonne XML denominate XVARCHAR e XCLOB. E' necessario eseguire i programmi di esempio in dxx\samples\c.
  4. Collegamento al database. Nel prompt dei comandi db2tx, immettere:
    'connect to SALES_DB' 
    
  5. Abilitare il database per Text Extender.

    Nel prompt dei comandi db2tx, immettere:

    'enable database'
    
  6. Abilitare le colonne della tabella XML per Text Extender, definendo i tipi di dati del documento XML, la lingua, le code page e altre informazioni relative alla colonna.
  7. Verificare lo stato dell'indice.
  8. Definire il modello del documento XML in un file ini del modello documento denominato desmodel.ini. Questo file è ubicato in: /db2tx/txins000 per UNIX e \instance\\db2tx\txins000 per Windows NT e le sezioni in un file di inizializzazione. Ad esempio, per textmodel.ini:
    ;list of document models
    [MODELS]
    modelname=Order
     
    ; an 'Order' document model definition
    ; left side = section name identifier
    ; right side = section name tag
     
    [Order]
    Order = /Order
    Order/Customer/Name = /Order/Customer/Name
    Order/Customer/Email = /Order/Customer/Email
    Order/Part/@color = /Order/Part/@color
    Order/Part/Shipment/ShipMode = /Order/Part/Shipment/ShipMode
     
    

Ricerca del testo utilizzando Text Extender

La funzione di ricerca di Text Extender è strettamente correlata alla ricerca strutturale del documento XML Extender. Il metodo consigliato è la creazione di un'interrogazione che effettua ricerche negli elementi o negli attributi del documento e utilizza Text Extender per ricercare il contenuto dell'elemento o i valori dell'attributo.

Esempio: le seguenti istruzioni ricercano un testo del documento XML con Text Extender. Dalla finestra Comandi DB2, immettere:

'connect to SALES_DB'   
'select xvarchar from order where db2tx.contains(varcharhandle, 
	 'model Order section(Order/Customer/Name) "Motors"')=1'   
'select xclob from order where db2tx.contains(clobhandle, 
	 'model Order section(Order/Customer/Name) "Motors"')=1'

Le ricerche UDF Contains() di Text Extender.

Questo esempio non riporta tutte le operazioni necessarie per utilizzare Text Extender nella ricerca di dati di colonna. Per ulteriori informazioni sui concetti e le funzioni della ricerca Text Extender , consultare il capitolo relativo alla ricerca con le UDF di Text Extender della pubblicazione DB2 Universal Database Text Extender Administration and Programming.


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