XML Extender Amministrazionepublic.dhe.ibm.com/ps/products/db2/info/vr9/pdf/... · DB2 ® XML...
Transcript of XML Extender Amministrazionepublic.dhe.ibm.com/ps/products/db2/info/vr9/pdf/... · DB2 ® XML...
DB2®
XML Extender - Amministrazione e programmazione
DB2 Versione 9
per Linux, UNIX e Windows
SC13-3579-00
���
DB2®
XML Extender - Amministrazione e programmazione
DB2 Versione 9
per Linux, UNIX e Windows
SC13-3579-00
���
Prima di utilizzare queste informazioni e il prodotto supportato, accertarsi di aver consultato le informazioni generiche contenute
in Informazioni particolari.
Informazioni particolari sull’edizione
Questo documento contiene informazioni di proprietà dell’IBM. Viene fornito con un accordo di licenza ed è
protetto dalle leggi sul copyright. Le informazioni contenute in questa pubblicazione non includono alcuna garanzia
sul prodotto e tutte le istruzioni fornite in questo manuale non vanno interpretate in tale senso.
E’ possibile ordinare le pubblicazioni IBM in linea oppure tramite un rappresentante IBM.
v Per ordinare le pubblicazioni in linea, visitare IBM Publications Center all’indirizzo www.ibm.com/shop/publications/order
v Per contattare un rivenditore IBM locale, visitare la pagina IBM Directory of Worldwide Contacts all’indirizzo
www.ibm.com/planetwide
Per ordinare le pubblicazioni DB2 da DB2 Marketing and Sales negli Stati Uniti o Canada, chiamare il numero
1-800-IBM-4YOU (426-4968).
Quando si inviano informazioni all’IBM, si garantisce il diritto non esclusivo all’IBM di utilizzo o distribuzione di
queste informazioni nel modo ritenuto più opportuno senza alcun obbligo nei confronti dell’utente.
© Copyright International Business Machines Corporation 1999 - 2006. Tutti i diritti riservati.
Indice
Informazioni su questa guida . . . . . vii
A chi è rivolta questa guida . . . . . . . . . vii
Come ottenere una versione corrente di questa
guida . . . . . . . . . . . . . . . . vii
Come utilizzare questa guida . . . . . . . . vii
Convenzioni di evidenziazione . . . . . . . viii
Parte 1. Introduzione . . . . . . . . 1
Capitolo 1. Introduzione . . . . . . . . 3
Introduzione a XML Extender . . . . . . . . 3
Documenti XML . . . . . . . . . . . . . 3
Gestione dei dati XML in DB2 . . . . . . . . 4
Funzioni di XML Extender . . . . . . . . . . 5
Lezioni del supporto didattico di XML Extender . . 6
Lezione: Memorizzazione di un documento XML in
una colonna . . . . . . . . . . . . . . 7
Lezione: Composizione di un documento XML . . 17
Parte 2. Amministrazione . . . . . . 33
Capitolo 2. Amministrazione . . . . . 35
Strumenti di gestione per XML Extender . . . . 35
Preparazione alla gestione di XML Extender . . . 35
Migrazione di XML Extender da versioni o release
precedenti . . . . . . . . . . . . . . . 35
Panoramica sulla gestione di XML Extender . . . 36
Wizard di gestione di XML Extender . . . . . . 36
Metodi di accesso e memorizzazione . . . . . . 36
Quando utilizzare il metodo delle colonne XML . . 38
Quando utilizzare il metodo di raccolta XML . . . 38
Pianificazione di colonne XML . . . . . . . . 38
Tipi di dati XML per le colonne XML . . . . . 38
Elementi e attributi da indicizzare per colonne
XML . . . . . . . . . . . . . . . . 39
Il file DAD file per le colonne XML . . . . . 39
Pianificazione per le raccolte XML . . . . . . . 40
Convalida . . . . . . . . . . . . . . 40
File DAD per le raccolte XML . . . . . . . 40
Schemi di associazione per raccolte XML . . . 42
Tipi di schemi di associazione . . . . . . 43
Requisiti dello schema di associazione . . . 45
Requisiti della dimensione della tabella di
decomposizione per l’associazione del nodo RDB . 50
Convalida automatica dei documenti XML . . . . 50
Abilitare i server del database per XML . . . . . 51
Creazione di una tabella XML . . . . . . . . 52
Memorizzazione di DTD nella tabella di repository 52
Abilitazione di colonne XML . . . . . . . . 53
Pianificazione di tabelle laterali . . . . . . . . 57
Indicizzazione delle tabelle laterali . . . . . . 58
Composizione dei documenti XML utilizzando
l’associazione SQL . . . . . . . . . . . . 59
Composizione di raccolte XML utilizzando
l’associazione RDB_node . . . . . . . . . . 62
Decomposizione di una raccolta XML utilizzando
l’associazione RDB_node . . . . . . . . . . 66
Parte 3. Programmazione . . . . . 71
Capitolo 3. Colonne XML . . . . . . . 73
Gestione di dati nelle colonne XML . . . . . . 73
Colonne XML come metodo di accesso e di
memorizzazione . . . . . . . . . . . . . 74
Definizione ed abilitazione di una colonna XML . . 75
Uso di indici per i dati delle colonne XML . . . . 75
Memorizzazione di dati XML . . . . . . . . 76
Funzioni casting predefinite per la
memorizzazione di dati XML . . . . . . . 77
UDF di memorizzazione per la memorizzazione
di dati XML . . . . . . . . . . . . . 77
Metodo per richiamare un documento XML . . . 78
Richiamo di un interno documento XML . . . 79
Funzioni di casting predefinite per il richiamo
dei dati XML . . . . . . . . . . . . 79
Utilizzo dell’UDF Content() per il richiamo dei
dati XML . . . . . . . . . . . . . 79
Richiamo dei valori di attributo e del contenuto
di un elemento da documenti XML . . . . . 81
Aggiornamento dati XML . . . . . . . . . 82
Aggiornamento di un intero documento XML . . 83
Aggiornamento con una funzione cast
predefinita . . . . . . . . . . . . . 83
Aggiornamento dei documenti XML con una
memorizzazione UDF . . . . . . . . . 83
Aggiornamento di elementi e attributi specifici di
un documento XML . . . . . . . . . . 83
Metodi per la ricerca di documenti XML . . . . 84
Ricerca nel documento XML in base alla struttura 85
Esempio: ricerca mediante una interrogazione
diretta sulle tabelle laterali . . . . . . . 85
Esempio: ricerca mediante una vista join . . 85
Esempio: ricerca mediante le UDF di
estrazione . . . . . . . . . . . . . 86
Esempio: ricerca su elementi o attributi con
ricorrenza multipla . . . . . . . . . . 86
Eliminazione di documenti XML . . . . . . . 86
Limitazioni durante l’invocazione delle funzioni da
JDBC (Java Database) . . . . . . . . . . . 87
Capitolo 4. Gestione di dati nelle
raccolte XML . . . . . . . . . . . . 89
Raccolte XML come metodo di accesso e di
memorizzazione . . . . . . . . . . . . . 89
Gestione di dati in raccolte XML . . . . . . . 90
Preparazione alla composizione di documenti
XML da dati DB2 . . . . . . . . . . . 90
© Copyright IBM Corp. 1999 - 2006 iii
Composizione di documenti mediante
dxxGenXML . . . . . . . . . . . . 90
Composizione di documenti mediante
dxxRetrieveXML . . . . . . . . . . . 92
Decomposizione di documenti XML in dati di
database DB2 . . . . . . . . . . . . . . 94
Abilitazione di una raccolta XML per la
decomposizione . . . . . . . . . . . . 97
Limiti di dimensione delle tabelle di
decomposizione . . . . . . . . . . . . 97
Aggiornamento ed eliminazione di dati in raccolte
XML . . . . . . . . . . . . . . . . . 98
Aggiornamento di dati in una raccolta XML . . 98
Aggiornamento di elementi e di valori di
attributi . . . . . . . . . . . . . 98
Eliminazione di istanze di elementi e attributi 99
Eliminazione di un documento XML da una
raccolta XML . . . . . . . . . . . . . 99
Ricerca delle raccolte XML . . . . . . . . . 100
Composizione dei documenti XML utilizzando i
criteri di ricerca . . . . . . . . . . . 100
Ricerca dei dati XML decomposti . . . . . . 101
Schemi di associazione per raccolte XML . . . . 101
Requisiti per l’utilizzo dell’associazione SQL . . . 104
Requisiti per l’associazione RDB_Node . . . . . 106
Fogli di stile per una raccolta XML . . . . . . 109
Percorsi di posizioni . . . . . . . . . . . 110
Sintassi del percorso della posizione . . . . . . 111
Abilitazione di raccolte XML . . . . . . . . 112
Disabilitazione delle raccolte XML . . . . . . 114
Capitolo 5. Schemi XML . . . . . . . 117
Vantaggi dell’utilizzo di schemi XML al posto dei
DTD . . . . . . . . . . . . . . . . 117
Elemento complexType dello schema XML . . . 117
Tipi di dati, elementi e attributi negli schemi . . . 118
Tipi di dati semplici in schemi XML . . . . . 118
Elementi in schemi XML . . . . . . . . . 119
Attributi in schemi XML . . . . . . . . . 119
Esempi di uno schema XML . . . . . . . . 119
Istanza di un documento XML mediante lo
schema . . . . . . . . . . . . . . 120
Istanza di un documento XML mediante un
DTD . . . . . . . . . . . . . . . 121
Parte 4. Riferimento . . . . . . . 123
Capitolo 6. Comando di gestione
dxxadm . . . . . . . . . . . . . . 125
Panoramica sul comando dxxadm . . . . . . 125
Sinstassi del comando di gestione dxxadm . . . 125
Opzioni del comando di gestione . . . . . . . 125
Opzione enable_db del comando dxxadm . . . 126
Opzione disable_db del comando dxxadm . . . 127
Opzione enable_column del comando dxxadm 128
Opzione disable_column del comando dxxadm 129
Opzione enable_collection del comando dxxadm 130
Opzione disable_collection del comando
dxxadm . . . . . . . . . . . . . . 131
Capitolo 7. Tipi definiti dall’utente di
XML Extender . . . . . . . . . . . 133
Capitolo 8. Funzioni definite
dall’utente di XML Extender . . . . . 135
Tipi di funzioni definite dall’utente di XML
Extender . . . . . . . . . . . . . . . 135
Nomi di UDT e UDF per XML Extender . . . . 136
Funzioni di memorizzazione . . . . . . . . 136
Panoramica sulle funzioni di memorizzazione in
XML Extender . . . . . . . . . . . . 136
Funzione XMLCLOBFromFile() . . . . . . 136
Funzione XMLFileFromCLOB() . . . . . . 137
Funzione XMLFileFromVarchar() . . . . . . 138
Funzione XMLVarcharFromFile() . . . . . . 139
Funzioni di richiamo . . . . . . . . . . . 139
Funzioni di richiamo in XML Extender . . . . 139
Content(): retrieve da XMLFILE su un CLOB 140
Content(): retrieve da XMLVARCHAR su un file
di server esterno . . . . . . . . . . . 141
Content(): retrieval da XMLCLOB su un file di
server esterno . . . . . . . . . . . . 142
Funzioni di estrazione . . . . . . . . . . 143
Funzioni di estrazione in XML Extender . . . 143
extractInteger() ed extractIntegers() . . . . . 144
extractSmallint() ed extractSmallints() . . . . 145
extractDouble() ed extractDoubles() . . . . . 146
extractReal() ed extractReals() . . . . . . . 147
extractChar() ed extractChars() . . . . . . 148
extractVarchar() ed extractVarchars() . . . . . 149
extractCLOB() ed extractCLOBs() . . . . . . 151
extractDate() ed extractDates() . . . . . . . 152
extractTime() ed extractTimes() . . . . . . 153
extractTimestamp() ed extractTimestamps() . . 154
Funzioni di aggiornamento in XML Extender . . . 155
Modalità di elaborazione del documento da
parte della funzione Update() . . . . . . . 158
Ricorrenze multiple . . . . . . . . . . 160
funzioni di convalida . . . . . . . . . . . 161
Funzione SVALIDATE() . . . . . . . . . 161
Sintassi . . . . . . . . . . . . . 161
Parametri . . . . . . . . . . . . . 161
Esempi . . . . . . . . . . . . . 162
Funzione DVALIDATE() . . . . . . . . . 162
Sintassi . . . . . . . . . . . . . 163
Parametri . . . . . . . . . . . . . 163
Esempi . . . . . . . . . . . . . 163
Capitolo 9. File DAD (document
access definition) . . . . . . . . . 165
Creazione di un file DAD per colonne XML . . . 165
File DAD per le raccolte XML . . . . . . . . 167
Composizione SQL . . . . . . . . . . 169
Composizione di nodi RDB . . . . . . . . 169
Composizione da righe che hanno valori null 170
DTD per il file DAD . . . . . . . . . . . 171
Sovrascrittura dinamica di valori nel file DAD . . 175
iv XML Extender - Amministrazione e programmazione
Capitolo 10. Procedure memorizzate
di XML Extender . . . . . . . . . . 183
Procedure memorizzate di XML Extender -
Panoramica . . . . . . . . . . . . . . 183
Richiamo delle procedure memorizzate XML
Extender . . . . . . . . . . . . . . . 183
Procedure memorizzate che restituiscono CLOB 184
Procedure memorizzate di gestione di XML
Extender . . . . . . . . . . . . . . . 186
Procedure memorizzate di gestione di XML
Extender - Panoramica . . . . . . . . . 186
Procedura memorizzata dxxEnableDB() . . . . 186
Procedura memorizzata dxxDisableDB() . . . 187
Procedura memorizzata dxxEnableColumn() . . 187
Procedura memorizzata dxxDisableColumn() 189
Procedura memorizzata dxxEnableCollection() 189
Procedura memorizzata dxxDisableCollection() 190
Procedure memorizzate di composizione di XML
Extender . . . . . . . . . . . . . . . 191
Procedure memorizzate di composizione di
XML Extender - Panoramica . . . . . . . 191
Procedura memorizzata dxxGenXML() . . . . 191
Procedura memorizzata dxxRetrieveXML() . . 194
Procedura memorizzata dxxGenXMLClob . . . 197
Procedura memorizzata dxxRetrieveXMLClob 200
Procedure memorizzate di decomposizione di XML
Extender . . . . . . . . . . . . . . . 202
Procedure memorizzate di decomposizione di
XML Extender - Panoramica . . . . . . . 202
Procedura memorizzata dxxShredXML() . . . 202
Procedura memorizzata dxxInsertXML() . . . 203
Capitolo 11. Procedure memorizzate e
funzioni di XML Extender per
MQSeries . . . . . . . . . . . . . 207
Procedure memorizzate XML Extender e funzioni
per MQSeries - Panoramica . . . . . . . . . 207
Funzioni MQSeries per XML Extender . . . . . 208
Funzioni MQSeries di XML Extender -
Panoramica . . . . . . . . . . . . . 208
Funzione MQPublishXML . . . . . . . . 208
Funzione MQReadXML . . . . . . . . . 210
Funzione MQReadAllXML . . . . . . . . 212
Funzione MQReadXMLCLOB . . . . . . . 214
Funzione MQReadAllXMLCLOB . . . . . . 215
Funzione MQReceiveXML . . . . . . . . 217
Funzione MQReceiveAllXML . . . . . . . 219
Funzione MQRcvAllXMLCLOB . . . . . . 221
Funzione MQReceiveXMLCLOB . . . . . . 223
Funzione MQRcvXMLCLOB . . . . . . . 224
Funzione MQSENDXML . . . . . . . . 225
Funzione MQSENDXMLFILE . . . . . . . 226
Funzione MQSendXMLFILECLOB . . . . . 228
Procedure memorizzate di MQSeries per XML
Extender . . . . . . . . . . . . . . . 229
XML Extender MQSeries procedure
memorizzate - Panoramica . . . . . . . . 229
Procedura memorizzata dxxmqGen() . . . . 232
Procedura memorizzata dxxmqGenCLOB . . . 234
Procedura memorizzata dxxmqRetrieve . . . 236
Procedura memorizzata dxxmqRetrieveCLOB 239
Procedura memorizzata dxxmqShred . . . . 241
Procedura memorizzata dxxmqShredAll . . . 242
Procedura memorizzata dxxmqShredCLOB . . 244
Procedura memorizzata dxxmqShredAllCLOB 245
Procedura memorizzata dxxmqInsert . . . . 246
Procedura memorizzata dxxmqInsertCLOB . . 248
Procedura memorizzata dxxmqInsertAll . . . 250
Procedura memorizzata dxxmqInsertAllCLOB 251
Capitolo 12. XSLT (extensible
stylesheet language transformation) . 255
Creazione di un documento HTML utilizzando un
foglio di stile XSLT . . . . . . . . . . . 255
Funzione XSLTransformToClob() definita
dall’utente . . . . . . . . . . . . . . 256
Funzione XSLTransformToFile() definita dall’utente 257
Capitolo 13. Tabelle del supporto di
gestione di XML Extender . . . . . . 261
Tabella di riferimento DTD . . . . . . . . . 261
Tabella di utilizzo XML (XML_USAGE) . . . . . 261
Capitolo 14. Risoluzione dei problemi 263
Risoluzione dei problemi relativi a XML Extender 263
Avvio della traccia per XML Extender . . . . . 263
Arresto della traccia . . . . . . . . . . . 264
Codici di ritorno delle UDF di XML Extender . . 264
Codici di ritorno delle procedure memorizzate di
XML Extender . . . . . . . . . . . . . 265
Codici SQLSTATE e numeri di messaggi associati
per XML Extender . . . . . . . . . . . . 265
Messaggi di XML Extender . . . . . . . . . 270
Appendice A. Esempi . . . . . . . . 287
Esempio DTD XML . . . . . . . . . . . 287
Esempio di documento XML: getstart.xml . . . . 287
Esempio di foglio di stile: getstart.xsl . . . . . 288
File DAD (document access definition) . . . . . 289
File DAD di esempio: colonna XML . . . . . 290
File DAD di esempio: raccolta XML,
associazione SQL . . . . . . . . . . . 290
File DAD di esempio: associazione RDB_node 292
Appendice B. Considerazioni sulla
codepage . . . . . . . . . . . . . 295
Terminologia per le codepage XML . . . . . . 295
Considerazioni sulla codepage di DB2 e XML
Extender . . . . . . . . . . . . . . . 296
Considerazioni per l’importazione di un
documento XML . . . . . . . . . . . 296
Considerazioni per l’esportazione di un
documento XML . . . . . . . . . . . 297
Considerazioni sulla dichiarazione di codifica per
XML Extender . . . . . . . . . . . . . 297
Dichiarazioni di codifica valide . . . . . . 297
Codifiche e dichiarazioni di codifica coerenti 298
Dichiarazione di una codifica . . . . . . . 300
Esempi di conversione . . . . . . . . . . 300
Indice v
Suggerimenti per evitare documenti XML non
coerenti . . . . . . . . . . . . . . . 302
Appendice C. Limiti di XML Extender 305
Glossario di XML Extender . . . . . 309
Informazioni particolari . . . . . . . 317
Marchi . . . . . . . . . . . . . . . 319
Indice analitico . . . . . . . . . . . 321
Come ottenere ulteriori informazioni
dalla IBM . . . . . . . . . . . . . 327
vi XML Extender - Amministrazione e programmazione
Informazioni su questa guida
Questa sezione contiene le seguenti informazioni:
v “A chi è rivolta questa guida”
v “Come utilizzare questa guida”
v “Convenzioni di evidenziazione” a pagina viii
A chi è rivolta questa guida
Questa guida è intesa per i seguenti utenti:
v Gli utenti che operano con i dati XML nelle applicazioni DB2® e chi ha
familiarità con i concetti XML. I lettori di questo documento devono avere una
comprensione generale di XML e DB2. Per ulteriori informazioni su XML,
consultare il seguente sito Web:
http://www.w3.org/XML
Per ulteriori informazioni su DB2, consultare il seguente sito Web:
http://www.ibm.com/software/data/db2/library
v Gli amministratori del database DB2 che hanno familiarità con i concetti,
strumenti e tecniche di amministrazione del database DB2.
v I programmatori dell’applicazione DB2 che hanno familiarità con SQL e con uno
o più linguaggi di programmazione che è possibile utilizzare per le applicazioni
DB2.
Come ottenere una versione corrente di questa guida
È possibile reperire la versione aggiornata di questa guida sul sito Web di XML
Extender:
http://www.ibm.com/software/data/db2/extenders/xmlext/library.html
Come utilizzare questa guida
Questa guida è strutturata nel modo seguente:
Parte 1. Introduzione
Questa parte fornisce una panoramica di XML Extender e come è possibile
utilizzarla nelle applicazioni aziendali. Contiene uno scenario di
introduzione che consente l’esecuzione.
Parte 2. Amministrazione
Questa parte descrive come preparare e gestire un database DB2 per i dati
XML. Consultare questa parte se è necessario gestire un database DB2 che
contiene i dati XML.
Parte 3. Programmazione
Questa parte descrive come gestire i dati XML. Consultare questa parte se
è necessario accedere e gestire i dati XML in un programma applicativo del
database DB2.
Parte 4. Riferimento
Questa parte descrive come utilizzare i comandi di amministrazione di
XML Extender, i tipi personalizzati, le funzioni personalizzate e le
procedure memorizzate. Elenca anche i messaggi e i codici emessi da XML
© Copyright IBM Corp. 1999 - 2006 vii
Extender. Consultare questa parte se si ha familiarità con le attività ed i
concetti di XML Extender, ma sono necessarie le informazioni su un tipo
personalizzato (UDT), funzione personalizzata (UDF), comando, messaggio,
tabelle di metadati, tabelle di controllo o codice.
Parte 5. Appendici
Le appendici descrivono DTD per la definizione di accesso del documento,
esempi e limiti di XML Extender.
Convenzioni di evidenziazione
Questa guida utilizza le seguenti convenzioni:
Il testo in grassetto indica:
v Comandi
v Nomi di campi
v Nomi di menu
v Pulsanti
Il testo in corsivo indica
v I parametri di variabili che devono essere sostituiti con un valore
v Parole enfatizzate
v Primo utilizzo di un termine del glossario
Le lettere in maiuscolo indicano:
v Tipi di dati
v Nomi colonna
v Nomi tabelle
Il testo di esempio indica:
v Messaggi del sistema
v Valori immessi
v Esempi di codifica
v Nomi di directory
v Nomi file
viii XML Extender - Amministrazione e programmazione
Parte 1. Introduzione
Questa parte fornisce una panoramica su XML Extender e su come utilizzarlo con
le proprie applicazioni aziendali.
© Copyright IBM Corp. 1999 - 2006 1
2 XML Extender - Amministrazione e programmazione
Capitolo 1. Introduzione
Introduzione a XML Extender
DB2® XML Extender consente di memorizzare e accedere a documenti XML per
generare documenti XML da dati relazionali esistenti e per inserire righe in tabelle
relazionali da documenti XML. XML Extender fornisce nuovi tipi di dati, funzioni
e procedure memorizzate per gestire i dati XML in DB2.
XML Extender è disponibile per le seguenti piattaforme. Fare riferimento ai
requisiti di installazione DB2 per determinare i livelli di sistemi operativi
supportati.
v Windows Server su una piattaforma Intel a 32-bit
v AIX® su una piattaforma a 32-bit per le funzioni client di XML Extender
v AIX® su una piattaforma a 64-bit
v Solaris™ Operating Environment su una piattaforma a 32-bit per le funzioni
client di XML Extender
v Solaris™ Operating Environment su una piattaforma a 64-bit
v Linux su una piattaforma a 32-bit con architettura x86
v Linux su una piattaforma a 64-bit con architettura x86
v HP-UX su una piattaforma PA-RISC a 32-bit per le funzioni client di XML
Extender
v HP-UX su una piattaforma PA-RISC a 64-bit
v z/OS™
v i5/OS™
Argomenti correlati:
v “Lezioni del supporto didattico di XML Extender” a pagina 6
v “Funzioni di XML Extender” a pagina 5
v “Lezione: Composizione di un documento XML” a pagina 17
v “Lezione: Memorizzazione di un documento XML in una colonna” a pagina 7
v “Documenti XML”
Documenti XML
Poiché le aziende tendono a condividere i dati tra diverse applicazioni, si verifica il
problema di dover replicare, trasformare, esportare o salvare i dati in formati che
possano essere importati in altre applicazioni. Molti di questi processi di
trasformazione tendono a eliminare parte dei dati o costringono gli utenti a
eseguire processi di verifica dell’integrità dei dati. Questo controllo manuale
richiede un tempo notevole ed è molto costoso.
Un modo per risolvere questo problema sta nello sviluppare applicazioni ODBC
(Open Database Connectivity), un’API (application programming interface) standard
per l’accesso ai dati su sistemi di gestione di database relazionali e non. Tali
applicazioni salvano i dati in un sistema di gestione database. Da tale sistema, i
dati possono essere modificati e presentati nel formato necessario alle varie
applicazioni. È necessario scrivere le applicazioni del database per poter convertire
© Copyright IBM Corp. 1999 - 2006 3
i dati nel formato richiesto dall’applicazione. Le applicazioni vengono modificate
molto rapidamente e altrettanto rapidamente diventano obsolete. Le applicazioni
che convertono i dati in HTML forniscono soluzioni di presentazione, ma nella
pratica i dati presentati non possono essere utilizzati per altri scopi. È quindi
necessario un metodo che separi i dati dalla presentazione in modo da fornire un
formato pratico che possa essere scambiato tra le applicazioni.
XML (eXtensible Markup Language) risolve questo problema. XML è estensibile in
quanto il linguaggio è un linguaggio meta che consente di creare il proprio
linguaggio in base alle necessità. XML viene utilizzato per catturare non solo i dati
per la particolare applicazione, ma anche l’intera struttura dati. Sebbene questo
non sia l’unico formato di scambio dati, XML è diventato lo standard accettato.
Aderendo a questo standard, le applicazioni possono condividere i dati senza
prima trasformarli utilizzando i formati proprietari.
Poiché XML è lo standard per lo scambio di dati, molte applicazioni lo utilizzano.
Si assuma di utilizzare una determinata applicazione di gestione progetti e di voler
condividere parte dei dati con l’applicazione calendario. L’applicazione di gestione
progetti può esportare le attività in XML, che possono quindi essere importate
nell’applicazione calendario senza dover effettuare alcuna altra operazione. Sul
mercato odierno, i provider ricevono forti incentivi per rendere un formato di
scambio quale XML una funzione di base delle proprie applicazioni.
Gestione dei dati XML in DB2
Nonostante XML risolva molti problemi fornendo un formato standard per lo
scambio di dati, si verificano lo stesso alcuni problemi. Quando si crea
un’applicazione di dati enterprise, è necessario rispondere a domande del tipo:
v Quanto spesso è necessario effettuare le replica dei dati?
v Che tipo di informazioni devono essere condivise tra le applicazioni?
v Come è possibile ricercare rapidamente le informazioni necessarie?
v Come eseguire una determinata azione, come l’aggiunta di una nuova voce o il
richiamo dello scambio automatico di dati tra tutte le applicazioni?
Questi tipi di problemi possono essere risolti solo da un sistema di gestione
database. Incorporando le informazioni XML e le meta-informazioni direttamente
nel database, è possibile ottenere in maniera più efficiente i risultati XML necessari
alle altre applicazioni. Con XML Extender, è possibile sfruttare i vantaggi di DB2®
in molte applicazioni XML.
Con il contenuto dei documenti XML strutturati in un database DB2, è possibile
combina re le informazioni XML strutturate con i dati relazionali strutturati. In
base all’applicazione, è possibile decidere se memorizzare interi documenti XML in
DB2 nei tipi definiti dall’utente per i dati XML (tipi di dati XML) oppure è
possibile associare il contenuto XML come tipi di dati di base nelle tabelle
relazionali. Per i tipi di dati XML, XML Extender aggiunge la possibilità di
aggiungere tipi di dati avanzati di valori di attributi o elementi XML oltre alla
possibilità di eseguire ricerche di testo strutturale fornite da DB2 Database™.
XML Extender fornisce due metodi per la memorizzazione e l’accesso ai dati XML
in DB2:
Metodo delle colonne XML
4 XML Extender - Amministrazione e programmazione
Questo metodo memorizza interi documenti XML come dati di colonna o
esternamente come un file ed estrae il valore dell’attributo o dell’elemento
XML richiesto e lo memorizza in tabelle laterali, che sono tabelle indicizzate
per le ricerche rapide. Memorizzando i documenti come dati di colonna, è
possibile:
v Eseguire ricerche rapide su elementi o attributi XML che sono stati
estratti e memorizzati nelle tabelle laterali come tipi di dati di base SQL
indicizzate.
v Aggiornare il contenuto di un elemento XML o del valore di un attributo
XML.
v Estrarre gli elementi o gli attributi XML in maniera dinamica mediante
interrogazioni SQL.
v Convalidare documenti XML quando vengono inseriti o aggiornati.
v Eseguire ricerche di testo strutturale con Net Search Extender.
Metodo di raccolta XML
Compone e decompone il contenuto di documenti XML con una o più
tabelle relazionali.
Funzioni di XML Extender
XML Extender fornisce le seguenti funzioni per gestire e utilizzare i dati XML
conDB2®:
v Risorse di amministrazione che consentono di gestire l’integrazione dei dati
XML nelle tabelle relazionali
v Metodi di memorizzazione e accesso per i dati XML all’interno del database
v Un repository DTD (data type definition) per memorizzare i DTD
v La possibilità di convalidare i documenti XML utilizzando un DTD o uno
schema
v Un file di associazione detto DAD (Document Access Definition), utilizzato per
associare i documenti XML ai dati relazionali
v I percorsi per specificare la posizione di un elemento o di un attributo all’interno
di un documento XML
Risorse di amministrazione: le risorse di amministrazione di XML Extender
consentono di abilitare il database e le colonne delle tabelle per XML e di associare
i dati XML alle strutture relazionali DB2.
È possibile utilizzare le seguenti risorse per completare le attività di gestione per
XML Extender:
v Il comando dxxadm fornisce un’opzione della riga comandi per le attività di
gestione.
v Le procedure memorizzate di gestione di XML Extender consentono all’utente di
richiamare i comandi di gestione da un programma.
Metodi di accesso e memorizzazione: XML Extender fornisce due metodi di
accesso e memorizzazione per l’integrazione di documenti XML con le strutture di
dati DB2: la colonna XML e la raccolta XML. Questi metodi possono essere
utilizzati in maniere molto differenti, ma sempre nella stessa applicazione.
Metodo delle colonne XML
Questo metodo consente di memorizzare i documenti XML in DB2. Esso è
utile anche per l’archiviazione dei documenti. I documenti vengono inseriti
Capitolo 1. Introduzione 5
in colonne abilitate per XML e possono essere aggiornati, richiamati e
ricercati. I dati di elementi e attributi possono essere associati a tabelle DB2
(tabelle laterali), che possono essere indicizzate per ricerche rapide.
Metodo di raccolta XML
Questo metodo consente di associare le strutture di documenti XML alle
tabelleDB2 in modo da poter comporre i documenti XML da dati DB2
esistenti oppure decomporre i documenti memorizzando i dati senza tag
nelle tabelle DB2. Questo metodo è ottimo per le applicazioni di scambio
dati, in particolare quando il contenuto dei documenti XML viene
aggiornato frequentemente.
DTD: XML Extender consente di memorizzare i DTD, la serie di dichiarazioni per
elementi e attributi XML. Quando un di database è abilitato per XML, viene creata
una tabella di repository DTD (DTD_REF). Ogni riga di questa tabella rappresenta
un DTD con ulteriori informazioni sui metadati. Gli utenti possono accedere a
questa tabella per inserire i propri DTD. I DTD vengono utilizzati per la convalida
della struttura di documenti XML.
File DAD: è possibile specificare il modo in cui i documenti XML strutturati
devono essere elaborati da XML Extender mediante un file DAD (document access
definition). Il file DAD è un documento XML che associa la struttura XML a una
tabella DB2. Un file DAD viene utilizzato quando si memorizzano i documenti
XML in una colonna o quando si compongono o decompongono dati XML. I file
DAD specifica se i documenti vengono memorizzati mediante il metodo delle
colonne XML o definendo una raccolta XML per la composizione o la
decomposizione.
Argomenti correlati:
v “Lezioni del supporto didattico di XML Extender”
v “Lezione: Composizione di un documento XML” a pagina 17
v “Lezione: Memorizzazione di un documento XML in una colonna” a pagina 7
v “Gestione dei dati XML in DB2” a pagina 4
Lezioni del supporto didattico di XML Extender
Questo supporto didattico mostra come iniziare a utilizzare XML per accedere e
modificare i dati XML per le proprie applicazioni. Sono fornite tre lezioni:
v Memorizzazione di un documento XML in una colonna XML
v Composizione di un documento XML
v Cleanup del database
Seguendo queste lezioni del supporto didattico, sarà possibile impostare un
database utilizzando i dati di esempio forniti, associare i dati SQL a un documento
XML, memorizzare i documenti XML nel database e ricercare ed estrarre i dati dai
documenti XML.
Nelle lezioni verrà utilizzato la finestra dei comandi DB2® con comandi di
gestione, UDF e procedure memorizzate di XML Extender. La maggior parte degli
esempi riportati in questo manuale si basano sui dati di esempio utilizzati in
questa sezione.
In queste lezioni, l’utente lavora per ACME Auto Direct, un’azienda che
distribuisce automobili e mezzi pensanti alle concessionarie automobilistiche.
Vengono eseguite due attività. Per prima cosa, viene impostato un sistema in cui è
6 XML Extender - Amministrazione e programmazione
possibile archiviare gli ordini nel database SALES_DB che può essere consultato
dal reparto vendite. Successivamente, le informazioni vengono estratte in un
database di ordini di acquisto esistente, denominato SALES_DB.
Prerequisiti
Per completare le lezioni riportate in questo supporto didattico, è necessario che
siano installati i seguenti prerequisiti:
v DB2 Versione 9.1 con la funzione XML Extender
Inoltre, il server di database DB2 deve essere stato abilitato dall’amministratore
DB2.
Lezione: Memorizzazione di un documento XML in una colonna
XML Extender fornisce un metodo per la memorizzazione e l’accesso a interi
documenti XML nel database . Il metodo delle colonne XML consente di
memorizzare il documento mediante i tipi di file XML, l’indicizzazione della
colonna nelle tabelle laterali e interrogando o ricercando quindi il documento XML.
Questo metodo di memorizzazione è particolarmente utile per l’archiviazione di
applicazioni in cui i documenti non vengono aggiornati molto frequentemente.
Questa lezione mostra come utilizzare il metodo di accesso e memorizzazione della
colonna XML.
Lo scenario: all’utente viene assegnata l’attività di archiviazione dei dati sulle
vendite per il reparto dei servizi. I dati sulle vendite necessari sono memorizzati in
documenti XML che utilizzano la stessa DTD.
Il reparto dei servizi ha fornito una struttura consigliata per i documenti XML e ha
specificato i dati di elementi che verranno interrogati più frequentemente. Il
reparto vuole che i documenti XML vengano memorizzati nella tabella SALES_TAB
nel database SALES_DB e che sia possibile accedervi molto rapidamente. La tabella
SALES_TAB conterrà due colonne con i dati relativi a ogni vendita e una terza
colonna che conterrà il documento XML. Questa colonna è denominata ORDER.
Per memorizzare questo documento XML nella tabella SALES_TAB, sarà
necessario:
1. Memorizzare il documento come un tipo di dati XMLVARCHAR e determinare
gli elementi e gli attributi XML che verranno interrogati frequentemente.
2. Impostare il database SALES_DB per XML.
3. Creare la tabella SALES_TAB e abilitare la colonna ORDER in modo che sia
possibile memorizzare il documento inalterato in DB2®.
4. Inserire un DTD per la convalida del documento XML
Quando si abilita la colonna, verranno definite le tabelle laterali da indicizzare per
la ricerca strutturale del documento in un file DAD (document access definition),
un documento XML che specifica la struttura delle tabelle laterali.
La tabella SALES_TAB viene descritta in Tabella 1 a pagina 8. La colonna da
abilitare per XML, ORDER, è riportata in corsivo.
Capitolo 1. Introduzione 7
Tabella 1. Tabella SALES_TAB
Nome colonna Tipo di dati
INVOICE_NUM CHAR(6) NOT NULL PRIMARY KEY
SALES_PERSON VARCHAR(20)
ORDER XMLVARCHAR
Script ed esempi:
Per questo supporto didattico, verrà utilizzata una serie di script per impostare
l’ambiente ed eseguire le operazioni riportate in questa lezione. Tali script si
trovano nella directory install_dxx/samples/extenders/db2xml/cmd (dove
install_dxx è la directory in cui sono stati installati i file XML Extender) .
Tali script sono:
getstart_db.cmd
Crea il database e inserisce i dati in quattro tabelle.
getstart_prep.cmd
Collega il di database alle procedure memorizzate di XML Extender e
abilita il di database per XML Extender.
getstart_insertDTD.cmd
Inserisce la DTD utilizzata per convalidare il documento XML nella
colonna XML.
getstart_createTabCol.cmd
Crea una tabella dell’applicazione che avrà la colonna abilitata per XML.
getstart_alterTabCol.cmd
Modifica la tabella dell’applicazione aggiungendo la colonna che verrà
abilitata per XML.
getstart_enableCol.cmd
Abilita la colonna XML.
getstart_createIndex.cmd
Crea gli indici sulle tabelle laterali per la colonna XML.
getstart_insertXML.cmd
Inserisce il documento XML nella colonna XML.
getstart_queryCol.cmd
Esegue un’istruzione select sulla tabella dell’applicazione e restituisce il
documento XML.
getstart_stp.cmd
Esegue la procedura memorizzata per comporre la raccolta XML.
getstart_exportXML.cmd
Esporta il documento XML dal database per utilizzarlo in un’applicazione.
getstart_clean.cmd
Cancella l’ambiente del supporto didattico.
Pianificazione della memorizzazione del documento:
Prima di utilizzare XML Extender per memorizzare i documenti, è necessario:
v Comprendere la struttura dei documenti XML.
8 XML Extender - Amministrazione e programmazione
v Determinare il tipo definito dall’utente XML in cui memorizzare il documento
XML.
v Determinare gli elementi e gli attributi XML che verranno ricercati
frequentemente dal reparto di servizio, in modo che il relativo contenuto possa
essere memorizzato in tabelle laterali e indicizzato per migliorare le prestazioni.
Nelle seguenti sezioni viene descritto come prendere queste decisioni.
Struttura dei documenti XML:
La struttura dei documenti XML per questa lezione utilizza le informazioni per un
ordine specifico strutturato con la chiave dell’ordine come livello superiore e poi
subito dopo le informazioni sul cliente, la parte e la spedizione nei livelli
successivi.
Questa lezione fornisce la DTD di esempio per comprendere e convalidare la
struttura di documenti XML.
Determinazione del tipo di dati XML per la colonna XML:
XML Extender fornisce i tipi definiti dall’utente XML che è possibile utilizzare per
definire una colonna per contenere i documenti XML. Questi tipi di dati sono:
XMLVARCHAR
Utilizzo per documenti di dimensione inferiore a 3 kilobyte memorizzati in
DB2. La dimensione massima dei documenti XMLVARCHAR può essere
ridefinita in modo da essere 32672 byte.
XMLCLOB
Utilizzo per documenti di dimensione maggiore a 3 kilobyte memorizzati
in DB2. La dimensione massima dei documenti è 2 gigabyte.
XMLFILE
Utilizzato per i documenti memorizzati all’esterno di DB2.
In questa lezione, verrà memorizzato un piccolo documento in DB2, pertanto verrà
utilizzato il tipo di dati XMLVARCHAR.
Determinazione degli elementi e degli attributi in cui eseguire la ricerca:
Una volta nota la struttura di documenti XML e dopo aver compreso i requisiti
dell’applicazione, è possibile determinare gli elementi e gli attributi in cui verranno
eseguite ricerche frequentemente. Il reparto dei servizi interrogherà frequentemente
i campi della chiave dell’ordine, del nome del cliente, del prezzo e della data di
spedizione di un ordine e saranno richieste prestazioni elevate per tali ricerche.
Queste informazioni sono contenute negli elemento e negli attributi del documento
XML. Tabella 2 descrive i percorsi delle posizioni di ogni elemento e attributo.
Tabella 2. Elementi ed attributi in cui eseguire la ricerca
Dati Percorso posizione
chiave dell’ordine /Order/@Key
nome cliente /Order/Customer/Name
prezzo /Order/Part/ExtendedPrice
data di spedizione /Order/Part/Shipment/ShipDate
Associazione del documento XML alle tabelle laterali:
Capitolo 1. Introduzione 9
Per associare i documenti XML a una tabella laterale, è necessario creare un file
DAD per la colonna XML. Il file DAD viene utilizzato per memorizzare il
documento XML in DB2. Esso associa inoltre il contenuto degli elementi e degli
attributi XML alle tabelle laterali del database DB2 utilizzate per l’indicizzazione, il
che migliora le prestazioni di ricerca.
Dopo aver identificato gli elementi e gli attributi in cui eseguire la ricerca, è
necessario determinare il modo in cui questi devono essere organizzati nelle tabelle
laterali, il numero di tabelle da utilizzare e le colonne da inserire nelle tabelle.
Organizzare le tabelle laterali in modo da inserire informazioni simili nella stessa
tabella. Il numero di tabelle laterali è determinato anche dalla presenza ripetuta
degli elementi nel documento. Ad esempio, nel documento, l’elemento part può
essere ripetuto più volte e pertanto gli elementi price e date possono essere ripetuti
più volte. Gli elementi che si ripetono devono trovarsi nelle proprie tabelle laterali.
È inoltre necessario determinare i tipi di base del database DB2 che devono essere
utilizzati dagli elementi o dagli attributi, il che è determinato dal formato della
data.
v Se i dati sono testo, utilizzare VARCHAR.
v Se i dati sono valori interi, utilizzare INTEGER.
v Se i dati sono una data e si desidera eseguire ricerche limitate, utilizzareDATE.
In questo supporto didattico, gli elementi e gli attributi sono associati a
ORDER_SIDE_TAB, PART_SIDE_TAB o a SHIP_SIDE_TAB. Le tabelle riportate di
seguito mostrano a quale tabella è associato ogni elemento o attributo.
ORDER_SIDE_TAB
Nome colonna Tipo di dati Percorso posizione Ricorrenza
multipla?
ORDER_KEY INTEGER /Order/@Key No
CUSTOMER VARCHAR(16) /Order/Customer/Name No
PART_SIDE_TAB
Nome colonna Tipo di dati Percorso posizione Ricorrenza
multipla?
PRICE DECIMAL(10,2) /Order/Part/ExtendedPrice Sì
SHIP_SIDE_TAB
Nome colonna Tipo di dati Percorso posizione Ricorrenza
multipla?
DATE DATE /Order/Part/Shipment/ShipDate Sì
Creazione del database SALES_DB:
In questa attività, viene creato un database SALES_DB e questo viene abilitato per
XML.
Per creare il database:
1. Passare alla directory install_dxx/samples/extenders/db2xml/cmd, dove
install_dxx è la directory in cui sono stati installati i file di XML Extender. I
10 XML Extender - Amministrazione e programmazione
file di esempio contengono i riferimenti ai file che utilizzano percorsi assoluti.
Controllare i file di esempio e modificare questi valori con i percorsi delle
proprie directory.
2. Su piattaforme Windows®, aprire una finestra dei comandi DB2 immettendo il
seguente testo:
DB2CMD
3. Eseguire il comando getstart_db:
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:
v Crea UDT (user-defined types), UDF (user-defined functions) e procedure
memorizzate
v Crea e inserisce i dati nelle tabelle di controllo con i metadati necessari richiesti
da XML Extender
v Crea lo schema DB2XML e assegna i privilegi necessari
Per abilitare il database per XML:
Emettere il seguente script:
getstart_prep.cmd
Questo script collega il database alle procedure memorizzate di XML Extender.
Inoltre esegue l’opzione del comando dxxadm che abilita il database:
dxxadm enable_db SALES_DB
Abilitazione della colonna XML e memorizzazione del documento:
In questa lezione, viene abilitata una colonna per XML Extender e viene
memorizzato un documento XML nella colonna. Per queste attività, sarà
necessario:
1. Memorizzare la DTD nel repository di DTD.
2. Creare un file DAD per la colonna XML.
3. Creare la tabella SALES_TAB.
4. Aggiungere la colonna di tipo XML.
5. Abilitare la colonna XML.
6. Visualizzare la colonna e le tabelle laterali.
7. Indicizzare le tabelle laterali per la ricerca strutturale.
8. Memorizzare il documento XML.
9. Interrogare il documento XML.
Memorizzazione della DTD nel repository DTD:
È possibile utilizzare una DTD per convalidare i dati XML in una colonna XML.
XML Extender crea una tabella nel database abilitato per XML, detta DTD_REF. La
tabella è nota come repository DTD ed è disponibile per memorizzare le DTD.
Quando si convalidano i documenti XML, è necessario memorizzare la DTD in
questo repository. La DTD per questa lezione si trova in
install_dxx/samples/extenders/db2xml/dtd/getstart.dtd
Capitolo 1. Introduzione 11
dove install_dxx è la directory in cui è stato installato DB2 XML Extender.
Inserire la DTD nel repository DTD utilizzando uno dei seguenti metodi:
v Immettere il seguente comando SQL INSERT, tutto sulla stessa riga:
DB2 CONNECT TO SALES_DB
INSERT into DB2XML.DTD_REF values
(’install_dxx/samples/extenders/db2xml/dtd/getstart.dtd,
DB2XML.XMLClobFromFile
(’install_dxx/samples/extenders/db2xml/dtd/getstart.dtd),
0, ’user1’, ’user1’, ’user1’)
v Eseguire il seguente file di comandi per inserire la DTD:
getstart_insertDTD.cmd
Creazione di un file DAD per la colonna XML:
In questa sezione viene descritto come creare un file DAD per la colonna XML. Nel
file DAD, viene specificato che il metodo di accesso e memorizzazione che si
utilizza è una colonna XML. Nel file vengono definite le tabelle laterali e le
colonne per l’indicizzazione.
Nelle seguenti operazioni, gli elementi nel DAD sono detti tag e gli elementi della
struttura di documenti XML sono detti elementi. Per creare un file DAD da
utilizzare con la colonna XML:
1. Aprire un editor di testo e denominare il file getstart_xcolumn.dad
2. Creare l’intestazione del file DAD con le dichiarazioni XML e DOCTYPE.
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "/install_dxx/samples/DB2XML/dtd/dad.dtd ">
Il file DAD è un documento XML. È necessario includere le dichiarazioni XML.
Le tag XML sono sensibili al maiuscolo/minuscolo.
3. Inserire le tag di inizio e di fine (<DAD> e </DAD>) per il documento. Tutte le
altre tag si trovano all’interno di queste tag.
<DAD>
.
.
.
</DAD>
4. Inserire le tag di inizio e di fine (<DTDID> e </DTDID>) con un ID DTD per
specificare un DTD se il documento verrà convalidato:
<dtdid>install_dxx/samples/extenders/db2xml/dtd/getstart.dtd</dtdid>
Verificare che questa stringa corrisponda al valore utilizzato come valroe del
primo parametro quando si inserisce la DTD nella tabella del repository DTD.
Ad esempio, il percorso che si utilizza per DTDID potrebbe essere differente
dalla stringa inserita nella tabella di riferimenti a DTD se si utilizza un’unità di
sistema differente.
5. Inserire le tag di inizio e di fine (<validation> e </validation>) e una parola
chiave YES o NO per indicare se si desidera che XML Extender convalidi la
struttura di documenti XML utilizzando la DTD inserita nella tabella di
riferimenti a DTD. Ad esempio:
<validation>YES</validation>
Il valore di <validation> non è sensibile al maiuscolo/minuscolo.
6. Inserire le tag di inizio e di fine (<Xcolumn> e </Xcolumn>) per specificare che
il metodo di memorizzazione è la colonna XML.
12 XML Extender - Amministrazione e programmazione
7. Creare le tabelle laterali. Per ogni tabella laterale che si desidera creare:
a. Inserire le tag di inizio e di fine (<table> e </table>) per ogni tabella che
deve essere generata e specificare il nome della tabella laterale tra doppie
virgolette utilizzando l’attributo ″name=″ riportato di seguito:
<Xcolumn>
<table name="order_side_tab">
</table>
<table name="part_side_tab">
</table>
<table name="ship_side_tab">
</table>
</Xcolumn>
b. All’interno delle tag table, inserire una tag <column> per ogni colonna che si
desidera sia contenuta nella tabella laterale. Ogni colonna ha quattro
attributi: name, type, path e multi_occurrence:
name Specifica il nome della colonna da creare nella tabella laterale.
type Indica il tipo di dati nella tabella laterale per ogni elemento o
attributo indicizzato.
path Specifica il percorso di posizione nel documento XML per ogni
elemento o attributo da indicizzare.
multi_occurrence
Indica se l’elemento o l’attributo a cui fa riferimento l’attributo path
può essere presente più di una volta nel documento XML. I valori
possibili per multi_occurrence sono YES o NO. Se il valore è NO,
allora è possibile inserire più di una tag column nella tabella
laterale. Se invece il valore è YES, è possibile inserire soltanto una
tag column.<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>
8. Verificare di aver inserito le tag di fine necessarie:
v Una tag </Xcolumn> di chiusura dopo l’ultima tag </table>
v Una tag </DAD> di chiusura dopo la tag </Xcolumn>9. Salvare il file con il seguente nome:
getstart_xcolumn.dad
Capitolo 1. Introduzione 13
È possibile confrontare il file appena creato con il file di esempio,
install_dxx/samples/extenders/db2xml/dad/getstart_xcolumn.dad . Questo file è
la copia operativa del file DAD richiesto per abilitare la colonna XML e creare le
tabelle laterali. I file di esempio contengono i riferimenti ai file che utilizzano
percorsi assoluti. Controllare i file di esempio e modificare questi valori con i
percorsi delle proprie directory.
Creazione della tabella SALES_TAB:
In questa sezione viene creata la tabella SALES_TAB. Inizialmente, questa ha due
colonne con le informazioni sulla vendita per l’ordine. La tabella SALES_TAB è
descritta in Tabella 1 a pagina 8.
Per creare la tabella:
Immettere la seguente istruzione CREATE TABLE utilizzando uno dei seguenti
metodi:
v Immettere i seguenti comandi DB2:
DB2 CONNECT TO SALES_DB
DB2 CREATE TABLE SALES_TAB(INVOICE_NUM CHAR(6)
NOT NULL PRIMARY KEY,
SALES_PERSON VARCHAR(20))
v Eseguire il seguente file di comandi per creare la tabella:
getstart_createTabCol.cmd
Aggiunta della colonna di tipo XML:
Aggiungere una nuova colonna alla tabella SALES_TAB. Questa colonna conterrà il
documento XML inalterato generato precedentemente e deve essere di una UDT
XML. XML Extender fornisce più tipi di dati. In questa lezione, il documento verrà
memorizzato come XMLVARCHAR.
Per aggiungere la colonna di tipo XML:
Eseguire l’istruzione SQL ALTER TABLE utilizzando uno dei seguenti metodi:
v Immettere la seguente istruzione SQL:
DB2 ALTER TABLE SALES_TAB ADD ORDER DB2XML.XMLVARCHAR
v Eseguire il seguente file di comandi per modificare la tabella:
getstart_alterTabCol.cmd
Abilitazione della colonna XML:
Dopo aver creato la colona di tipo XML, è necessario 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:
v Determinare se si desidera creare una vista predefinita della colonna XML che
contiene il documento XML unito alle colonne delle tabelle laterali. È possibile
specificare la vista predefinita quando si abilita la colonna XML. In questa
lezione, verrà specificata una vista mediante il parametro -v.
v Determinare se si desidera specificare una chiave primaria come ID ROOT, il
nome della colonna della chiave primaria nella tabella dell’applicazione e un
identificativo univoco che associate tutte le tabelle laterali alla tabella
14 XML Extender - Amministrazione e programmazione
dell’applicazione. Se non si specifica una chiave primaria, XML Extender
aggiunge la colonna DXXROOT_ID alla tabella dell’applicazione e alle tabelle
laterali.
La colonna ROOT_ID viene utilizzata come chiave per unire l’applicazione e le
tabelle laterali, il che consente a XML Extender di aggiornare automaticamente le
tabelle laterali se viene aggiornato il documento XML. In questa lezione, viene
inviata la colonna della chiave primaria (INVOICE_NUM) con il parametro -r.
XML Extender utilizza quindi la colonna specificata come ROOT_ID e la
aggiunge alle tabelle laterali.
v Determinare se si desidera specificare un tablespace o utilizzare il tablespace
predefinito. In questa lezione, verrà utilizzato il tablespace predefinito.
Per abilitare la colonna per XML:
Eseguire il comando dxxadm enable_column utilizzando uno dei seguenti metodi:
Riga comandi:
v Immettere il seguente comando:
dxxadm enable_column SALES_DB SALES_TAB ORDER getstart_xcolumn.dad
-v SALES_ORDER_VIEW -r INVOICE_NUM
v Eseguire il seguente file di comandi per abilitare la colonna:
getstart_enableCol.cmd
XML Extender crea le tabelle laterali con la colonna INVOICE_NUM e crea la vista
predefinita.
Importante: non modificare in alcun modo le tabelle laterali. Gli aggiornamenti alle
tabelle laterali devono essere effettuati soltanto attraverso gli aggiornamenti al
documento XML stesso. XML Extender aggiornerà automaticamente le tabelle
laterali quando si aggiorna un documento XML nella colonna XML.
Visualizzazione della colonna e delle tabelle laterali:
Quando è stata abilitata la colonna XML, è stata creata una vista della colonna e
delle tabelle laterali XML. È possibile utilizzare questa vista quando si utilizza la
colonna XML.
Per visualizzare la colonna XML e le colonne delle tabelle laterali:
Immettere la seguente istruzione SQL SELECT dalla riga comandi:
SELECT * FROM SALES_ORDER_VIEW
La vista mostra le colonne nelle tabelle laterali, come specificato nel file
getstart_xcolumn.dad.
Indicizzazione delle tabelle laterali per la ricerca strutturale:
La creazione di indici sulle tabelle laterali consente di eseguire rapide ricerche
strutturali all’interno del documento XML. In questa sezione, vengono creati gli
indici sulle colonne delle chiavi nelle tabelle laterali che sono state create quando è
stata abilitata la colonna XML, ORDER. Il reparto dei servizi ha specificato le
colonne che i dipendenti interrogano più spesso. Tabella 3 a pagina 16 descrive tali
colonne che verranno indicizzate.
Capitolo 1. Introduzione 15
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:
Immettere i seguenti comandi CREATE INDEX SQL utilizzando uno dei seguenti
metodi:
Riga comandi:
v Immettere i seguenti comandi:
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)
v Eseguire il seguente file di comandi per creare gli indici:
getstart_createIndex.cmd
Memorizzazione del documento XML:
Dopo aver abilitato una colonna che contiene un documento XML e dopo aver
indicizzato le tabelle laterali, è possibile memorizzare il documento utilizzando le
funzioni fornite da XML Extender. Quando si memorizzano i dati in una colonna
XML, vengono utilizzate le funzioni di casting predefinite o le UDF di XML
Extender. Poiché sta per essere memorizzato un oggetto del tipo di base
VARCHAR in una colonna dell’UDT XML XMLVARCHAR, verrà utilizzata la
funzione di casting predefinita.
Per memorizzare il documento XML:
1. Aprire il documento XML install_dxx/samples/extenders/db2xml/xml/getstart.xml. Verificare che il percorso del file in DOCTYPE corrisponda all’ID
DTD specificato nella DAD quando è stata inserita la DTD nel repository. È
possibile verificare questa corrispondenza interrogando la tabella
DB2XML.DTD_REF e controllando l’elemento DTDID nel file DAD. Se si
utilizza una unità e una struttura di directory differente da quella predefinita, è
necessario modificare il percorso nella dichiarazione DOCTYPE in modo che
corrisponda alla struttura della directory.
2. Eseguire il comando SQL INSERT utilizzando uno dei seguenti metodi:
v Immettere il seguente comando SQL INSERT:
DB2 INSERT INTO SALES_TAB (INVOICE_NUM, SALES_PERSON, ORDER) VALUES
(’123456’, ’Sriram Srinivasan’, DB2XML.XMLVarcharFromFile
(’install_dxx/samples/extenders/db2xml/
/xml/getstart.xml’))
16 XML Extender - Amministrazione e programmazione
v Eseguire il seguente file di comandi per memorizzare il documento:
getstart_insertXML.cmd
Verificare che le tabelle siano state aggiornate. Eseguire le seguenti istruzioni
SELECT per le tabelle dalla riga comandi.
SELECT * FROM SALES_TAB
SELECT * FROM PART_SIDE_TAB
SELECT * FROM ORDER_SIDE_TAB
SELECT * FROM SHIP_SIDE_TAB
Interrogazione del documento XML:
È possibile ricercare il documento XML con una interrogazione diretta rispetto alle
tabelle laterali. In questo passo, verranno ricercati tutti gli ordini che hanno un
prezzo superiore a 2500.00.
Per interrogare le tabelle laterali:
Eseguire l’istruzione SQL SELECT utilizzando uno dei seguenti metodi:
v Immettere la seguente istruzione SQL 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"
v Eseguire il seguente file di comandi per eseguire una ricerca nel documento:
getstart_queryCol.cmd
La serie di risultati mostra i nomi delle persone addette alle vendite che hanno
venduto un elemento con un prezzo maggiore di 2500.00. Ad esempio:
SALES_PERSON
--------------------
Sriram Srinivasan
A questo punto è stato completato il supporto didattico per la memorizzazione di
documenti XML nelle tabelle di database DB2.
Argomenti correlati:
v “Lezioni del supporto didattico di XML Extender” a pagina 6
v “Introduzione a XML Extender” a pagina 3
v “Lezione: Composizione di un documento XML”
Lezione: Composizione di un documento XML
Questa lezione insegna come comporre un documento XML da dati DB2® esistenti.
Lo scenario:
L’attività consiste nell’acquisire informazioni in un database di ordine di acquisto
esistente, SALES_DB e nell’estrarre le informazioni richieste da tale database per
memorizzarle nei documenti XML. Il reparto dei servizi utilizzerà tali documenti
XML nella gestione delle lamentele e delle richieste dei clienti. Il reparto dei servizi
ha richiesto l’inclusione di dati specifici e ha fornito una struttura consigliata per i
documenti XML.
Capitolo 1. Introduzione 17
Utilizzando i dati esistenti, verrà composto un documento XML, getstart.xml, dai
dati nelle tabelle del database SALES_DB.
Per comporre un documento XML, si pianificherà e creerà un file DAD che associa
le colonne delle tabelle correlate a una struttura di documento XML che fornisce
un record dell’ordine di acquisto. Verrà creata una raccolta XML e le tabelle
verranno associate a una struttura XML e a un DTD. Tale DTD viene utilizzato per
definire la struttura del documento XML. È inoltre possibile utilizzarlo per
convalidare il documento XML composto nelle applicazioni.
I dati di database esistenti per il documento XML sono descritti nelle seguenti
tabelle. I nomi colonna con un asterisco sono colonne richieste dal reparto dei
servizi 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 comporre i documenti, è necessario
determinare la struttura del documento XML e in che modo essa corrisponde alla
struttura dei dati del database. Questa sezione fornisce una panoramica della
struttura del documento XML richiesta dal reparto dei servizi e del DTD utilizzato
per definire la struttura del documento XML. Questa sezione descrive in che modo
i dati delle colonne database sono associati ai dati nel documento XML composto.
Come determinare la struttura del documento:
18 XML Extender - Amministrazione e programmazione
La struttura del documento XML è stabilita dai requisiti delle persone che
utilizzeranno il documento XML risultante. In questo esempio, tali persone si
trovano nel reparto dei servizi. Questo reparto necessita di informazioni
sull’ordine. Ad esempio, numero d’ordine, cliente, parte e informazioni di
spedizione. È possibile ricavare tutti i dati dalle tabelle order_tab, part_tab e
ship_tab.
Dopo avere progettato la struttura del documento, viene creato un DTD per
descrivere la struttura del documento XML. Questa lezione fornisce un DTD.
Utilizzando le regole del DTD e la struttura gerarchica del documento XML, è
possibile creare una mappa gerarchica dei dati, come mostrato in Figura 1.
Associazione del documento XML alla relazione database:
Dopo avere progettato la struttura e creato il DTD, è necessario mostrare in che
modo la struttura del documento viene associata alle tabelle del database DB2 che
verranno utilizzate per inserire gli elementi e gli attributi. È possibile associare la
Figura 1. La struttura gerarchica del DTD e del documento XML
Capitolo 1. Introduzione 19
struttura gerarchica a colonne specifiche nelle tabelle relazionali, come mostrato in
Figura 2.
Questa figura utilizza i nodi per mostrare elementi, attributi e testo all’interno della
struttura del documento XML. Tali nodi vengono utilizzati nel file DAD e verranno
spiegati in maggiore dettaglio in seguito.
Utilizzare questa descrizione di relazione per creare un file DAD che definisca la
relazione tra i dati relazionali e la struttura del documento XML.
Per creare il file DAD di raccolta XML, è necessario comprendere in che modo il
documento XML corrisponde alla struttura database, come spiegato in Figura 2, in
modo da poter descrivere da quali tabelle e colonne la struttura del documento
XML deriva i dati per elementi e attributi. Tali informazioni verranno utilizzate per
creare il file DAD per la raccolta XML.
Script ed esempi:
Questa lezione fornisce una serie di script da utilizzare per configurare il proprio
ambiente. Tali script si trovano nella directory dxx_install/samples/extenders/db2xml/xml (dove dxx_install è la directory in cui sono stati installati i file XML
Extender)
Figura 2. Documento XML associato a colonne di tabelle relazionali
20 XML Extender - Amministrazione e programmazione
Gli script sono:
getstart_db.cmd
Crea il database e inserisce i dati in quattro tabelle.
getstart_prep.cmd
Collega il database alle procedure memorizzate di XML Extender.
getstart_stp.cmd
Esegue la procedura memorizzata per comporre la raccolta XML.
getstart_exportXML.cmd
Esporta il documento XML dal database per utilizzarlo in un’applicazione.
getstart_clean.cmd
Cancella l’ambiente del supporto didattico.
Configurazione dell’ambiente di lezione:
In questa sezione, si preparerà il database da utilizzare con XML Extender.
Verranno effettuate le seguenti operazioni:
1. Creare il database.
2. Abilitare il database.
Creazione del database:
In questa sezione, viene utilizzato un comando per configurare il database. Tale
comando crea il database SALES_DB, si collega ad esso, crea le tabelle in cui
inserire i dati i inserisce i dati.
Importante: se è stata completata la lezione della colonna XML e non è stato
cancellato l’ambiente, è possibile ignorare questo passaggio. Verificare se il
database SALES_DB è presente.
Per creare il database:
1. Passare alla directory dxx_install/samples/extenders/db2xml/xml/cmd, dove
dxx_install è la directory in cui sono stati installati i file XML Extender. I file di
esempio contengono riferimenti ai file che utilizzano nomi percorso assoluti.
Controllare i file di esempio e modificare questi valori con i percorsi delle
proprie directory.
2. In Windows, immettere il seguente comando in un prompt di comandi per
avviare il processore della riga comandi DB2:
DB2CMD
3. Immettere il seguente comando:
getstart_db.cmd
Abilitazione del database:
Per generare un documento XML dai dati relazionali nel database, è necessario
abilitare il database per XML Extender. Quando si abilita un database per XML,
XML Extender:
v Crea UDT (user-defined type), UDF (user-defined function) e procedure
memorizzate
v Crea e inserisce i dati nelle tabelle di controllo con i metadati necessari richiesti
da XML Extender.
v Crea lo schema DB2XML e assegna i privilegi necessari.
Capitolo 1. Introduzione 21
Importante: se è stata completata la lezione della colonna XML e non è stato
cancellato l’ambiente, è possibile ignorare questo passaggio.
Emettere il seguente script per abilitare il database SALES_DB:
getstart_prep.cmd
Questo script collega il database alle procedure memorizzate di XML Extender.
Inoltre esegue l’opzione del comando dxxadm che abilita il database SALES_DB.
Creazione del file DAD per la raccolta XML:
Dal momento che i dati esistono in più tabelle, verrà creata una raccolta XML, che
associa le tabelle al documento XML. La raccolta viene definita creando un file
DAD.
In questa sezione, viene creato lo schema di associazione nel file DAD che specifica
la relazione tra le tabelle e la struttura del documento XML.
Nelle seguenti operazioni, gli elementi nel DAD sono detti tag e gli elementi della
struttura di documenti XML sono detti elementi. Un esempio di file DAD simile a
quello creato si trova in dxx_install/samples/extenders/db2xml/dad/getstart_xcollection.dad.
Contiene alcune differenze rispetto al file generato nella procedura seguente. Se lo
si utilizza per la lezione, il file potrebbe essere diverso da quello del proprio
ambiente e potrebbero essere necessari degli aggiornamenti al file di esempio.
Per creare il file DAD per la composizione di un documento XML:
1. Dalla directory dxx_install/samples/extenders/db2xml/xml directory, aprire
un editor di testo e creare un file denominato getstart_xcollection.dad.
2. Creare l’intestazione DAD, utilizzando il seguente testo:
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "dxx_install/samples/extenders/db2xml/dtd/dad.dtd">
Change dxx_install nella directory in cui è stato installato DB2 XML
Extender.
3. Inserire le tag <DAD> </DAD>. Tutte le altre tag si trovano all’interno di
queste tag.
4. Specificare le tag <validation> </validation> per indicare se XML Extender
convalida la struttura del documento XML. Il documento XML viene
convalidato rispetto a DTD nella tabella di repository DTD. Questa lezione
non richiede un DTD e il valore è NO.
<validation>NO</validation>
Il valore delle tag <validation> non è sensibile al maiuscolo/minuscolo.
5. Utilizzare le tag <Xcollection></Xcollection> per definire il metodo di
memorizzazione e accesso come raccolta XML. Tali metodi definiscono che i
dati XML vengono memorizzati in una raccolta di tabelle del database DB2.
<Xcollection>
</Xcollection>
6. Dopo la tag <Xcollection>, fornire un’istruzione SQL per specificare le tabelle
e le colonne utilizzate per la raccolta XML. Questo metodo è chiamato
associazione ed è uno dei due modi per associare i dati relazionali alla
struttura del documento XML. Immettere la seguente istruzione:
22 XML Extender - Amministrazione e programmazione
<Xcollection>
<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(timestamep(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>
</Xcollection>
Questa istruzione SQL utilizza le seguenti linee guida durante l’utilizzo
dell’associazione SQL. Consultare Figura 2 a pagina 20 per informazioni sulla
struttura del documento.
v Le colonne vengono specificate in un ordine decrescente dalla gerarchia
della struttura del documento XML. Ad esempio, le colonne per gli elementi
ordine e cliente sono le prime, quelle per l’elemento parte sono le seconde e
quelle per la spedizione sono le terze.
v Le colonne per una sezione di ripetizione o non di ripetizione, del modello
che richiede i dati dal database si trovano nello stesso gruppo. Ogni gruppo
dispone di una colonna ID oggetto: ORDER_KEY, PART_KEY e SHIP_ID.
v La colonna ID dell’oggetto è la prima colonna in ciascun gruppo. Ad
esempio, O.ORDER_KEY precede le colonne relative all’attributo chiave e
p.PART_KEY precede le colonne per l’elemento Parte.
v La tabella SHIP_TAB non presenta una colonna condizionale a chiave
singola e perciò, la funzione integrata DB2 generate_unique viene utilizzata
per generare la colonna SHIP_ID.
v Le colonne di ID oggetto vengono quindi elencate in ordine decrescente in
un’istruzione ORDER BY. Le colonne in ORDER BY possono non essere
qualificate da alcuno schema e nome tabella e corrispondono ai nomi
colonna nella clausola SELECT. 7. Aggiungere le seguenti informazioni del prologo da utilizzare nel documento
XML composto. Se si desidera specificare un valore di codifica per
l’internazionalizzazione, aggiungere l’attributo ENCODING e il valore.
<prolog>?xml version="1.0"?</prolog>
Questo testo specifico è richiesto per tutti i file DAD.
8. Aggiungere le tag <doctype></doctype> da utilizzare nel documento XML
che si sta componendo. La tag <doctype> contiene il percorso al DTD
memorizzato nel client.
<doctype>!DOCTYPE Order SYSTEM
"dxx_install/samples/extenders/db2xml/dtd/getstart.dtd"</doctype>
9. Definire l’elemento root del documento XML utilizzando le tag
<root_node></root_node>. In root_node, specificare gli elementi e gli attributi
che compongono il documento XML.
10. Associare la struttura del documento XML alla struttura della tabella
relazionale del database DB2 utilizzando i tre seguenti tipi di nodi:
element_node
Specifica l’elemento nel documento XML. Ogni element_nodes può
avere element_nodes secondari.
attribute_node
Specifica l’attributo di un elemento nel documento XML.
Capitolo 1. Introduzione 23
text_node
Specifica il contenuto del testo dell’elemento e i dati della colonna in
una tabella relazionale per element_nodes di livello inferiore.Figura 2 a pagina 20 mostra la struttura gerarchica del documento XML e le
colonne della tabella database DB2 e indica i tipi di nodi utilizzati. Le caselle
ombreggiate indicano i nomi delle colonne database DB2 da cui verranno
estratti i dati per comporre il documento XML.
Per aggiungere ogni tipo di nodo, uno alla volta:
a. Definire una tag <element_node> per ogni elemento nel 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>
L’elemento secondario <Shipment> ha l’attributo multi_occurrence=YES.
Tale attributo viene utilizzato per elementi senza attributo, ripetuti nel
documento. L’elemento <Part> non utilizza l’attributo con più ricorrenze
perché ha l’attributo del colore che lo rende univoco.
b. Definire una tag <attribute_node> per ogni attributo nel documento XML.
Tali attributi vengono nidificati nell’element_node appropriato. Gli
attribute_node 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>
...
24 XML Extender - Amministrazione e programmazione
</element_node> <!-- end Part -->
</element_node> <!-- end Order -->
</root_node>
c. Per ogni nodo elemento di livello inferiore, specificare le tag <text_node>
che indicano che l’elemento XML contiene dati carattere da estrarre dal
database DB2 quando il documento viene composto.
<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_occurrence="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>
d. Per ogni nodo elemento di livello inferiore, definire una tag <column>. Tali
tag specificano da quale colonna estrarre i dati durante la composizione
del documento XML e si trovano, generalmente, nelle tag <attribute_node>
o <text_node>. Le colonne definite nella tag <column> devono essere
presenti 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">
Capitolo 1. Introduzione 25
<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_occurrence="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 di aver inserito le tag di fine necessarie:
v Una tag di chiusura </root_node> dopo l’ultima tag </element_node>.
v Una tag di chiusura </Xcollection> dopo la tag </root_node>.
v Una tag di chiusura </DAD> dopo la tag </Xcollection_node>.12. Salvare il file comegetstart_xcollection.dad.
È possibile confrontare il file creato con il file di esempio, dxx_install/samples/extenders/db2xml/dad/getstart_xcollection.dad . Questo file è la copia operativa
del file DAD richiesto per comporre il documento. Il file di esempio contiene i
percorsi e i nomi percorso dei file che potrebbe essere necessario modificare per
adattarli al proprio ambiente e consentirne la corretta esecuzione.
Nella propria applicazione, se si utilizzerà spesso una raccolta XML per comporre i
documenti, è possibile definire un nome raccolta abilitando la raccolta.
26 XML Extender - Amministrazione e programmazione
L’abilitazione della raccolta la registra nella tabella XML_USAGE e consente un
miglioramento delle prestazioni quando si specifica il nome raccolta (anziché il
nome del file DAD) durante l’esecuzione delle procedure memorizzate. In tali
lezioni, la raccolta non viene abilitata.
Composizione del documento XML:
In questa procedura, viene utilizzata la procedura memorizzata dxxGenXML() per
comporre il documento XML specificato dal file DAD. Questa procedura
memorizzata restituisce il documento come UDT XMLVARCHAR.
Per comporre il documento XML:
1. immettere il seguente comando:
getstart_stp.cmd
La procedura memorizzata compone il documento XML e lo memorizza nella
tabella RESULT_TAB.
Se si sta eseguendo XML Extender in un ambiente DB2 Enterprise Server
Edition con partizioni, verificare di avere creato una tabella dei risultati con la
chiave di partizionamento qualificata o in un tablespace all’interno di un
gruppo di nodi con un singolo nodo.
Per consultare gli esempi di procedure memorizzate che è possibile utilizzare in
questo passaggio, vedere i seguenti file:
v dxx_install/samples/extenders/db2xml/c/tests2x.sqc mostra come chiamare
la procedura memorizzata utilizzando SQL incorporato e genera il file
eseguibile tests2x, utilizzato da getstart_stp.cmd.
v dxx_install/samples/extenders/db2xml/cli/sql2xml.c mostra come chiamare
la procedura memorizzata utilizzando CLI.2. Esportare il documento XML dalla tabella a un file utilizzando uno dei seguenti
metodi per chiamare la funzione di richiamo XML Extender, Content():
v Immettere i seguenti comandi:
DB2 CONNECT TO SALES_DB
DB2 SELECT DB2XML.Content(DB2XML.xmlVarchar(doc),
’dxx_install/samples/extenders/db2xml/cmd/xml/getstart.xml
’) FROM RESULT_TAB
v Eseguire il seguente file di comandi per esportare il file:
getstart_exportXML.cmd
Suggerimento: questa procedura insegna come generare uno o più documenti
XML composti utilizzando la funzione della serie di risultati della procedura
memorizzata del database DB2. L’utilizzo di una serie di risultati consente di
utilizzare più righe per generare più documenti. Quando si genera ogni
documento, è possibile esportarlo in un file. Questo metodo è il modo più semplice
per dimostrare l’utilizzo delle serie di risultati. Per modi più efficaci di utilizzo
dati, consultare gli esempi CLI nel dxx_install/samples/extenders/db2xml/cli.
Conversione di un documento XML in un file HTML:
Per mostrare i dati dal documento XML in un browser, è necessario convertire il
documento XML in un file HTML utilizzando un foglio di stile e la funzione
XSLTransformToFile.
Utilizzare la seguente procedura per eseguire la conversione in un file HTML:
Capitolo 1. Introduzione 27
1. Generare un foglio di stile utilizzando un editor di testo e denominarlo
getstart.xsl:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head/>
<body>
...
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Per un esempio di tale file completato, consultare la seguente directory:
dxx_install/samples/extenders/db2xml/xslt/getstart.xsl
2. Per ogni elemento, creare una tag con il seguente formato:
<xsl:for-each select="xxxxxx">
Tale tag verrà utilizzata per le istruzioni di conversione. Creare una tag per
ogni elemento della gerarchia del documento XML. Ad esempio:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head/>
<body>
<xsl:for-each select="Order">
<xsl:for-each select="Customer">
<xsl:for-each select="Name | Email">
</xsl:for-each>
</xsl:for-each>
<xsl:for-each select="Part">
<xsl:for-each select="key | Quantity | ExtendedPrice | Tax">
</xsl:for-each>
<xsl:for-each select="Shipment">
<xsl:for-each select="ShipDate | ShipMode">
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
3. Per formattare il file HTML, utilizzare un elenco che mostri la gerarchia di
elementi XML per rendere i dati più leggibili. Creare ulteriori elementi di testo
per descrivere i dati. Ad esempio, è possibile che il file del foglio di stile sia
simile al seguente:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
28 XML Extender - Amministrazione e programmazione
<xsl:template match="/">
<html>
<head/>
<body>
<ol style="list-style:decimal outside">
<xsl:for-each select="Order">
<li> Orderkey : <xsl:value-of-select="@Key"/ <br/>
<xsl:for-each select="Customer">
<b>Customer</b><br/>
<xsl:for-each select="Name | Email">
<xsl:value-of select="name()"/>
<xsl:text> : </xsl:text>
<xsl:value-of select="."/>
<xsl:text>, </xsl:text>
</xsl:for-each>
</xsl:for-each>
<br/><br/>
<ol type="A">
<xsl:for-each select="Part">
<li><b>Parts</b><br/>
Color : <xsl:value-of select="@color"/>
<xsl:text>, </xsl:text>
<xsl:for-each select="key | Quantity | ExtendedPrice | Tax">
<xsl:value-of select="name()"/>
<xsl:text> : </xsl:text>
<xsl:value-of select="."/>
<xsl:text>, </xsl:text>
</xsl:for-each>
<br/><br/>
<ol type="a">
<xsl:for-each select="Shipment">
<li><b>Shipment</b><br/>
<xsl:for-each select="ShipDate | ShipMode">
<xsl:value-of select="name()"/>
<xsl:text> : </xsl:text>
<xsl:value-of select="."/>
<xsl:text>, </xsl:text>
</xsl:for-each>
</li>
</xsl:for-each>
</ol><br/>
</li>
</xsl:for-each>
</ol>
</li>
</xsl:for-each>
</ol>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
4. Utilizzare Xpath per modificare le tag <xsl:value-of select=″xxx″> con i dati del
documento XML.
Le tag di elementi sono <xsl:value-of select″.″>, dove il punto (″.″) viene
utilizzato per acquisire i dati dai normali elementi.
Le tag di attributo sono <xsl:value-of select=″@attributname″> , dove la e
commerciale (@) aggiunta dal nome attributo estrarrà il valore dell’attributo. È
possibile utilizzare <xsl:value-of select=″name()″> per acquisire il nome della
tag XML.
Capitolo 1. Introduzione 29
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head/>
<body>
<ol style="list-style:decimal outside">
<xsl:for-each select="Order">
<li> Orderkey : <xsl:value-of-select="@Key"/ <br/>
<xsl:for-each select="Customer">
<b>Customer</b><br/>
<xsl:for-each select="Name | Email">
<xsl:value-of select="name()"/>
<xsl:text> : </xsl:text>
<xsl:value-of select="."/>
<xsl:text>, </xsl:text>
</xsl:for-each>
</xsl:for-each>
<br/><br/>
<ol type="A">
<xsl:for-each select="Part">
<li><b>Parts</b><br/>
Color : <xsl:value-of select="@color"/>
<xsl:text>, </xsl:text>
<xsl:for-each select="key | Quantity | ExtendedPrice | Tax">
<xsl:value-of select="name()"/>
<xsl:text> : </xsl:text>
<xsl:value-of select="."/>
<xsl:text>, </xsl:text>
</xsl:for-each>
<br/><br/>
<ol type="a">
<xsl:for-each select="Shipment">
<li><b>Shipment</b><br/>
<xsl:for-each select="ShipDate | ShipMode">
<xsl:value-of select="name()"/>
<xsl:text> : </xsl:text>
<xsl:value-of select="."/>
<xsl:text>, </xsl:text>
</xsl:for-each>
</li>
</xsl:for-each>
</ol><br/>
</li>
</xsl:for-each>
</ol>
</li>
</xsl:for-each>
</ol>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
5. Salvare il foglio di stile.
6. Creare il file HTML in uno dei seguenti modi:
v Utilizzare la funzione XSLTransformToFile:
30 XML Extender - Amministrazione e programmazione
SELECT DB2XML.XSLTransformToFile( CAST(doc AS CLOB(4k)),
’dxx_install\samples\xslt\getstart.xsl’,
’dxx_install\samples\html\getstart.html’)
FROM RESULT_TAB
v Utilizzare il seguente comando:
getstart_xslt.cmd
Il file di output può essere scritto solo su un file system accessibile al server di
database DB2.
Cleanup dell’ambiente del supporto didattico:
Se si desidera eseguire il cleanup dell’ambiente di lezione, è possibile effettuare
uno dei seguenti script o immettere i comandi dalla riga comandi per:
v Disabilitare la colonna XML, ORDER.
v Eliminare le tabelle create nelle lezioni.
v Eliminare il DTD dalla tabella di repository DTD.
Il database SALES_DB non è stato disabilitato o eliminato; è ancora disponibile per
l’uso con XML Extender. È possibile che si ricevano dei messaggi di errore se non
sono state completate entrambe le lezioni in questa sezione. È possibile ignorare
tali errori.
Per eseguire il cleanup dell’ambiente del supporto didattico:
Eseguire il file del comando di cleanup utilizzando uno dei seguenti metodi:
v immettere il seguente comando:
getstart_clean.cmd
v Per disabilitare il database, è possibile immettere il seguente comando di XML
Extender dalla riga comandi:
dxxadm disable_db SALES_DB
Questo comando elimina le tabelle di controllo gestione, DTD_REF e
XML_USAGE e rimuove le funzioni e gli UDF forniti da XML Extender.
v Per eliminare il database, è possibile immettere il seguente comando dalla riga
comandi:
db2 drop database SALES_DB
Questo comando elimina SALES_DB.
Argomenti correlati:
v “Lezioni del supporto didattico di XML Extender” a pagina 6
v “Introduzione a XML Extender” a pagina 3
v “Lezione: Memorizzazione di un documento XML in una colonna” a pagina 7
Capitolo 1. Introduzione 31
32 XML Extender - Amministrazione e programmazione
Parte 2. Amministrazione
Questa parte descrive come eseguire attività di gestione per XML Extender.
© Copyright IBM Corp. 1999 - 2006 33
34 XML Extender - Amministrazione e programmazione
Capitolo 2. Amministrazione
Strumenti di gestione per XML Extender
Gli strumenti di gestione di XML Extender consentono di abilitare il database e le
colonne delle tabelle per XML e di associare i dati XML alle strutture relazionali
DB2®. Per utilizzare gli strumenti di gestione XML Extender, è necessario disporre
dell’autorizzazione DBADM.
XML Extender fornisce i seguenti strumenti per completare le attività di gestione:
v Il wizard di gestione di XML Extender fornisce un’interfaccia utente grafica per
le attività di gestione.
v Il comando dxxadm fornisce un’opzione della riga comandi per le attività di
gestione.
v Le procedure memorizzate di gestione di XML Extender consentono all’utente di
richiamare i comandi di gestione da un programma.
Preparazione alla gestione di XML Extender
Per eseguire XML Extender, è necessario installare il seguente software.
Software richiesto: XML Extender richiede DB2® Database Versione 9.1.
Software facoltativo:
v Per una ricerca di testo strutturale, DB2 Database Net Search Extender Versione
9.1, disponibile con DB2 Database Versione 9.1
v Per il wizard di gestione XML Extender:
– DB2 Database Java Database Connectivity (JDBC)
– SDK 1.1.7 o successivo o JRE 1.1.1, disponibile con il Centro di controllo DB2
– JFC 1.1 con Swing 1.1, disponibile con il Centro di controllo DB2
Dopo aver installato XML Extender, è necessario completare le seguenti attività:
v Collegare XML Extender al DB2.
È necessario collegare XML Extender a tutti i database. Per un esempio fare
riferimento a:
install_dxx/samples/extenders/db2xml/cmd/getstart_prep.cmd
v Visualizzare le istruzioni di installazione.
v Creare un database per l’accesso XML.
Migrazione di XML Extender da versioni o release precedenti
Se si utilizza una versione precedente di DB2® XML Extender, è necessario migrare
ogni server di abilitato per XML Extender prima di utilizzare il database abilitato
per XML esistente con XML Extender Versione 9.1.
Il programma di migrazione di XML Extender apporta le modifiche richieste
perché i dati esistenti possano utilizzare DB2 Versione 9.1.
© Copyright IBM Corp. 1999 - 2006 35
Nota: dxxEnableColl viene ridernominato in dxxEnableCollection, e
dxxDisableColl viene ridenominati in dxxDisableCollection. Viene anche
aggiunta una procedura, memorizzata, db2xml.dxxDisableDB.
Quando si richiamano le procedure memorizzate, utilizzare un punto (.) invece che
un punto esclamativo (!) nel nome della procedura. Ad esempio, utilizzare
db2xml.dxxEnableColumn invece di db2xml!dxxEnableColumn.
Procedura:
Per migrare un server di abilitato per XML e le colonne abilitate per XML:
1. Installare DB2 Versione 9.1 e selezionare il componente XML Extender.
2. Dalla riga comandi DB2, immettere:
db2 connect to nome_database
db2 bind @dxxMigv.lst
dxxMigv nome_database
Un errore in questa operazione di migrazione può provocare problemi e risultati
non prevedibili come un errore durante la disabilitazione e l’impossibilità di
accedere a nuove UDF.
Panoramica sulla gestione di XML Extender
XML Extender fornisce tre metodi di gestione: il comando di gestione, le procedure
memorizzate e il wizard di gestione.
v Il comando di gestione, dxxadm, fornisce le opzioni per le varie attività di
gestione.
v Le attività di gestione possono essere eseguite richiamando le procedure
memorizzate per l’amministrazione da un programma.
v Il wizard di gestione XML Extender guida l’utente attraverso le attività di
gestione. È possibile utilizzarlo da una stazione di lavoro client.
Wizard di gestione di XML Extender
Le attività di gestione di XML Extender consistono nell’abilitare o disabilitare i
database e le colonne delle tabelle per XML Extender, creando raccolte di colonne
delle tabelle associate alle strutture di documenti XML e importando quindi i DTD
nel database. È possibile utilizzare il wizard XML Extender per completare tali
attività di gestione. Avviare il wizard con il comando dxxadmin da un prompt dei
comandi.
Dopo aver installato DB2 XML Extender, seguire le istruzioni riportate nel file
readme installato nel seguente percorso:
install_dxx/db2xml/adm_gui/readme.htm
Metodi di accesso e memorizzazione
XML Extender fornisce due metodi di accesso e memorizzazione per utilizzare
DB2® come repository XML: la colonna XML e la raccolta XML. È necessario
decidere quali sono i metodi che meglio si adattano alle necessità dell’applicazione
per accedere e modificare i dati XML.
36 XML Extender - Amministrazione e programmazione
colonna XML
Memorizza e richiama interi documenti XML come dati DB2. I dati XML
sono rappresentati da una colonna XML.
raccolta XML
Decompone i documenti XML in una raccolta di tabelle relazionali o
devono essere composti in documenti XML da una raccolta di tabelle
relazionali.
La natura dell’applicazione determina il metodo di accesso e memorizzazione più
adatto e come strutturare i dati XML.
Il file DAD viene utilizzato per associare i dati XML con le tabelle DB2 mediante
questi due metodi. Figura 3 mostra il modo in cui il file DAD specifica i metodi di
accesso e memorizzazione.
Il file DAD definisce il percorso di file quali la DTD e specifica il modo in cui la
struttura di documenti XML si collega ai dati DB2. Inoltre, definisce il metodo di
accesso e memorizzazione da utilizzare con l’applicazione.
Argomenti correlati:
v “Quando utilizzare il metodo di raccolta XML” a pagina 38
v “Quando utilizzare il metodo delle colonne XML” a pagina 38
Riferimenti correlati:
v “Panoramica sulle funzioni di memorizzazione in XML Extender” a pagina 136
Figura 3. Il file DAD associa la struttura di documenti XML a una struttura di dati relazionali
DB2 e specifica il metodo di accesso e memorizzazione.
Capitolo 2. Amministrazione 37
Quando utilizzare il metodo delle colonne XML
Utilizzare le colonne XML in uno dei seguenti casi:
v I documenti XML esistono già o provengono da un’origine esterna e si desidera
memorizzare i documenti nel formato XML nativo. Si desidera memorizzare i
documenti in DB2® in modo da garantire integrità, archiviazione e controllo.
v I documenti XML vengono letti frequentemente, ma non vengono aggiornati.
v Si desidera utilizzare i tipi di dati del nome file per memorizzare i documenti
XML (esterni al database DB2) sul file system locale e remoto e utilizzare il
database DB2 per operazioni di ricerca e di gestione.
v È necessario eseguire ricerche di intervallo in base ai valori di elementi o
attributi XML e si conoscono gli elementi o gli attributi che verranno utilizzati di
frequente negli argomenti di ricerca.
v I documenti hanno elementi con blocchi di testo di grosse dimensioni e si
desidera utilizzare DB2 Text Extender per la ricerca di testo strutturale lasciando
inalterato il resto del documento.
Quando utilizzare il metodo di raccolta XML
Utilizzare le raccolte XML in uno dei seguenti casi:
v Sono presenti dati nelle tabelle relazionali e si desidera comporre documenti
XML in base a un determinato DTD.
v Sono presenti documenti XML che devono essere memorizzati con le raccolte di
dati che si associano alle tabelle relazionali.
v Si desidera creare viste differenti dei dati relazionali utilizzando schemi di
associazione differenti.
v Sono presenti documenti XML che provengono da altre origini dati. Sono
importanti i dati ma non le tag e si desidera memorizzare i dati nel database,
garantendo una certa flessibilità per decidere se memorizzare i dati nelle tabelle
nuove o in quelle esistenti.
Pianificazione di colonne XML
Prima di iniziare a lavorare con XML Extender per memorizzare i propri
documenti, è necessario comprendere la struttura del documento XML in modo da
poter determinare come indicizzare gli elementi e gli attributi nel documento.
Quando si pianifica il modo in cui indicizzare il documento, è necessario
determinare:
v Il tipo definito dall’utente XML in cui verrà memorizzato il documento XML
v Gli elementi e gli attributi XML che verranno ricercati frequentemente
dall’applicazione, in modo che il relativo contenuto possa essere memorizzato in
tabelle laterali e indicizzato per migliorare le prestazioni
v Se convalidare i documenti XML nella colonna con un DTD
v La struttura delle tabelle laterali e come verranno indicizzate
Tipi di dati XML per le colonne XML
XML Extender fornisce tipi XML definiti dall’utente utilizzati per definire una
colonna per contenere i documenti XML. Questi tipi di dati sono descritti in
Tabella 4 a pagina 39.
38 XML Extender - Amministrazione e programmazione
Tabella 4. Gli UDT di XML Extender
Colonna tipo definita
dall’utente
tipo di dati di origine Descrizione dell’utilizzo
XMLVARCHAR VARCHAR(varchar_len) Memorizza un intero
documento XML come tipi di
dati VARCHAR all’interno di
DB2®. Utilizzato per
documenti piccoli (meno di
3K) che vengono memorizzati
in DB2.
XMLCLOB CLOB(clob_len) Memorizza un intero
documento XML come un
tipo di dati CLOB all’interno
di DB2. Utilizzato per
documenti grandi (più grandi
di 3K) che vengono
memorizzati in DB2.
XMLFILE VARCHAR(512) Memorizza il nome del file di
un documento XML in DB2 e
memorizza il documento
XML in una locale del file nel
server DB2. Utilizzato per
documenti memorizzati al di
fuori del DB2.
Elementi e attributi da indicizzare per colonne XML
Una volta compresa la struttura del documento XML e i requisiti della relativa
applicazione, è possibile determinare quali elementi e attributi verranno ricercati o
estratti più frequentemente o quelli che avranno il costo più alto per effettuare una
query. Il file DAD per una colonna XML può associare i percorsi della posizione di
ogni elemento e attributo in tabelle relazionali (tabelle laterali) che contengono tali
oggetti. Le tabelle laterali vengono quindi indicizzate.
Ad esempio, Tabella 5 mostra un esempio di tipi di dati e percorsi della posizione
degli elementi e attributi dallo scenario Introduzione per le colonne XML. I dati
sono specificati come informazioni da ricercare frequentemente e i percorsi della
posizione indicano gli elementi e gli attributi che contengono i dati. E’ possibile
che il file DAD associ questi percorsi della posizione alle tabelle laterali.
Tabella 5. Elementi e attributi da ricercare
Dati Percorso della posizione
chiave ordine /Ordine/@chiave
cliente /Ordine/Cliente/Nome
prezzo /Ordine/Parte/Prezzoesteso
data di consegna /Ordine/Parte/Consegna/Dataconsegna
Il file DAD file per le colonne XML
Per le colonne XML, il file DAD prima di tutto specifica come devono essere
indicizzati i documenti memorizzati in una colonna XML. Il file DAD specifica un
DTD da utilizzare per convalidare i documenti inseriti nella colonna XML. La
dimensione di questo file può essere superiore ai 2 GB.
Capitolo 2. Amministrazione 39
Il file DAD per le colonne XML fornisce un’associazione di ogni dato XML che
deve essere memorizzato nelle tabelle laterali per l’indicizzazione.
Per specificare il metodo di accesso e memorizzazione della colonna XML, si
utilizza la tag <Xcolumn> nel file DAD. La tag specifica <Xcolumn> che i dati
XML vengono memorizzati e richiamati come documenti XML interi nelle colonne
del database DB2 abilitate per i dati XML.
Una colonna XML abilitata appartiene al UDT di XML Extender. Le applicazioni
possono includere la colonna in qualsiasi tabella dell’utente. Si accede ai dati della
colonna XML principalmente attraverso istruzioni SQL e UDF di XML Extender.
Argomenti correlati:
v “Pianificazione di tabelle laterali” a pagina 57
Pianificazione per le raccolte XML
Quando si pianificano le raccolte XML, è necessario avere diverse considerazioni
per comporre i documenti dai dati DB2®, decomponendo il documento XML in
dati relazionali o entrambi. Le seguenti sezioni indirizzano i problemi di
pianificazione per le raccolte XML e le considerazioni sulla composizione o
decomposizione di indirizzi.
Convalida
Una volta selezionato un metodo di accesso e di memorizzazione, è possibile
determinare se convalidare i dati. Convalidare i dati XML utilizzando DTD o uno
schema. L’utilizzo di DTD o uno schema da convalidare garantisce che il
documento XML è valido.
Per eseguire la convalida mediante DTD, è possibile che sia necessario avere DTD
nel repository XML Extender.
Importante: stabilire se convalidare i dati XML prima di inserire i dati XML in
DB2. XML Extender non convalida i dati già inseriti in DB2.
Considerazioni:
v È possibile utilizzare solo un DTD per la composizione.
v È possibile utilizzare più schemi per la composizione.
v Se non si sceglie di convalidare un documento, il DTD specificato dal
documento XML non è elaborato. È importante che i DTD siano elaborati per
risolvere le entità ed i valori predefiniti di attributi anche quando sono elaborati
i frammenti del documento che non possono essere convalidati.
File DAD per le raccolte XML
Per le raccolte XML, il file DAD associa la struttura del documento XML in tabelle
del database DB2 da cui si compone il documento o dove viene decomposto il
documento.
Ad esempio, se si ha un elemento denominato <Tax> nel documento XML,
potrebbe essere necessario associare <Tax> a una colonna denominata TAX.
Definire la relazione tra i dati i dati XML e i dati relazionali in DAD.
Specificare il nome file DAD quando si abilita una raccolta o quando viene
utilizzato il file DAD nelle procedure memorizzate della raccolta XML. Se si decide
40 XML Extender - Amministrazione e programmazione
di convalidare i documenti XML con un file DTD, il file DAD può essere associato
a tale DTD. Se utilizzato come parametro di input delle procedure memorizzate
XML Extender, il file DAD ha un tipo di dati CLOB. La dimensione di questo file
può essere fino a 100 KB.
Per specificare il metodo di accesso e di memorizzazione della raccolta XML,
utilizzare la tag nel file DAD. La tag <Xcollection> specifica che i dati XML devono
essere decomposti dai documenti XML in una raccolta di tabelle relazionali o
composti in documenti XML da una raccolta di tabelle relazionali.
Una raccolta XML è un nome virtuale per una serie di tabelle relazionali che
contiene i dati XML. Le applicazioni consentono una raccolta XML di qualsiasi
tabelle utente. Queste tabelle utente possono essere tabelle di dati aziendali
esistenti oppure tabelle create recentemente da XML Extender.
Il file DAD specifica le associazioni tra gli elementi o gli attributi del documento
XML e le colonne delle tabelle. Esso utilizza i seguenti tipi di nodo per specificare
tali associazioni:
root_node
Specifica il nodo root del documento.
element_node
Identifica un elemento, che può essere l’elemento root o un elemento
secondario.
text_node
Rappresenta il testo CDATA di un elemento.
attribute_node
Rappresenta un attributo di un elemento.
Figura 4 a pagina 42 mostra un frammento dell’associazione utilizzata in un file
DAD. I nodi associano il contenuto dei documenti XML alle colonne delle tabelle
in una tabella relazionale.
Capitolo 2. Amministrazione 41
Nella figura precedente, le prime due colonne dell’istruzione SQL sono associate
ad un attributo e ad una colonna.
Schemi di associazione per raccolte XML
Se si utilizza una raccolta XML, è necessario selezionare uno schema di associazione
che definisce come i dati XML sono rappresentati in un database relazionale.
Poiché le raccolte XML devono corrispondere alla struttura gerarchica di
documenti XML con una struttura relazionale, è necessario comprendere le
differenze tra le due strutture. Figura 5 a pagina 43 mostra il modo in cui la
struttura gerarchica può essere associata alle colonne delle tabelle relazionali.
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "install_dxx/samples/extenders/db2xml/dtd/dad.dtd">
<DAD>
...
<Xcollection>
<SQL_stmt>
SELECT order_key, customer, part_key, color, qty
FROM order_tab o, part_tab p
WHERE order_key = 1 AND p.order_key = o.order_key
ORDER BY order_key
</SQL_stmt>
<prolog>?xml version="1.0"?</prolog>
<doctype>!DOCTYPE Order SYSTEM "dxx_install/samples/extenders/db2xml/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 l’elemento
e l’attributo sono associati
</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>
Figura 4. Le definizioni di nodo in un file DAD per una raccolta XML
42 XML Extender - Amministrazione e programmazione
XML Extender utilizza uno schema di associazione quando si compongono o si
decompongono documenti XML utilizzando i dati relazionali che si trovano in più
tabelle relazionali. Prima di creare il file DAD, è necessario considerare come i dati
XML sono associati alla raccolta XML.
Tipi di schemi di associazione
Lo schema di associazione viene specificato nell’elemento <Xcollection> del file
DAD. XML Extender fornisce due tipi di schemi di associazione: associazione SQL e
associazione del database relazionale (RDB_node).
associazione SQL
Consente un’associazione diretta dai dati relazionali ai documenti XML
mediante una semplice istruzione SQL. L’associazione SQL è utilizzata solo
per la composizione; non viene utilizzata per la decomposizione.
L’associazione SQL viene definita con l’elemento SQL_stmt nel file DAD. Il
contenuto dell’elemento SQL_stmt è una valida istruzione SQL. L’elemento
SQL_stmt associa le colonne nella clausola SELECT agli elementi XML o
attributi utilizzati nel documento XML. I nomi di colonna nella clausola
SELECT dell’istruzione SQL consentono di definire il valore di
attribute_node o il contenuto di text_node. La clausola FROM definisce le
tabelle che contengono i dati; la clausola WHERE specifica la condizione
join e search.
Figura 5. Struttura di documenti XML associata a colonne di tabelle relazionali
Capitolo 2. Amministrazione 43
L’associazione SQL consente agli utenti del database DB2 di associare i dati
mediante SQL. Quando si utilizza l’associazione SQL, è necessario poter
unire tutte le tabelle in una istruzione SELECT per formare
un’interrogazione. Se una istruzione SQL non è sufficiente, provare a
utilizzare l’associazione RDB_node. Per collegare tutte le tabelle, è
preferibile utilizzare una relazione tra chiave primaria e chiave esterna tra
le tabelle.
associazione RDB_node
Definisce l’ubicazione del contenuto di un elemento XML o il valore di un
attributo XML in modo tale che XML Extender può determinare dove
memorizzare o richiamare i dati XML.
Questo metodo utilizza l’associazione RDB_node fornita da XML Extender,
che contiene una o più definizioni del nodo per le tabelle, colonne
facoltative e condizioni facoltative. Le tabelle e le colonne sono utilizzate
per definire come i dati XML sono memorizzati nel database. La
condizione specifica i criteri per la selezione dei dati XML o il modo con
cui unire le tabelle delle raccolte XML.
Per definire uno schema di associazione, creare un file DAD con un elemento
<Xcollection>. Figura 6 a pagina 45 mostra un frammento di un file DAD di
esempio con un’associazione SQL per una raccolta XML, che compone una serie di
documenti XML dai dati in tre tabelle relazionali.
44 XML Extender - Amministrazione e programmazione
XML Extender fornisce 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 segue le regole descritte in “Requisiti
dello schema di associazione”.
Requisiti dello schema di associazione
Le seguenti sezioni descrivono i requisiti per ogni tipo degli schemi di associazione
della raccolta XML.
Associazione dei requisiti dello schema per l’associazione SQL
In questo schema di associazione, è necessario specificare l’elemento
SQL_stmt nell’elemento DAD <Xcollection>. L’elemento SQL_stmt deve
contenere una singola istruzione SQL che può associare più tabelle
relazionali con la query predicate. In aggiunta, le seguenti clausole sono
obbligatorie:
v Clausola SELECT
– Assicura che il nome della colonna si a univoco. Se due tabelle hanno
lo stesso nome di colonna, utilizzare la parola chiave AS per creare un
nome alternativo per una delle due.
– Raggruppare le colonne della stessa tabella e utilizzare il livello
cronologico logico delle tabelle relazionali. Ciò significa che le colonne
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "dxx_install/samples/db2xml/dtd/dad.dtd">
<DAD>
<dtdid>dxx_install/samples/db2xml/dtd/dad/
getstart.dtd</dtdid>
<validation>YES</validation>
<Xcollection>
<SQL_stmt>
SELECT o.order_key, customer, p.part_key, quantity, price, tax, date,
ship_id, mode, comment
FROM order_tab o, part_tab p,
table(select substr(char(timestamp(generate_unique())),16)
as ship_id, date, node, from ship_tab) shipid
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 "dxx_install
/samples/db2xml/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>
Figura 6. Schema di associazione SQL
Capitolo 2. Amministrazione 45
sono raggruppate in base a come le tabelle sono associate alla
struttura cronologica del documento XML. Nella clausola SELECT, è
necessario che le colonne delle tabelle di livello più alto precedano le
colonne delle tabelle di livello più basso. Il seguente esempio
dimostra la relazione gerarchica tra le tabelle:
SELECT o.order_key, customer, p.part_key, quantity, price, tax,
ship_id, date, mode
In questo esempio, order_key e customer dalla tabella ORDER_TAB
hanno il livello di relazione superiore poiché si trovano in una
posizione superiore della struttura gerarchica del documento XML. Le
colonne ship_id, date e mode dalla tabella SHIP_TAB si trovano al
livello relazionale più basso.
– L’algoritmo di composizione utilizza le informazioni della chiave
candidata come un suggerimento per assistere l’utente durante
l’elaborazione. Utilizzare una chiave candidata a singola colonna
all’inizio di ogni livello di tabella della clausola select. Se questa
chiave non è disponibile in una tabella, la query ne deve generare una
per la tabella che utilizza un’espressione e la funzione integrata
personalizzata, generate_unique(). Le chiavi generate non devono
apparire nel documento di output, ma devono essere presenti nella
clausola SELECT. Nell’esempio precedente, o.order_key è la chiave
primaria per ORDER_TAB e part_key è la chiave primaria per
PART_TAB. Si trovano all’inizio del relativo gruppo di colonne che
devono essere selezionate. Poiché la tabella SHIP_TAB non dispone di
una chiave primaria, una deve essere generata, in tal caso, ship_id.
Questa chiave primaria viene elencata come prima colonna per il
gruppo tabella SHIP_TAB. Utilizzare la clausola FROM per generare
la colonna della chiave primaria, come mostrato nel seguente
esempio.v Clausola FROM
– Utilizzare un’espressione di tabella e la funzione integrata,
generate_unique(), per generare una singola chiave per le tabelle che
non hanno una singola chiave primaria. Ad esempio:
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, una singola chiave candidata di colonna è
generata con la funzione, generate_unique() e viene fornito un alias
definito ship_id.
– Utilizzare un nome alias quando necessario per distinguere una
colonna. Ad esempio, è possibile utilizzare o per ORDER_TAB, p per
PART_TAB e s per SHIP_TAB.v Clausola WHERE
– Specificare la condizione join che viene associata alle tabelle della
raccolta. Ad esempio:
WHERE p.price > 2500.00 AND s.date > ’2003-06-01’ AND
p.order_key = o.order_key AND s.part_key = p.part_key
– Specificare ogni altra condizione di ricerca nel predicato. E’ possibile
utilizzare ogni predicato valido.v clausola ORDER BY
– Definire la clausola ORDER BY alla fine dell’elemento SQL_stmt.
46 XML Extender - Amministrazione e programmazione
– Assicurarsi che i nomi della colonna corrispondano ai nomi della
colonna nella clausola SELECT.
– Elencare le chiavi candidate della singola colonna nell’ordine del
livello gerarchico delle tabelle corrispondenti.
– Conservare l’ordine decrescente della gerarchia delle entità. La
colonna specificata nella clausola ORDER BY deve essere la prima
colonna elencata per ogni entità. Il mantenimento dell’ordine assicura
che i documenti XML che devono essere generati non contengano
duplicati errati.
– Non qualificare le colonne nella clausola ORDER BY da un nome
tabella o schema.
Sebbene l’elemento SQL_stmt dispone di requisiti precedenti, è più potente
poiché è possibile specificare qualsiasi predicato nella clausola WHERE se
l’espressione nel predicato utilizza le colonne nelle tabelle.
Requisiti dello schema di associazione per l’associazione RDB_node
Quando si utilizza questo metodo di associazione, non utilizzare l’elemento
SQL_stmt nell’elemento <Xcollection> del file DAD. Utilizzare invece
l’elemento RDB_node come elemento secondario dell’elemento
element_node superiore e di ogni attribute_node e text_node.
v Elemento RDB_node per element_node superiore
L’elemento superiore element_node nel file DAD rappresenta l’elemento
root del documento XML. Specificare RDB_node per element_node
superiore in base a questi requisiti:
– I caratteri finali della riga sono consentiti nelle istruzioni della
condizione.
– Gli elementi di condizione possono fare riferimento al nome di una
colonna un numero illimitato di volte.
– Specificare tutte le tabelle associate ai documenti XML. Ad esempio,
la seguente associazione specifica tre tabelle in RDB_node di
element_node <Order>, che indica element_node superiore:
<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>
Non esistono limitazioni sull’ordine dei predicati dell’elemento
condition del nodo root.L’elemento condition può essere vuoto o
mancante solo se nella raccolta è presente solo una tabella.
– Se si effettua la decomposizione, o di abilita la raccolta XML
specificata dal file DAD, specificare una chiave primaria per ogni
tabella. La chiave primaria può essere costituita da una o più colonne,
e in quest’ultimo caso è detta chiave composta. La chiave primaria è
specificata aggiungendo una chiave di attributo all’elemento di tabella
di RDB_node. Quando una chiave composta viene fornita, l’attributo
chiave è specificato dai nomi delle colonne chiave separate da uno
spazio. Ad esempio:
<table name="part_tab" key="part_key price"/>
Capitolo 2. Amministrazione 47
Le informazioni specificate per la decomposizione sono ignorate
quando viene composto un documento.
– Utilizzare l’attributo orderBy per ricomporre documenti XML che
contengono gli elementi o attributi con più ricorrenze alla struttura
originale. Questo attributo consente di specificare il nome di una
colonna che sarà la chiave utilizzata per conservare l’ordine del
documento. L’attributo orderBy è parte dell’elemento della tabella nel
file DAD ed è un attributo opzionale.v Elemento RDB_node per ogni attribute_node e text_node
È necessario specificare RDB_node per ogni attribute_node e text_node,
che richiama la procedura memorizzata dalla tabella, colonna e nella
condizione query per reperire i dati. È necessario specificare i valori di
tabella e di colonna; il valore della condizione è facoltativo.
– Specificare il nome della tabella che contiene i dati della colonna. Il
nome della tabella deve essere incluso nell’elemento RDB_node
dell’elemento element_node superiore. In questo esempio, per
text_node dell’elemento <Price>, la tabella viene specificata come
PART_TAB.
<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>
– Specificare il nome della colonna che contiene i dati per il testo
dell’elemento. Nell’esempio precedente, la colonna è specificata come
PRICE.
– Specificare una condizione se si desidera generare i documenti XML
utilizzando la condizione della query. La sintassi consentita per
<condition> è la seguente:
- columnname
- operator
- literal
Nell’esempio sopra riportato, la condizione è specificata come price >
2500.00. Soltanto i dati che rispondono a tale condizione saranno
presenti nei documenti XML generati. La condizione deve essere una
clausola WHERE valida.
– Se si sta decomponendo un documento o se si abilita la raccolta XML
specificata dal file DAD, specificare il tipo di colonna per ogni
attribute_node e text_node. I tipi di colonna sono specificati
aggiungendo il tipo di attributo all’elemento della colonna. Ad
esempio:
<column name="order_key" type="integer"/>
Le informazioni specificate per la decomposizione sono ignorate
quando viene composto un documento.v Mantenere l’ordine top-down della gerarchia di entità. Verifica che i
nodi di elementi siano nidificati correttamente in modo che XML
Extender possa comprendere la relazione tra gli elementi durante la
48 XML Extender - Amministrazione e programmazione
composizione o la decomposizione. Ad esempio, utilizzando il seguente
file DAD, che non nidifica Shipment all’interno di Part:
<element_node name="Part">
...
<element_node name="ExtendedPrice">
...
</element_node>
...
</element_node> <!-- end of element Part -->
<element_node name="Shipment" multi_occurrence="YES">
<element_node name="ShipDate">
...
</element_node>
<element_node name="ShipMode">
...
</element_node>
</element_node> <!-- end of element Shipment-->
Potrebbe produrre un file XML in cui Part e Shipment sono elementi
secondari.
<Part color="black ">
<key>68</key>
<Quantity>36</Quantity>
<ExtendedPrice>34850.16</ExtendedPrice>
<Tax>6.000000e-2</Tax>
</Part>
<Shipment>
<ShipDate>1998-08-19</ShipDate>
<ShipMode>BOAT </ShipMode>
</Shipment>
Quindi è necessario disporre di un file DAD che nidifica Shipment
all’interno di Part:
<element_node name="Part">
...
<element_node name="ExtendedPrice">
...
</element_node>
...
<element_node name="Shipment" multi_occurrence="YES">
<element_node name="ShipDate">
...
</element_node>
<element_node name="ShipMode">
...
</element_node>
</element_node> <!-- end of element Shipment-->
</element_node> <!-- end of element Part -->
Che produce un file XML con Shipment come elemento secondario di
Part:
<Part color="black ">
<key>68</key>
<Quantity>36</Quantity>
<ExtendedPrice>34850.16</ExtendedPrice>
<Tax>6.000000e-2</Tax>
<Shipment>
<ShipDate>1998-08-19</ShipDate>
<ShipMode>BOAT </ShipMode>
</Shipment>
</Part>
Capitolo 2. Amministrazione 49
Con l’approccio dell’associazione RDB_node, non è necessario fornire
istruzioni SQL. Tuttavia, l’inserimento di condizioni query complesse
nell’elemento RDB_node può essere più difficile.
Requisiti della dimensione della tabella di decomposizione per
l’associazione del nodo RDB
La decomposizione utilizza l’associazione RDB_node per specificare il modo in cui
un documento XML viene decomposto in tabelle di database DB2 estraendo i
valori di elementi e attributi in righe delle tabelle. I valori di ogni documento XML
vengono memorizzati in una o più tabelle DB2. Ogni tabella può contenere un
massimo di 10240 righe decomposte da ogni documento. Ad esempio, se un
documento XML viene decomposto in cinque tabelle, ognuna di queste potrà avere
un massimo di 10240 righe per quel documento particolare.
L’utilizzo di elementi a più ricorrenze (elementi con percorsi delle posizioni che
possono essere presenti più di una volta nella struttura XML) influenza il numero
di righe, inserito per ogni documento. Ad esempio, un documento che contiene un
elemento <Part> presente 20 volte può essere decomposto come 20 righe in una
tabella. Quando si utilizzano elementi a più ricorrenze, tenere presente che è
possibile decomporre un numero massimo di 10240 righe in una tabella da un
singolo documento.
Argomenti correlati:
v “File DAD per le raccolte XML” a pagina 167
Attività correlate:
v “Memorizzazione di DTD nella tabella di repository” a pagina 52
Convalida automatica dei documenti XML
Dopo aver scelto un metodo di accesso e di memorizzazione, sia una colonna XML
che una raccolta XML, è possibile determinare se convalidare i documenti XML. E’
possibile inoltre convalidare i documenti XML composti dalle raccolte XML.
E’ possibile avere i relativi dati XML convalidati automaticamente specificando YES
per la convalida in un file DAD. Per avere un documento convalidato quando è
memorizzato in DB2®, è necessario specificare un DTD nell’elemento <dtdid> o
nella specifica <!DOCTYPE> nel documento originale. Per avere un documento
convalidato quando è composto da una raccolta XML in DB2, è necessario
specificare un DTD nell’elemento <dtdid> o nell’elemento <doctype> nel file DAD.
I seguenti fattori devono essere presi in considerazione quando si decide se
convalidare i relativi documenti.
v L’ID o schema DTD è utile solo se si decide di convalidare il documento XML.
Per convalidare il file DAD con uno schema, inserire le tag dello schema che
associano il file DAD il file dello schema. Ad esempio:
<schemabindings>
<nonamespacelocation location="path/schema_name.xsd"/>
</schemabindings>
v Non è necessario un DTD per memorizzare o archiviare documenti XML.
v Potrebbe essere necessario elaborare il DTD per impostare i valori dell’entità e
gli attributi predefiniti a prescindere da se si sceglie di convalidare.
50 XML Extender - Amministrazione e programmazione
v Se non specifica NO per la convalida nel file DAD, allora il file DTD specificato
dal documento XML non viene processato.
v Convalidare i relativi dati XML ha un impatto sulla prestazione.
Abilitare i server del database per XML
Prima di memorizzare o richiamare i documenti XML da DB2 con XML Extender, è
necessario abilitare il server del database per XML. XML Extender abilita il server
del database che si è connesso a, utilizzando l’istanza corrente.
Quando si abilita un server del database per XML, XML Extender effettua queste
attività:
v Crea tutti gli UDT (user-defined types), UDF (user-defined functions) e le
procedure memorizzate per XML Extender
v Crea e compila le tabelle di controllo con i metadati necessari che XML Extender
richiede
v Crea gli schemi DB2XML negli spazi della tabella definita dall’utente.
Il nome completo di una funzione XML è db2xml.function-name, dove db2xml è
un identificativo che fornisce un raggruppamento logico per gli oggetti SQL. E’
possibile utilizzare il nome completo ovunque in riferimento ad un UDF o ad un
UDT. E’ possibile inoltre, omettere il nome schema quando ci si riferisce ad un
UDF o ad un UDT; in questo caso, DB2 utilizza il percorso della funzione per
determinare il tipo di funzione o di dati.
v Assegna privilegi necessari alle tabelle di metadati.
Procedura:
E’ possibile abilitare un server del database con la procedura guidata di gestione o
dalla riga di comando. Per effettuare questa attività dalla riga di comando, digitare
dxxadm dalla riga di comando e specificare il server del database che si deve
abilitare.
Il seguente esempio abilita un server del database chiamato SALES_DB.
dxxadm enable_db SALES_DB
Per abilitare un server del database utilizzando la procedura guidata di
amministrazione, completare i seguenti passaggi:
1. Avviare la procedura guidata di gestione e fare clic su Abilita database dalla
finestra Launchpad.
Se un database del è già abilitato, il pulsante Disabilita database appare. Se il
database del è disabilitato, il pulsante Abilita database appare.
Quando il server del database è abilitato, viene visualizza nuovamente la
finestra LaunchPad.
Dopo aver abilitato un server del database, è possibile utilizzare UDT, UDF e
procedure memorizzate di XML Extender.
Argomenti correlati:
v “Migrazione di XML Extender da versioni o release precedenti” a pagina 35
Capitolo 2. Amministrazione 51
Creazione di una tabella XML
Tale attività è parte dell’attività più grande di definizione ed abilitazione di una
colonna XML.
Una tabella XML viene utilizzata per memorizzare i documenti XML intatti. Per
memorizzare interi documenti nel proprio database con DB2 XML Extender, è
necessario creare una tabella in modo che contenga una colonna con un UDT
(user-defined type) XML. DB2 XML Extender fornisce tre UDT per memorizzare i
relativi documenti XML come dati colonna. Questi UDT sono: XMLVARCHAR,
XMLCLOB e XMLFILE. Quando una tabella contiene una colonna di un tipo XML,
è possibile allora abilitare la tabella per XML.
E’ possibile creare una nuova tabella per aggiungere una colonna di tipo XML
utilizzando la procedura guidata di gestione o la riga di comando.
Procedura:
Per creare una tabella con una colonna di tipo XML utilizzando la riga di
comando:
Aprire il prompt dei comandi DB2 e digitare un’istruzione Crea tabella.
Ad esempio, in un’applicazione di vendita, potrebbe essere necessario memorizzare
un ordine di elementi formattato per XML in una colonna chiamata ORDER nella
tabella SALES_TAB. Questa tabella inoltre, presenta le colonne INVOICE_NUM e
SALES_PERSON. Poiché si tratta di un ordine piccolo, si memorizza l’ordine di
vendite utilizzando il tipo XMLVARCHAR. La chiave primaria è INVOICE_NUM.
La seguente istruzione CREATE TABLE crea una tabella con una colonna del tipo
XML:
CREATE TABLE sales_tab(
invoice_num char(6) NOT NULL PRIMARY KEY,
sales_person varchar(20),
order db2xml.XMLVarchar);
Dopo aver creato una tabella, il passaggio successivo consiste nell’abilitazione della
colonna per i dati XML.
Argomenti correlati:
v “Pianificazione di tabelle laterali” a pagina 57
Memorizzazione di DTD nella tabella di repository
È possibile utilizzare DTD per convalidare i dati XML in una colonna o in una
raccolta XML. I DTD possono essere memorizzati nella relativa tabella di
repository, una tabella database denominata DTD_REF. Tale tabella ha il nome
schema di DB2XML. Ogni DTD nella tabella DTD_REF dispone di un ID univoco.
XML Extender crea la tabella DTD_REF quando si abilita un database per XML. È
possibile inserire il DTD dalla riga comandi o utilizzando il wizard di gestione.
Procedura:
Per inserire il DTD utilizzando il wizard di gestione:
52 XML Extender - Amministrazione e programmazione
1. Avviare il suddetto wizard e fare clic su Importa DTD dalla finestra di avvio
per importare un file DTD esistente nel repository DTD per il database
corrente. Viene visualizzata la finestra di importazione DTD.
2. Specificare il nome del file DTD nel campo Nome file DTD.
3. Immettere l’ID DTD nel campo ID DTD.
L’ID DTD è l’identificativo per il DTD. Esso può essere anche il percorso che
specifica la posizione del DTD sul sistema locale. L’ID DTD deve corrispondere
al valore specificato nel file DAD per l’elemento <DTDID>.
4. Facoltativo: immettere il nome dell’autore del DTD nel campo Autore.
5. Fare clic su Fine per inserire il DTD nella relativa tabella di repository,
DB2XML.DTD_REF e ritornare alla finestra di avvio.
Per inserire un DTD dalla riga comandi, immettere un’istruzione SQL INSERT da
Tabella 6. Ad esempio:
DB2 INSERT into DB2XML.DTD_REF values(’install_dxx
/samples/extenders/db2xml/dtd/getstart.dtd’,
DB2XML.XMLClobFromFile(’install_dxx/dxxsamples/dtd/getstart.dtd’,
0, ’user1’, ’user1’, ’user1’);
Tabella 6. Le definizioni di colonna per la tabella di repository DTD
Nome colonna Tipo di dati Descrizione
DTDID VARCHAR(128) ID del DTD.
CONTENT XMLCLOB Contenuto del DTD.
USAGE_COUNT INTEGER Numero di colonne e di raccolte XML nel
database che utilizzano tale DTD.
AUTHOR VARCHAR(128) Autore del DTD, informazioni facoltative che
l’utente può immettere.
CREATOR VARCHAR(128) ID utente che esegue il primo inserimento.
UPDATOR VARCHAR(128) ID utente che esegue l’ultimo aggiornamento.
Abilitazione di colonne XML
Per memorizzare un documento XML in un database DB2, è necessario abilitare la
colonna che conterrà il documento per XML. L’abilitazione di una colonna la
prepara per l’indicizzazione in modo che sia possibile eseguire ricerche
rapidamente. È possibile abilitare una colonna utilizzando il wizard di gestione o
la riga comandi di XML Extender. La colonna deve essere di tipo XML.
Quando XML Extender abilita una colonna XML, esegue le seguenti operazioni:
v Legge il file DAD per:
– Verificare la presenza del file DTD nella tabella DTD_REF, se è stato
specificato DTDID.
– Creare tabelle laterali sulla colonna XML a scopo di indicizzazione.
– Preparare la colonna per contenere i dati XML.v Facoltativamente, crea una vista predefinita della tabella e delle tabelle laterali
XML. Nellavista predefinita sono visualizzate la tabella dell’applicazione e le
tabelle laterali.
v Specifica una colonna ROOT ID, se non è già stata specificata.
Dopo aver abilitato una colonna XML, è possibile:
Capitolo 2. Amministrazione 53
v Creare gli indici sulle tabelle laterali.
v Inserire documenti XML nella colonna XML.
v Interrogare, aggiornare o ricercare i documenti XML nella colonna XML.
È possibile abilitare le colonne XML utilizzando il wizard di gestione o la riga
comandi DB2.
Procedura (mediante il wizard di gestione):
Per abilitare le colonne XML utilizzando il wizard di gestione:
1. Impostare e avviare il wizard.
2. Fare clic su Operazioni con le colonne XML dalla finestra Launchpad per
visualizzare le attività relative alle colonne di XML Extender. Viene aperta la
finestra Selezione un’attività.
3. Fare clic su Abilita una colonna e quindi su Avanti.
4. Specificare la tabella e la colonna.
v Selezionare la tabella che contiene la colonna XML dal campo Nome tabella.
v Selezionare la colonna da abilitare dal campo Nome colonna.5. Specificare il nome e il percorso del file DAD nel campo Nome file DAD. Ad
esempio:
install_dxx/samples/dad/getstart.dad
6. Facoltativo: immettere il nome di un tablespace esistente nel campo Tablespace.
Il tablespace predefinito contiene le tabelle laterali create da XML Extender. Se
si specifica un tablespace, le tabelle laterali verranno create in quel tablespace.
Se invece non si specifica alcun tablespace, le tabelle laterali verranno create nel
tablespace predefinito.
7. Facoltativo: immettere il nome della vista predefinita nel campo Vista
predefinita.
Se specificata, la vista predefinita viene creata automaticamente quando viene
abilitata la colonna. La vista predefinita unisce la tabella XML e tutte le tabelle
laterali correlate.
8. Suggerimento: immettere il nome della colonna della chiave primaria per la
tabella nel campo ID root.
XML Extender utilizza il valore di ID root come identificativo univoco per
associare tutte le tabelle laterali alla tabella dell’applicazione. XML aggiunge
quindi la colonna DXXROOT_ID alla tabella dell’applicazione e genera un
identificativo.
9. Fare clic su Fine per abilitare la colonna XML, creare le tabelle laterali e tornare
alla finestra Launchpad.
v Se la colonna viene abilitata correttamente, verrà ricevuto il seguente
messaggio: colonna abilitata.
v Se invece la colonna non viene abilitata correttamente, viene visualizzato un
messaggio di errore che richiede di correggere i valori dei campi di
immissione fino a c he la colonna non verrà abilitata.
Procedura (mediante la riga comandi):
Per abilitare una colonna XML utilizzando la riga comandi, utilizzare il comando
DXXADM enable_column.
Sintassi:
54 XML Extender - Amministrazione e programmazione
�� dxxadm enable_column nome_db nome_tb nome_col file_DAD �
� -t
tablespace
-v
vista_predefinita
-r
id_root ��
Parametri:
nome_db
Il nome del database .
nome_tb
Il nome della tabella che contiene la colonna da abilitare.
nome_col
Il nome della colonna XML che viene abilitata.
file_DAD
Il nome del file che contiene la definizione DAD (document access
definition).
vista_predefinita
Facoltativo. Il nome della vista predefinita creata da XML Extender per
unire una tabella dell’applicazione e tutte le relative tabelle laterali.
id_root Facoltativo, ma consigliato. Il nome della colonna della chiave primaria
nella tabella dell’applicazione e un identificativo univoco che associate
tutte le tabelle laterali alla tabella dell’applicazione. XML Extender utilizza
il valore di ROOT_ID come identificativo univoco per associare tutte le
tabelle laterali alla tabella dell’applicazione. Se ROOT ID non è specificato,
XML Extender aggiunge la colonna DXXROOT_ID alla tabella
dell’applicazione e genera un identificativo.
Limitazione: se la tabella dell’applicazione ha un nome per la colonna
uguale a DXXROOT_ID, è necessario specificare il parametro id_root,
altrimenti si verifica un errore.
Esempio:
dxxadm enable_column SALES_DB sales_tab order getstart.dad
-v sales_order_view -r INVOICE_NUMBER
In questo esempio, la colonna ORDER è abilitata nella tabella SALES_TAB. Il file
DAD è getstart.dad, la vista predefinita è sales_order_view e l’ID ROOT
èINVOICE_NUMBER.
Con questo esempio, la tabella SALES_TAB ha le seguenti colonne:
Nome colonna Tipo di dati
INVOICE_NUM CHAR(6)
SALES_PERSON VARCHAR(20)
ORDER XMLVARCHAR
Le seguenti tabelle laterali sono create in base alla specifica DAD:
Capitolo 2. Amministrazione 55
ORDER_SIDE_TAB:
Nome colonna Tipo di dati Espressione path
ORDER_KEY INTEGER /Order/@Key
CUSTOMER VARCHAR(50) /Order
/Customer
/Name
INVOICE_NUM CHAR(6) N/D
PART_SIDE_TAB:
Nome colonna Tipo di dati Espressione path
PART_KEY INTEGER /Order/Part/@Key
PRICE DOUBLE /Order/Part
/ExtendedPrice
INVOICE_NUM CHAR (6) N/D
SHIP_SIDE_TAB:
Nome colonna Tipo di dati Espressione path
DATE DATE /Order/Part/
Shipment/ShipDate
INVOICE_NUM CHAR (6) N/D
Tutte le tabelle laterali hanno la colonna INVOICE_NUM dello stesso tipo in
quanto è specificato l’ID ROOT dalla chiave primaria INVOICE_NUM nella tabella
dell’applicazione. Una volta abilitata la colonna, il valore della colonna
INVOICE_NUM viene inserito nelle tabelle laterali quando una riga viene inserita
nella tabella principale. Se si specifica una vista predefinita quando si abilita la
colonna XML ORDER, alloraXML Extender crea una vista predefinita,
sales_order_view. La vista unisce le tabelle precedenti mediante la seguente
istruzione:
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, part_side_tab.price,
ship_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
Se si specifica un tablespace, le tabelle laterali verranno create in quel tablespace.
Se invece non si specifica alcun tablespace, le tabelle laterali verranno create nel
tablespace predefinito.
56 XML Extender - Amministrazione e programmazione
Pianificazione di tabelle laterali
Le tabelle laterali sono tabelle DB2® utilizzate per estrarre il contenuto di un
documento XML in cui verrà eseguita una ricerca molto frequentemente. La
colonna XML è associata alle tabelle laterali che contengono il contenuto del
documento XML. Quando il documento XML viene aggiornato nella tabella
dell’applicazione, i valori nelle tabelle vengono aggiornati automaticamente.
Figura 7 mostra una colonna XML con tabelle laterali.
Quando si pianificano le tabelle laterali, è necessario considerare come organizzare
le tabelle, quante tabelle creare e se creare una vista predefinita per le tabelle.
Basare tali decisioni sulla presenza di elementi e attributi sui requisiti per le
prestazioni dell’interrogazione. Non pianificare l’aggiornamento delle tabelle
laterali: queste verranno aggiornate automaticamente quando il documento viene
aggiornato nella colonna XML.
Ricorrenze multiple:
Quando gli elementi e gli attributi sono presenti più volte nelle tabelle laterali,
tenere presente quanto riportato di seguito nella pianificazione:
v Per gli elementi o gli attributi in un documento XML che ha più ricorrenze, è
necessario creare una tabella laterale separata per ogni elemento o attributo XML
con più ricorrenze, a causa della struttura complessa di documenti XML. Ciò
significa che gli elementi o gli attributi hanno percorsi che sono presenti più
volti e che devono essere associati a una tabella con una sola colonna. Non deve
avere alcun’altra colonna.
v Quando un documento ha più percorsi ricorrenti, XML Extender aggiunge una
colonna denominata DXX_SEQNO con un tipo INTEGER a ogni tabella laterale
per tenere traccia dell’ordine degli elementi che si verificano più di una volta.
Con DXX_SEQNO, è possibile richiamare un elenco di elementi nello stesso
ordine del documento XML originale specificando ORDER BY DXX_SEQNO in
una interrogazione SQL.
Figura 7. Una colonna XML il cui contenuto è associato alle tabelle laterali. Nella colonna è
presente un file XML associato alle tabelle laterali che contengono il contenuto del
documento XML.
Capitolo 2. Amministrazione 57
Viste predefinite e prestazioni dell’interrogazione:
Quando si abilita una colonna XML, è possibile specificare una vista di sola lettura
predefinita che unisce la tabella dell’applicazione e le tabelle laterali utilizzando un
ID univoco, detto ROOT ID. Con la vista predefinita, è possibile ricercare i
documenti XML interrogando le tabelle laterali. Ad esempio, se è presente la
tabella dell’applicazione SALES_TAB e le tabelle laterali ORDER_TAB, PART_TAB
e SHIP_TAB, l’interrogazione avrà il seguente aspetto:
SELECT sales_person FROM sales_order_view
WHERE price > 2500.00
L’istruzione SQL restituisce i nomi di addetti alle vendite in SALES_TAB che
hanno ordini memorizzati nella colonna ORDER in cui la colonna PRICE è
maggiore di 2500.00.
Il vantaggio di interrogare la vista predefinita consiste nel fatto che viene fornita
una singola vista virtuale della tabella e delle tabelle laterali dell’applicazione.
Tuttavia, più tabelle laterali vengono create, più costosa sarà l’interrogazione.
Pertanto, la creazione della vista predefinita è consigliata solo quando il numero
totale di colonne delle tabelle laterali è piccolo. Le applicazioni possono creare le
proprie viste che si uniscono alle colonne delle tabelle laterali.
Indicizzazione delle tabelle laterali
Tale attività è parte dell’attività più grande di definizione ed abilitazione di una
colonna XML.
Le tabelle laterali contengono i dati XML nelle colonne specificate quando si crea il
file DAD. Dopo aver abilitato una colonna XML e creato le tabelle laterali, è
possibile indicizzare le tabelle laterali. Indicizzare queste tabelle aiuta a migliorare
la prestazione delle query rispetto ai documenti XML.
Procedura:
Per creare un indice per le relative tabelle laterali da una linea di comando del
database DB2, utilizzare l’istruzione DB2 CREATE INDEX SQL.
Il seguente esempio crea gli indici su quattro tabelle laterali utilizzando il prompt
dei comandi DB2.
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)
58 XML Extender - Amministrazione e programmazione
Composizione dei documenti XML utilizzando l’associazione SQL
E’ necessario utilizzare l’associazione SQL per comporre i documenti XML se si
desidera utilizzare un’istruzione SQL per definire la tabella e le colonne che
effettueranno la derivata dei dati nel documento XML. E’ possibile utilizzare
l’associazione SQL solo per la composizione dei documenti XML. Un file DAD
viene creato per comporre il documento XML con l’associazione SQL.
Prerequisiti:
Prima di comporre i relativi documenti, è necessario prima di tutto associare la
relazione tra le proprie tabelle del database DB2 e il documento XML. Questo
passaggio include l’associazione della gerarchia del documento XML e specifica
come i dati nel documento associano una tabella del database DB2.
Procedura:
Per comporre i documenti XML dalla riga di comando, completare i seguenti
passaggi:
1. Creare un nuovo documento in un editor di testo e digitare la seguente
sintassi:
<?XML version="1.0"?>
<!DOCTYPE DAD SYSTEM "path/dad.dtd">
2. Inserire le tag <DAD> </DAD>.
L’elemento DAD conterrà tutti gli altri elementi.
3. Inserire le tag utilizzate per convalidare il file DAD con un DTD o schema.
v Per convalidare il documento XML composto con un DTD, inserire le tag
DTDID che associano il file DAD con il DTD del documento XML. Ad
esempio:
<dtdid>dtd_name</dtdid>
v Per convalidare il documento XML composto con uno schema, inserire le
tag dello schema che associano il file DAD con il file dello schema. Ad
esempio:
<schemabindings>
<nonamespacelocation location="path/schema_name.xsd"/>
</schemabindings>
Il DTD o lo schema sono utili solo se si decide di convalidare il documento
XML. Utilizzare la tag di convalida per indicare se DB2 XML Extender
convalida il documento XML:
v Se si desidera convalidare il documento XML, allora digitare:
<validation>YES</validation>
v Se non si desidera convalidare il tipo del documento XML:
<validation>NO</validation>
4. Digitare le tag <XCollection> </XCollection> per specificare che si stanno
utilizzando le raccolte XML come metodo di accesso e memorizzazione per i
relativi dati XML.
5. All’interno delle tag <Xcollection> </Xcollection>, inserire le tag <SQL_stmt>
</SQL_stmt> per specificare l’istruzione SQL che assocerà i dati relazionali ai
documenti XML. Questa istruzione viene utilizzata per effettuare una query
dei dati dalle tabelle del database DB2. Il seguente esempio mostra un
esempio di query SQL:
Capitolo 2. Amministrazione 59
<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>
L’istruzione SQL di esempio per associare i dati relazionali al documento XML
soddisfa i seguenti requisiti:
v Le colonne vengono specificate in un ordine decrescente dalla gerarchia
della struttura del documento XML.
v Le colonne per un’entità vengono raggruppate insieme.
v La colonna ID dell’oggetto è la prima colonna in ciascun gruppo.
v La tabella Order_tab non presenta una colonna chiave singola e perciò, la
funzione integrata del database DB2 generate_unique viene utilizzata per
generare la colonna ship_id.
v Nella clausola ORDER BY, le colonne ID dell’oggetto sono elencate
nell’ordine corrispondente alla gerarchia decrescente delle tabelle a cui
appartengono. Le colonne ORDER BY possono non essere qualificate da
alcuno schema ed è necessario che i nomi della colonna corrispondano ai
nomi della colonna nella clausola SELECT. 6. Aggiungere le seguenti informazioni del prologo da utilizzare nel documento
XML composto. Se si desidera specificare un valore di codifica per
l’internazionalizzazione, aggiungere l’attributo ENCODING e il valore.
<prolog>?xml version="1.0"?</prolog>
7. Digitare la tag <doctype> </doctype>. Tale tag contiene la dichiarazione
DOCTYPE da inserire in ogni documento composto. Ad esempio:
<doctype>! DOCTYPE Order SYSTEM "install_dxx
/samples/extenders/db2xml/dtd/getstart.dtd"</doctype>
8. Specificare l’elemento root e gli elementi e gli attributi che determinano il
documento XML:
a. Aggiungere la tag <root></root_node> per definire l’elemento root. Tutti
gli elementi e gli attributi che determinano il documento XML sono
specificati in root_node.
b. Utilizzare le tag <element_node>, <attribute_node>, <text_node> e
<column> per specificare il nome degli elementi e degli attributi nel
documento composto e per associarli alle colonne specificate nell’istruzione
SQL.
<element_node> tag
Specifica gli elementi nel documento XML. Impostare l’attributo
del nome della tag element_node per il nome dell’elemento. Ogni
element_node può avere element_nodes secondari.
<attribute_node> tag
Specifica gli attributi di un elemento nel documento XML. Una tag
<attribute_node> è un elemento secondario di <element_node>.
Impostare l’attributo del nome della tag attribute_node per il nome
dell’attributo.
<text_node> tag
Specifica il contenuto del testo dell’elemento e i dati della colonna
60 XML Extender - Amministrazione e programmazione
in una tabella relazionale per element_nodes di livello inferiore.
Per ogni elemento di livello inferiore, specificare le tag
<text_node> che indicano che l’elemento contiene dati carattere da
estrarre dal DB2 quando il documento viene composto. Per ogni
element_node di livello inferiore, utilizzare una tag <column> per
specificare da quale colonna estrarre i dati quando il documento
XML viene composto. Le tag della colonna si trovano in genere
all’interno delle tag <attribute_node> o <text_node>. E’ necessario
che tutti i nomi della colonna definiti siano nella clausola
<SQL_stmt> SELECT all’inizio del file DAD.
<column> tag
Specifica la colonna da cui i dati vengono richiamati per l’elemento
o il valore dell’attributo. 9. Assicurarsi che le tag di chiusura siano nei posti appropriati:
a. Assicurarsi che un tag di chiusura </root_node> sia presente dopo
l’ultima tag </element_node>.
b. Assicurarsi che una tag di chiusura </Xcollection> sia presente dopo la
tag </root_node>.
c. Assicurarsi che una tag di chiusura </DAD> sia presente dopo la tag
</Xcollection>.10. Salvare il file come file.dad. Dove file è il nome del proprio file.
Il seguente esempio Windows mostra un file DAD completo:
<?xml version’"1.0"?>
<!DOCTYPE DAD SYSTEM "C:\dxx_xml\test\dtd\dad.dtd">
<DAD>
<validation>NO</validation>
<Xcollection>
<SQL_stmt> select o.order_key, customer_name, customer_email,
p.part_key, color, qty, price, tax, ship_id, date, mode from order_tab o,
part_tab p, (select timestamp(generate_unique()) 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>
<prolog>?XML version="1.0"?</prolog>
<doctype>!DOCTYPE ORDER SYSTEM
"C:\install_dxx\samples\extenders\db2xml\dtd/Order.dtd"
</doctype>
<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>
<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>
<element_node name ="Quantity">
<text_node><column name="qty"/></text_node>
</element_node>
<element_node name="ExtendedPrice">
Capitolo 2. Amministrazione 61
<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_occurrence="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>
</element_node>
</element_node>
</root_node>
</Xcollection>
</DAD>
Richiamare la procedura memorizzata dxxGenXML per comporre utilizzando il file
DAD. Per ulteriori informazioni su tests2x, fare riferimento a “Sovrascrittura
dinamica di valori nel file DAD” a pagina 175.
Composizione di raccolte XML utilizzando l’associazione RDB_node
È necessario prima creare un file DAD e quindi comporre la raccolta XML
utilizzando tale file. Utilizzare l’elemento <RDB_node> per specificare le tabelle di
database DB2, le colonne e le condizioni per un nodo di elementi o di attributi.
L’elemento <RDB_node> utilizza i seguenti elementi:
table Definisce la tabella che corrisponde all’elemento.
column Definisce la colonna che contiene l’elemento corrispondente.
condition Specifica facoltativamente una condizione per cui si verifica
un’intersezione sulla colonna.
Gli elementi secondari che sono utilizzati nell’elemento RDB_node dipendono dal
contesto del nodo e utilizzano le seguenti regole:
Se il tipo di nodo è: Sono utilizzati i seguenti elementi secondari di RDB:
Tabella Colonna Condizione
Elemento root Sì No Sì1
Attributo Sì Sì Facoltativo
Testo Sì Sì Facoltativo
1 Richiesto per visualizzare le relazioni tra più tabelle.
Limitazione: se si compongono le raccolte XML utilizzando associazioni
RDB_node, tutte le istruzioni di un determinato elemento devono essere associate a
colonne nella stessa tabella.
Procedura:
Per preparare un file DAD da utilizzare per la decomposizione di un documento
XML mediante l’associazione RDB_node:
1. Iniziare con un file XML che includa i seguenti elementi:
62 XML Extender - Amministrazione e programmazione
v La seguente intestazione, dove path/dad.dtd è il nome e il percorso del file
DTD per la DAD:
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "path/dad.dtd">
v Le tag <DAD></DAD>. Questo elemento conterrà tutti gli altri elementi.2. Inserire le tag utilizzate per la convalida del file DAD con una DTD o
unoschema:
v Per convalidare il documento XML con una DTD, inserire la tag dtdid che
associa il file DAD con la DTD del documento XML. Ad esempio:
<dtdid>dtd_name</dtdid>
v Per convalidare il documento XML con uno schema, inserire la tag
schemabindings che associa il file DAD al file dello schema. Ad esempio:
<schemabindings>
<nonamespacelocation location="path/schema_name.xsd"/>
</schemabindings>
Il dtdid o lo schema è utile solo se si decide di convalidare il documento XML.
Utilizzare la tag di convalida per indicare se DB2 XML Extender convalida il
documento XML:
v Se si desidera convalidare il documento XML, allora digitare:
<validation>YES</validation>
v Se non si desidera convalidare il tipo del documento XML:
<validation>NO</validation>
3. Inserire le tag <XCollection> </XCollection> per specificare che si utilizzano
raccolte XML come metodo di accesso e memorizzazione per i dati XML.
4. Aggiungere le seguenti informazioni al prologo. Se si desidera specificare un
valore di codifica per l’internazionalizzazione, aggiungere l’attributo
ENCODING e il valore.
<prolog>?xml version="1.0"?</prolog>
5. Add the <doctype></doctype> tag. Ad esempio:
<doctype>! DOCTYPE Order SYSTEM "install_dxx
/samples/extenders/db2xml/dtd/getstart.dtd"</doctype>
6. Definire l’elemento root_node utilizzando le tag <root_node> </root_node>.
7. All’interno di root_node, associare gli elementi e gli attributi nel documento
XML ai nodi di elementi e di attributi che corrispondono ai dati del database
DB2. Tali nodi forniscono un percorso dai dati XML ai dati del database DB2.
a. Definire un livello superiore, l’elemento root element_node. Questo
elemento element_node contiene:
v Elementi di tabella con una condizione join per specificare la raccolta
v Elementi secondari
v Attributi
Per specificare la tabella e la condizione:
1) Creare un elemento RDB_node all’interno di un elemento element_node.
Ad esempio:
<element_node name="name">
<RDB_node>
</RDB_node>
</element_node>
2) Definire un elemento <table> per ogni tabella che contiene i dati da
includere nel documento XML. Ad esempio, se sono presenti tre tabelle,
Capitolo 2. Amministrazione 63
ORDER_TAB, PART_TAB e SHIP_TAB, che hanno dati di colonne che
devono essere inseriti nel documento, creare un nodo di tabella per
ognuna di esse. Ad esempio:
<RDB_node>
<table name="ORDER_TAB">
<table name="PART_TAB">
<table name="SHIP_TAB">
</RDB_node>
3) Definire una condizione join per le tabelle nella raccolta. La sintassi è:
nome_tabella.colonna_tabella = nome_tabella.colonna_tabella AND
nome_tabella.colonna_tabella = nome_tabella.colonna_tabella ...
Ad esempio:
<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>
4) Facoltativo: specificare una chiave primaria per ogni tabella. La chiave
primaria ècostituita da una o più colonne, e in quest’ultimo caso è detta
chiave composta. Per specificare la chiave primaria, aggiungere un
attributo key all’elemento della tabella di RDB_node. Il seguente
esempio definisce una chiave primaria per ogni tabella nell’elemento
RDB_node dell’elemento root element_node Order:
<element_node name="Order">
<RDB_node>
<table name="order_tab" key="order_key"/>
<table name="part_tab" key="part_key price"/>
<table name="ship_tab" key="date mode"/>
<condition>
order_tab.order_key = part_tab.order_key AND
part_tab.part_key = ship_tab.part_key
</condition>
<RDB_node>
L’attributo key è richiesto per la decomposizione e per l’abilitazione di
una raccolta.b. Definire una tag <element_node> per ogni elemento nel documento XML che
viene associato a una colonna in una tabella del database DB2. Ad esempio:
<element_node name="name">
</element_node>
Un nodo di elementi può avere uno dei seguenti tipi di elementi:
text_node Per specificare che un elemento ha un contenuto per una
tabella DB2 e non ha elementi secondari.
attribute_node
Per specificare un attributo.
child elements
Gli elementi secondari di element_node.
L’elemento text_node contiene l’elemento RDB_node per associare il
contenuto a una tabella e a una colonna del database DB2.
Ad esempio, per utilizzare il contenuto di una colonna denominata TAX per
creare un elemento XML, <tax>.
64 XML Extender - Amministrazione e programmazione
Documento XML:
<Tax>0.02</Tax>
In questo caso, il valore 0.02 deve essere utilizzato nella colonna TAX.
Nel file DAD, viene specificata una tag <RDB_node> per associare
l’elemento XML alla tabella e alla colonna del database DB2.
File DAD:
<element_node name="Tax">
<text_node>
<RDB_node>
<table name="part_tab"/>
<column name="tax"/>
</RDB_node>
</text_node>
</element_node>
La tag <RDB_node> specifica che un valore dell’elemento Tax è un valore di
testo e che i dati vengono memorizzati nella tabella PART_TAB nella
colonna TAX.
c. Definire una tag <attribute_node> per ogni elemento nel documento XML
che viene associato a una colonna in una tabella del database DB2. Ad
esempio:
<attribute_node name="key">
</attribute_node>
L’elemento attribute_node contiene l’elemento RDB_node per associare il
valore dell’attributo a una tabella e a una colonna del database DB2.
Ad esempio, è possibile avere un attributo key per un elemento <Order>. Il
valore key deve essere utilizzato da una colonna PART_KEY. Il documento
XML avrà il seguente aspetto:
<Order key="1">
Documento XML: nel file DAD, creare un elemento attribute_node per key
e indicare la tabella in cui deve essere utilizzato il valore 1.
File DAD:
<attribute_node name="key">
<RDB_node>
<table name="part_tab">
<column name="part_key"/>
<RDB_node>
</attribute_node>
8. Facoltativo: specificare il tipo di colonna per l’elemento RDB_node per ogni
elemento attribute_node e text_node. In questo modo, è possibile utilizzare il
file DAD sia per la composizione che per la decomposizione. Nella
composizione, la specifica del tipo di colonna non causa alcun altro controllo
del tipo di dati. Per specificare i tipi di colonne, aggiungere il tipo di attributo
all’elemento della colonna. Il seguente esempio definisce il tipo di colonna
come INTEGER:
<attribute_node name="key">
<RDB_node>
<table name="order_tab"/>
<column name="order_key" type="integer"/>
</RDB_node>
</attribute_node>
9. Assicurarsi che le tag di chiusura siano nei posti appropriati:
a. Assicurarsi che un tag di chiusura </root_node> sia presente dopo l’ultima
tag </element_node>.
Capitolo 2. Amministrazione 65
b. Assicurarsi che una tag di chiusura </Xcollection> sia presente dopo la tag
</root_node>.
c. Assicurarsi che una tag di chiusura </DAD> sia presente dopo la tag
</Xcollection>.
Richiamare la procedura memorizzata dxxGenXML per comporre utilizzando il file
DAD. Per informazioni su dxxGenXML, fare riferimento a “Procedura
memorizzata dxxGenXML()” a pagina 191.
Argomenti correlati:
v “Schemi di associazione per raccolte XML” a pagina 101
v “Requisiti per l’associazione RDB_Node” a pagina 106
v “Percorsi di posizioni” a pagina 110
v “File DAD per le raccolte XML” a pagina 167
v “Procedure memorizzate di composizione di XML Extender - Panoramica” a
pagina 191
Attività correlate:
v “Decomposizione di una raccolta XML utilizzando l’associazione RDB_node”
v “Gestione di dati in raccolte XML” a pagina 90
v “Aggiornamento ed eliminazione di dati in raccolte XML” a pagina 98
Decomposizione di una raccolta XML utilizzando l’associazione
RDB_node
È necessario prima creare un file DAD. Utilizzare l’elemento <RDB_node> per
specificare le tabelle di database DB2, le colonne e le condizioni per un nodo di
elementi o di attributi. L’elemento <RDB_node> utilizza i seguenti elementi:
table Definisce la tabella che corrisponde all’elemento.
column Definisce la colonna che contiene l’elemento corrispondente.
condition Specifica facoltativamente una condizione per cui si verifica
un’intersezione sulla colonna.
Gli elementi secondari che sono utilizzati nell’elemento <RDB_node> dipendono
dal contesto del nodo e utilizzano le seguenti regole:
Se il tipo di nodo è: Elemento secondario RDB utilizzato:
Tabella Colonna Condizione
Elemento root Sì No Sì1
Attributo Sì Sì facoltativo
Testo Sì Sì facoltativo
1 Richiesto per visualizzare le relazioni tra più tabelle.
Procedura:
Per preparare un file DAD da utilizzare per la decomposizione di un documento
XML mediante l’associazione RDB_node:
66 XML Extender - Amministrazione e programmazione
1. Creare un file in un editor di testo. Creare un’intestazione DAD immettendo
la seguente sintassi:
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "path/dad.dtd">
dove path/dad.dtd è il nome e il percorso del file DTD per la DAD.
2. Inserire le tag <DAD> </DAD>.
3. Inserire le tag utilizzate per la convalida del file DAD con una DTD o
unoschema.
v Per convalidare il documento XML con una DTD, inserire la tag dtdid che
associa il file DAD con la DTD del documento XML. Ad esempio:
<dtdid>dtd_name</dtdid>
v Per convalidare il documento XML con uno schema, inserire la tag
schemabinding che associa il file DAD al file dello schema. Ad esempio:
<schemabindings>
<nonamespacelocation location="path/schema_name.xsd"/>
</schemabindings>
Il dtdid o lo schema è utile solo se si decide di convalidare il documento
XML. Utilizzare la tag di convalida per indicare se DB2 XML Extender
convalida il documento XML:
v Se si desidera convalidare il documento XML, immettere:
<validation>YES</validation>
v Se non si desidera convalidare il documento XML, immettere:
<validation>NO</validation>
4. Inserire le tag <XCollection> </XCollection> per specificare che si utilizzano
raccolte XML come metodo di accesso e memorizzazione per i dati XML.
5. Aggiungere le seguenti informazioni al prologo. Se è necessario specificare un
valore di codifica per l’internazionalizzazione, aggiungere l’attributo
ENCODING e il relativo valore.
<prolog>?xml version="1.0"?</prolog>
6. Aggiungere le tag <doctype></doctype>. Ad esempio:
<doctype>! DOCTYPE Order SYSTEM "dxx_install
/samples/extenders/db2xml/dtd/getstart.dtd"</doctype>
7. Definire l’elemento root_node utilizzando le tag <root_node> </root_node>.
8. All’interno di root_node, associare gli elementi e gli attributi nel documento
XML ai nodi di elementi e di attributi che corrispondono ai dati del database
DB2. Tali nodi forniscono un percorso dai dati XML ai dati del database DB2.
a. Definire un livello superiore, l’elemento root element_node. Questo
elemento element_node contiene:
v Elementi di tabella con una condizione join per specificare la raccolta
v Elementi secondari
v Attributi
Per specificare la tabella e la condizione:
1) Creare un elemento RDB_node all’interno di un elemento
element_node. Ad esempio:
<element_node name="name">
<RDB_node>
</RDB_node>
</element_node>
2) Definire un elemento <table> per ogni tabella che contiene i dati da
includere nel documento XML. Ad esempio, se sono presenti tre
Capitolo 2. Amministrazione 67
tabelle, ORDER_TAB, PART_TAB e SHIP_TAB, che hanno dati di
colonne che devono essere inseriti nel documento, creare un nodo di
tabella per ognuna di esse. Ad esempio:
<RDB_node>
<table name="ORDER_TAB">
<table name="PART_TAB">
<table name="SHIP_TAB">
</RDB_node>
3) Definire una condizione join per le tabelle nella raccolta. La sintassi è:
nome_tabella.colonna_tabella = nome_tabella.colonna_tabella AND
nome_tabella.colonna_tabella = nome_tabella.colonna_tabella ...
Ad esempio:
<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>
4) Facoltativo: specificare una chiave primaria per ogni tabella. La chiave
primaria ècostituita da una o più colonne, e in quest’ultimo caso è
detta chiave composta. Per specificare la chiave primaria, aggiungere
un attributo key all’elemento della tabella di RDB_node. Il seguente
esempio definisce una chiave primaria per ogni tabella nell’elemento
RDB_node dell’elemento root element_node Order:
<element_node name="Order">
<RDB_node>
<table name="order_tab" key="order_key"/>
<table name="part_tab" key="part_key price"/>
<table name="ship_tab" key="date mode"/>
<condition>
order_tab.order_key = part_tab.order_key AND
part_tab.part_key = ship_tab.part_key
</condition>
<RDB_node>
L’attributo key è richiesto per la decomposizione e per l’abilitazione di
una raccolta.b. Definire una tag <element_node> per ogni elemento nel documento XML
che viene associato a una colonna in una tabella del database DB2. Ad
esempio:
<element_node name="name">
</element_node>
Un nodo di elementi può avere uno dei seguenti tipi di elementi:
text_node Per specificare che un elemento ha un contenuto per una
tabella DB2 e non ha elementi secondari.
attribute_node
Per specificare un attributo.
child elements
Gli elementi secondari di element_node.
L’elemento text_node contiene l’elemento RDB_node per associare il
contenuto a una tabella e a una colonna del database DB2.
68 XML Extender - Amministrazione e programmazione
Ad esempio, è possibile avere un elemento XML <Tax> per cui si desidera
creare il contenuto senza tag in una colonna denominata TAX. Ad
esempio, il documento XML avrà il seguente aspetto:
<Tax>0.02</Tax>
In questo caso, il valore 0.02 deve essere memorizzato nella colonna TAX.
Nel file DAD, viene specificata una tag <RDB_node> per associare un
documento o un attributo XML alla tabella e alla colonna del database
DB2.
DAD file:
<element_node name="Tax">
<text_node>
<RDB_node>
<table name="part_tab"/>
<column name="tax"/>
</RDB_node>
</text_node>
</element_node>
La tag <RDB_node> specifica che un valore dell’elemento Tax è un valore
di testo e che i dati vengono memorizzati nella tabella PART_TAB nella
colonna TAX.
c. Definire una tag <attribute_node> per ogni elemento nel documento XML
che viene associato a una colonna in una tabella del database DB2. Ad
esempio:
<attribute_node name="key">
</attribute_node>
L’elemento attribute_node contiene l’elemento RDB_node per associare il
valore dell’attributo a una tabella e a una colonna del database DB2.
Ad esempio, è possibile avere un attributo key per un elemento Order. Il
valore key deve essere memorizzato in una colonna PART_KEY.
Documento XML:
<Order key="1">
Nel file DAD, creare un elemento attribute_node per key e indicare la
tabella in cui deve essere utilizzato il valore 1.
File DAD:
<attribute_node name="key">
<RDB_node>
<table name="part_tab">
<column name="part_key"/>
<RDB_node>
</attribute_node>
9. Specificare il tipo di colonna per l’elemento RDB_node per ogni elemento
attribute_node e text_node. Ciò garantisce il tipo di dati corretto per ogni
colonna in cui verranno memorizzati dati senza tag. Per specificare i tipi di
colonne, aggiungere il tipo di attributo all’elemento della colonna. Il seguente
esempio definisce il tipo di colonna come INTEGER:
<attribute_node name="key">
<RDB_node>
<table name="order_tab"/>
<column name="order_key" type="integer"/>
</RDB_node>
</attribute_node>
10. Assicurarsi che le tag di chiusura siano nei posti appropriati:
Capitolo 2. Amministrazione 69
a. Assicurarsi che un tag di chiusura </root_node> sia presente dopo
l’ultima tag </element_node>.
b. Assicurarsi che una tag di chiusura </Xcollection> sia presente dopo la
tag </root_node>.
c. Assicurarsi che una tag di chiusura </DAD> sia presente dopo la tag
</Xcollection>.
Richiamare la procedura memorizzata dxxShredXML da decomporre utilizzando il
file DAD. Per informazioni su dxxShredXML, fare riferimento a “Procedura
memorizzata dxxShredXML()” a pagina 202.
Argomenti correlati:
v “Procedure memorizzate di decomposizione di XML Extender - Panoramica” a
pagina 202
Attività correlate:
v “Richiamo delle procedure memorizzate XML Extender” a pagina 183
v “Decomposizione di documenti XML in dati di database DB2” a pagina 94
70 XML Extender - Amministrazione e programmazione
Parte 3. Programmazione
Questa parte descrive le tecniche di programmazione per la gestione dei dati XML.
© Copyright IBM Corp. 1999 - 2006 71
72 XML Extender - Amministrazione e programmazione
Capitolo 3. Colonne XML
In questa sezione viene descritto come gestire i dati nelle colonne XML utilizzando
DB2.
Gestione di dati nelle colonne XML
Quando si utilizzano le colonne XML per memorizzare i dati, viene memorizzato
un intero documento XML nel formato nativo come dati di colonne in DB2. Questo
metodo di accesso e memorizzazione consente di lasciare inalterato il documento
XML, consentendo all’utente di indicizzare e ricercare il documento, richiamare i
dati dal documento e aggiornare il documento.
Una volta abilitato un database per XML, è possibile utilizzare i seguenti UDT
(user-defined types) forniti da XML Extender:
XMLCLOB
Utilizzare questo UDT per il contenuto dei documenti XML memorizzato
come CLOB (character large object) in DB2.
XMLVARCHAR
Utilizzare questo UDT per il contenuto dei documenti XML memorizzato
come VARCHAR in DB2.
XMLFILE
Utilizzare questo UDT per un documento XML memorizzato in un file su
un file system locale.
È possibile creare o modificare le tabelle dell’applicazione in modo da avere
colonne del tipo di dati XML UDT. Queste tabelle sono note come tabelle XML.
Dopo aver modificato una colonna in una tabella per XML, è possibile creare la
colonna XML e completare le seguenti attività di gestione:
v Memorizzazione di documenti XML in DB2
v Richiamo di dati o documenti XML da DB2
v Aggiornamento di documenti XML
v Eliminazione di dati o documenti XML
Per eseguire queste attività, utilizzare le UDF (user-defined functions) fornite da
XML Extender. Utilizzare le funzioni di casting predefinite per memorizzare i
documenti XML in DB2. Le funzioni di casting predefinite eseguono il casting del
tipo di base SQL sui tipi definiti dall’utente di XML e converte le istanze del tipo
di dati (origine) nelle istanza di un tipo di dati differente (destinazione).
Argomenti correlati:
v “Uso di indici per i dati delle colonne XML” a pagina 75
v “Colonne XML come metodo di accesso e di memorizzazione” a pagina 74
© Copyright IBM Corp. 1999 - 2006 73
Colonne XML come metodo di accesso e di memorizzazione
A volte è necessario memorizzare e conservare la struttura dei documenti così
come è. XML contiene tutte le informazioni necessarie per creare una serie di
documenti.
Ad esempio, per un’azienda che si occupa di informazione pubblica che fornisce
articoli su Web, potrebbe essere necessario conservare un archivio di tutti gli
articoli pubblicati. In uno scenario del genere, XML Extender consente di
memorizzare gli articoli XML completi o parziali in una colonna di una tabella
DB2®, che è la colonna XML, come riportato in Figura 8.
I metodi di accesso e memorizzazione nelle colonne XML consentono di gestire i
documenti XML utilizzando DB2. È possibile memorizzare i documenti XML in
una colonna di tipo XML ed è possibile interrogare il contenuto del documento per
trovare un determinato elemento o attributo. È possibile associare e memorizzare
un DTD in DB2 per uno o più documenti. Inoltre, è possibile associare il contenuto
di elementi e attributi alle tabelle DB2 dette tabelle laterali. Tali tabelle possono
essere indicizzate in modo da migliorare le prestazioni dell’interrogazione, ma il
processo di indicizzazione non è automatico. La colonna utilizzata per
memorizzare il documento è detta colonna XML. Essa specifica che la colonna è
utilizzata per il metodo di accesso e memorizzazione della colonna XML.
Nel file DAD (document access definition) vengono immesse le tag <Xcolumn> e
</Xcolumn> per indicare che il metodo di accesso e memorizzazione che verrà
utilizzato è la colonna XML. Il file DAD associerà quindi il contenuto dell’elemento
e dell’attributo XML da memorizzare nelle tabelle laterali.
Prima di iniziare a utilizzare XML Extender per memorizzare i documenti, è
necessario comprendere la struttura del documento XML in modo da poter
determinare come indicizzare gli elementi e gli attributi nel documento. Quando si
pianifica il modo in cui indicizzare il documento, è necessario determinare:
v Il tipo definito dall’utente XML in cui verrà memorizzato il documento XML
v Gli elementi e gli attributi XML che verranno ricercati frequentemente
dall’applicazione, in modo che il relativo contenuto possa essere memorizzato in
tabelle laterali e indicizzato per migliorare le prestazioni
v Se convalidare o meno i documenti XML nella colonna con un DTD
Figura 8. Memorizzazione di documenti XML strutturati in una colonna di una tabella DB2
74 XML Extender - Amministrazione e programmazione
Definizione ed abilitazione di una colonna XML
Le colonne XML vengono utilizzate per memorizzare ed accedere tutti i documenti
XML nel database. Tale metodo di memorizzazione consente di memorizzare i
documenti utilizzando i tipi file XML, indicizzare le colonne in tabelle laterali e
effettuare query o ricercare documenti XML.
Utilizzare le colonne XML quando si desidera memorizzare tutti i documenti XML
in una colonna della tabella DB2 se il documento non viene frequentemente
aggiornare o se si desidera memorizzare documenti XML intatti.
Se si desidera associare le strutture del documento XML a tabelle del database DB2
in modo da comporre documenti XML da dati DB2 esistenti o decomporre
documenti XML in dati DB2, allora è necessario utilizzare raccolte XML invece di
colonne XML.
Procedura:
Per definire e abilitare una colonna XML dalla linea di comando:
1. Creare un file DAD (document access definition).
2. Creare una tabella in cui i documenti XML siano memorizzati.
3. Abilitare la colonna per i dati XML.
4. Indicizzare le tabelle laterali.
La colonna XML viene creata come un tipo di dati dell’utente XML. Dopo che
queste attività sono completate, sarà possibile memorizzare i documenti XML nella
colonna. E’ possibile che questi documenti siano aggiornati, ricercati ed estratti.
Argomenti correlati:
v “Lezione: Memorizzazione di un documento XML in una colonna” a pagina 7
v “Uso di indici per i dati delle colonne XML”
v “Convalida automatica dei documenti XML” a pagina 50
v “Colonne XML come metodo di accesso e di memorizzazione” a pagina 74
Attività correlate:
v “Creazione di una tabella XML” a pagina 52
v “Abilitazione di colonne XML” a pagina 53
v “Indicizzazione delle tabelle laterali” a pagina 58
v “Gestione di dati nelle colonne XML” a pagina 73
Uso di indici per i dati delle colonne XML
Un’importante decisione di pianificazione da prendere quando si utilizzano
colonne XML è l’indicizzazione delle tabelle laterali per i documenti delle colonne
XML. Tale decisione deve essere presa in base in base a quanto spesso è necessario
accedere i dati e su quanto critiche siano le prestazioni durante le ricerche
strutturali.
Quando si utilizzano le colonne XML, che contengono interi documenti XML, è
possibile creare le tabelle laterali in modo che contengano le colonne di valori di
elementi e attributi XML e creare quindi gli indici su tali colonne. È necessario
determinare gli elementi e gli attributi necessari per creare l’indice.
Capitolo 3. Colonne XML 75
L’indicizzazione delle colonne XML consente l’indicizzazione di dati interrogati
frequentemente di tipi di dati generali (come integro, decimale o data) mediante il
supporto di indicizzazione nativa DB2® dal motore di database. XML Extender
estrae i valori di elementi o attributi XML da documenti XML e li memorizza nelle
tabelle laterali, consentendo la creazione di indici sulle tabelle laterali. È possibile
specificare ogni colonna di una tabella laterale con un percorso che identifica un
elemento o un attributo XML e un tipo di dati SQL.
XML Extender inserisce automaticamente i dati nella tabella laterale quando si
memorizzano i documenti XML nella colonna XML.
Per una ricerca rapida, creare gli indici sulle colonne mediante la tecnologia di
indicizzazione B-tree DB2. Fare riferimento alla documentazione DB2 per ulteriori
informazioni sull’indicizzazione B-tree.
Quando si crea un indice, è necessario tenere in considerazione:
v Per gli elementi o gli attributi in un documento XML che ha più ricorrenze, è
necessario creare una tabella laterale separata per ogni elemento o attributo XML
con più ricorrenze, a causa della struttura complessa di documenti XML.
v È possibile creare più indici su una colonna XML.
v È possibile associare le tabelle laterali alla tabella dell’applicazione utilizzando
l’ID ROOT. Suggerimento: utilizzare la chiave primaria della tabella
dell’applicazione come ID ROOT se la chiave primaria non è una chiave
composta.
Se la singola chiave primaria non esiste nella tabella dell’applicazione, o se per
un qualsiasi motivo non si desidera utilizzarla, XML Extender modifica la tabella
dell’applicazione per aggiungere una colonna DXXROOT_ID, che memorizza un
ID univoco creato nel momento dell’inserimento. Tutte le tabelle laterali hanno
una colonna DXXROOT_ID con l’ID univoco. Se la chiave primaria viene
utilizzata come ID ROOT, tutte le tabelle laterali hanno una colonna con lo
stesso nome e tipo della colonna della chiave primaria nella tabella
dell’applicazione e i valori delle chiavi primarie vengono quindi memorizzati.
v Se si abilita una colonna XML per DB2 Net Search Extender, è possibile anche
utilizzare la funzione di testo strutturale di Net Search Extender. Net Search
Extender è dotato di un supporto di ″ricerca di sezione″ che estende la funzione di
una normale ricerca di testo completo consentendo la ricerca di parole che
devono corrispondere all’interno di un determinato contesto del documento
specificato dai percorsi. L’indice di testo strutturale può essere utilizzato con la
funzione di indicizzazione di XML Extender su tipi di dati SQL generali.
Memorizzazione di dati XML
Grazie a XML Extender, è possibile inserire documenti XML in una colonna XML.
Se vengono definite le tabelle laterali, XML Extender aggiorna automaticamente tali
tabelle. Quando si memorizza direttamente un documento XML, XML Extender
memorizza il tipo di base come tipo XML.
Prerequisiti:
v Verificare di aver creato o aggiornato il file DAD.
v Determinare il tipo di dati da utilizzare quando si memorizza il documento.
v Selezionare un metodo (funzioni casting o UDF) per la memorizzazione di dati
nella tabella DB2®.
76 XML Extender - Amministrazione e programmazione
Specificare un’istruzione SQL INSERT che specifichi la colonna e la tabella XML
che deve contenere il documento XML.
XML Extender fornisce due metodi per la memorizzazione di documenti XML: le
funzioni di casting predefinite e le UDF di memorizzazione.
Tabella 7 mostra come utilizzare ogni metodo.
Tabella 7. Funzioni di memorizzazione di XML Extender
Se il tipo di
base del
database
DB2 è...
Memorizzare nel database DB2 come...
XMLVARCHAR XMLCLOB XMLDBCLOB XMLFILE
VARCHAR XMLVARCHAR() N/D N/D XMLFile
FromVarchar()
CLOB N/D XMLCLOB() XMLDB
CLOB,
funzione
casting
XMLFile
FromCLOB()
FILE XMLVarcha
rFromFile()
XMLCLOB
FromFile()
XMLDB
CLOBFrom
File, UDF
XMLFILE
Funzioni casting predefinite per la memorizzazione di dati
XML
Per ogni UDT, esiste una funzione cast predefinita per eseguire il cast del tipo base
SQL per l’UDT. È possibile utilizzare le funzioni di casting fornite da XML
Extender nella clausola VALUES per inserire i dati. Tabella 8 mostra le funzioni di
casting fornita:
Tabella 8. Funzioni di casting predefinite XML Extender
Funzione di casting Tipo di ritorno Descrizione
XMLVARCHAR(VARCHAR) XMLVARCHAR Input dal buffer di memoria
di VARCHAR
XMLCLOB(CLOB) XMLCLOB Input dal buffer di memoria
CLOB o di un locator CLOB
XMLFILE(VARCHAR) XMLFILE Memorizza solo il nome file
Ad esempio, la seguente istruzione inserisce un tipo VARCHAR cast nel tipo
XMLVARCHAR:
EXEC SQL INSERT INTO sales_tab
VALUES(’123456’, ’Sriram Srinivasan’, DB2XML.XMLVarchar(:xml_buff))
UDF di memorizzazione per la memorizzazione di dati XML
Per ognuno degli UTD XML Extender, esiste una UDF di memorizzazione per
importare i dati in un database DB2 da una risorsa diversa dal suo tipo base. Ad
esempio, se si desidera importare un documento di file XML in un database DB2
come tipo di dati XMLCLOB, è possibile utilizzare la funzione
XMLCLOBFromFile().
Tabella 9 a pagina 78 mostra le funzioni di memorizzazione fornite da XML
Extender.
Capitolo 3. Colonne XML 77
Tabella 9. UDF di memorizzazione di XML Extender
UDF di memorizzazione Tipo di ritorno Descrizione
XMLVarcharFromFile() XMLVARCHAR Legge un documento XML da
un file sul server e restituisce
il valore del tipo di dati
XMLVARCHAR. Facoltativo:
specificare la codifica del file.
XMLCLOBFromFile() XMLCLOB Legge un documento XML da
un file sul server e restituisce
il valore del tipo di dati
XMLCLOB. Facoltativo:
specificare la codifica del file.
XMLFileFromVarchar() XMLFILE Legge un documento XML
dalla memoria come dati
VARCHAR, scrive il
documento in un file esterno
e restituisce il valore del tipo
di dati XMLFILE, che è il
nome file. Facoltativo:
specificare la codifica del file
esterno.
XMLFileFromCLOB() XMLFILE Legge un documento XML
dalla memoria come dati
CLOB o come locator CLOB,
scrive il documento in un file
esterno e restituisce il valore
del tipo di dati XMLFILE, che
è il nome file. Facoltativo:
specificare la codifica del file
esterno.
Ad esempio, utilizzando la funzione XMLCLOBFromFile(), la seguente istruzione
memorizza un record in una tabella XML come XMLCLOB:
EXEC SQL INSERT INTO sales_tab(ID, NAME, ORDER)
VALUES(’1234’, ’MyName’,
XMLCLOBFromFile(’install_dxx/samples/extenders/db2xml/xml/getstart.xml’))
L’esempio importa il documento XML dal file install_dxx/samples/extenders/db2xml/xml/getstart.xml nella colonna ORDER nella tabella SALES_TAB.
Metodo per richiamare un documento XML
Utilizzando XML Extender, è possibile richiamare un intero documento o il
contenuto di elementi e attributi. Quando si richiama direttamente una colonna
XML, XML Extender restituisce UDT come tipo di colonna. Per dettagli sul
richiamo dei dati, consultare le seguenti sezioni:
v “Richiamo di un interno documento XML” a pagina 79
v “Richiamo dei valori di attributo e del contenuto di un elemento da documenti
XML” a pagina 81
XML Extender fornisce due metodi per il richiamo dei dati: le funzioni di casting
predefinite e un’UDF di carico Content(). Tabella 10 a pagina 79 mostra i casi in cui
utilizzare ogni metodo.
78 XML Extender - Amministrazione e programmazione
Tabella 10. Funzioni di richiamo di XML Extender
Quando il tipo XML
è ...
Richiama dal database DB2 con nome ...
VARCHAR CLOB FILE
XMLVARCHAR VARCHAR N/D UDF Content()
XMLCLOB N/D XMLCLOB UDF Content()
XMLFILE N/D UDF Content() FILE
Richiamo di un interno documento XML
Procedura:
Per richiamare un intero documento XML:
1. Verificare di avere memorizzato il documento XML in una tabella XML e
determinare i dati che si desidera richiamare.
2. Selezionare un metodo (funzioni di casting o UDF) per il richiamo dei dati
nella tabella database DB2.
3. Se si utilizza l’UDF di carico Content(), determinare il tipo di dati richiamati e
da esportare.
4. La colonna XML da cui estrarre l’elemento o l’attributo deve essere definita
come tipo di dati XMLVARCHAR, XMLCLOB as LOCATOR o XMLFILE.
Specificare una query SQL che specifichi la tabella XML e una colonna da cui
richiamare il documento XML.
Funzioni di casting predefinite per il richiamo dei dati XML
La funzione di casting predefinita fornita dal database DB2 per UDT converte un
UDT XML in un tipo base SQL e quindi esegue operazioni su tale tipo.
Nell’istruzione SELECT, è possibile utilizzare le funzioni di casting fornite da XML
Extender per richiamare i dati. Tabella 11 mostra le funzioni di casting fornite.
Tabella 11. Le funzioni di casting predefinite di XML Extender
Casting utilizzato nella
clausola SELECT Tipo di ritorno Descrizione
varchar(XMLVARCHAR) VARCHAR Documento XML in
VARCHAR
clob(XMLCLOB) CLOB Documento XML in CLOB
varchar(XMLFile) VARCHAR Nome file XML in
VARCHAR
Ad esempio, la seguente istruzione SQL richiama l’ordine e la colonna
XMLVARCHAR dalla tabella SALES_TAB, esegue il casting della colonna in
VARCHAR e inoltra la colonna come parametro alla funzione LENGTH. La
funzione LENGTH non accetta un parametro di tipo XMLVARCHAR, che richiede
il casting.
SELECT DB2XML.XMLVarchar(order) from SALES_TAB
Utilizzo dell’UDF Content() per il richiamo dei dati XML
Utilizzare l’UDF Content() per richiamare il contenuto del documento dalla
memoria esterna a quella interna o per esportare il documento dalla memoria
interna a un file esterno, che è un file esterno in un database DB2 sul server di
database DB2.
Capitolo 3. Colonne XML 79
Ad esempio, è possibile scegliere di memorizzare il documento XML come tipo di
dati XMLFILE. Per eseguire operazioni su tale documento in memoria, è possibile
utilizzare l’UDF Content(), che può utilizzare il tipo di dati XMLFILE come input e
restituire un CLOB.
L’UDF Content() UDF esegue due funzioni di richiamo differenti, a seconda del
tipo di dati specificato. Essa può:
v Richiamare un documento dalla memoria esterna e inserirlo in quella interna.
È possibile utilizzare l’UDF Content() per richiamare il documento XML in un
buffer di memoria o in un indicatore di posizione CLOB (una variabile host con un
valore che rappresenta un singolo valore LOB nel server di database) quando il
documento viene memorizzato come file esterno.
Utilizzare la seguente sintassi della funzione, in cui xmlobj è la colonna XML in
cui effettuare la ricerca:
XMLFILE in CLOB:
Content(xmlobj XMLFile)
v Richiamare un documento dalla memoria interna ed esportarlo in un file
esterno.
È possibile utilizzare l’UDF Content() per richiamare un documento XML
memorizzato in un database DB2 come tipo di dati XMLCLOB ed esportarlo in
un file sul file system del server di database. L’UDF Content() restituisce il nome
del file come tipo di dati VARCHAR.
Utilizzare la seguente sintassi della funzione:
Tipo XML in file esterno:
Content(xmlobj XML type, filename varchar(512), targetencoding varchar(100))
Dove:
xmlobj È il nome della colonna XML da cui richiamare il contenuto XML. xmlobj
può essere di tipo XMLVARCHAR o XMLCLOB.
filename
È il nome del file esterno in cui memorizzare i dati XML.
targetencoding
Facoltativo: specifica la codifica del file di output.
Nel seguente esempio, un piccolo segmento del programma C con istruzioni SQL
incorporate (istruzioni SQL codificate all’interno di un programma
dell’applicazione) mostra in che modo un documento XML viene richiamato da un
file in memoria. Questo esempio presuppone che il tipo di dati della colonna
ORDER sia XMLFILE.
EXEC SQL BEGIN DECLARE SECTION;
SQL TYPE IS CLOB_LOCATOR xml_buff;
EXEC SQL END DECLARE SECTION;
EXEC SQL CONNECT TO SALES_DB;
EXEC SQL DECLARE c1 CURSOR FOR
SELECT Content(order) from sales_tab
EXEC SQL OPEN c1;
do {
EXEC SQL FETCH c1 INTO :xml_buff;
if (SQLCODE != 0) {
break;}
else { /* effettuare le azioni necessarie per il doc XML nel buffer */}
}
EXEC SQL CLOSE c1;
EXEC SQL CONNECT RESET;
80 XML Extender - Amministrazione e programmazione
Richiamo dei valori di attributo e del contenuto di un
elemento da documenti XML
È possibile richiamare (estrarre) il contenuto di un elemento o il valore di un
attributo da uno o più documenti XML (ricerca del singolo documento o del
documento di una raccolta). XML Extender fornisce funzioni di estrazione definite
dall’utente, che è possibile specificare nella clausola SQL SELECT per ogni tipo di
dati SQL.
Il richiamo dei valori di attributo e del contenuto di un elemento è utile durante lo
sviluppo delle applicazioni, perché è possibile accedere ai dati XML come dati
relazionali. Ad esempio, è possibile che si disponga di 1000 documenti XML
memorizzati nella colonna ORDER della tabella SALES_TAB. Per richiamare i nomi
di tutti i clienti che hanno ordinato prodotti superiori ai $2500, utilizzare la
seguente istruzione SQL che l’UDF di estrazione nella clausola SELECT:
SELECT extractVarchar(Order, ’/Order/Customer/Name’) from sales_order_view
WHERE price > 2500.00
In questo esempio, l’UDF di estrazione richiama il contenuto dell’elemento
<customer> dalla colonna ORDER e lo memorizza come tipo di dati VARCHAR. Il
percorso è /Order/Customer/Name. Inoltre, il numero di valori restituiti viene ridotto
dall’utilizzo di una clausola WHERE, che specifica che soltanto il contenuto
dell’elemento <customer> con un elemento secondario <ExtendedPrice> ha un
valore superiore a 2500.00.
Tabella 12 a pagina 82 mostra le UDF che è possibile utilizzare per estrarre i valori
di attributo e il contenuto di un elemento, utilizzando la seguente sintassi funzioni
tabella o scalari.
Sintassi:
extract tipodati_richiamato(xmlobj, percorso)
tipodati_richiamato
Il tipo dati restituito dalla funzione di estrazione; può essere uno dei
seguenti tipi:
v INTEGER
v SMALLINT
v DOUBLE
v REAL
v CHAR
v VARCHAR
v CLOB
v DATE
v TIME
v TIMESTAMP
xmlobj Il nome della colonna XML da cui estrarre l’elemento o l’attributo. Questa
colonna deve essere definita come uno dei seguenti tipi definiti dall’utente
XML:
v XMLVARCHAR
v XMLCLOB come LOCATOR
v XMLFILE
Capitolo 3. Colonne XML 81
percorso
Il percorso dell’elemento o attributo nel documento XML (ad esempio
/Order/Customer/Name).
Limitazione: le UDF di estrazione possono supportare i percorsi che hanno
predicati con attributi, ma non elementi. Ad esempio, è supportato il seguente
predicato:
’/Order/Part[@color="black "]/ExtendedPrice’
Il seguente predicato non è supportato:
’/Order/Part/Shipment/[Shipdate < "11/25/00"]’
Tabella 12 mostra le funzioni di estrazione, sia in formato scalare che tabella.
Tabella 12. Le funzioni di estrazione di XML Extender
Funzione scalare Funzione tabella Nome colonna
restituito (funzione
tabella)
Tipo di ritorno
extractInteger() extractIntegers() returnedInteger INTEGER
extractSmallint() extractSmallints() returnedSmallint SMALLINT
extractDouble() extractDoubles() returnedDouble DOUBLE
extractReal() extractReals() returnedReal REAL
extractChar() extractChars() returnedChar CHAR
extractVarchar() extractVarchars() returnedVarchar VARCHAR
extractCLOB() extractCLOBs() returnedCLOB CLOB
extractDate() extractDates() returnedDate DATE
extractTime() extractTimes() returnedTime TIME
extractTimestamp() extractTimestamps() returnedTimestamp TIMESTAMP
Esempio di funzione scalare: nel seguente esempio, un valore viene inserito con il
valore chiave di attributo 1. Il valore viene estratto come numero intero e
convertito automaticamente in tipo DECIMAL.
CREATE TABLE t1(key decimal(3,2));
INSERT into t1 values
SELECT * from table(DB2XML.extractInteger(DB2XML.XMLFile
(’c:\xml\getstart.xml’), ’/Order/@Key="1"]’));
SELECT * from t1;
Esempio di funzione tabella: nel seguente esempio, ogni valore chiave (@Key) per
l’ordine di vendite viene estratto come INTEGER.
SELECT * from table(DB2XML.extractIntegers(DB2XML.XMLFile
(’c:\install_dxx\samples\extenders\db2xml\xml\getstart.xml’),
’/Order/@Key’)) as x;
Aggiornamento dati XML
Con XML Extender, è possibile aggiornare l’intero documento XML sostituendo i
dati della colonna XML o è possibile aggiornare i valori degli elementi degli
attributi specificati.
Procedura
82 XML Extender - Amministrazione e programmazione
Per aggiornare i dati XML:
1. E’ necessario che il documento XML sia memorizzato in una tabella XML.
2. E’ necessario conoscere quali dati si desidera richiamare.
3. E’ necessario scegliere un metodo per aggiornare i dati nella tabella del
database DB2 (funzioni cast o UDF).
4. Specificare una query SQL che determini la tabella e la colonna XML da
aggiornare.
Aggiornamento di un intero documento XML
E’ possibile aggiornare un documento XML utilizzando una funzione cast
predefinita o utilizzando una memorizzazione UDF.
Aggiornamento con una funzione cast predefinita
Per ogni tipo definito dall’utente (UDT), esiste una funzione cast predefinita per
eseguire il cast del tipo base SQL per l’UDT. E’ possibile utilizzare le funzioni cast
fornite in XML Extender per aggiornare il documento XML.
Ad esempio, la seguente istruzione aggiorna il tipo XMLVARCHAR dal tipo cast
VARCHAR, assumendo che xml_buf è un host variabile che è definito come un
tipo VARCHAR.
EXEC SQL UPDATE sales_tab SET=DB2XML.XMLVarchar(:xml_buff)
Aggiornamento dei documenti XML con una memorizzazione
UDF
Per ognuno degli UTD XML Extender, esiste una UDF di memorizzazione per
importare i dati in un database DB2 da una risorsa diversa dal suo tipo base. È
possibile utilizzare una UDF di memorizzazione per aggiornare l’intero documento
XML sostituendolo.
Il seguente esempio aggiorna l’oggetto XML dal file chiamato install_dxx/samples/extenders/db2xml/xml/getstart.xml alla colonna ORDER nella tabella
SALES_TAB.
AGGIORNARE sales_tab
impostare l’ordine = db2xml.XMLVarcharFromFile(’
install_dxx/samples/extenders/db2xml/xml/getstart.xml
’)
WHERE sales_person = ’MyName’
Aggiornamento di elementi e attributi specifici di un
documento XML
Utilizzare L’UDF Aggiorna per effettuare modifiche specifiche, piuttosto che
aggiornare l’intero documento. Quando si utilizza questo UDF, si specifica il
percorso della posizione dell’elemento o dell’attributo il cui valore sarà sostituito.
Non è necessario modificare il documento XML; XML Extender effettua
automaticamente le modifiche.
Sintassi:
Aggiornare(xmlobj, percorso, valore)
La sintassi presenta i seguenti componenti:
xmlobj Il nome della colonna XML per cui il valore dell’elemento o dell’attributo
deve essere aggiornato.
Capitolo 3. Colonne XML 83
percorso
Il percorso della posizione dell’elemento o dell’elemento che deve essere
aggiornato.
value Il nuovo valore che deve essere aggiornato.
Ad esempio, la seguente istruzione sostituisce il valore dell’elemento <Customer>
con IBM:
UPDATE sales_tab
set order = db2xml.Update(order, ’/Order/Customer/Name’, ’IBM’)
WHERE sales_person = ’Sriram Srinivasan’
Occorrenze multiple: Quando si specifica un percorso della posizione nell’UDF
Aggiorna, il contenuto di ogni elemento o attributo con un percorso corrispondente
viene aggiornato con il valore fornito. Se un percorso della locazione è presente in
un documento più di una volta, l’UDF Aggiorna sostituisce tutti i valori esistenti
con il valore fornito nel parametro value.
Metodi per la ricerca di documenti XML
La ricerca di dati XML è del tutto simile al richiamo di dati XML: entrambe queste
tecniche richiamano i dati per una modifica, ma eseguono una ricerca utilizzando il
contenuto della clausola WHERE come criterio di richiamo.
XML Extender fornisce diversi metodi per la ricerca di documenti XML
memorizzati in una colonna XML. E’ possibile:
v Eseguire una ricerca nell’intera struttura del documento e restituire i risultati in
base al contenuto degli elementi o ai valori degli attributi.
v Eseguire una ricerca nella vista della colonna XML e nelle relative tabelle laterali.
v Eseguire ricerche direttamente all’interno delle tabelle laterali, per ottenere
migliori prestazioni.
v Eseguire una ricerca utilizzando le UDF di estrazione con le clausole WHERE.
v Utilizzare DB2® Net Search Extender per ricercare dati delle colonne all’interno
del contenuto strutturale per una stringa di testo.
Con XML Extender è possibile utilizzare gli indici per eseguire rapidamente
ricerche nelle colonne delle tabelle laterali. Tali colonne contengono il contenuto
dell’elemento o i valori degli attributi XML estratti dai documenti XML. Ad
esempio, nell’esempio dell’ordine di acquisto, è possibile ricercare tutti gli ordini
che hanno un prezzo esteso maggiore di 2500.00.
Inoltre, è possibile utilizzare Net Search Extender per eseguire ricerche di testo
strutturale o ricerche di testo completo. Ad esempio, è possibile che sia presente
una colonna denominata RESUME che contiene tutti i curriculum in formato XML.
Se si desidera trovare i nomi di tutte le persone che hanno competenze Java™, è
possibile utilizzare DB2 Net Search Extender per ricercare i documenti XML per
tutti i curriculum in cui l’elemento <skill> contiene la stringa di caratteri “JAVA”.
Per ulteriori informazioni, fare riferimento a DB2 Database Extenders: Net Search
Extender Administration and Programming.
La seguente sezione descrive i metodi di ricerca.
v “Ricerca nel documento XML in base alla struttura” a pagina 85
84 XML Extender - Amministrazione e programmazione
Ricerca nel documento XML in base alla struttura
Mediante le funzioni di ricerca di XML Extender, è possibile ricercare dati XML in
una colonna in base alla struttura di documenti (gli elementi e gli attributi nel
documento).
Procedure:
Per ricercare i dati, è possibile:
v Interrogare direttamente le tabelle laterali.
v Utilizzare una vista join.
v Utilizzare UDF di estrazione.
Tali metodi di ricerca sono descritti nei seguenti esempi. La tabella SALES_TAB ha
una colonna XML denominata ORDER. Questa colonna ha tre tabelle laterali,
ORDER_SIDE_TAB, PART_SIDE_TAB e SHIP_SIDE_TAB. Una vista predefinita,
sales_order_view, è stata specificata quando è stata abilitata la colonna ORDER.
Questa vista unisce le tabelle mediante 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
Esempio: ricerca mediante una interrogazione diretta sulle
tabelle laterali
L’interrogazione diretta con ricerche delle interrogazioni secondarie fornisce i
migliori risultati per una ricerca strutturale quando le tabelle laterali sono
indicizzate.
Procedura:
È possibile utilizzare una interrogazione o una interrogazione secondaria per
ricercare i dati nelle tabelle laterali.
Ad esempio, la seguente istruzione utilizza una interrogazione e una
interrogazione secondaria per eseguire una ricerca direttamente nella 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.
Esempio: ricerca mediante una vista join
XML Extender può creare una vista predefinita che unisce la tabella
dell’applicazione e le tabelle laterali utilizzando un ID univoco. È possibile
utilizzare questa vista predefinita, o qualsiasi altra vista che unisce una tabella
dell’applicazione alle tabelle laterali, per ricercare dati delle colonne e interrogare
le tabelle laterali. Questo metodo fornisce una singola vista virtuale della tabella
dell’applicazione e delle tabelle laterali. Tuttavia, più tabelle laterali vengono
create, più tempo impiega il completamento dell’interrogazione.
Capitolo 3. Colonne XML 85
Suggerimento: è possibile utilizzare l’ID root, o DXXROOT_ID (creato da XML
Extender), per unire le tabelle quando si crea la propria vista.
Ad esempio, la seguente istruzione ricerca la vista denominata
SALES_ORDER_VIEW e restituisce i valori dalla colonna SALES_PERSON in cui
gli ordini dell’elemento riga hanno un prezzo maggiore di 2500.00.
SELECT sales_person from sales_order_view
WHERE price > 2500.00
Esempio: ricerca mediante le UDF di estrazione
È inoltre possibile utilizzare le UDF di estrazione di XML Extender per ricercare
elementi e attributi quando non sono stati creati indici o tabelle laterali per la
tabella dell’applicazione. L’utilizzo delle UDF di estrazione per la scansione dei
dati XML è un processo costoso e va utilizzato solo con le clausole WHERE che
limitano il numero di documenti XML inclusi nella ricerca.
La seguente istruzione esegue una ricerca con 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, l’UDF di estrazione estrae gli elementi </Order/Customer/Name> che contengono la sottostringa IBM®.
Esempio: ricerca su elementi o attributi con ricorrenza multipla
Quando si ricerca in elementi o attributi che hanno più ricorrenze, utilizzare la
clausola DISTINCT per impedire valori duplicati.
La seguente istruzione esegue una 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 che /Order/Part/Price ha più ricorrenze e
crea una tabella laterale, PART_SIDE_TAB. La tabella PART_SIDE_TAB potrebbe
avere più di una riga con lo stesso invoice_num. L’utilizzo di DISTINCT restituisce
solo valori univoci.
Eliminazione di documenti XML
Utilizzare l’istruzione SQL DELETE per eliminare la riga contenente un documento
XML da una colonna XML. È possibile specificare una clausola WHERE per
eliminare determinati documenti.
Ad esempio, la seguente istruzione elimina tutti i documenti che hanno un valore
per <ExtendedPrice> maggiore di 2500.00:
DELETE from sales_tab
WHERE invoice_num in
(SELECT invoice_num from part_side_tab
WHERE price > 2500.00)
Le righe corrispondenti nelle tabelle laterali vengono eliminate automaticamente.
86 XML Extender - Amministrazione e programmazione
Limitazioni durante l’invocazione delle funzioni da JDBC (Java
Database)
Durante l’utilizzo di indicatori di parametri nelle funzioni, una restrizione JDBC
richiede che l’indicatore del parametro per la funzione sia associato al tipo di dati
della colonna in cui i dati restituiti verranno inseriti. La logica di selezione della
funzione non sa in che tipi di dati può trasformarsi l’argomento e pertanto non
può risolvere il riferimento.
Ad esempio, JDBC non può risolvere il seguente codice:
DB2XML.XMLdefault_casting_function(data_type)
E’ possibile utilizzare la specifica CAST per fornire un tipo per l’indicatore
parametro, ad esempio VARCHAR e quindi la logica di selezione della funzione
può procedere:
DB2XML.XMLdefault_casting_function(CAST(? AS cast_type(length))
Esempi:
Nei seguenti esempi, la tabella Sales_Tab ha tre colonne. La colonna invoice_num
presenta un tipo di dati di Char(6), la colonna sales_person presenta un tipo di
dati di Varchar(20) e la colonna order ha un tipo di dati di XMLVarchar.
Esempio 1: Nel seguente esempio, l’indicatore parametro è definito come
VARCHAR. Il parametro da passare è un documento XML, che è definito come
VARCHAR(1000) e inserito nella colonna ORDER.
String query = "insert into sales_tab(invoice_num, sales_person, order) values
(?,?,DB2XML.XMLVarchar(cast (? as varchar(1000))))";
Esempio 2: Nel seguente esempio, l’indicatore parametro è definito come
VARCHAR. Il parametro da passare è un nome file e i relativi contenuti vengono
convertiti in VARCHAR ed inseriti nella colonna ORDER.
String query = "insert into sales_tab(invoice_num, sales_person, order) values
(?,?,DB2XML.XMLVarcharfromFILE(cast (? as varchar(1000))))";
Capitolo 3. Colonne XML 87
88 XML Extender - Amministrazione e programmazione
Capitolo 4. Gestione di dati nelle raccolte XML
Raccolte XML come metodo di accesso e di memorizzazione
I dati relazionali vengono decomposti dai documenti XML in entrata o sono
utilizzati per comporre i documenti XML in uscita. I dati decomposti sono il
contenuto senza tag di un documento XML memorizzato in una o più tabelle del
database. In alternativa, i documenti XML sono composti da dati esistenti in una o
più tabelle di database. Se i dati devono essere condivisi con altre applicazioni,
potrebbe essere necessario comporre e decomporre i documenti XML in entrata e
in uscita e gestire i dati in modo da poter sfruttare le caratteristiche relazionali di
DB2®. Questo tipo di memorizzazione dei documenti XML è detto raccolta XML.
Un esempio di raccolta XML è riportato in Figura 9.
La raccolta XML è definita in un file DAD che specifica il modo in cui gli elementi
e gli attributi sono associati a una o più tabelle relazionali. La raccolta è una serie
di colonne, associate a un file DAD, che contengono i dati in un determinato
documento XML o in una serie di documenti XML. È possibile definire un nome di
raccolta abilitandola e facendo riferimento ad essa in base al nome quando si
emette una procedura memorizzata per comporre o decomporre i documenti XML.
Essa è detta raccolta XML abilitata. Alla raccolta viene assegnato un nome in modo
che possa facilmente essere eseguita con procedure memorizzate che compongono
e decompongono i documenti XML.
Quando si definisce una raccolta nel file DAD, viene utilizzato un tipo di schema
di associazione, l’associazione SQL o l’associazione RDB_node che definisce le tabelle,
le colonne e le condizioni utilizzate per associare i dati XML alle tabelle DB2. Le
associazioni SQL utilizzano le istruzioni SQL SELECT per definire le tabelle DB2 e
le condizioni utilizzate per la raccolta. L’associazione RDB_node utilizza un nodo
di database relazionali basato su XPath, detto RDB_node, che ha elementi
secondari.
Per comporre o decomporre documenti XML, sono fornite delle procedure
memorizzate. I nomi delle procedure memorizzate sono qualificati per DB2XML,
che è il nome schema di XML Extender.
Figura 9. Memorizzazione di documenti come dati senza tag nelle tabelle DB2
© Copyright IBM Corp. 1999 - 2006 89
Gestione di dati in raccolte XML
Una raccolta XML è una serie di tabelle relazionali che contengono dati associati a
documenti XML. Questo metodo di accesso e memorizzazione consente di
comporre un documento XML da dati esistenti, di decomporre un documento XML
e di utilizzare XML come metodo di scambio.
Le tabelle relazionali che costituiscono la raccolta possono essere tabelle nuove o
già esistenti che contengono i dati che devono essere utilizzati con XML Extender
per creare i documenti XML per le proprie applicazioni. I dati delle colonne in
queste tabelle non contengono tag XML; esse contengono il contenuto e i valori
associati rispettivamente a elementi e attributi. È possibile utilizzare le procedure
memorizzate per memorizzare, richiamare, aggiornare, ricercare ed eliminare i dati
della raccolta XML.
Preparazione alla composizione di documenti XML da dati
DB2
La composizione è il processo di creazione di una serie di documenti XML dai dati
relazionali in una raccolta XML. È possibile comporre documenti XML utilizzando
le procedure memorizzate. Per utilizzare tali procedure, è necessario creare un file
DAD (document access definition). Un file DAD specifica l’associazione tra il
documento XML e la struttura di tabelle DB2. Le procedure memorizzate utilizzano
il file DAD per comporre il documento XML.
Procedura::
Prima di cominciare a comporre documenti XML:
1. Associare la struttura del documento XML alle tabelle relazionali che
contengono il contenuto di elementi e i valori degli attributi.
2. Selezionare un metodo di associazione: associazione SQL o associazione
RDB_node.
3. Preparare il file DAD.
XML Extender fornisce quattro procedure memorizzate per creare i documenti
XML:
v dxxGenXML()
v dxxGenXMLCLOB()
v dxxRetrieveXML()
v dxxRetrieveXMLCLOB
Composizione di documenti mediante dxxGenXML
Utilizzare la procedura memorizzata dxxGenXML per creare il documento. Non è
necessario abilitare una raccolta per poter utilizzare questa procedura. Essa utilizza
infatti un file DAD.
La procedura memorizzata dxxGenXML crea documenti XML utilizzando dati che
sono memorizzati nelle tabelle della raccolta XML, specificate dall’elemento
<Xcollection> nel file DAD. Questa procedura memorizzata inserisce ogni
documento come una riga in una tabella di risultati. È possibile aprire un cursore
sulla tabella dei risultati e utilizzare quindi la serie di risultati. La tabella dei
risultati deve essere creata dall’applicazione e ha sempre una colonna di tipo
VARCHAR, CLOB, XMLVARCHAR o XMLCLOB utilizzata per memorizzare i dati
XML.
90 XML Extender - Amministrazione e programmazione
Inoltre, se il valore dell’elemento validation nel file DAD è YES, XML Extender
aggiunge la colonna DXX_VALID di tipo INTEGER alla tabella dei risultati se la
colonna DXX_VALID non è ancora presente nella tabella. XML Extender inserisce
un valore pari a 1 per un documento XML valido e 0 per un documento non
valido.
La procedura memorizzata dxxGenXML consente di specificare il numero massimo
di righe che devono essere generate nel risultato. La specifica del numero massimo
di righe velocizza l’elaborazione. La procedura memorizzata restituisce il numero
reale di righe nella tabella e i codici di ritorno e i messaggi.
La corrispondente procedura per la decomposizione è dxxShredXML; anche questa
utilizza il DAD come parametro di input e non richiede che la raccolta XML sia
abilitata.
Procedura:
Per comporre un documento XML utilizzando la procedura memorizzata
dxxGenXML, integrare una chiamata alla procedura nell’applicazione utilizzando
la seguente dichiarazione:
dxxGenXML(CLOB(100K) DAD, /* input */
char(32 resultTabName) resultTabName, /* input */
integer overrideType, /* input */
varchar(varchar_value) override, /* input */
integer maxRows, /* input */
integer numRows, /* output */
long returnCode, /* output */
varchar(1024) returnMsg) /* output */
Esempio: il seguente esempio crea un documento XML:
#include "dxx.h"
#include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
SQL TYPE is CLOB(100K) dad; /* DAD */
SQL TYPE is CLOB_FILE dadFile; /* file DAD */
char result_tab[32]; /* nome della tabella dei risultati */
char override[2]; /* override, impostata su NULL*/
short overrideType; /* definito in dxx.h */
short max_row; /* numero massimo di righe */
short num_row; /* numero reale di righe */
long returnCode; /* codice ritorno errore */
char returnMsg[1024]; /* testo messaggio errore */
short dad_ind;
short rtab_ind;
short ovtype_ind;
short ov_ind;
short maxrow_ind;
short numrow_ind;
short returnCode_ind;
short returnMsg_ind;
EXEC SQL END DECLARE SECTION;
/* crea la tabella */
EXEC SQL CREATE TABLE xml_order_tab (xmlorder XMLVarchar);
/* legge i dati da un file su un CLOB */
Capitolo 4. Gestione di dati nelle raccolte XML 91
strcpy(dadfile.name,"install_dxx
/samples/dad/getstart_xcollection.dad");
dadfile.name_length = strlen("install_dxx
/samples/dad/getstart_xcollection.dad");
dadfile.file_options = SQL_FILE_READ;
strcpy(dadfile.name,"install_dxx
/samples/extenders/db2xml/samples/dad/getstart_xcollection.dad");
dadfile.name_length = strlen("install_dxx
/samples/extenders/db2xml/samples/dad/getstart_xcollection.dad");
dadfile.file_options = SQL_FILE_READ;
EXEC SQL VALUES (:dadfile) INTO :dad;
strcpy(result_tab,"xml_order_tab");
override[0] = ’\0’;
overrideType = NO_OVERRIDE;
max_row = 500;
num_row = 0;
returnCode = 0;
msg_txt[0] = ’\0’;
dad_ind = 0;
rtab_ind = 0;
ov_ind = -1;
ovtype_ind = 0;
maxrow_ind = 0;
numrow_ind = -1;
returnCode_ind = -1;
returnMsg_ind = -1;
/* Richiama la procedura memorizzata */
EXEC SQL CALL db2xml.dxxGenXML(:dad:dad_ind;
:result_tab:rtab_ind,
:overrideType:ovtype_ind,:override:ov_ind,
:max_row:maxrow_ind,:num_row:numrow_ind,
:returnCode:returnCode_ind,:returnMsg:returnMsg_ind);
Una volta richiamata la procedura memorizzata, la tabella dei risultati conterrà 250
righe in quanto l’interrogazione SQL specificata nel file DAD ha generato 250
documenti XML.
Composizione di documenti mediante dxxRetrieveXML
La procedura memorizzata dxxRetrieveXML opera allo stesso modo della
procedura dxxGenXML, tranne per il fatto che utilizza il nome di una raccolta
XML abilitata invece che un file DAD. Quando una raccolta XML viene abilitata,
un file DAD viene memorizzato nella tabella XML_USAGE. Pertanto, XML
Extender richiama il file DAD e lo utilizza per comporre il documento nello stesso
modo in cui fa la procedura memorizzata dxxGenXML.
La corrispondente procedura per la decomposizione è dxxInsertXML; anche questa
utilizza il nome di una raccolta XML abilitata.
Procedura:
Per comporre un documento XML utilizzando la procedura memorizzata
dxxRetrieveXML, integrare una chiamata alla procedura nell’applicazione
utilizzando la seguente dichiarazione:
dxxRetrieveXML(
varchar(collectionName) collectionName /*input*/
varchar(resultTabName) resultTable /*input*/
92 XML Extender - Amministrazione e programmazione
varchar(resultColumn) resultColumn /*input*/
varchar(validColumn) validColumn /*input*/
integer overrideType /*input*/
varchar(varchar_value) override /*input*/
integer maxRows /*input*/
integer numRows /*output*/
integer returnCode /*output*/
varchar(1024) returnMsg /*output*/
Esempio: il seguente è un esempio di una chiamata a dxxRetrieveXML(). Si assuma
che sia stata creata una tabella di risultati denominata XML_ORDER_TAB e che la
tabella abbia una colonna di tipo XMLVARCHAR.
#include "dxx.h"
#include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char collection; /* buffer dad */
char result_tab[32]; /* nome della tabella dei risultati */
char override[2]; /* override, impostata su NULL*/
short overrideType; /* definito in dxx.h */
short max_row; /* numero massimo di righe */
short num_row; /* numero reale di righe */
long returnCode; /* codice ritorno errore */
char returnMsg[1024]; /* testo messaggio errore */
short collection_ind;
short rtab_ind;
short ovtype_ind;
short ov_ind;
short maxrow_ind;
short numrow_ind;
short returnCode_ind;
short returnMsg_ind;
EXEC SQL END DECLARE SECTION;
/* crea la tabella */
EXEC SQL CREATE TABLE xml_order_tab (xmlorder XMLVarchar);
/* inizializza la variabile host e gli indicatori */
strcpy(collection,"sales_ord");
strcpy(result_tab,"xml_order_tab");
override[0] = ’\0’;
overrideType = NO_OVERRIDE;
max_row = 500;
num_row = 0;
returnCode = 0;
msg_txt[0] = ’\0’;
collection_ind = 0;
rtab_ind = 0;
ov_ind = -1;
ovtype_ind = 0;
maxrow_ind = 0;
numrow_ind = -1;
returnCode_ind = -1;
returnMsg_ind = -1;
/* Richiama la procedura memorizzata */
EXEC SQL CALL db2xml.dxxRetrieveXML(:collection:collection_ind;
:result_tab:rtab_ind,
:result_colname:rcol_ind,
:valid_colname:vcol_ind,
:overrideType:ovtype_ind,:override:ov_ind,
:max_row:maxrow_ind,:num_row:numrow_ind,
:returnCode:returnCode_ind,:returnMsg:returnMsg_ind);
Capitolo 4. Gestione di dati nelle raccolte XML 93
Argomenti correlati:
v “Procedure memorizzate di composizione di XML Extender - Panoramica” a
pagina 191
v “File DAD per le raccolte XML” a pagina 167
v “Percorsi di posizioni” a pagina 110
v “Schemi di associazione per raccolte XML” a pagina 101
v “Raccolte XML come metodo di accesso e di memorizzazione” a pagina 89
Attività correlate:
v “Composizione di raccolte XML utilizzando l’associazione RDB_node” a pagina
62
v “Decomposizione di una raccolta XML utilizzando l’associazione RDB_node” a
pagina 66
v “Ricerca delle raccolte XML” a pagina 100
v “Fogli di stile per una raccolta XML” a pagina 109
v “Aggiornamento ed eliminazione di dati in raccolte XML” a pagina 98
Decomposizione di documenti XML in dati di database DB2
Per decomporre un documento XML è necessario analizzare i dati all’interno di un
documento XML e memorizzarli in tabelle relazionali. XML Extender fornisce
procedure memorizzate per decomporre i dati XML dai documenti XML di origine
nelle tabell relazionali. Per utilizzare queste procedure memorizzate, è necessario
creare un file DAD che specifichi l’associazione tra il documento XML e una
struttura di tabelle DB2. Le procedure memorizzate utilizzano il file DAD per
decomporre il documento XML.
Prima di decomporre un documento XML in dati di database DB2:
1. Associare la struttura del documento XML alle tabelle relazionali che
contengono il contenuto di elementi e i valori degli attributi.
2. Preparare il file DAD utilizzando l’associazione RDB_node.
3. Facoltativo: abilitare la raccolta XML.
Procedura::
Utilizzare una delle due procedure memorizzate (dxxShredXML() o dxxInsertXML)
fornite da DB2 XML Extender per decomporre i documenti XML.
dxxShredXML()
Questa procedura memorizzata viene utilizzata per le applicazioni che
eseguono occasionalmente degli aggiornamenti o per le applicazioni che
non desiderano un sovraccarico di gestione dei dati XML. La procedura
dxxShredXML() non richiede una raccolta abilitata, ma utilizza un file
DAD.
La procedura dxxShredXML() invece utilizza due parametri di input, un
file DAD e il documento XML che deve essere decomposto, e restituisce
due parametri di output: un codice di ritorno e un messaggio. Essa
inserisce i dati da un documento XML in una raccolta XML in base alla
specifica <Xcollection> nel file DAD di input. La procedura memorizzata
dxxShredXML() quindi decompone il documento XML e inserisce i dati
XML senza tag nelle tabelle specificate nel file DAD. Si assume che le
tabelle utilizzate nell’elemento <Xcollection> del file DAD esistano e che le
94 XML Extender - Amministrazione e programmazione
colonne corrispondano ai tipi di dati specificati nell’associazione DAD. Se
ciò non è vero, verrà restituito un messaggio di errore.
La corrispondente procedura per la decomposizione è dxxGenXML(); anche
questa utilizza il DAD come parametro di input e non richiede che la
raccolta XML sia abilitata.
Per decomporre una raccolta XML con dxxShredXML()
Integrare una chiamata alla procedura nell’applicazione utilizzando la
seguente dichiarazione della procedura memorizzata:
dxxShredXML(CLOB(100K) DAD, /* input */
CLOB(1M) xmlobj, /* input */
long returnCode, /* output */
varchar(1024) returnMsg) /* output */
Esempio: il seguente è un esempio di una chiamata a dxxShredXML():
#include "dxx.h"
#include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
SQL TYPE is CLOB(100K) dad; /* DAD*/
SQL TYPE is CLOB_FILE dadFile; /* file DAD */
SQL TYPE is CLOB(1M) xmlDoc; /* documento XML di input */
SQL TYPE is CLOB_FILE xmlFile; /* file XML di input */
long returnCode; /* codice errore */
char returnMsg[1024]; /* testo messaggio di errore */
short dad_ind;
short xmlDoc_ind;
short returnCode_ind;
short returnMsg_ind;
EXEC SQL END DECLARE SECTION;
/* inizializza la variabile host e gli indicatori */
strcpy(dadFile.name,
"install_dxx/samples/extenders/db2xml/dad/
getstart_xcollection.dad");
dadFile.name_length=strlen("install_dxx
/samples/extenders/db2xml/dad/getstart_xcollection.dad");
dadFile.file_option=SQL_FILE_READ;
strcpy(xmlFile.name,"install_dxx
/samples/extenders/db2xml/xml/getstart_xcollection.xml");
xmlFile.name_length=strlen
("install_dxx/samples/extenders/db2xml/xml
/getstart_xcollection.xml");
xmlFile.file_option=SQL_FILE_READ;
SQL EXEC VALUES (:dadFile) INTO :dad;
SQL EXEC VALUES (:xmlFile) INTO :xmlDoc;
returnCode = 0;
returnMsg[0] = ’\0’;
dad_ind = 0;
xmlDoc_ind = 0;
returnCode_ind = -1;
returnMsg_ind = -1;
/* Richiama la procedura memorizzata */
EXEC SQL CALL db2xml.dxxShredXML(:dad:dad_ind;
:xmlDoc:xmlDoc_ind,
:returnCode:returnCode_ind,
:returnMsg:returnMsg_ind);
Capitolo 4. Gestione di dati nelle raccolte XML 95
dxxInsertXML()
Questa procedura memorizzata viene utilizzata per le applicazioni che
eseguono gli aggiornamenti in maniera regolare. La procedura
dxxInsertXML() funziona esattamente come dxxShredXML(), tranne per il
fatto che dxxInsertXML() utilizza la raccolta XML integrata come primo
parametro di input.
La procedura memorizzata dxxInsertXML() inserisce i dati da un
documento XML in una raccolta XML abilitata, associata a un file DAD. Il
file DAD contiene le specifiche per le tabelle di raccolta e l’associazione. Le
tabelle di raccolta vengono controllate o create in base alle specifiche
nell’elemento <Xcollection>. La procedura memorizzata dxxInsertXML()
quindi decompone il documento XML in base all’associazione e inserisce i
dati XML senza tag nelle tabelle della raccolta XML specificata.
La corrispondente procedura per la decomposizione è dxxRetrieveXML();
anche questa utilizza il nome di una raccolta XML abilitata.
Procedura:
Per decomporre una raccolta XML: dxxInsertXML():
Integrare una chiamata alla procedura nell’applicazione utilizzando la
seguente dichiarazione della procedura memorizzata:
dxxInsertXML(char(
) collectionName, /* input */
CLOB(1M) xmlobj, /* input */
long returnCode, /* output */
varchar(1024) returnMsg) /* output */
Esempio: il seguente è un esempio di una chiamata a dxxInsertXML():
#include "dxx.h"
#include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char collection[64]; /* nome della raccolta XML */
SQL TYPE is CLOB_FILE xmlFile; /* file XML di input */
SQL TYPE is CLOB(1M) xmlDoc; /* doc XML di input */
long returnCode; /* codice errore */
char returnMsg[1024]; /* testo messaggio di errore */
short collection_ind;
short xmlDoc_ind;
short returnCode_ind;
short returnMsg_ind;
EXEC SQL END DECLARE SECTION;
/* inizializza la variabile host e gli indicatori */
strcpy(collection,"sales_ord")strcpy
(xmlobj.name,"install_dxx/samples/extenders/db2xml
/xml/getstart_xcollection.xml");
xmlobj.name_length=strlen("install_dxx/samples/extenders/db2xml
/xml/getstart_xcollection.xml");
xmlobj.file_option=SQL_FILE_READ;
SQL EXEC VALUES (:xmlFile) INTO (:xmlDoc);
returnCode = 0;
returnMsg[0] = ’\0’;
collection_ind = 0;
xmlobj_ind = 0;
returnCode_ind = -1;
returnMsg_ind = -1;
/* Richiama la procedura memorizzata */
96 XML Extender - Amministrazione e programmazione
EXEC SQL CALL DB2XML.dxxInsertXML
(:collection:collection_ind;
:xmlDoc:xmlDoc_ind,
:returnCode:returnCode_ind,:returnMsg:returnMsg_ind);
Abilitazione di una raccolta XML per la decomposizione
Nella maggior parte dei casi, prima di poter utilizzare le procedure memorizzate è
necessario abilitare una raccolta XML. I casi in cui tale abilitazione è necessaria
sono:
v Quando vengono decomposti documenti XML in nuove tabelle, una raccolta
XML deve essere abilitata in quanto tutte le tabelle nella raccolta XML vengono
create da XML Extender una volta abilitata la raccolta.
v Quando si conserva la sequenza di elementi e attributi che hanno più ricorrenze.
XML Extender conserva solo l’ordine di sequenza degli elementi e degli attributi
con più ricorrenze per le tabelle che vengono create quando viene abilitata una
raccolta. Quando i documenti XML vengono decomposti in tabelle relazionali
esistenti, non è garantito che l’ordine della sequenza venga conservato.
Fare riferimento alla sezione relativa al comando di gestione dxxadm per
informazioni sull’opzione enable_collection.
Se si desidera inviare il file DAD quando le tabelle sono già presenti nel database,
non è necessario abilitare una raccolta XML.
Limiti di dimensione delle tabelle di decomposizione
La decomposizione utilizza l’associazione RDB_node per specificare il modo in cui
un documento XML viene decomposto in tabelle di database DB2 estraendo i
valori di elementi e attributi e memorizzandoli nelle righe delle tabelle. I valori di
ogni documento XML vengono memorizzati in una o più tabelle di database DB2.
Ogni tabella può contenere un massimo di 10240 righe decomposte da ogni
documento.
Ad esempio, se un documento XML viene decomposto in cinque tabelle, ognuna di
queste potrà avere un massimo di 10240 righe per quel documento particolare.
L’utilizzo di elementi a più ricorrenze (elementi con percorsi delle posizioni che
possono essere presenti più di una volta nella struttura XML) influenza il numero
di righe. Ad esempio, un documento che contiene un elemento <Part> presente 20
volte può essere decomposto come 20 righe in una tabella. Quando si utilizzano
elementi a più ricorrenze, tenere presente che è possibile decomporre un numero
massimo di 10240 righe in una tabella da un singolo documento.
Argomenti correlati:
v “Procedure memorizzate di decomposizione di XML Extender - Panoramica” a
pagina 202
Attività correlate:
v “Richiamo delle procedure memorizzate XML Extender” a pagina 183
v “Decomposizione di una raccolta XML utilizzando l’associazione RDB_node” a
pagina 66
Riferimenti correlati:
v “Procedura memorizzata dxxInsertXML()” a pagina 203
v “Procedura memorizzata dxxShredXML()” a pagina 202
Capitolo 4. Gestione di dati nelle raccolte XML 97
Aggiornamento ed eliminazione di dati in raccolte XML
È possibile aggiornare, eliminare, ricercare e richiamare raccolte XML. Tuttavia, lo
scopo di utilizzare una raccolta XML è memorizzare o richiamare dati senza tag in
tabelle di database. I dati nelle tabelle di database esistenti non hanno nulla a che
fare con i documenti XML in entrata; le operazioni di aggiornamento, eliminazione
e ricerca sono costituite da un normale accesso SQL a queste tabelle.
XML Extender consente di eseguire operazioni sui dati da una vista di raccolte
XML. È possibile eseguire le istruzioni SQL UPDATE e DELETE per modificare i
dati utilizzati per comporre i documenti XML e pertanto aggiornare la raccolta
XML. L’esecuzione di operazioni SQL sulle tabelle di raccolta influenza i
documenti generati.
v Per aggiornare un documento, non eliminare la riga contenente la chiave
primaria della tabella, ovvero la riga della chiave esterna delle altre tabelle di
raccolta. Quando la riga della chiave primaria e della chiave esterna viene
eliminata, viene eliminato anche il documento.
v Per sostituire o eliminare valori di elementi ed attributi, è possibile eliminare e
inserire righe nelle tabelle di livello inferiore senza eliminare il documento.
v Per eliminare un documento, eliminare la riga che costituisce l’elemento
element_node superiore specificato nel file DAD.
Aggiornamento di dati in una raccolta XML
XML Extender consente di aggiornare i dati senza tag memorizzati nelle tabelle di
raccolta XML. Aggiornando i valori delle tabelle di raccolta XML, si aggiorna il
testo di un elemento XML o il valore di un attributo XML. Gli aggiornamenti
possono eliminare anche un’istanza di dati da elementi o attributi ricorrenti.
Da un punto di vista SQL, la modifica del valore dell’elemento o dell’attributo è
un’operazione di aggiornamento e l’eliminazione di un’istanza di un elemento o di
un attributo è un’operazione di eliminazione. Da un punto di vista XML, se è
presente il testo dell’elemento o il valore dell’attributo dell’elemento root
element_node, il documento XML sarà ancora presente e pertanto questa sarà
un’operazione di aggiornamento. Le operazioni SQL sulle tabelle di raccolta
influenzano i documenti che verranno generati dalle tabelle.
Requisiti: quando si aggiornano i dati in una raccolta XML, osser vare le seguenti
regole:
v Specificare la relazione tra chiave primaria e chiave esterna tra le tabelle di
raccolta quando le tabelle esistenti hanno questa relazione. In caso contrario,
verificare che le colonne possano essere unite.
v Includere la condizione join specificata nel file DAD:
– Per l’associazione SQL, includere la condizione join nell’elemento
<SQL_stmt>.
– Per l’associazione RDB_node, includere la condizione join nell’elemento
<condition> superiore del nodo di elementi root.
Aggiornamento di elementi e di valori di attributi
In una raccolta XML, il testo degli elementi e il valore di attributi sono associati
alle colonne nelle tabelle di database. Indipendentemente se i dati della colonna
erano già presenti o se sono decomposti da documenti XML in entrata, è possibile
sostituire i dati utilizzando la normale tecnica di aggiornamento SQL.
98 XML Extender - Amministrazione e programmazione
Per aggiornare un elemento o il valore di un attributo, specificare una clausola
WHERE nell’istruzione SQL UPDATE che contiene la condizione join specificata
nel file DAD.
Esempio:
UPDATE SHIP_TAB
set MODE = ’BOAT’
WHERE MODE=’AIR’ AND PART_KEY in
(SELECT PART_KEY from PART_TAB WHERE ORDER_KEY=68)
Il valore dell’elemento <ShipMode> viene aggiornato da AIR a BOAT nella tabella
SHIP_TAB, dove la chiave è 68.
Eliminazione di istanze di elementi e attributi
Per aggiornare i documenti XML composti eliminando elementi o attributi
ricorrenti più volte, eliminare una riga contenente il valore del campo che
corrisponde al valore dell’elemento o dell’attributo utilizzando la clausola WHERE.
Se non si elimina la riga contenente i valori dell’elemento superiore element_node,
l’eliminazione dei valori dell’elemento verrà considerato semplicemente un
aggiornamento del documento XML.
Ad esempio, nella seguente istruzione DELETE, viene eliminato un elemento
<shipment> specificando un valore univoco di uno degli elementi secondari.
DELETE from SHIP_TAB
WHERE DATE=’1999-04-12’
La specifica del valore DATE elimina la riga che corrisponde a questo valore. Il
documento composto originariamente conteneva due elementi <shipment>, ma
adesso ne contiene uno solo.
Eliminazione di un documento XML da una raccolta XML
È possibile eliminare un documento XML composto da una raccolta. Ciò significa
che se si ha una raccolta XML costituita da più documenti XML, è possibile
eliminarne uno. L’esecuzione di operazioni SQL sulle tabelle di raccolta influenza i
documenti generati.
Procedura:
Per eliminare un documento, eliminare una riga nella tabella che costituisce
l’elemento superiore element_node specificato nel file DAD. Questa tabella
contiene la chiave primaria per la tabella di raccolta di livello superiore e la chiave
esterna per le tabelle di livello inferiore. L’eliminazione del documento con questo
metodo funziona solo se le limitazioni di chiave primaria e chiave esterna sono
specificate in SQL e se la relazione delle tabelle riportate nel file DAD corrisponde
esattamente a tali limitazioni.
Esempio:
La seguente istruzione DELETE specifica il valore della colonna della chiave
primaria.
DELETE from order_tab
WHERE order_key=1
ORDER_KEY è la chiave primaria nella tabella ORDER_TAB, che è la tabella di
livello superiore come specificato nel file DAD. L’eliminazione di questa riga
Capitolo 4. Gestione di dati nelle raccolte XML 99
elimina un documento XML generato durante la composizione. Pertanto, dal punto
di vista XML, un documento XML viene eliminato dalla raccolta XML.
Ricerca delle raccolte XML
Questa sezione descrive la ricerca di una raccolta XML in termini di creazione di
documenti XML utilizzando criteri di ricerca e la ricerca per dati XML decomposti.
Composizione dei documenti XML utilizzando i criteri di
ricerca
Questa attività è uguale della composizione utilizzando una condizione.
Procedura:
E’ possibile specificare i criteri di ricerca utilizzando i seguenti criteri di ricerca:
v Specificare la condizione in text_node e attribute_node del file DAD
v Specificare il parametro override durante l’utilizzo delle procedure memorizzate
dxxGenXML() e dxxRetrieveXML().
Ad esempio, se si è abilitata una raccolta XML, sales_ord, utilizzando il file
DAD, order.dad, ma si desidera sovrascrivere il prezzo utilizzando i dati del
modulo derivati dal Web, è possibile sovrascrivere il valore dell’elemento DAD
<SQL_stmt>, come segue:
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
...
EXEC SQL END DECLARE SECTION;
float price_value;
/* crea la tabella */
EXEC SQL CREATE TABLE xml_order_tab (xmlorder XMLVarchar);
/* inizializza la variabile host e gli indicatori */
strcpy(collection,"sales_ord");
strcpy(result_tab,"xml_order_tab");
overrideType = SQL_OVERRIDE;
max_row = 20;
num_row = 0;
returnCode = 0;
msg_txt[0] = ’\0’;
override_ind = 0;
overrideType_ind = 0;
rtab_ind = 0;
maxrow_ind = 0;
numrow_ind = -1;
returnCode_ind = -1;
returnMsg_ind = -1;
/* richiamare price_value, ad esempio dai dati del modulo */
price_value = 1000.00 /* ad esempio*/
/* specificare la sovrascrittura */
sprintf(overwrite,
"SELECT o.order_key, customer, p.part_key, 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 from ship_tab) s
WHERE p.price > %d and s.date >’1996-06-01’ AND
100 XML Extender - Amministrazione e programmazione
p.order_key = o.order_key and s.part_key = p.part_key",
price_value);
/* Richiama la procedura memorizzata */
EXEC SQL CALL db2xml.dxxRetrieveXML(:collection:collection_ind,
:result_tab:rtab_ind,
:overrideType:overrideType_ind,:overwrite:overwrite_ind,
:max_row:maxrow_ind,:num_row:numrow_ind,
:returnCode:returnCode_ind,:returnMsg:returnMsg_ind);
The condition of price > 2500.00 in order.dad is overridden by price > ?, where ?
is based on the input variable price_value.
Ricerca dei dati XML decomposti
E’ possibile utilizzare le operazioni di query SQL normale per ricercare le tabelle di
raccolta. E’ possibile unire le tabelle di raccolta o utilizzare sottoquery e quindi
effettuare una ricerca testo-strutturale per le colonne del testo. Applicare i risultati
della ricerca strutturale per richiamare o generare il documento XML specificato.
Schemi di associazione per raccolte XML
Se si utilizza una raccolta XML, è necessario selezionare uno schema di associazione,
che specifica il modo in cui i dati XML sono rappresentati in un database
relazionale. Poiché le raccolte XML devono corrispondere alla struttura gerarchica
di documenti XML con una struttura relazionale per i database relazionali, è
necessario comprendere le differenze tra le due strutture. Figura 10 a pagina 102
mostra il modo in cui la struttura gerarchica può essere associata alle colonne delle
tabelle relazionali.
Capitolo 4. Gestione di dati nelle raccolte XML 101
XML Extender utilizza uno schema di associazione quando si compongono o si
decompongono documenti XML che si trovano in più tabelle relazionali. Prima di
creare il file DAD, è necessario comprendere il modo in cui i dati XML sono
associati alla raccolta XML.
Tipi di schemi di associazione:
Utilizzare <Xcollection> per specificare lo schema di associazione nel file DAD.
XML Extender fornisce due tipi di schemi di associazione: associazione SQL e
associazione di database relazionale (RDB_node).
associazione SQL
Questo metodo consente un’associazione diretta dai dati relazionali ai
documenti XML mediante una semplice istruzione SQL. L’associazione
SQL è utilizzata solo per la composizione. Il contenuto dell’elemento
<SQL_stmt> deve essere un’istruzione SQL valida. L’elemento <SQL_stmt>
specifica le colonne nella clausola SELECT che sono associate agli elementi
o agli attributi XML nel DAD. Quando definiti per la composizione di
documenti XML, i nomi delle colonne nella clausola SELECT
dell’istruzione SQL sono utilizzati per associare il valore di un
nodo_attributo o del contenuto di un nodo_testo alle colonne che hanno lo
Figura 10. Struttura di documenti XML associata a colonne di tabelle relazionali
102 XML Extender - Amministrazione e programmazione
stesso attributo_name. La clausola FROM definisce le tabelle contenenti i
dati, mentre la clausola WHERE specifica join e ricerca condition.
L’associazione SQL consente gli utenti DB2® di associare i dati mediante
SQL. Quando si utilizza l’associazione SQL, è necessario poter unire tutte
le tabelle in una istruzione SELECT per formare un’interrogazione. Se una
istruzione SQL non è sufficiente, provare a utilizzare l’associazione
RDB_node. Per collegare tutte le tabelle, è preferibile utilizzare una
relazione tra chiave primaria e chiave esterna tra le tabelle.
associazione RDB_node
Definisce la posizione del contenuto di un elemento XML o il valore di un
attributo XML in modo che XML Extender possa determinare dove
memorizzare o richiamare i dati XML.
Questo metodo utilizza l’associazione RDB_node fornita da XML Extender,
che contiene una o più definizioni di nodo per le tabelle, le colonne
opzionali e le condizioni opzionali. Gli elementi <table> e <column> nel
DAD definiscono il modo in cui i dati XML devono essere memorizzati nel
database. La condizione specifica i criteri per la selezione dei dati XML o il
modo con cui unire le tabelle delle raccolte XML.
Per definire uno schema di associazione, è necessario creare un file DAD con un
elemento <Xcollection>. Figura 11 a pagina 104 mostra un frammento di un file
DAD di esempio con un’associazione SQL per una raccolta XML, che compone una
serie di documenti XML dai dati in tre tabelle relazionali.
Capitolo 4. Gestione di dati nelle raccolte XML 103
XML Extender fornisce diverse procedure memorizzate che gestiscono i dati in una
raccolta XML. Tali procedure memorizzate supportano entrambi i tipi di
associazione.
Argomenti correlati:
v “Requisiti per l’associazione RDB_Node” a pagina 106
v “Requisiti per l’utilizzo dell’associazione SQL”
v “File DAD per le raccolte XML” a pagina 167
Attività correlate:
v “Composizione di raccolte XML utilizzando l’associazione RDB_node” a pagina
62
v “Composizione dei documenti XML utilizzando l’associazione SQL” a pagina 59
v “Decomposizione di una raccolta XML utilizzando l’associazione RDB_node” a
pagina 66
Requisiti per l’utilizzo dell’associazione SQL
Requisiti durante l’utilizzo dell’associazione SQL
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "install_dxx/samples/extenders/db2xml/dtd/dad.dtd">
<DAD>
<dtdid>install_dxx/samples/extenders/db2xml/dad/getstart.dtd</dtdid>
<validation>YES</validation>
<Xcollection>
<SQL_stmt>
SELECT o.order_key, customer, p.part_key, quantity, price, tax, date,
ship_id, mode, comment
FROM order_tab o, part_tab p,
table(select substr(char(timestamp
(generate_unique())),16)
as ship_id, date, mode, from ship_tab)
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
"install_dxx/samples/extenders/db2xml/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>
Figura 11. Schema di associazione SQL
104 XML Extender - Amministrazione e programmazione
In questo schema di associazione, è necessario specificare l’elemento
<SQL_stmt> interno all’elemento DAD <Xcollection>. E’ necessario che
<SQL_stmt> contenga una singola istruzione SQL che possa unire tabelle
relazionali multiple con la query predicate. In aggiunta, le seguenti clausole
sono obbligatorie:
v clausola SELECT
– Assicura che il nome della colonna si a univoco. Se due tabelle hanno
lo stesso nome di colonna, utilizzare la parola chiave AS per creare un
nome alternativo per una delle due.
– Raggruppare le colonne della stessa tabella insieme e ordinare le
tabelle secondo il livello della struttura così come le tabelle si
associano alla struttura gerarchica del relativo documento XML. La
prima colonna in ogni raggruppamento di colonna è un oggetto ID.
Nella clausola SELECT, è necessario che le colonne delle tabelle di
livello più alto precedano le colonne delle tabelle di livello più basso.
Il seguente esempio dimostra la relazione gerarchica tra le tabelle:
SELECT o.order_key, customer, p.part_key, quantity, price, tax,
ship_id, date, mode
In questo esempio, le colonne order_key e customer della tabella
ORDER_TAB hanno il livello relazionale più alto poiché si trovano
più in alto nella struttura gerarchica del documento XML. Le colonne
ship_id, date e mode della tabella SHIP_TAB si trovano al livello
relazionale più basso.
– Utilizzare una chiave candidata a singola colonna all’inizio di ogni
livello. Se questa chiave non è disponibile in una tabella, la query ne
deve generare una per la tabella che utilizza una espressione della
tabella e la funzione generate_unique(). Nell’esempio precedente,
o.order_key è la chiave primaria per ORDER_TAB e part_key è la
chiave primaria per PART_TAB. Si trovano all’inizio del relativo
gruppo di colonne che devono essere selezionate. ship_id viene
generata come chiave primaria poiché la tabella SHIP_TAB non
presenta una chiave primaria. ship_id viene elencata come la prima
colonna per il gruppo della tabella SHIP_TAB. Utilizzare la clausola
FROM per generare la colonna della chiave primaria, come mostrato
nel seguente esempio.v clausola FROM
– Utilizza un’espressione della tabella e la funzione generate_unique()
per generare una singola chiave per le tabelle che non presentano una
chiave primaria singola. Ad esempio:
FROM order_tab as o, part_tab as p,
table(select substr
(char(timestamp(generate_unique())),16)
as
ship_id, date, mode, part key from ship_tab) as s
In questo esempio, una chiave candidata della colonna singola viene
generata con la funzione generate_unique() e viene fornito un alias
chiamato ship_id.
– Utilizzare un nome alternativo quando si rende necessario operare
una distinzione della colonna. Ad esempio, è possibile utilizzare o per
le colonne nella tabella ORDER_TAB, p per le colonne nella tabella
PART_TAB e s per le colonne nella tabella SHIP_TAB.v clausola WHERE
Capitolo 4. Gestione di dati nelle raccolte XML 105
– Specifica una relazione della chiave primaria esterna così come le
condizioni di associazione che uniscono le tabelle nella raccolta Ad
esempio:
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
– Specificare ogni altra condizione di ricerca nel predicato. E’ possibile
utilizzare ogni predicato valido.v clausola ORDER BY
– Definisce la clausola ORDER BY alla fine di SQL_stmt. Assicurarsi che
non vi sia nulla dopo i nomi della colonna come ASC o DESC.
– Assicurarsi che i nomi della colonna corrispondano ai nomi della
colonna nella clausola SELECT.
– Elencare tutti gli ID dell’oggetto nel medesimo ordine relativo così
come appaiono nella clausola SELECT.
– Un identificatore può essere generato utilizzando un’espressione della
tabella e la funzione generate_unique() o una funzione definita
dall’utente.
– Conservare l’ordine decrescente della gerarchia delle entità. E’
necessario che la prima colonna specificata nella clausola ORDER BY
sia la prima colonna elencata per ciascuna entità. Il mantenimento
dell’ordine assicura che i documenti XML che devono essere generati
non contengano duplicati errati.
– Non qualificare le colonne nella clausola ORDER BY con un nome
schema o tabella.
L’elemento <SQL_stmt> è più potente poiché è possibile specificare
qualsiasi predicato nella relativa clausola WHERE, finchè l’espressione nel
predicato utilizza le colonne nelle tabelle.
Riferimenti correlati:
v Appendice A, “Esempi”, a pagina 287
Requisiti per l’associazione RDB_Node
Quando si utilizza RDB_Node come metodo di associazione, non utilizzare
l’elemento <SQL_stmt> nell’elemento <Xcollection> del file DAD. Utilizzare invece
l’elemento RDB_node come elemento secondario dell’elemento element_node
superiore e di ogni attribute_node e text_node.
v Elemento RDB_node per element_node superiore
L’elemento superiore element_node nel file DAD rappresenta l’elemento root del
documento XML. Specificare un RDB_node per element_node come riportato di
seguito:
– Specificare tutte le tabelle associate alla raccolta XML. Ad esempio, la
seguente associazione specifica tre tabelle nell’elemento <RDB_node> del
nodo di elementi <Order>, che è il nodo di elementi superiore:
<element_node name="Order">
<RDB_node>
<table name="order_tab"/>
<table name="part_tab"/>
<table name="ship_tab"/>
<condition>
106 XML Extender - Amministrazione e programmazione
order_tab.order_key = part_tab.order_key AND
part_tab.part_key = ship_tab.part_key
</condition>
</RDB_node>
L’elemento condition può essere vuoto o mancante solo se nella raccolta è
presente solo una tabella.
– Non esistono limitazioni sull’ordine dei predicati dell’elemento condition del
nodo root.
– Gli elementi condition possono fare riferimento al nome di una colonna un
numero illimitato di volte.
– Se si abilita una raccolta, è necessario specificare una chiave primaria per ogni
tabella. La chiave primaria può essere costituita da una o più colonne, e in
quest’ultimo caso è detta chiave composta. Specificare la chiave primaria
aggiungendo un attributo key all’elemento della tabella di RDB_node. Quando
si fornisce una chiave composta, l’attributo key sarà specificato dai nomi delle
colonne delle chiavi separati da uno spazio. Ad esempio:
<table name="part_tab" key="part_key price"/>
Le informazioni specificate per la decomposizione sono ignorate se per la
composizione viene utilizzato lo stesso DAD.
– Utilizzare l’attributo orderBy per ricomporre documenti XML contenenti
elementi o attributi con più ricorrenze alla struttura originale. Questo
attributo consente di specificare il nome di una colonna che sarà la chiave
utilizzata per conservare l’ordine del documento. L’attributo orderBy è parte
dell’elemento della tabella nel file DAD ed è un attributo opzionale. Quando
si decompongono i documenti XML in una raccolta XML, è possibile che
venga perso l’ordine dei valori di elementi e attributi presenti più volte a
meno che non si specifichi l’ordine in un file DAD. Per conservare questo
ordine, è necessario utilizzare lo schema di associazione RDB_node e
specificare l’attributo orderBy per la tabella contenente l’elemento root in
RDB_node.
Specificare il nome della tabella e il nome della colonna in <table>tag.
v Elemento RDB_node per ogni attribute_node e text_node
XML Extender deve sapere da dove richiamare i dati nel database. XML
Extender deve anche conoscere la posizione del database in cui inserire il
contenuto da un documento XML. È necessario specificare un RDB_node per
ogni nodo di attributi e di testo. È inoltre necessario specificare i nomi di tabelle
e colonne; il valore condition è facoltativo.
1. Specificare il nome della tabella contenente i dati della colonna. Il nome della
tabella deve essere incluso nell’elemento RDB_node dell’elemento
element_node superiore. In questo esempio, per text_node dell’elemento
<Price>, la tabella viene specificata come PART_TAB.
<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>
Capitolo 4. Gestione di dati nelle raccolte XML 107
2. Specificare il nome della colonna che contiene i dati per il testo
dell’elemento. Nell’esempio precedente, la colonna è specificata come PRICE.
3. Specificare una condizione query se si desidera che i documenti XML
vengano generati utilizzando tale condizione. Soltanto i dati che rispondono
a tale condizione saranno presenti nei documenti XML generati. La
condizione deve essere una clausola WHERE valida. Nell’esempio
precedente, la condizione è specificata come price > 2500.00, pertanto solo
le righe in cui il prezzo è superiore a 2500 verranno incluse nei documenti
XML.
4. Se si sta decomponendo un documento o se si abilita la raccolta XML
specificata dal file DAD, è necessario specificare il tipo di colonna per ogni
nodo di at tributi e di testo. Specificando il tipo di colonna, si garantisce che
venga creato il tipo corretto di dati per ogni colonna durante l’abilitazione di
una raccolta XML. I tipi di colonna sono specificati aggiungendo il tipo di
attributo all’elemento della colonna. Ad esempio:
<column name="order_key" type="integer"/>
Il tipo di colonna specificato durante la decomposizione di un documento
verrà ignorato per la composizione.v Mantenere l’ordine top-down della gerarchia di entità. Verificare che i nodi di
elementi siano nidificati correttamente in modo che XML Extender possa
comprendere la relazione tra gli elementi durante la composizione o la
decomposizione di documenti. Ad esempio, il seguente file DAD non nidifica
Shipment all’internodi Part:
<element_node name="Part">
...
<element_node name="ExtendedPrice">
...
</element_node>
...
</element_node> <!-- end of element Part -->
<element_node name="Shipment" multi_occurrence="YES">
<element_node name="ShipDate">
...
</element_node>
<element_node name="ShipMode">
...
</element_node>
</element_node> <!-- end of element Shipment-->
Questo file DAD produce un documento XML in cui gli elementi Part e
Shipment sono paralleli.
<Part color="black ">
<key>68</key>
<Quantity>36</Quantity>
<ExtendedPrice>34850.16</ExtendedPrice>
<Tax>6.000000e-2</Tax>
</Part>
<Shipment>
<ShipDate>1998-08-19</ShipDate>
<ShipMode>BOAT </ShipMode>
</Shipment>
Il seguente codice mostra l’elemento shipment nidificato all’interno dell’elemento
Part nel file DAD.
108 XML Extender - Amministrazione e programmazione
<element_node name="Part">
...
<element_node name="ExtendedPrice">
...
</element_node>
...
<element_node name="Shipment" multi_occurrence="YES">
<element_node name="ShipDate">
...
</element_node>
<element_node name="ShipMode">
...
</element_node>
</element_node> <!-- end of element Shipment-->
</element_node> <!-- end of element Part -->
La nidificazione dell’elemento shipment all’interno dell’elemento part produce
un file XML con Shipment come elemento secondario dell’elemento Part:
<Part color="black ">
<key>68</key>
<Quantity>36</Quantity>
<ExtendedPrice>34850.16</ExtendedPrice>
<Tax>6.000000e-2</Tax>
<Shipment>
<ShipDate>1998-08-19</ShipDate>
<ShipMode>BOAT </ShipMode>
</Shipment>
</Part>
Con l’approccio dell’associazione RDB_node, non è necessario fornire istruzioni
SQL. Tuttavia, l’inserimento di condizioni query complesse nell’elemento
RDB_node può essere più difficile.
Per una struttura secondaria del file DAD con element_nodes e attribute_nodes
associati alla stessa tabella, si verifica:
v I nodi di attributi non devono essere i primi elementi secondari dell’elemento
principale comune inferiore dei nodi di elementi associati alla stessa tabella.
v I nodi di attribute possono essere presenti in qualsiasi punto della struttura
secondaria, sempre che non siano coinvolti in una condizione join.
Limitazioni: il limite per il numero di tabelle consentite nel file DAD di
un’associazione RDB_node è 30. Il numero di colonne consentite per ogni tabella è
500. Il numero di volte in cui ogni tabella o colonna può essere specificata nei
predicati join dell’istruzione condition è illimitato.
Fogli di stile per una raccolta XML
Durante la composizione di documenti, XML Extender supporta anche le istruzione
di elaborazione per i fogli di stile, utilizzando l’elemento <stylesheet>. E’
necessario che le istruzioni di elaborazione siano interne all’elemento root
<Xcollection>, che si trova con <doctype> e <prolog> definito per la struttura del
documento XML. Ad esempio:
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "c:\dtd\dad.dtd">
<DAD>
<SQL_stmt>
...
</SQL_stmt>
<Xcollection>
...
Capitolo 4. Gestione di dati nelle raccolte XML 109
<prolog>...</prolog>
<doctype>...</doctype>
<stylesheet>?xml-stylesheet type="text/css" href="order.css"?</stylesheet>
<root_node>...</root_node>
...
</Xcollection>
...
</DAD>
Percorsi di posizioni
Un percorso di posizione definisce la posizione di un elemento o di un attributo XML
all’interno della struttura del documento XML. XML Extender utilizza il percorso
della posizione per i seguenti scopi:
v Per individuare gli elementi e gli attributi da estrarre quando si utilizzano gli
UDF di estrazione come dxxRetrieveXML.
v Per specificare l’associazione tra un elemento o un attributo XML e una colonna
DB2® quando si definisce lo schema di indicizzazione nel DAD per le colonne
XML
v Per le ricerche di testo strutturale, mediante Net Search Extender
Ad esempio, un percorso di posizione di /Order/Part/Shipment/ShipDate fa
riferimento all’elemento ShipDate, che è un elemento secondario degli elementi
Shipment, Part e Order, come riportato nel seguente esempio:
<Order>
<Part>
<Shipment>
<ShipDate>
+...
Figura 12 mostra un esempio di percorso di posizione e la relativa relazione con la
strutture del documento XML.
Il percorso della posizione viene utilizzato nelle seguenti situazioni:
Figura 12. Memorizzazione di documenti come documenti XML strutturati nella colonna di
una tabella DB2
110 XML Extender - Amministrazione e programmazione
Colonne XML
v Utilizzate per identificare gli elementi e gli attributi da estrarre o
aggiornare quando si utilizzano le funzioni definite dall’utente XML
Extender.
v Utilizzate anche per associare il contenuto di un elemento o di un
attributo XML su una tabella laterale.
Raccolte XML
Utilizzato per sovrascrivere i valori nel file DAD da una procedura
memorizzata.
Per specificare il percorso di posizione, XML Extender utilizza una serie di XML
Path Language (XPath), il linguaggio per indirizzare le parti di un documento XML.
Per ulteriori informazioni su XPath, fare riferimento alla seguente pagina Web:
http://www.w3.org/TR/xpath
Riferimenti correlati:
v “Sintassi del percorso della posizione”
Sintassi del percorso della posizione
XML Extender utilizza il percorso della posizione per navigare la struttura del
documento XML. Il seguente elenco descrive la sintassi del percorso della
posizione supportato da XML Extender. Una singola barra (/) del percorso indica
che il contesto è l’intero documento.
1. / Rappresenta l’elemento root XML. Questo è un elemento che contiene tutti
gli altri elementi nel documento.
2. /tag1
Rappresenta l’elemento tag1 sotto l’elemento root.
3. /tag1/tag2/..../tagn
Rappresenta un elemento con il nome tagn come l’elemento secondario
della catena decrescente dall’elemento root, tag1, tag2, attraverso tagn-1.
4. //tagn
Rappresenta ogni elemento con il nome tagn, dove le doppie barre (//)
denotano nessuna o più tag arbitrarie.
5. /tag1//tagn
Rappresenta ogni elemento con il nome tagn, un discendente di un
elemento con il nome tag1 sotto l’elemento root, dove le doppie barre (//)
denotano nessuna o più tag arbitrarie.
6. /tag1/tag2/@attr1
Rappresenta l’attributo attr1 di un elemento con il nome tag2, che è un
elemento secondario di un elemento tag1 sotto l’elemento root.
7. /tag1/tag2[@attr1=″5″]
Rappresenta un elemento con il nome tag2 il cui attributo attr1 ha come
valore 5. L’elemento tag2 è un elemento secondario dell’elemento tag1 sotto
l’elemento root.
8. /tag1/tag2[@attr1=″5″]/.../tagn
Rappresenta un elemento con il nome tagn, che è un elemento secondario
Capitolo 4. Gestione di dati nelle raccolte XML 111
della catena decrescente dall’elemento root, tag1, tag2, attraverso tagn-1,
dove l’attributo attr1 di tag2 ha valore 5.
Percorso della posizione semplice
Il percorso della posizione semplice è un tipo di percorso della posizione
utilizzato nel file DAD della colonna XML. Un percorso della posizione
semplice è rappresentato come una sequenza di nomi del tipo
dell’elemento collegati da una barra semplice (/). I valori di ciascun
attributo sono racchiusi in parentesi quadre che seguono il tipo
dell’elemento. Tabella 13 riassume la sintassi per il percorso della posizione
semplice.
Tabella 13. Sintassi del percorso della posizione semplice
Subject Percorso della posizione Descrizione
elemento XML /tag1/tag2/..../tagn-1/tagn Un contenuto dell’elemento
identificato dall’elemento
chiamato tagn e dai relativi
elementi principali
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 principali
Utilizzo del percorso della posizione
La sintassi del percorso della posizione è dipendente dal contesto in cui si
accede alla posizione di un elemento o attributo. Poiché XML Extender
utilizza l’associazione uno a uno tra un elemento o un attributo e una
colonna DB2, restringe le regole della sintassi per il file DAD e le funzioni.
Tabella 14 descrive in quali contesti le opzioni di sintassi vengono
utilizzate.
Tabella 14. Le restrizioni di XML Extender che utilizzano il percorso della posizione
Utilizzo del percorso della posizione Percorso della posizione supportato
Valore dell’attributo del percorso
nell’associazione DAD della colonna XML
per le tabelle laterali
/tag1/tag2/..../tagn and /tag1/tag2/@attr1
(percorso della posizione semplice descritto
in Tabella 13)
Estrazione degli UDF Tutti i percorsi della posizione1
Aggiornamento UDF Tutti i percorsi della posizione1
1 L’estrazione e aggiornamento degli UDF supporta i percorsi della posizione che
presentano predicati con attributi, ma non elementi.
Argomenti correlati:
v “Percorsi di posizioni” a pagina 110
Abilitazione di raccolte XML
L’abilitazione di una raccolta XML analizza il file DAD per identificare le tabelle e
e le colonne relative al documento XML e registra le informazioni di controllo nella
tabella XML_USAGE. L’abilitazione di una raccolta XML è facoltativa per:
v La decomposizione di un documento XML e la memorizzazione dei dati nelle
nuove tabelle di database DB2
v La composizione di un documento XML da dati esistenti in più tabelle di
database DB2
112 XML Extender - Amministrazione e programmazione
Se lo stesso file DAD è utilizzato per la composizione e la decomposizione, è
possibile abilitare la raccolta sia per la composizione che la decomposizione.
È possibile abilitare una raccolta con XML il wizard di gestione di XML Extender,
con il comando dxxadm con l’opzione enable_collection o con la procedura
memorizzata di XML Extender dxxEnableCollection().
Utilizzo del wizard di gestione:
Per abilitare una raccolta XML mediante il wizard:
1. Impostare e avviare il wizard.
2. Fare clic su Operazioni con le raccolte XML dalla finestra Launchpad. Viene
aperta la finestra Selezione un’attività.
3. Fare clic su Abilita una raccolta e quindi su Avanti. Viene aperta la finestra
Abilita una raccolta.
4. Selezionare il nome della raccolta che si desidera abilitare nel campo Nome
raccolta.
5. Specificare il nome del file DAD nel campo Nome file DAD.
6. Facoltativo: immettere il nome di un tablespace creato precedentemente nel
campo Tablespace.
Il tablespace conterrà le nuove tabelle DB2 generate per la decomposizione.
7. Fare clic su Fine per abilitare la raccolta colonna e tornare alla finestra
Launchpad.
v Se la raccolta è stata abilitata correttamente, verrà visualizzato il messaggio
Raccolta abilitata correttamente.
v Se invece la raccolta non viene eliminata correttamente, verrà visualizzato un
messaggio di errore. Ripetere i passi precedenti fino a che la raccolta viene
abilitata.
Abilitazione delle raccolte mediante il comando dxxadm:
Per abilitare una raccolta XML, immettere il comando dxxadm dalla riga comandi
DB2:
Sintassi:
�� dxxadm enable_collection nome_db insieme file_DAD
-t
tablespace ��
Parametri:
nome_db
Il nome del database .
insieme
Il nome della raccolta XML. Questo valore è utilizzato come parametro per
le procedure memorizzate della raccolta XML.
file_DAD
Il nome del file che contiene la definizione DAD (document access
definition).
Capitolo 4. Gestione di dati nelle raccolte XML 113
tablespace
Un tablespace esistente che contiene nuove tabelle DB2 che sono state
generate per la decomposizione. Se non specificato, viene utilizzato il
tablespace predefinito.
Esempio: il seguente esempio abilita una raccolta denominata sales_ord nel
database SALES_DB mediante la riga comandi. Il file DAD utilizza l’associazione
SQL.
dxxadm enable_collection SALES_DB sales_ord getstart_collection.dad
Una volta abilitata la raccolta XML, è possibile comporre o decomporre i
documenti XML mediante le procedure memorizzate di XML Extender.
Argomenti correlati:
v “Raccolte XML come metodo di accesso e di memorizzazione” a pagina 89
Attività correlate:
v “Disabilitazione delle raccolte XML”
v “Gestione di dati in raccolte XML” a pagina 90
Disabilitazione delle raccolte XML
La disabilitazione di una raccolta XML rimuove il record nella tabella
XML_USAGE che identifica tabelle e colonne come parte di una raccolta. Non
elimina le tabelle di dati. Viene disabilitata una raccolta quando si desidera
aggiornare DAD ed è necessario riabilitare una raccolta o quando si desidera
eliminare una raccolta.
È possibile disabilitare una raccolta XML con il wizard di gestione di XML
Extender, con il comando dxxadm con l’opzione disable_collection o con la
procedura memorizzata XML Extender dxxDisableCollection().
Procedura:
Per disabilitare una raccolta XML utilizzando il wizard di gestione:
1. Avviare il wizard di gestione.
2. Fare clic su Operazioni con le raccolte XML dalla finestra Launchpad per
visualizzare le attività relative alla raccolta di XML Extender. Viene aperta la
finestra Selezione un’attività.
3. Fare clic su Disabilita una raccolta XML e quindi fare clic su Avanti per
disabilitare una raccolta XML. Viene visualizzata la finestra Disabilita una
raccolta.
4. Immettere il nome della raccolta che si desidera disabilitare nel campo Nome
raccolta.
5. Fare clic su Fine per disabilitare la raccolta e ritornare alla finestra Launchpad.
v Se la raccolta è stata disabilitata correttamente, viene visualizzato il
messaggio Raccolta disabilitata correttamente.
v Se la raccolta non è stata disabilitata correttamente, viene visualizzato un
messaggio di errore. Ripetere la procedura precedente fino a quando la
raccolta non è stata disabilitata correttamente.
Per disabilitare una raccolta XML dalla riga comandi, immettere il comando
dxxadm.
114 XML Extender - Amministrazione e programmazione
Sintassi:
�� dxxadm disable_collection nome_db insieme ��
Parametri:
nome_db
Il nome del database .
insieme
Il nome della raccolta XML. Questo valore è utilizzato come parametro per
le procedure memorizzate della raccolta XML.
Esempio:
dxxadm disable_collection SALES_DB sales_ord
Argomenti correlati:
v “Raccolte XML come metodo di accesso e di memorizzazione” a pagina 89
v “Procedure memorizzate di gestione di XML Extender - Panoramica” a pagina
186
Attività correlate:
v “Gestione di dati in raccolte XML” a pagina 90
Capitolo 4. Gestione di dati nelle raccolte XML 115
116 XML Extender - Amministrazione e programmazione
Capitolo 5. Schemi XML
Lo schema XML può essere utilizzato al posto di un DTD per definire le specifiche
per il contenuto di elementi XML. Lo schema XML utilizza il formato o la sintassi
XML per definire i nomi di elementi o attributi di un documento XML e definisce
il tipo di contenuto che gli elementi e gli attributi possono contenere.
Vantaggi dell’utilizzo di schemi XML al posto dei DTD
I DTD sono più semplici da codificare e convalidare rispetto a uno schema XML.
Tuttavia, i vantaggi dell’utilizzo di uno schema XML sono riportati di seguito:
v Gli schemi XML sono documenti XML validi che possono essere elaborati da
strumenti quali XSD Editor in DB2 Developer Workbench, XML Spy o XML
Authority.
v Gli schemi XML sono più potenti dei DTD. Tutto ciò che può essere definito dal
DTD può essere definito anche dagli schemi, ma non viceversa.
v Gli schemi XML supportano una serie di tipi di dati, simili a quelli utilizzati nei
linguaggi di programmazione più comuni, e consente di creare tipi aggiuntivi. È
possibile limitare il contenuto del documento al tipo appropriato. Ad esempio, è
possibile replicare le proprietà dei campi trovati in DB2®.
v Gli schemi XML supportano espressioni regolari per impostare le limitazioni sui
dati di caratteri, il che non è possibile se si utilizza un DTD.
v Gli schemi XML forniscono un supporto migliore per i namespace XML che
consente di convalidare documenti che utilizzano più namespace e di riutilizzare
i costrutti da schemi già definiti in namespace differenti.
v Gli schemi XML forniscono un supporto migliore per la modularità e il riutilizzo
che includono e importano gli elementi.
v Gli schemi XML supportano l’ereditarietà per le definizioni di elementi, attributi
e dati.
Attività correlate:
v “Tipi di dati, elementi e attributi negli schemi” a pagina 118
Riferimenti correlati:
v “Esempi di uno schema XML” a pagina 119
Elemento complexType dello schema XML
L’elemento complexType dello schema XML è utilizzato per definire un tipo di
elemento che può essere costituito da elementi secondari. Ad esempio, le seguenti
tag mostrano la proiezione di un indirizzo in un documento XML:
<billTo country="US">
<name>Dan Jones</name>
<street>My Street</street>
<city>My Town</city>
<state>CA</state>
<zip>99999</zip>
</billTo>
© Copyright IBM Corp. 1999 - 2006 117
La struttura di questo elemento può essere definita nello schema XML come
riportato di seguito:
1 <xsd:element name="billTo" type="USAddress"/>
2 < xsd:complexType name="USAddress">
3 <xsd:sequence>
4 < xsd:element name="name" type="xsd:string"/>
5 < xsd:element name="street" type="xsd:string"/>
6 < xsd:element name="city" type="xsd:string"/>
7 < xsd:element name="state" type="xsd:string"/>
8 < xsd:element name="zip" type="xsd:decimal"/>
9 </xsd:sequence>
10 < xsd:attribute name="country"
type="xsd:NMTOKEN" use="fixed"
value="US"/>
12</xsd:complexType>
Nell’esempio precedente, si assume che il prefisso xsd sia stato collegato al
namespace dello schema XML. Le righe da 2 a 12 definiscono complexType
USAddress come una sequenza di cinque elementi e un attributo. L’ordine degli
elementi è determinato dall’ordine in cui appaiono nella tag della sequenza.
Gli elementi più interni sono dal tipo di dati xsd:string o xsd:decimal. Entrambi
sono tipi di dati semplici predefiniti.
In alternativa, è possibile utilizzare la tag <all> o la tag <choice> al posto della tag
<sequence>. Con la tag all, tutti gli elementi secondari vengono visualizzati, ma
non devono avere un ordine particolare. Con la tag choice, uno degli elementi
secondari deve essere visualizzato nel documento XML.
È inoltre possibile utilizzare un tipo di dati definiti dall’utente per definire altri
elementi.
Tipi di dati, elementi e attributi negli schemi
Tipi di dati semplici in schemi XML
Gli schemi XML forniscono un insieme di tipi di dati semplici integrati. E’ possibile
effettuare la derivata di altri tipi di dati da questi applicando delle restrizioni.
Esempio 1: L’intervallo del tipo base xsd:positiveInteger è limitato tra 0 e 100.
< xsd:element name="quantity">
< xsd:simpleType>
< xsd:restriction base="xsd:positiveInteger">
< xsd:maxExclusive value="100"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
Esempio 2: Il tipo base xsd:string è limitato da un’espressione regolare.
<xsd:simpleType name="SKU">
< xsd:restriction base="xsd:string">
< xsd:pattern value="\d{3}-[A-Z]{2}"/>
</xsd:restriction>
</xsd:simpleType>
Esempio 3: Mostra un tipo numerato basato sul tipo integrato di stringa.
<xsd:simpleType name="SchoolClass">
< xsd:restriction base="xsd:string">
< xsd:enumeration value="WI"/>
118 XML Extender - Amministrazione e programmazione
< xsd:enumeration value="MI"/>
< xsd:enumeration value="II"/>
< xsd:enumeration value="DI"/>
< xsd:enumeration value="AI"/>
</xsd:restriction>
</xsd:simpleType>
Elementi in schemi XML
Per dichiarare un elemento in uno schema XML è necessario indicare il nome e il
tipo come attributo dell’elemento element. Ad esempio:
<xsd:element name="street" type="xsd:string"/>
In aggiunta, è possibile utilizzare gli attributi minOccurs e maxOccurs per
determinare il numero massimo o minimo di volte in cui è necessario che
l’elemento appaia nel documento XML. Il valore predefinito per minOccurs e
maxOccurs è 1.
Attributi in schemi XML
Le dichiarazioni degli attributi appaiono alla fine di una definizione di un
elemento. Ad esempio:
<xsd:complexType name="PurchaseOrderType">
< xsd:sequence>
< xsd:element name="billTo" type="USAddress"/>
< xsd:sequence>
< xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>
Argomenti correlati:
v “Vantaggi dell’utilizzo di schemi XML al posto dei DTD” a pagina 117
Attività correlate:
v “funzioni di convalida” a pagina 161
Riferimenti correlati:
v “Esempi di uno schema XML”
v “Elemento complexType dello schema XML” a pagina 117
Esempi di uno schema XML
È una buona strategia scrivere gli schemi XML progettando prima la struttura di
dati del documento XML utilizzando uno strumento UML. Dopo aver progettato la
struttura, è possibile associare la struttura al documento dello schema. Di seguito è
riportato un esempio di schema XML.
1 <?xml version="1.0" encoding="UTF-8"?>
2 <xs:schema xmlns:xs=’http://www.w3.org/2001/XMLSchema’>
3
4 <xs:element name="personnel">
5 <xs:complexType>
6 <xs:sequence>
7 <xs:element ref="person" minOccurs=’1’ maxOccurs=’unbounded’/>
8 </xs:sequence>
9 </xs:complexType>
10 </xs:element>
11
12 <xs:element name="person">
13 <xs:complexType>
14 <xs:sequence>
Capitolo 5. Schemi XML 119
15 <xs:element ref="name"/>
16 <xs:element ref="email" minOccurs=’0’ maxOccurs=’4’/>
17 </xs:sequence>
18 <xs:attribute name="id" type="xs:ID" use=’required’/>
19 </xs:complexType>
20 </xs:element>
21
22 <xs:element name="name">
23 <xs:complexType>
24 <xs:sequence>
25 <xs:element ref="family"/>
26 <xs:element ref="given"/>
27 </xs:sequence>
28 </xs:complexType>
29 </xs:element>
30
31 <xs:element name="family" type=’xs:string’/>
32 <xs:element name="given" type=’xs:string’/>
33 <xs:element name="email" type=’xs:string’/>
34 </xs:schema>
Le prime due righe dichiarano che questo schema XML è compatibile con XML 1.0
e decodificato per Unicode 8 e specificano l’utilizzo del namespace standard dello
schema XML, che consente l’accesso ai tipo di dati e alle strutture di base dello
schema XML.
Le righe da 4 a 10 definiscono il personale come complexType, costituito da una
sequenza formata da 1 a n persone. Il complexType è quindi definito dalla riga 12
alla riga 20. Esso è costituito dall’elemento complexType nome e dall’elemento
email. L’elemento email è facoltativo (minOcccurs = ’0’) e può apparire un
massimo di quattro volte (maxOccurs = ’4’). Maggiore è il numero di ricorrenze di
un elemento, più tempo ci vorrà per convalidare lo schema. Per contro, in un file
DTD è possibile scegliere soltanto 0, 1 o illimitato per un elemento.
Le righe da 22 a 29 definiscono il tipo name utilizzato per il tipo person. Il tipo
name è costituito da una sequenza di un elemento family e un elemento given.
Le righe da 31 a 33 definiscono in singoli elementi, family, given e e-mail, che
contengono stringhe type che sono state dichiarate.
Istanza di un documento XML mediante lo schema
Il seguente esempio è un documento XML che è una istanza dello schema
personalnr.xsd.
1 <?xml version="1.0" encoding="UTF-8"?>
2 <personnel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:noNamespaceSchemaLocation=’personsnr.xsd’>
4
5 <person id="Big.Boss" >
6 <name><family>Boss</family><given>Big</given></name>
7 <email>[email protected]</email>
8 </person>
9
10 <person id="one.worker">
11 <name><family>Worker</family><given>One</given></name>
12 <email>[email protected]</email>
13 </person>
14
15 <person id="two.worker">
16 <name><family>Worker</family><given>Two</given></name>
17 <email>[email protected]</email>
18 </person>
19 </personnel>
120 XML Extender - Amministrazione e programmazione
Istanza di un documento XML mediante un DTD
Questo esempio mostra il modo in cui questo schema XML viene realizzato come
DTD.
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!ELEMENT email (#PCDATA)>
3 <!ELEMENT family (#PCDATA)>
4 <!ELEMENT given (#PCDATA)>
5 <!ELEMENT name (family, given)>
6 <!ELEMENT person (name, email*)>
7
8 <!ATTLIST person
9 id ID #REQUIRED>
10 <!ELEMENT personnel (person+)>
L’utilizzo di un DTD consente di impostare il numero massimo di ricorrenza di
email su 1 o illimitato.
Utilizzando questo DTD, l’istanza del documento XML sarà uguale a quella
riportata nell’esempio precedente tranne per la riga 2, che diventa:
<!DOCTYPE personnel SYSTEM "personsnr.dtd">
Argomenti correlati:
v “Vantaggi dell’utilizzo di schemi XML al posto dei DTD” a pagina 117
Attività correlate:
v “Tipi di dati, elementi e attributi negli schemi” a pagina 118
v “funzioni di convalida” a pagina 161
Riferimenti correlati:
v “Elemento complexType dello schema XML” a pagina 117
Capitolo 5. Schemi XML 121
122 XML Extender - Amministrazione e programmazione
Parte 4. Riferimento
Questa parte fornisce le informazioni sulla sintassi per il comando di gestione, gli
UDT (user-defined data types), le UDF (user-defined functions) e le procedure
memorizzate di XML Extender. Il testo dei messaggi viene fornito per le attività di
determinazione dei problemi.
© Copyright IBM Corp. 1999 - 2006 123
124 XML Extender - Amministrazione e programmazione
Capitolo 6. Comando di gestione dxxadm
Panoramica sul comando dxxadm
XML Extender fornisce un comando di gestione, dxxadm, per il completamento
delle seguenti attività di gestione:
v Abilitazione o disabilitazione di un database per XML Extender
v Abilitazione o disabilitazione di una colonna XML
v Abilitazione o disabilitazione di una raccolta XML
Argomenti correlati:
v “Strumenti di gestione per XML Extender” a pagina 35
v “Panoramica sulla gestione di XML Extender” a pagina 36
Sinstassi del comando di gestione dxxadm
�� dxxadm ’ -a enable_db parametri
disable_db
enable_column
parametri
disable_column
parametri
enable_collection
parametri
disable_collection
parametri
’ ��
Parametri:
Tabella 15. parametri dxxadm
Parametro Descrizione
enable_db Abilita le funzioni XML Extender per un
database.
disable_db Disabilita le funzioni XML Extender per un
database.
enable_column Abilita una colonna XML in modo che sia
possibile memorizzare i documenti XML nella
colonna.
disable_column Disabilita la colonna abilitata per XML.
enable_collection Abilita una raccolta XML secondo il DAD
specificato.
enable_collection Disabilita una raccolta abilitata per XML.
Opzioni del comando di gestione
Le seguenti opzioni del comando del comando dxxadm sono disponibili per i
programmatori di sistema:
v enable_column
v enable_collection
v enable_db
v disable_column
© Copyright IBM Corp. 1999 - 2006 125
v disable_collection
v disable_db
Opzione enable_db del comando dxxadm
Scopo:
Abilita le funzioni XML Extender per un database. Una volta abilitato il database,
XML Extender crea i seguenti oggetti:
v I tipi di XML Extender definiti dall’utente (UDT).
v Le funzioni di XML Extender definite dall’utente (UDF).
v La tabella di repository DTD XML Extender, DTD_REF, che memorizza i DTD e
le rispettive informazioni.
v La tabella di utilizzo XML Extender, XML_USAGE, che memorizza le
informazioni comuni per ogni colonna abilitata per XML e per ogni raccolta.
Sintassi:
�� dxxadm enable_db nome_db
-l
login
-p
password �
� -t
tablespace
, tablespace
��
Parametri:
Tabella 16. Parametri enable_db
Parametro Descrizione
db_name Il nome del database in cui si trovano i dati XML.
-l login ID utente facoltativo utilizzato per collegarsi al
database. Se non è specificato, viene utilizzato
quello corrente.
-p password Password facoltativa utilizzata per collegarsi al
database. Se non è specificata, viene utilizzata quella
corrente.
-t tablespace Nome facoltativo del tablespace esistente per
conservare le tabelle db2xml.XML_USAGE e
db2xml.DTD_REF. È possibile specificare anche un
secondo tablespace.
Se si utilizza DB2 Enterprise Server Edition con partizioni e si desidera specificare
un tablespace durante l’abilitazione del database, è necessario specificare un
gruppo di nodi al momento della creazione del tablespace. Ad esempio:
db2 "create database partition group mygroup on node (0,1)"
db2 "create regular tablespace mytb in database partition group mygroup
managed by system using (’mytb’)"
Nel suddetto esempio, occorre specificare il tablespace mytb durante l’abilitazione
del database.
Se non viene fornita alcuna opzione di tablespace al momento dell’abilitazione del
database, XML Extender verificherà se i tablespace DXXDTDRF e DXXXMLUS
126 XML Extender - Amministrazione e programmazione
sono presenti. La tabella db2xml.dtd_ref verrà creata nel tablespace DXXDTDRF se
tale tablespace esiste e la tabella db2xml.xml_usage verrà creata nel tablespace
DXXXMLUS. Se uno dei tablespace DXXDTDRF o DXXXMLUS non esiste, la
rispettiva tabella (db2xml.dtd_ref o db2xml.xml_usage) verrà creata nel tablespace
più appropriato.
Se viene fornito un solo tablespace DXXDTDRF al momento dell’abilitazione del
database, entrambe le tabelle verranno create nel tablespace specificato. Se vengono
forniti due tablespace al momento dell’abilitazione del database, la tabella
db2xml.dtd_ref verrà creata nel primo tablespace elencato e la tabella
db2xml.xml_usage verrà creata nel secondo tablespace elencato.
Esempio::
L’esempio seguente abilita il database SALES_DB.
dxxadm enable_db SALES_DB
Riferimenti correlati:
v “Panoramica sul comando dxxadm” a pagina 125
Opzione disable_db del comando dxxadm
Scopo:
Disabilita le funzioni XML Extender per un database; questa azione è chiamata
“disabilitazione database.” Quando il database è disabilitato, non può più essere
utilizzato da XML Extender. Quando XML Extender disabilita il database, elimina i
seguenti oggetti:
v I tipi di XML Extender definiti dall’utente (UDT).
v Le funzioni di XML Extender definite dall’utente (UDF).
v La tabella di repository DTD XML Extender, DTD_REF, che memorizza i DTD e
le rispettive informazioni.
v La tabella di utilizzo XML Extender, XML_USAGE, che memorizza le
informazioni comuni per ogni colonna abilitata per XML e per ogni raccolta.
Importante: è necessario disabilitare tutte le colonne XML prima di tentare di
disabilitare un database. XML Extender non può disabilitare un database che
contiene colonne o raccolte abilitate per XML Extender. È inoltre necessario
eliminare tutte le tabelle le cui colonne sono definite con tipi di XML Extender
definiti dall’utente, ad esempio XMLCLOB.
Sintassi:
�� dxxadm disable_db nome_db
-l
login
-p
password ��
Parametri:
Tabella 17. Parametri disable_db
Parametro Descrizione
db_name Il nome del database in cui si trovano i dati
XML
Capitolo 6. Comando di gestione dxxadm 127
Tabella 17. Parametri disable_db (Continua)
Parametro Descrizione
-l login L’ID utente utilizzato per collegarsi al
database. Se non è specificato, viene
utilizzato quello corrente.
-p password La password utilizzata per collegarsi al
database. Se non è specificata, viene
utilizzata quella corrente.
Esempio::
L’esempio seguente disabilita il database SALES_DB.
dxxadm disable_db SALES_DB
Argomenti correlati:
v “Procedure memorizzate di gestione di XML Extender - Panoramica” a pagina
186
v Capitolo 13, “Tabelle del supporto di gestione di XML Extender”, a pagina 261
Opzione enable_column del comando dxxadm
Scopo:
Collega a un database e abilita una colonna XML in modo che possa contenere gli
UID di XML Extender. Quando si abilita una colonna, XML Extender effettua le
seguenti attività:
v Determina se la tabella XML ha una chiave primaria; in caso contrario XML
Extender modifica la tabella XML e aggiunge una colonna denominata
DXXROOT_ID.
v Crea tabelle laterali specificate nel file DAD con una colonna contenente un
identificativo univoco per ogni riga nella tabella XML. Questa colonna è l’ID
root specificato dall’utente o DXXROOT_ID indicato da XML Extender.
v Crea facoltativamente una vista predefinita per la tabella XML e le relative
tabelle laterali in alcuni casi utilizzando un nome specificato dall’utente.
Sintassi:
�� dxxadm enable_column nome_db nome_tab nome_colonna file_DAD �
� -t
tablespace
-v
vista_predefinita
-r
id_root �
� -l
login
-p
password ��
Parametri:
Tabella 18. Parametri enable_column
Parametro Descrizione
db_name Il nome del database in cui si trovano i dati
XML.
nome_tab Il nome della tabella in cui si trova la
colonna XML.
nome_colonna Il nome della colonna XML.
128 XML Extender - Amministrazione e programmazione
Tabella 18. Parametri enable_column (Continua)
Parametro Descrizione
DAD_file Il nome del file DAD che associa il
documento XML alle tabelle laterali e alla
colonna XML.
-t tablespace Il tablespace che contiene le tabelle laterali
associate alla colonna XML. Se non è
specificato, viene utilizzato quello
predefinito.
-v vista_predefinita Il nome della vista predefinita che unisce le
tabelle laterali e la colonna XML.
-r id_root Il nome della chiave primaria nella tabella di
colonne XML da utilizzare come id_root per
le tabelle laterali. L’id_root è facoltativo.
-l login L’ID utente utilizzato per collegarsi al
database. Se non è specificato, viene
utilizzato quello corrente.
-p password La password utilizzata per collegarsi al
database. Se non è specificata, viene
utilizzata quella corrente.
Se si utilizza IBM DB2 Enterprise Server Edition con partizioni e si desidera
specificare un tablespace durante l’abilitazione di una colonna, è necessario avere
specificato un gruppo di nodi al momento della creazione del tablespace. Ad
esempio:
db2 "create database partition group mygroup on node (0,1)"
db2 "create regular tablespace mytb in database partition group mygroup
managed by system using (’mytb’)"
Nel suddetto esempio, occorre specificare il tablespace mytb durante l’abilitazione
della colonna:
dxxadm enable_column mydatabase mytable mycolumn "dad/mydad.dad" -t mytb
Esempio::
Il seguente esempio abilita una colonna XML.
dxxadm enable_column SALES_DB SALES_TAB ORDER getstart.dad
-v sales_order_view -r INVOICE_NUMBER
Opzione disable_column del comando dxxadm
Scopo:
Collega a un database e disabilita la colonna abilitata per XML. Quando la colonna
è disabilitata, non può più contenere tipi di dati XML. Quando una colonna
abilitata per XML è disabilitata, vengono effettuate le seguenti azioni:
v La voce di utilizzo colonna XML viene eliminata dalla tabella XML_USAGE.
v USAGE_COUNT viene decrementato nella tabella DTD_REF.
v Tutti i trigger associati a questa colonna vengono eliminati.
v Tutte le tabelle laterali associate a questa colonna vengono eliminate.
Capitolo 6. Comando di gestione dxxadm 129
Importante: è necessario disabilitare una colonna XML prima di eliminare una
tabella. Se una tabella XML viene eliminata ma la colonna XML non viene
disabilitata, XML Extender conserva sia le tabelle laterali create che la voce di
colonna XML nella tabella XML_USAGE.
Sintassi:
�� dxxadm disable_column nome_db nome_tab nome_colonna
-l
login �
� -p
password ��
Parametri:
Tabella 19. Parametri disable_column
Parametro Descrizione
db_name Il nome del database in cui si trovano i dati.
tab_name Il nome della tabella in cui si trova la
colonna XML.
nome_colonna Il nome della colonna XML.
-l login L’ID utente utilizzato per collegarsi al
database. Se non è specificato, viene
utilizzato quello corrente.
-p password La password utilizzata per collegarsi al
database. Se non è specificata, viene
utilizzata quella corrente.
Esempi:
Il seguente esempio disabilita una raccolta abilitata per XML.
dxxadm disable_column SALES_DB SALES_TAB ORDER
Opzione enable_collection del comando dxxadm
Scopo:
Collega a un database e abilita una raccolta XML secondo il DAD specificato.
Quando si esegue XML Extender in un ambiente Enterprise Server Edition con
partizioni, verificare che tutte le tabelle specificate nel file DAD includano almeno
una colonna qualificata come chiave di partizionamento. Quando si abilita una
raccolta, XML Extender effettua le seguenti attività:
v Crea una voce di utilizzo raccolta XML nella tabella XML_USAGE.
v Per l’associazione RDB_node, crea tabelle di raccolta specificate in DAD se le
tabelle non sono presenti nel database.
Sintassi:
�� dxxadm enable_collection db_name nome_raccolta DAD_file �
� -t
tablespace
-l
login
-p
password ��
Parametri:
130 XML Extender - Amministrazione e programmazione
Tabella 20. Parametri enable_collection
Parametro Descrizione
db_name Il nome del database in cui si trovano i dati.
nome_raccolta Il nome della raccolta XML.
DAD_file Il nome del file DAD che associa il
documento XML alle tabelle relazionali nella
raccolta.
-t tablespace Il nome del tablespace associato alla raccolta.
Se non è specificato, viene utilizzato quello
predefinito.
-l login L’ID utente utilizzato per collegarsi al
database. Se non è specificato, viene
utilizzato quello corrente.
-p password La password utilizzata per collegarsi al
database. Se non è specificata, viene
utilizzata quella corrente.
Se si utilizza IBM DB2 Enterprise Server Edition con partizioni e si desidera
specificare un tablespace durante l’abilitazione di una raccolta, è necessario avere
specificato un gruppo di nodi al momento della creazione del tablespace. Ad
esempio:
db2 "create database partition group mygroup on node (0,1)"
db2 "create regular tablespace mytb in database partition group mygroup
managed by system using (’mytb’)"
Nel suddetto esempio, occorre specificare il tablespace mytb durante l’abilitazione
della raccolta.
Esempi:
Il seguente esempio abilita una raccolta XML.
dxxadm enable_collection SALES_DB sales_ord
getstart_xcollection.dad -t orderspace
Opzione disable_collection del comando dxxadm
Scopo:
Collega a un database e disabilita una raccolta abilitata per XML. Il nome raccolta
non può più essere utilizzato nella composizione (dxxRetrieveXML) e
decomposizione (dxxInsertXML) delle procedure memorizzate. Quando una
raccolta XML è disabilitata, la voce di raccolta associata viene eliminata dalla
tabella XML_USAGE. La disabilitazione della raccolta non elimina le relative
tabelle create quando si utilizza l’opzione enable_collection.
Sintassi:
�� dxxadm disable_collection nome_db nome_raccolta
-l
login �
Capitolo 6. Comando di gestione dxxadm 131
� -p
password ��
Parametri:
Tabella 21. Parametri disable_collection
Parametro Descrizione
db_name Il nome del database in cui si trovano i dati.
nome_raccolta Il nome della raccolta XML.
-l login L’ID utente utilizzato per collegarsi al
database. Se non è specificato, viene
utilizzato quello corrente.
-p password La password utilizzata per collegarsi al
database. Se non è specificata, viene
utilizzata quella corrente.
Esempio::
Il seguente esempio disabilita una raccolta XML.
dxxadm disable_collection SALES_DB sales_ord
132 XML Extender - Amministrazione e programmazione
Capitolo 7. Tipi definiti dall’utente di XML Extender
I tipi definiti dall’utente (UDT, user-defined types)sono tipi di dati creati da
un’applicazione o uno strumento DB2®. XML Extender crea i seguenti UDT da
utilizzare con le colonne XML:
v XMLVARCHAR
v XMLCLOB
v XMLFILE
I tipi di dati sono utilizzati per definire la colonna nella tabella dell’applicazione
che viene utilizzata per memorizzare il documento XML. I documenti XML
possono essere memorizzati anche sul file system, specificando un nome file.
Tutti i tipi definiti dall’utente di XML Extender hanno il qualificatoreDB2XML, che
è il nome schema dell’UDT DB2 XML Extender. Ad esempio:
db2xml.XMLVarchar
XML Extender crea UDT per la memorizzazione e il richiamo di documenti XML.
La Tabella 22 descrive gli UDT.
Tabella 22. UDT di XML Extender
Colonna UDT (user-defined
type)
Tipo di dati di origine Descrizione per l’utilizzo
XMLVARCHAR VARCHAR(varchar_len) Memorizza un intero
documento XML come
VARCHAR all’interno di
DB2. È possibile ridefinire
XMLVARCHAR fino a un
massimo di 32 KB. Per
modificare la dimensione di
un UDT XMLVARCHAR,
creare l’UDT prima di
abilitare il database per XML
Extender.
XMLCLOB CLOB(clob_len) Memorizza un intero
documento XML come CLOB
(character large object)
all’interno di DB2.
XMLFILE VARCHAR(512) Specifica il nome completo
del server di file locale. Se
XMLFILE è specificato per la
colonna XML, allora XML
Extender memorizza il
documento XML in un file di
server esterno. È necessario
verificare l’integrità tra il
contenuto del file, DB2 e la
tabella laterale creata per
l’indicizzazione.
Dove varchar_len e clob_len sono specifici per il sistema operativo.
© Copyright IBM Corp. 1999 - 2006 133
Per XML Extender su DB2 su sistemi Linux, Unix e Windows®, varchar_len = 3K e
clob_len = 2G.
Per modificare la dimensione di un UDT XMLVARCHAR o XMLCLOB, creare
l’UDT prima di abilitare il database per XML Extender.
Procedura:
Per modificare la dimensione di un UDT XMLVARCHAR o XMLCLOB di un
database abilitato:
1. Eseguire il backup di tutti i dati nel database abilitato per XML Extender
2. Eliminare tutte le tabelle della raccolta XML o le tabelle laterali della colonna
XML
3. Disabilitare il database con il comando dxxadm disable_db .
4. Creare l’UDT XMLVARCHAR o XMLCLOB.
5. Abilitare il database con il comando dxxadm enable_db.
6. Creare di nuovo e ricaricare le tabelle.
Questi UDT sono utilizzati solo per specificare i tipi di colonne dell’applicazione;
essi non sono applicati alle tabelle laterali create da XML Extender.
v “Schemi di associazione per raccolte XML” a pagina 101
v “Preparazione alla gestione di XML Extender” a pagina 35
v “Raccolte XML come metodo di accesso e di memorizzazione” a pagina 89
v “Colonne XML come metodo di accesso e di memorizzazione” a pagina 74
134 XML Extender - Amministrazione e programmazione
Capitolo 8. Funzioni definite dall’utente di XML Extender
Una funzione definita dall’utente (UDF, user–defined function) è una funzione
definita sul sistema di gestione del database e a cui si può fare riferimento nelle
istruzioni SQL. In questa sezione vengono descritte le funzioni definite dall’utente
fornite da IBM DB2 XML Extender.
Tipi di funzioni definite dall’utente di XML Extender
XML Extender fornisce funzioni per la memorizzazione, il richiamo, la ricerca e
l’aggiornamento di documenti XML e per l’estrazione di elementi o attributi XML.
Tutte le UDF hanno il nome schema DB2XML.
I tipi di funzione XML Extender sono descritti nel seguente elenco:
funzioni di memorizzazione
Le funzioni di memorizzazione inseriscono documenti XML intatti nelle
colonne abilitate per XML come tipi di dati XML.
funzioni di richiamo
Le funzioni di richiamo richiamano documenti XML da colonne XML in un
database DB2®.
funzioni di estrazione
Le funzioni di estrazione estraggono e convertono il contenuto di un
elemento o il valore di un attributo da un documento XML nel tipo di dati
specificato dal nome della funzione. XML Extender fornisce una serie di
funzioni di estrazione per diversi tipi di dati SQL.
funzione di aggiornamento
La funzione di aggiornamento modifica un intero documento XML o il
contenuto dell’elemento o i valori dell’attributo specificati e restituisce una
copia di un documento XML con un valore aggiornato, specificato nel
percorso della posizione.
funzioni di convalida
Le funzioni di convalida convalidano i documenti XML rispetto a uno
schema XML o a un DTD.
Le funzioni definite dall’utente XML consentono di eseguire ricerche su tipi di dati
SQL generali. Inoltre, è possibile utilizzare DB2 Net Search Extender con XML
Extender per eseguire ricerche di testo complete e strutturali sul testo dei documenti
XML. Questa funzione di ricerca può essere utilizzata, ad esempio, per migliorare
l’utilizzo di un sito Web che pubblica grosse quantità di testo leggibile, come
articoli di giornale o applicazioni Electronic Data Interchange (EDI), che hanno un
numero elevato di elementi o attributi ricercabili.
Limitazione: quando si utilizzano contrassegni di parametri nelle UDF, una
limitazione di Java™ database (JDBC) richiede che venga eseguito il casting del
contrassegno per l’UDF sul tipo di dati della colonna in cui verranno inseriti i dati
restituiti.
© Copyright IBM Corp. 1999 - 2006 135
Nomi di UDT e UDF per XML Extender
Il nome completo di una funzione DB2® è nome-schema.nome-funzione, dove
nome-schema è un identificativo che fornisce un raggruppamento logico per una
serie di oggetti SQL. Il nome dello schema per gli UDF e gli UDT di XML Extender
è Nella documentazione, i riferimenti sono solo al nome della funzione.
È possibile specificare UDT e UDF senza il nome dello schema se si aggiunge tale
nome al percorso della funzione. Il percorso della funzione è un elenco ordinato di
nomi schemi. Il database DB2 utilizza l’ordine dei nomi schema nell’elenco per
risolvere i riferimenti alle funzioni e agli UDT. È possibile specificare il percorso
della funzione specificando l’istruzione SQL SET CURRENT FUNCTION PATH.
Questa istruzione imposta il percorso della funzione nel registro speciale
CURRENT FUNCTION PATH.
Suggerimento: aggiungere il nome schema DB2XML al percorso della funzione.
Aggiungendo questo nome schema, è possibile immettere i nomi UDF eUDT di
XML Extender senza doverli qualificare con DB2XML. Il seguente esempio mostra
come aggiungere lo schema DB2XML al percorso della funzione:
SET CURRENT FUNCTION PATH = DB2XML, CURRENT FUNCTION PATH
Limitazione: non aggiungere DB2XML come primo schema nel percorso della
funzione se ci si collega con un ID utente DB2XML. DB2XML viene impostato
automaticamente come primo schema quando ci si collega comeDB2XML. Se si
aggiunge DB2XML come primo schema nel percorso della funzione, verrà ricevuto
un errore in quanto il percorso della funzione inizia con due schemi DB2XML.
Funzioni di memorizzazione
Panoramica sulle funzioni di memorizzazione in XML Extender
Utilizzare le funzioni di memorizzazione per inserire i documenti XML in un
database DB2. È possibile utilizzare le funzioni di casting predefinite di un UDT
direttamente nelle istruzioni INSERT o SELECT. Inoltre, XML Extender fornisce
UDF per richiamare i documenti XML dalle origini diverse dal tipo di dati di base
dell’UDT e convertirli nell’UDT specificato.
Prima di poter utilizzare gli UDF per leggere o scrivere dal file system del server, è
necessario impostare le variabili d’ambiente come descritto in Appendice C, “Limiti
di XML Extender”, a pagina 305.
Funzione XMLCLOBFromFile()
Scopo:
Legge un documento XML da un file di server e lo restituisce come tipo
XMLCLOB.
Sintassi:
�� XMLCLOBFromFile ( nome_file , )
codifica_src ��
Parametri:
136 XML Extender - Amministrazione e programmazione
Tabella 23. Parametri di XMLCLOBFromFile
Parametro Tipo di dati Descrizione
fileName VARCHAR(512) Il nome file completo del
server.
codifica_src VARCHAR(100) La codifica del file di origine.
Risultati:
XMLCLOB come LOCATOR
Esempio:
Il seguente esempio legge un documento XML da un file su un server e lo inserisce
in una colonna XML come tipo XMLCLOB. La codifica del file del server è
specificata esplicitamente come iso-8859-1.
EXEC SQL INSERT INTO sales_tab(ID, NAME, ORDER)
VALUES(’1234’, ’Sriram Srinivasan’,
XMLCLOBFromFile(’install_dxx/samples/extenders/db2xml
/xml/getstart.xml
’, ’iso-8859-1’))
dove install_dxx è la directory in cui è stato installato XML Extender.
La colonna ORDER nella tabella SALES_TAB è definita come tipo XMLCLOB.
Funzione XMLFileFromCLOB()
Scopo:
Legge un documento XML come indicatore di posizione CLOB e un foglio di stile
come CLOB o da un file e restituisce il documento come CLOB.
Sintassi:
�� XMLFileFromCLOB ( buffer , nome_file , )
codifica_destinazione ��
Parametri:
Tabella 24. Parametri di XMLFileFromCLOB()
Parametri Tipo di dati Descrizione
buffer CLOB come LOCATOR Il buffer contenente il
documento XML.
fileName VARCHAR(512) Il nome file completo del
server.
codifica_destinazione VARCHAR(100) La codifica del file di output.
Risultati:
XMLFILE
Esempio:
I seguente esempio legge un documento XML come indicatore di posizione CLOB
(una variabile host con un valore che rappresenta un unico valore LOB sul server
di database), lo scrive su un file del server esterno e inserisce il nome e il percorso
del file come tipo XMLFILE in una colona XML. La funzione codificherà il file di
output in ibm-808.
Capitolo 8. Funzioni definite dall’utente di XML Extender 137
EXEC SQL BEGIN DECLARE SECTION;
SQL TYPE IS CLOB_LOCATOR xml_buff;
EXEC SQL END DECLARE SECTION;
EXEC SQL INSERT INTO sales_tab(ID, NAME, ORDER)
VALUES(’1234’, ’Sriram Srinivasan’,
XMLFileFromCLOB(:xml_buff, ’install_dxx/samples/extenders/db2xml
/xml/getstart.xml’, ’ibm-808’))
dove install_dxx è la directory in cui è stato installato XML Extender.
La colonna ORDER nella tabella SALES_TAB è definita come tipo XMLFILE. Se è
presente un documento XML nel buffer, è possibile memorizzarlo in un file del
server.
Funzione XMLFileFromVarchar()
Scopo:
Legge un documento XML dalla memoria come VARCHAR, lo scrive su un file del
server esterno e restituisce il nome e il percorso del file come tipo XMLFILE.
Sintassi:
�� XMLFileFromVarchar ( buffer , nome_file , )
codifica_destinazione ��
Parametri:
Tabella 25. Parametri di XMLFileFromVarchar
Parametro Tipo di dati Descrizione
buffer VARCHAR(3K) Il buffer contenente il
documento XML.
fileName VARCHAR(512) Il nome file completo del
server.
codifica_destinazione VARCHAR(100) La codifica del file di output.
Risultati:
XMLFILE
Esempio:
Il seguente esempio legge un documento XML dalla memoria come VARCHAR, lo
scrive su un file del server esterno e inserisce il nome e il percorso del file come
tipo XMLFILE in una colonna XML. La funzione codificherà il file di output in
iso-8859-1.
EXEC SQL BEGIN DECLARE SECTION;
struct { short len; char data[3000]; } xml_buff;
EXEC SQL END DECLARE SECTION;
EXEC SQL INSERT INTO sales_tab(ID, NAME, ORDER)
VALUES(’1234’, ’Sriram Srinivasan’,
XMLFileFromVarchar(:xml_buff, ’dxx_install/samples/extenders/db2xml
/xml/getstart.xml’, ’iso-8859-1’))
dove install_dxx è la directory in cui è stato installato XML Extender.
138 XML Extender - Amministrazione e programmazione
La colonna ORDER nella tabella SALES_TAB è definita come tipo XMLFILE.
Funzione XMLVarcharFromFile()
Scopo:
Legge un documento XML da un file di server e lo restituisce come tipo
XMLVARCHAR.
Sintassi:
�� XMLVarcharFromFile ( nome_file , )
codifica_src ��
Parametri:
Tabella 26. Parametri di XMLVarcharFromFile
Parametro Tipo di dati Descrizione
fileName VARCHAR(512) Il nome file completo del
server.
codifica_src VARCHAR(100) La codifica del file di origine.
Risultati:
XMLVARCHAR
Esempio:
Il seguente esempio legge un documento XML da un file del server e lo inserisce
in una colonna XML come tipo XMLVARCHAR. La codifica del file del server è
specificata esplicitamente come ibm-808.
EXEC SQL INSERT INTO sales_tab(ID, NAME, ORDER)
VALUES(’1234’, ’Sriram Srinivasan’,
XMLVarcharFromFile(’install_dxx/samples/extenders/db2xml
/xml/getstart.xml’, ’ibm-808’))
dove install_dxx è la directory in cui è stato installato XML Extender.
In questo esempio, un record viene inserito nella tabella SALES_TAB. La funzione
XMLVarcharFromFile() importa il documento XML da un file specificato
esplicitamente con codifica ibm-808 nel database DB2 e lo memorizza come
XMLVARCHAR.
Funzioni di richiamo
Funzioni di richiamo in XML Extender
XML Extender fornisce una funzione di carico Content(), utilizzata per il richiamo.
Questa funzione di carico fa riferimento a una serie di funzioni di richiamo che
hanno lo stesso nome, ma che funzionano in maniera differente in base al punto in
cui i dati vengono richiamati. È inoltre possibile utilizzare le funzioni di casting
predefinite per convertire un UDT XML nel tipo di dati di base.
Le funzioni Content() consentono i seguenti tipi di richiamo:
Capitolo 8. Funzioni definite dall’utente di XML Extender 139
v Richiamo da una memoria esterna sul server su una variabile host sul client.
È possibile utilizzare Content() per richiamare un documento XML in un buffer
di memoria quando questo è memorizzato come file di server esterno. A questo
scopo, è possibile utilizzare Content(): retrieve da XMLFILE su un CLOB.
v Richiamo da una memoria interna su un file di server esterno
È possibile utilizzare Content() per richiamare un documento XML memorizzato
in DB2 e memorizzarlo su un file di server sul file system del server di database
DB2. Le seguenti funzioni Content() sono utilizzate per memorizzare
informazioni su file di server esterni:
– Content(): retrieve da XMLVARCHAR su un file di server esterno
– Content(): retrieval da XMLCLOB su un file di server esterno
Content(): retrieve da XMLFILE su un CLOB
Scopo:
Richiama i dati da un file di server e li memorizza in un CLOB LOCATOR.
Sintassi:
�� Contenuto ( xmlobj ) ��
Parametri:
Tabella 27. XMLFILE in un parametro CLOB
Parametro Tipo di dati Descrizione
xmlobj XMLFILE Il documento XML.
Risultati:
CLOB (clob_len) come LOCATOR
clob_len per il database DB2 è 2G.
Esempio:
Il seguente esempio richiama i dati da un file di server e li memorizza in un CLOB
locator.
char subsystem[20];
long retcode = 0, reason = 0;
extern "OS" { int DSNALI(char * functn, ...); }
extern "OS" short DSNTIAR(struct sqlca *sqlca,
error_struct *error_message,
long *data_len);
EXEC SQL BEGIN DECLARE SECTION;
SQL TYPE IS CLOB_LOCATOR xml_buff;
EXEC SQL END DECLARE SECTION;
/* Assegnare subsystem */
rc = DSNALI("OPEN ", subsystem, "PLANNAME",
&retcode, &reason);
if ( retcode != 0 )
{
/* visualizzare messaggio di errore */
goto exit;
}
140 XML Extender - Amministrazione e programmazione
EXEC SQL DECLARE cl CURSOR FOR
SELECT Content(order) from sales_tab
WHERE sales_person = ’Sriram Srinivasan’
EXEC SQL OPEN c1;
do {
EXEC SQL FETCH c1 INTO :xml_buff;
if (SQLCODE != 0) {
break;
}
else {
/* eseguirlo con il doc XML nel buffer */
}
}
EXEC SQL CLOSE c1;
/* Scollegarlo dal sistema */
DSNALI("CLOSE ", "SYNC", &retcode, &reason);
if ( retcode != 0 ) {
/* visualizzare messaggio di errore */
}
La colonna ORDER nella tabella SALES_TAB è di tipo XMLFILE, quindi Content()
UDF richiama i dati da un file di server e li memorizza in un CLOB locator.
Attività correlate:
v “Aggiornamento ed eliminazione di dati in raccolte XML” a pagina 98
Content(): retrieve da XMLVARCHAR su un file di server
esterno
Scopo:
Richiama il contenuto XML memorizzato come tipo XMLVARCHAR e lo
memorizza in un file di server esterno.
Sintassi:
�� Contenuto ( xmlobj , filename , )
targetencoding ��
Importante: se un file con il nome specificato esiste già, la funzione del contenuto
ne sostituisce il contenuto.
Parametri:
Tabella 28. XMLVarchar per i parametri di file di server esterni
Parametro Tipo di dati Descrizione
xmlobj XMLVARCHAR Il documento XML.
filename VARCHAR(512) Il nome file del server
completo.
targetencoding VARCHAR(100) La codifica del file di output.
Capitolo 8. Funzioni definite dall’utente di XML Extender 141
Risultati:
VARCHAR(512)
Esempio:
Il seguente esempio richiama il contenuto XML memorizzato come tipo
XMLVARCHAR e lo memorizza in un file esterno sul server. UDF codifica il file in
’ibm-808’.
CREATE table app1 (id int NOT NULL, order DB2XML.XMLVarchar);
INSERT into app1 values (1, ’<?xml version="1.0"?>
<!DOCTYPE SYSTEM "install_dxx/samples/extenders/db2xml/dtd/getstart.dtd"->
<Order key="1">
<Customer>
<Name>American Motors</Name>
<Email>[email protected]</Email>
</Customer>
<Part color="black">
<key>68</key>
<Quantity>36</Quantity>
<ExtendedPrice>34850.16</ExtendedPrice>
<Tax>6.000000e-02</Tax>
<Shipment>
<ShipDate>1998-08-19</ShipDate>
<ShipMode>AIR </ShipMode>
</Shipment>
<Shipment>
<ShipDate>1998-08-19</ShipDate>
<ShipMode>BOAT </ShipMode>
</Shipment>
</Part>
</Order>’);
SELECT DB2XML.Content(order,
’install_dxx/samples/extenders/db2xml/dad/getstart_column.dad’
, ’ibm-808’)
FROM app1 dove ID=1;
Attività correlate:
v “Metodo per richiamare un documento XML” a pagina 78
Riferimenti correlati:
v “Funzioni di richiamo in XML Extender” a pagina 139
Content(): retrieval da XMLCLOB su un file di server esterno
Scopo:
Richiama il contenuto XML memorizzato come tipo XMLCLOB e lo memorizza in
un file di server esterno.
Sintassi:
�� Contenuto ( xmlobj , filename , )
targetencoding ��
Importante: se un file con il nome specificato esiste già, la funzione del contenuto
ne sostituisce il contenuto.
142 XML Extender - Amministrazione e programmazione
Parametri:
Tabella 29. XMLCLOB per i parametri di file di server esterni
Parametro Tipo di dati Descrizione
xmlobj XMLCLOB come LOCATOR Il documento XML.
filename VARCHAR(512) Il nome file del server
completo.
targetencoding VARCHAR(100) La codifica del file di output.
Risultati:
VARCHAR(512)
Esempio:
Il seguente esempio richiama il contenuto XML memorizzato come tipo XMLCLOB
e lo memorizza in un file esterno sul server. UDF codifica il file in ’ibm-808’.
CREATE table app1 (id int NOT NULL, order DB2XML.XMLCLOB not logged);
INSERT into app1 values (1, ’<?xml version="1.0"?>
<!DOCTYPE SYSTEM "install_dxx/samples/extenders/db2xml/dtd/getstart.dtd"
->
<Order key="1">
<Customer>
<Name>American Motors</Name>
<Email>[email protected]</Email>
</Customer>
<Part color="black">
<key>68</key>
<Quantity>36</Quantity>
<ExtendedPrice>34850.16</ExtendedPrice>
<Tax>6.000000e-02</Tax>
<Shipment>
<ShipDate>1998-08-19</ShipDate>
<ShipMode>AIR </ShipMode>
</Shipment>
<Shipment>
<ShipDate>1998-08-19</ShipDate>
<ShipMode>BOAT </ShipMode>
</Shipment>
</Part>
</Order>’);
SELECT DB2XML.Content(order,
’install_dxx/samples/extenders/db2xml/xml/getstart.xml’, ’ibm-808’)
from app1 where ID=1;
Funzioni di estrazione
Funzioni di estrazione in XML Extender
Le funzioni di estrazione estraggono il contenuto di un elemento o il valore di un
attributo da un documento XML e restituiscono i tipi di dati SQL richiesti. XML
Extender fornisce una serie di funzioni di estrazione per diversi tipi di dati SQL.
Le funzioni di estrazione utilizzano due parametri di input. Il primo parametro è
l’UDT XML Extender, che può essere una delle UDT XML. Il secondo parametro è
Capitolo 8. Funzioni definite dall’utente di XML Extender 143
il percorso della posizione che specifica l’elemento o l’attributo XML. Ogni
funzione di estrazione restituisce il valore or content specificato dal percorso della
posizione.
Poiché alcuni valori di elementi o attributi hanno più ricorrenze, le funzioni di
estrazione restituiscono un valore scalare o un valore di tabella, detti
rispettivamente funzione scalare e funzione tabella.
Negli esempi si assume che si utilizzi la shell di comandi del database DB2, in cui
non è necessario immettere “DB2” all’inizio di ogni comando.
extractInteger() ed extractIntegers()
Scopo:
Estrae il contenuto di un elemento o il valore di un attributo da un documento
XML e restituisce i dati come tipi INTEGER.
Sintassi:
Funzione scalare:
�� extractInteger ( xmlobj , path ) ��
Funzione tabella:
�� extractIntegers ( xmlobj , path ) ��
Parametri:
Tabella 30. Parametri di funzione extractInteger e extractIntegers
Parametro Tipo di dati Descrizione
xmlobj XMLVARCHAR,
XMLFILE o
XMLCLOB
Il nome della colonna.
path VARCHAR Il percorso dell’elemento o
attributo.
Tipo restituito:
INTEGER
Codici di ritorno:
returnedInteger
Esempi:
Esempio di funzione scalare:
Nel seguente esempio, viene restituito un valore quando il valore di attributo della
chiave = ″1″. Il valore viene estratto come INTEGER. Negli esempi si presuppone
l’utilizzo dello shell di comandi DB2, in cui non è necessario immettere “DB2”
all’inizio di ogni comando.
CREATE TABLE t1(key INT);
INSERT INTO t1 values (
DB2XML.extractInteger(DB2XML.XMLFile(’/samples/extenders/db2xml
/xml/getstart.xml
’),
’/Order/Part[@color="black "]/key’));
SELECT * from t1;
144 XML Extender - Amministrazione e programmazione
Esempio di funzione tabella:
Nel seguente esempio, ogni chiave degli ordini di acquisto viene estratta come
INTEGER. Negli esempi si presuppone l’utilizzo dello shell di comandi DB2, in cui
non è necessario immettere “DB2” all’inizio di ogni comando.
SELECT *
FROM TABLE(
DB2XML.extractIntegers
(DB2XML.XMLFile(’/samples/extenders/db2xml/xml/getstart.xml’),
’/Order/Part/key’)) AS X;
Argomenti correlati:
v “Nomi di UDT e UDF per XML Extender” a pagina 136
v “Tipi di funzioni definite dall’utente di XML Extender” a pagina 135
Riferimenti correlati:
v “Funzioni di estrazione in XML Extender” a pagina 143
extractSmallint() ed extractSmallints()
Scopo:
Estrae il contenuto di un elemento o il valore di un attributo da un documento
XML e restituisce i dati come tipi SMALLINT.
Sintassi:
Funzione scalare:
�� extractSmallint ( xmlobj , path ) ��
Funzione tabella:
�� extractSmallints ( xmlobj , path ) ��
Parametri:
Tabella 31. Parametri di funzione extractSmallint e extractSmallints
Parametro Tipo di dati Descrizione
xmlobj XMLVARCHAR,
XMLFILE o
XMLCLOB
Il nome della colonna.
path VARCHAR Il percorso dell’elemento o
attributo.
Tipo restituito:
SMALLINT
Codici di ritorno:
returnedSmallint
Esempi:
Esempio di funzione scalare:
Capitolo 8. Funzioni definite dall’utente di XML Extender 145
Nel seguente esempio, il valore di chiave in tutti gli ordini di acquisto viene
estratto come SMALLINT. Negli esempi si presuppone l’utilizzo dello shell di
comandi DB2, in cui non è necessario immettere “DB2” all’inizio di ogni comando.
CREATE TABLE t1(key INT);
INSERT INTO t1 values (
DB2XML.extractSmallint(db2xml.xmlfile(’install_dxx
/samples/extenders/db2xml/xml/getstart.xml’),
’/Order/Part[@color="black "]/key’));
SELECT * from t1;
Esempio di funzione tabella:
Nel seguente esempio, il valore di chiave in tutti gli ordini di acquisto viene
estratto come SMALLINT. Negli esempi si presuppone l’utilizzo dello shell di
comandi DB2, in cui non è necessario immettere “DB2” all’inizio di ogni comando.
SELECT *
FROM TABLE(
DB2XML.extractSmallints(DB2XML.XMLFile(’install_dxx
/samples/extenders/db2xml/xml/getstart.xml’),
’/Order/Part/key’)) AS X;
Argomenti correlati:
v “Nomi di UDT e UDF per XML Extender” a pagina 136
v “Tipi di funzioni definite dall’utente di XML Extender” a pagina 135
Riferimenti correlati:
v “Funzioni di estrazione in XML Extender” a pagina 143
extractDouble() ed extractDoubles()
Scopo:
Estrae il contenuto di un elemento o il valore di un attributo da un documento
XML e restituisce i dati come tipi DOUBLE.
Sintassi:
Funzione scalare:
�� extractDouble ( xmlobj , path ) ��
Funzione tabella:
�� extractDoubles ( xmlobj , path ) ��
Parametri:
Tabella 32. Parametri di funzione extractDouble e extractDoubles
Parametro Tipo di dati Descrizione
xmlobj XMLVARCHAR,
XMLFILE o
XMLCLOB
Il nome della colonna.
path VARCHAR Il percorso dell’elemento o
attributo.
Tipo restituito:
146 XML Extender - Amministrazione e programmazione
DOUBLE
Codici di ritorno:
returnedDouble
Esempi: Esempio di funzione scalare:
Il seguente esempio converte automaticamente il prezzo in un ordine da un tipo
DOUBLE a DECIMAL. Negli esempi si presuppone l’utilizzo dello shell di
comandi DB2, in cui non è necessario immettere “DB2” all’inizio di ogni comando.
CREATE TABLE t1(price DECIMAL(9,2));
INSERT INTO t1 values (
DB2XML.extractDouble(DB2XML.xmlfile(’install_dxx
/samples/extenders/db2xml/xml/getstart.xml’),
’/Order/Part[@color="black"]/ExtendedPrice’));
SELECT * from t1;
Esempio di funzione tabella:
Nel seguente esempio, il valore di ExtendedPrice in ogni parte dell’ordine di
vendite viene estratto come DOUBLE. Negli esempi si presuppone l’utilizzo dello
shell di comandi DB2, in cui non è necessario immettere DB2 UDB all’inizio di
ogni comando.
SELECT CAST(RETURNEDDOUBLE AS DOUBLE)
FROM TABLE(
DB2XML.extractDoubles(DB2XML.XMLFile(’install_dxx
/samples/extenders/db2xml/xml/getstart.xml’),
’/Order/Part/ExtendedPrice’)) AS X;
Argomenti correlati:
v “Nomi di UDT e UDF per XML Extender” a pagina 136
Riferimenti correlati:
v “Funzioni di estrazione in XML Extender” a pagina 143
extractReal() ed extractReals()
Scopo:
Estrae il contenuto di un elemento o il valore di un attributo da un documento
XML e restituisce i dati come tipi REAL.
Sintassi:
Funzione scalare:
�� extractReal ( xmlobj , path ) ��
Funzione tabella:
�� extractReals ( xmlobj , path ) ��
Parametri:
Tabella 33. Parametri di funzione extractReal e extractReals
Parametro Tipo di dati Descrizione
xmlobj XMLVARCHAR,
XMLFILE o
XMLCLOB
Il nome della colonna.
Capitolo 8. Funzioni definite dall’utente di XML Extender 147
Tabella 33. Parametri di funzione extractReal e extractReals (Continua)
Parametro Tipo di dati Descrizione
path VARCHAR Il percorso dell’elemento o
attributo.
Tipo restituito:
REAL
Codici di ritorno:
returnedReal
Esempi:
Esempio di funzione scalare:
Nel seguente esempio, il valore di ExtendedPrice viene estratto come REAL. Negli
esempi si presuppone l’utilizzo dello shell di comandi DB2, in cui non è necessario
immettere “DB2” all’inizio di ogni comando.
CREATE TABLE t1(price DECIMAL(9,2));
INSERT INTO t1 values (
DB2XML.extractReal(DB2XML.xmlfile(’install_dxx
/samples/extenders/db2xml/xml/getstart.xml’),
’/Order/Part[@color="black"]/ExtendedPrice’));
SELECT * from t1;
Esempio di funzione tabella:
Nel seguente esempio, il valore di ExtendedPrice viene estratto come REAL. Negli
esempi si presuppone l’utilizzo dello shell di comandi DB2, in cui non è necessario
immettere “DB2” all’inizio di ogni comando.
SELECT CAST(RETURNEDREAL AS REAL)
FROM TABLE(
DB2XML.extractReals(DB2XML.XMLFile(’install_dxx
/samples/extenders/db2xml/xml/getstart.xml’),
’/Order/Part/ExtendedPrice’)) AS X;
Argomenti correlati:
v “Nomi di UDT e UDF per XML Extender” a pagina 136
v “Tipi di funzioni definite dall’utente di XML Extender” a pagina 135
Riferimenti correlati:
v “Funzioni di estrazione in XML Extender” a pagina 143
v “Codici di ritorno delle UDF di XML Extender” a pagina 264
extractChar() ed extractChars()
Scopo:
Estrae il contenuto di un elemento o il valore di un attributo da un documento
XML e restituisce i dati come tipi CHAR.
Sintassi:
Funzione scalare:
�� extractChar ( xmlobj , path ) ��
Funzione tabella:
148 XML Extender - Amministrazione e programmazione
�� extractChars ( xmlobj , path ) ��
Parametri:
Tabella 34. Parametri di funzione extractChar e extractChars
Parametro Tipo di dati Descrizione
xmlobj XMLVARCHAR,
XMLFILE o
XMLCLOB
Il nome della colonna.
path VARCHAR Il percorso dell’elemento o
attributo.
Tipo restituito:
CHAR
Codici di ritorno:
returnedChar
Esempi:
Esempio di funzione scalare:
Nel seguente esempio, il valore di Name viene estratto come CHAR. Negli esempi
si presuppone l’utilizzo dello shell di comandi DB2, in cui non è necessario
immettere “DB2” all’inizio di ogni comando.
CREATE TABLE t1(name char(30));
INSERT INTO t1 values (
DB2XML.extractChar(DB2XML.xmlfile(’install_dxx
/samples/extenders/db2xml/xml/getstart.xml’),
’/Order/Customer/Name’));
SELECT * from t1;
Esempio di funzione tabella:
Nel seguente esempio, il valore di Color viene estratto come CHAR. Negli esempi
si presuppone l’utilizzo dello shell di comandi DB2, in cui non è necessario
immettere “DB2” all’inizio di ogni comando.
SELECT *
FROM TABLE(
DB2XML.extractChars(DB2XML.XMLFile(’install_dxx
/samples/extenders/db2xml/xml/getstart.xml’),
’/Order/Part/@color’)) AS X;
Riferimenti correlati:
v “Funzioni di estrazione in XML Extender” a pagina 143
extractVarchar() ed extractVarchars()
Scopo:
Estrae il contenuto di un elemento o il valore di un attributo da un documento
XML e restituisce i dati come tipi VARCHAR.
Sintassi:
Funzione scalare:
�� extractVarchar ( xmlobj , path ) ��
Capitolo 8. Funzioni definite dall’utente di XML Extender 149
Funzione tabella:
�� extractVarchars ( xmlobj , path ) ��
Parametri:
Tabella 35. Parametri di funzione extractVarchar e extractVarchars
Parametro Tipo di dati Descrizione
xmlobj XMLVARCHAR,
XMLFILE o
XMLCLOB
Il nome della colonna.
path VARCHAR Il percorso dell’elemento o
attributo.
Tipo restituito:
VARCHAR(4K)
Codici di ritorno:
returnedVarchar
Esempi:
Esempio di funzione scalare:
In un database con più di 1000 documenti XML memorizzati nella colonna ORDER
nella tabella SALES_TAB, si può scegliere di individuare tutti i clienti che hanno
ordinato prodotti con un ExtendedPrice superiore a 2500.00. La seguente istruzione
SQL utilizza l’UDF di estrazione nella clausola SELECT:
SELECT extractVarchar(Order, ’/Order/Customer/Name’) from sales_order_view
WHERE price > 2500.00
Negli esempi si presuppone l’utilizzo dello shell di comandi DB2, in cui non è
necessario immettere “DB2” all’inizio di ogni comando. L’UDF extractVarchar()
richiama la colonna ORDER come input e il percorso /Order/Customer/Name come
identificativo di selezione. UDF restituisce i nomi dei clienti. Con la clausola
WHERE, la funzione di estrazione valuta tali ordini con un ExtendedPrice
maggiore di 2500.00.
Esempio di funzione scalare:
Nel seguente esempio, il valore di Name viene estratto come VARCHAR. Negli
esempi si presuppone l’utilizzo dello shell di comandi DB2, in cui non è necessario
immettere “DB2” all’inizio di ogni comando.
CREATE TABLE t1(name varchar(30));
INSERT INTO t1 values (
DB2XML.extractVarchar(DB2XML.xmlfile(’install_dxx
/samples/extenders/db2xml/xml/getstart.xml’),
’/Order/Customer/Name’));
SELECT * from t1;
Esempio di funzione tabella:
Nel seguente esempio, il valore di Color viene estratto come VARCHAR. Negli
esempi si presuppone l’utilizzo dello shell di comandi DB2, in cui non è necessario
immettere “DB2” all’inizio di ogni comando.
SELECT*
FROM TABLE(
DB2XML.extractVarchars(DB2XML.XMLFile(’install_dxx
/samples/xml/getstart.xml’),
’/Order/Part/@color’)) AS X;
150 XML Extender - Amministrazione e programmazione
Argomenti correlati:
v “Nomi di UDT e UDF per XML Extender” a pagina 136
v “Tipi di funzioni definite dall’utente di XML Extender” a pagina 135
Riferimenti correlati:
v “Funzioni di estrazione in XML Extender” a pagina 143
v “Codici di ritorno delle UDF di XML Extender” a pagina 264
extractCLOB() ed extractCLOBs()
Scopo:
Estrae un frammento di documenti XML, con la markup attributo ed elemento e il
contenuto di attributi ed elementi, inclusi gli elementi secondari. Questa funzione
differisce dalle altre funzioni di estrazione, che restituiscono solo il contenuto di
elementi ed attributi. Le funzioni extractClob(s) vengono utilizzate per estrarre i
frammenti di documenti, mentre extractVarchar(s) e extractChar(s) vengono
utilizzati per estrarre valori semplici.
Sintassi:
Funzione scalare:
�� extractCLOB ( xmlobj , path ) ��
Funzione tabella:
�� extractCLOBs ( xmlobj , path ) ��
Parametri:
Tabella 36. Parametri di funzione extractCLOB e extractCLOBs
Parametro Tipo di dati Descrizione
xmlobj XMLVARCHAR,
XMLFILE o
XMLCLOB
Il nome della colonna.
path VARCHAR Il percorso dell’elemento o
attributo.
Tipo restituito:
CLOB(10K)
Codici di ritorno:
returnedCLOB
Esempi:
Esempio di funzione scalare:
In questo esempio, tutte le tag e il contenuto dell’elemento name vengono estratti
da un ordine di acquisto. Negli esempi si presuppone l’utilizzo dello shell di
comandi DB2, in cui non è necessario immettere “DB2” all’inizio di ogni comando.
CREATE TABLE t1(name DB2XML.xmlclob);
INSERT INTO t1 values (
DB2XML.extractClob(DB2XML.xmlfile(’install_dxx
/samples/extenders/db2xml/xml/getstart.xml’),
’/Order/Customer/Name’));
SELECT * from t1;
Capitolo 8. Funzioni definite dall’utente di XML Extender 151
Esempio di funzione tabella:
In questo esempio, tutti gli attributi di color vengono estratti da un ordine di
acquisto. Negli esempi si presuppone l’utilizzo dello shell di comandi DB2, in cui
non è necessario immettere “DB2” all’inizio di ogni comando.
SELECT *
FROM TABLE(
DB2XML.extractCLOBs(DB2XML.XMLFile(’install_dxx
/samples/extenders/db2xml/xml/getstart.xml’),
’/Order/Part/@color’)) AS X;
Argomenti correlati:
v “Tipi di funzioni definite dall’utente di XML Extender” a pagina 135
Riferimenti correlati:
v “Funzioni di estrazione in XML Extender” a pagina 143
extractDate() ed extractDates()
Scopo:
Estrae il contenuto di un elemento o il valore di un attributo da un documento
XML e restituisce i dati come tipi DATE. La data deve avere il formato:
AAAA-MM-GG.
Sintassi:
Funzione scalare:
�� extractDate ( xmlobj , path ) ��
Funzione tabella:
�� extractDates ( xmlobj , path ) ��
Parametri:
Tabella 37. Parametri di funzione extractDate e extractDates
Parametro Tipo di dati Descrizione
xmlobj XMLVARCHAR,
XMLFILE o
XMLCLOB
Il nome della colonna.
path VARCHAR Il percorso dell’elemento o
attributo.
Tipo restituito:
DATE
Codici di ritorno:
returnedDate
Esempi:
Esempio di funzione scalare:
Nel seguente esempio, il valore di ShipDate viene estratto come DATE. Negli
esempi si presuppone l’utilizzo dello shell di comandi DB2, in cui non è necessario
immettere “DB2” all’inizio di ogni comando.
152 XML Extender - Amministrazione e programmazione
CREATE TABLE t1(shipdate DATE);
INSERT INTO t1 values (
DB2XML.extractDate(DB2XML.xmlfile(’install_dxx
/samples/extenders/db2xml/xml/getstart.xml’),
’/Order/Part[@color="red "]/Shipment/ShipDate’));
SELECT * from t1;
Esempio di funzione tabella:
Nel seguente esempio, il valore di ShipDate viene estratto come DATE.
SELECT *
FROM TABLE(
DB2XML.extractDates(DB2XML.XMLFile(’install_dxx
/samples/extenders/db2xml/xml/getstart.xml’),
’/Order/Part[@color="black "]/Shipment/ShipDate’)) AS X;
Argomenti correlati:
v “Tipi di funzioni definite dall’utente di XML Extender” a pagina 135
Riferimenti correlati:
v “Funzioni di estrazione in XML Extender” a pagina 143
v “Codici di ritorno delle UDF di XML Extender” a pagina 264
extractTime() ed extractTimes()
Scopo:
Estrae il contenuto di un elemento o il valore di un attributo da un documento
XML e restituisce i dati come tipi TIME.
Sintassi:
Funzione scalare:
�� extractTime ( xmlobj , path ) ��
Funzione tabella:
�� extractTimes ( xmlobj , path ) ��
Parametri:
Tabella 38. Parametri di funzione extractTime e extractTimes
Parametro Tipo di dati Descrizione
xmlobj XMLVARCHAR,
XMLFILE o
XMLCLOB
Il nome della colonna.
path VARCHAR Il percorso dell’elemento o
attributo.
Tipo restituito:
TIME
Codici di ritorno:
returnedTime
Esempi:
Negli esempi si presuppone l’utilizzo dello shell di comandi DB2, in cui non è
Capitolo 8. Funzioni definite dall’utente di XML Extender 153
necessario immettere “DB2” all’inizio di ogni comando.
Esempio di funzione scalare:
CREATE TABLE t1(testtime TIME);
INSERT INTO t1 values (
DB2XML.extractTime(DB2XML.XMLCLOB(
’<stuff><data>11.12.13</data></stuff>’), ’//data’));
SELECT * from t1;
Esempio di funzione tabella:
select *
from table(
DB2XML.extractTimes(DB2XML.XMLCLOB(
’<stuff><data>01.02.03</data><data>11.12.13</data></stuff>’),
’//data’)) as x;
Argomenti correlati:
v “Nomi di UDT e UDF per XML Extender” a pagina 136
v “Tipi di funzioni definite dall’utente di XML Extender” a pagina 135
Riferimenti correlati:
v “Funzioni di estrazione in XML Extender” a pagina 143
extractTimestamp() ed extractTimestamps()
Scopo:
Estrae il contenuto di un elemento o il valore di un attributo da un documento
XML e restituisce i dati come tipi TIMESTAMP.
Sintassi:
Funzione scalare:
�� extractTimestamp ( xmlobj , path ) ��
Funzione tabella:
�� extractTimestamps ( xmlobj , path ) ��
Parametri:
Tabella 39. Parametri di funzione extractTimestamp e extractTimestamps
Parametro Tipo di dati Descrizione
xmlobj XMLVARCHAR,
XMLFILE o
XMLCLOB
Il nome della colonna.
path VARCHAR Il percorso dell’elemento o
attributo.
Tipo restituito:
TIMESTAMP
Codici di ritorno:
returnedTimestamp
Esempi:
154 XML Extender - Amministrazione e programmazione
Negli esempi si presuppone l’utilizzo dello shell di comandi DB2, in cui non è
necessario immettere “DB2” all’inizio di ogni comando.
Esempio di funzione scalare:
CREATE TABLE t1(testtimestamp TIMESTAMP);
INSERT INTO t1 values (
DB2XML.extractTimestamp(DB2XML.XMLCLOB(
’<stuff><data>2003-11-11-11.12.13.888888</data></stuff>’),
’//data’));
SELECT * from t1;
Esempio di funzione tabella:
select * from
table(DB2XML.extractTimestamps(DB2XML.XMLClob(
’<stuff><data>2003-11-11-11.12.13.888888
</data><data>2003-12-22-11.12.13.888888</data></stuff>’),
’//data’)) as x;
XML Extender normalizza automaticamente la data/ora estratta dai documenti
XML per renderla comaptibile con il formato data/ora DB2, se necessario. La
data/ora viene normalizzata nel formato aaaa-mm-gg-hh.mm.ss.nnnnnn o
aaaa-mm-gg-hh mm.ss.nnnnnn. Ad esempio:
2003-1-11-11.12.13
verrà normalizzata in:
2003-01-11-11.12.13.000000
Argomenti correlati:
v “Nomi di UDT e UDF per XML Extender” a pagina 136
v “Tipi di funzioni definite dall’utente di XML Extender” a pagina 135
Riferimenti correlati:
v “Funzioni di estrazione in XML Extender” a pagina 143
v “Codici di ritorno delle UDF di XML Extender” a pagina 264
Funzioni di aggiornamento in XML Extender
La funzione Update() aggiorna un elemento o il valore di un attributo specificato
in uno o più documenti XML memorizzati nella colonna XML. È inoltre possibile
utilizzare le funzioni di casting predefinite per convertire un tipo di base SQL
nell’UDT XML.
Scopo
Utilizza il nome della colonna di una UDT XML, un percorso di posizione e una
stringa del valore di aggiornamento e restituisce una UDT XML che è uguale al
primo parametro di input. Con la funzione Update(), è possibile specificare
l’elemento o l’attributo che deve essere aggiornato.
Sintassi
�� Aggiornamento ( xmlobj , percorso , valore ) ��
Capitolo 8. Funzioni definite dall’utente di XML Extender 155
Parametri
Tabella 40. Parametri della funzione Update dell’UDF
Parametro Tipo di dati Descrizione
xmlobj XMLVARCHAR, XMLCLOB
as LOCATOR
Il nome della colonna.
path VARCHAR Il percorso della posizione
dell’elemento o dell’attributo.
value VARCHAR La stringa di aggiornamento.
Limitazione: la funzione
Update non ha un’opzione
per disabilitare l’escape
dell’output; l’output di un
extractClob (che è un
frammento con tag) non può
essere inserito con questa
funzione. Utilizzare solo
valori di testo.
Limitazione: tenere presente che l’UDF Update supporta i percorsi di posizione
che hanno predicati con attributi, ma non elementi. Ad esempio, il seguente
predicato è supportato:
’/Order/Part[@color="black "]/ExtendedPrice’
Il seguente predicato non è supportato:
’/Order/Part/Shipment/[Shipdate < "11/25/00"]’
Tipo restituito
Tipo di dati Tipo di ritorno
XMLVARCHAR XMLVARCHAR
XMLCLOB come LOCATOR XMLCLOB
Esempi
Il seguente esempio aggiorna l’ordine di acquisto gestito dal responsabile delle
vendite (salesperson) Sriram Srinivasan.
UPDATE sales_tab
set order = db2xml.update(order, ’/Order/Customer/Name’, ’IBM’)
WHERE sales_person = ’Sriram Srinivasan’
In questo esempio, il contenuto di /Order/Customer/Name viene aggiornato in IBM.
I seguenti esempi mostrano le istanze di un documento XML prima e dopo un
aggiornamento.
Tabella 41. Documenti XML prima e dopo un aggiornamento
Esempio 1:
Prima:
156 XML Extender - Amministrazione e programmazione
Tabella 41. Documenti XML prima e dopo un aggiornamento (Continua)
<?xml version=’1.0’ encoding=’utf-8’ standalone="yes"?>
<!DOCTYPE book PUBLIC "public.dtd" "system.dtd">
<?pitarget option1=’value1’ option2=’value2’?>
<!-- comment -->
<book>
<chapter id="1" date=’07/01/1997’>
<!-- first section -->
<section>This is a section in Chapter
One.</section>
</chapter>
<chapter id="2" date="01/02/1997">
<section>This is a section in Chapter
Two.</section>
<footnote>A footnote in Chapter Two is
here.</footnote>
</chapter>
<price date="12/22/1998" time="11.12.13"
timestamp="1998-12-22-11.12.13.888888">
38.281</price>
</book>
v Contiene spazi
nella
dichiarazione
XML
v Specifica
un’istruzione di
elaborazione
v Contiene un
commento
all’esterno del
nodo root
v Specifica
PUBLIC
ExternalID
v Contiene un
commento
all’interno del
nodo root
Dopo:
<?xml version=’1.0’ encoding=’utf-8’ standalone=’yes’?>
<!DOCTYPE book PUBLIC "public.dtd" "system.dtd">
<?pitarget option1=’value1’ option2=’value2’?>
<book>
<chapter id="1" date="07/01/2003">
<!-- first section -->
<section>This is a section in Chapter
One.</section>
</chapter>
<chapter id="2" date="01/02/2003">
<section>This is a section in Chapter
Two.</section>
<footnote>A footnote in Chapter Two
is here.</footnote>
</chapter>
<price date="12/22/2003" time="11.12.13"
timestamp="2003-12-22-11.12.13.888888">
60.02</price>
</book>
v Lo spazio
all’interno della
markup è stato
eliminato
v L’istruzione di
elaborazione è
stata conservata
v Il commento
all’esterno del
nodo root non è
stato conservato
v PUBLIC
ExternalID è
stato conservato
v Il commento
all’interno del
nodo root è
stato conservato
v Il valore
modificato è il
valore
dell’elemento
<price>
Esempio 2:
Prima:
<?xml version=’1.0’ ?>
<!DOCTYPE book>
<!-- comment -->
<book>
...
</book>
Contiene la
dichiarazione
DOCTYPE senza
un ExternalID o
una serie
secondaria DTD
interna. Non
supportato.
Capitolo 8. Funzioni definite dall’utente di XML Extender 157
Tabella 41. Documenti XML prima e dopo un aggiornamento (Continua)
Dopo:
<?xml version=’1.0’?>
<book>
...
</book>
La dichiarazione
DOCTYPE non è
riportata dal
parser XML e non
è stata conservata.
Esempio 3:
Prima:
<?xml version=’1.0’ ?>
<!DOCTYPE book [ <!ENTITY myDog "Spot"> ]>
<!-- comment -->
<book>
<chapter id="1" date=’07/01/1997’>
<!-- first section -->
<section>This is a section in Chapter
One about my dog &;myDog;.</section>
...
</chapter>
...
</book>
v Contiene spazi
nella markup
v Specifica serie
secondarie DTD
interne
v Specifica le
entità nel nodo
di testo
Dopo:
<?xml version=’1.0’?>
<!DOCTYPE book>
<book>
<chapter id="1" date="07/01/1997">
<!-- first section -->
<section>This is a section in Chapter
One about my dog Spot.</section>
...
</chapter>
...
</book>
v Lo spazio
all’interno della
markup è stato
eliminato
v La serie
secondaria DTD
interna non è
stata conservata
v L’entità nel
nodo di testo è
stata risolta e
restituita
Utilizzo
Quando si utilizza la funzione Update per modificare un valore in uno o più
documenti XML, questa sostituisce i documenti XML all’interno della colonna
XML. In base all’output del parser XML, alcune parti del documento originale
vengono conservate mentre altre vengono perse o modificate. Le seguenti sezioni
descrivono il modo in cui il documento viene elaborato e forniscono esempi
sull’aspetto dei documenti prima e dopo gli aggiornamenti.
Modalità di elaborazione del documento da parte della
funzione Update()
Quando la funzione Update() sostituisce i documenti XML, questa deve ricostruire
il documento in base all’output del parser XML. La sezione Tabella 42 a pagina 159
descrive il modo in cui sono gestite le varie parti del documento e riporta degli
esempi.
158 XML Extender - Amministrazione e programmazione
Tabella 42. Regole della funzione Update
Tipo di
elemento o di
nodo
Esempio di codice del documento XML Stato dopo l’aggiornamento
Dichiarazione
XML
<?xml version=’1.0’
encoding=’utf-8’
standalone=’yes’ >
La dichiarazione XML viene
conservata:
v Le informazioni sulla
versione vengono
conservate.
v La dichiarazione di codifica
viene conservate e viene
visualizzata quando
specificata nel documento
originale.
v La dichiarazione di
autonomia viene conservata
viene visualizzata quando
specificata nel documento
originale.
v Dopo l’aggiornamento, le
virgolette singole sono
utilizzate per delineare i
valori.
Dichiarazione DOCTYPE La dichiarazione del tipo di
documento viene conservata:
v Il nome dell’elemento root è
supportato.
v Gli ExternalID pubblici e di
sistema sono conservati e
vengono visualizzati quando
specificati nel documento
originale.
v La serie secondaria DTD
interna non viene conservata.
Le entità vengono sostituite,
i valori predefiniti per gli
attributi sono elaborati e
vengono visualizzati nei
documenti di output.
v Dopo l’aggiornamento,
vengono utilizzate le
virgolette doppie per
delineare i valori degli URI
pubblici e di sistema.
v Il parser XML4c corrente
non riporta una
dichiarazione XML che non
contiene un ExternalID o
una serie secondaria DTD
interna. In seguito
all’aggiornamento, la
dichiarazione DOCTYPE
risulterà mancante.
<!DOCTYPE books SYSTEM
"http://dtds.org/books.dtd" >
<!DOCTYPE books PUBLIC
"local.books.dtd" "http://dtds.org/books.dtd" >
<!DOCTYPE books>
-Any of
<!DOCTYPE books
( S ExternalID ) ?
[ internal-dtd-subset ] >
-Such as
<!DOCTYPE books
[ <!ENTITY mydog "Spot"> ] >?
[ internal-dtd-subset ] >
Capitolo 8. Funzioni definite dall’utente di XML Extender 159
Tabella 42. Regole della funzione Update (Continua)
Tipo di
elemento o di
nodo
Esempio di codice del documento XML Stato dopo l’aggiornamento
Istruzioni di
elaborazione
<?xml-stylesheet
title="compact"
href="datatypes1.xsl"
type="text/xsl"?>
Le istruzioni di elaborazione
vengono conservate.
Commenti <!-- comment --> I commenti all’interno
dell’elemento root vengono
conservati.
I commenti all’esterno
dell’elemento root vengono
eliminati.
Elementi <books>
contenuto
</books>
Gli elementi vengono
conservati.
Attributi id=’1’ date="01/02/2003" Gli attributi degli elementi
vengono conservati.
v Dopo l’aggiornamento,
vengono utilizzate le
virgolette doppie per
delineare i valori.
v I dati all’interno degli
attributi vengono persi.
v Le entità vengono sostituite.
Nodi di testo This section is about
my dog &mydog;.
I nodi di testo (contenuto
dell’elemento) vengono
conservati.
v I dati all’interno dei nodi di
testo vengono persi.
v Le entità vengono sostituite.
Ricorrenze multiple
Quando un percorso della posizione viene fornito nell’UDF Update(), il contenuto
di ogni elemento o attributo con un percorso corrispondente viene aggiornato con
il valore fornito. Ciò significa che se il documento ha più percorsi di posizione, la
funzione Update() sostituisce i valori esistenti con il valore fornito nel parametro
value.
È possibile specificare un predicato nel parametro path per fornire percorsi di
posizioni distinti per impedire aggiornamenti non intenzionali. L’UDF Update()
supporta i percorsi delle posizioni che hanno predicati con attributi, ma non
elementi.
160 XML Extender - Amministrazione e programmazione
funzioni di convalida
DB2 XML Extender offre due UDF (user defined function) che convalidano i
documenti XML rispetto a un DTD o a uno schema XML. Un elemento in un
documento XML è valido secondo uno schema specificato, se vengono soddisfatte
le regole del tipo di elemento associato. Se tutti gli elementi sono validi, l’intero
documento è valido.
Le funzioni di convalida restituiscono 1 se il documento è valido o 0 e scrivono un
messaggio di errore nel file di traccia se il documento non è valido. Le funzioni
sono:
db2xml.svalidate:
Convalida l’istanza di un documento XML rispetto allo schema specificato.
db2xml.dvalidate:
Convalida l’istanza di un documento XML rispetto al DTD specificato.
Funzione SVALIDATE()
Questa funzione convalida un documento XML rispetto a uno schema specificato
(o a quello specificato nel documento XML) e restituisce 1 se il documento è
valido, 0 se non lo è. Questa funzione presuppone la presenza di uno schema e di
un documento XML sul file system o come CLOB in DB2.
Prima di eseguire la funzione SVALIDATE, verificare che XML Extender sia
abilitato con il proprio database, immettendo il seguente comando:
dxxadm enable_db mydbname
Se la convalida del documento XML non riesce, viene scritto un messaggio di
errore nel file di traccia di XML Extender. Abilitare la traccia prima di eseguire il
comando SVALIDATE.
Sintassi
�� SVALIDATE ( xmlobj )
,
schemadoc
schemalocation ��
Parametri
Tabella 43. I parametri SVALIDATE
Parametro Tipo di dati Descrizione
xmlobj
Obbligatorio. Consentito solo
un xmlobj.
VARCHAR(256) Il nome file completo del
documento XML da
verificare.
CLOB(2G) La colonna XML che contiene
il documento da verificare.
schemadoc
(facoltativo). Nessun valore
predefinito. Consentito solo
un schemadoc.
VARCHAR(256) Il nome file completo del
documento dello schema
(senza namespace di
destinazione) con cui
convalidare il documento
XML.
Capitolo 8. Funzioni definite dall’utente di XML Extender 161
Tabella 43. I parametri SVALIDATE (Continua)
Parametro Tipo di dati Descrizione
CLOB(2G) Colonna XML che contiene lo
schema (senza namespace di
destinazione) con cui
convalidare il documento
XML.
schemalocation
Facoltativo. Nessun valore
predefinito. Non consentito
se nonamespace schemadoc è
un tipo di dati CLOB.
VARCHAR(256) coppia di nome dile del
documento completo e URI
del namespace da utilizzare
per la convalida. È possibile
specificare una o più coppie
separate da uno spazio.
Esempi
Esempio 1: questo esempio convalida equiplog2001.xml rispetto allo schema
specificato all’interno del documento.
db2 values db2xml.svalidate("/home/jean/xml/equiplog2001.xml")
Esempio 2: questo esempio convalida un documento XML utilizzando lo schema
specificato e sia lo schema che il documento vengono memorizzati nelle tabelle
database DB2.
db2 select db2xml.svalidate(doc,schema) from equiplogs where id=1
Esempio 3:
Questo esempio convalida il documento XML nella colonna CLOB xml in a_table
rispetto allo schema nonamespace schema1.xsd specificato e all’elenco di schemi
namespace, schema2.xsd e schema3.xsd, associati ai namespace di destinazione
http://ns1 e http://ns2:
select db2xml.svalidate(
xml,
'xsd/schema1.xsd',
'http://ns1 /dxxsamples/schema2.xsd
http://ns2 /dxxsamples/schema3.xsd')
from a_table where id=2
Esempio 4:
Questo esempio convalida test.xml rispetto all’elenco specificato di schemi,
schema1.xsd e schema2.xsd, associati ai namespace di destinazione http://ns1 e
http://ns2.
db2 values db2xml.svalidate(
'/dxxsamples/xml/test.xml',
' ',
'http://ns1 /dxxsamples/xsd/schema1.xsd http://ns2
/dxxsamples/xsd/schema2.xsd')
Funzione DVALIDATE()
Questa funzione convalida un documento XML rispetto a un DTD specificato (o a
quello specificato nel documento XML) e restituisce 1 se il documento è valido, 0
se non lo è. Questa funzione presuppone la presenza di un DTD e di un
documento XML sul file system o come CLOB in DB2.
162 XML Extender - Amministrazione e programmazione
Prima di eseguire la funzione DVALIDATE, verificare che XML Extender sia
abilitato con il proprio database, immettendo il seguente comando:
dxxadm enable_db mydbname
Se la convalida del documento XML non riesce, viene scritto un messaggio di
errore nel file di traccia di XML Extender. Abilitare la traccia prima di eseguire il
comando DVALIDATE.
Sintassi
�� DVALIDATE ( xmlobj )
,
dtddoc ��
Parametri
Tabella 44. I parametri DVALIDATE
Parametro Tipo di dati Descrizione
xmlobj VARCHAR(256) Il percorso completo del
documento XML da
verificare.
CLOB(2G) La colonna XML che contiene
il documento da verificare.
dtddoc VARCHAR(256) Percorso completo del
documento DTD.
CLOB(2G) Colonna XML che contiene il
DTD, che deriva dalla tabella
DTD_REF o da una tabella
regolare.
Esempi
Esempio 1: questo esempio convalida equiplog2001.xml rispetto al DTD specificato
all’interno del documento.
db2 values db2xml.dvalidate(/home/jean/xml/equiplog2001.xml)
Esempio 2: questo esempio convalida un documento XML utilizzando il DTD
specificato e sia il DTD che il documento si trovano nel file system.
db2 values db2xml.dvalidate (c:/xml/equiplog.xml,c:/xml/dtds/equip.dtd)
Esempio 3: questo esempio convalida un documento XML utilizzando il DTD
specificato e sia il DTD che il documento vengono memorizzati nelle tabelle
database DB2.
db2 values db2xml.dvalidate (doc,dtdid) from equiplogs, db2xml.dtd_ref \
where dtdid="equip.dtd"
Riferimenti correlati:
v “Avvio della traccia per XML Extender” a pagina 263
Capitolo 8. Funzioni definite dall’utente di XML Extender 163
164 XML Extender - Amministrazione e programmazione
Capitolo 9. File DAD (document access definition)
Creazione di un file DAD per colonne XML
Tale attività è parte dell’attività più grande di definizione ed abilitazione di una
colonna XML.
Per accedere ai relativi dati XML ed abilitare le colonne per i dati XML in una
tabella XML, è necessario definire un file DAD (document access definition). Tale
file definisce gli attributi e gli elementi chiave dei relativi dati che si devono
ricercare nella colonna. Per le colonne XML, il file DAD principalmente specifica
come devono essere indicizzati i documenti memorizzati al suo interno. Il file DAD
inoltre, specifica un DTD o schema da utilizzare per la convalida dei documenti
inseriti nella colonna XML. I file DAD sono memorizzati come un tipo di dati
CLOB, e la loro dimensione limite è 100 KB.
Prerequisiti:
Prima di creare il file DAD file, è necessario:
v Decidere quali elementi o attributi si prevede di utilizzare spesso nella propria
ricerca. Gli elementi o attributi specificativengono estratti nelle tabelle laterali
per le ricerche rapide da XML Extender.
v Definire il percorso della posizione per rappresentare ogni elemento o attributo
indicizzato in una tabella laterale. E’ necessario inoltre specificare il tipo di dati
in cui si desidera che l’elemento o l’attributo siano convertiti.
Procedura:
Per creare un file DAD:
1. Creare un nuovo documento in un editor di testo e digitare la seguente sintassi:
<?XML version="1.0"?>
<!DOCTYPE DAD SYSTEM <"path/dtd/dad.dtd">.
″path/dtd/dad.dtd ″ è il percorso e il nome del file del DTD per il file DAD. Viene
fornito un DTD in install_dxx\samples\extenders\db2xml\dtd
2. Inserire le tag DAD dopo le righe dal passaggio 1.
<DAD>
</DAD>
Questo elemento conterrà tutti gli altri elementi.
3. Specificare una convalida per il documento e la colonna:
v Se si desidera convalidare l’intero documento XML rispetto ad un DTD o
schema prima che si inserito nel database:
– Inserire la seguente tag per convalidare il documento utilizzando un DTD:
<dtdid>dtd_name.dtd</dtdid>
– Inserire la seguente tag per convalidare il documento utilizzando uno
schema:
<schemabindings>
<nonamespacelocation location="path/schema_name.xsd"/>
</schemabindings>
© Copyright IBM Corp. 1999 - 2006 165
– Per convalidare il documento inserire la seguente tag:
<validation>YES</validation>
Altrimenti, inserire la seguente tag:
<validation>NO</validation>
4. Inserire le tag <Xcolumn> </Xcolumn> per specificare che si stanno utilizzando le
colonne XML come metodo di accesso e memorizzazione per i relativi dati
XML.
5. Specificare le tabelle laterali. Per ogni tabella laterale che si desidera creare:
a. Specificare una tag <table></table> . Ad esempio:
<table name="person_names">
</table>
b. Nelle tag della tabella, inserire una tag <column> per ogni colonna che si
desidera che la tabella laterale contenga. Ogni colonna ha quattro attributi:
name, type, path e multi_occurrence.
Esempio:
<table name="person_names">>
<column name ="fname"
type="varchar(50)"
path="/person/firstName"
multi_occurrence="NO"/>
<column name ="lname"
type="varchar(50)"
path="/person/lastName"
multi_occurrence="NO"/>
</table>
Dove:
name Specifica il nome della colonna creata nella tabella laterale.
type Indica il tipo di dati SQL nella tabella laterale per ogni elemento o
attributo indicizzato
path Specifica il percorso della posizione nel documento XML per ogni
elemento o attributo da indicizzare
multi_occurrence
Indica se l’elemento o l’attributo riferito dall’attributo del percorso
possa presentarsi più di una volta nel documento XML. I possibili
valori per multi_occurrence sono YES o NO. Se il valore è NO,
allora le colonne multiple possono essere specificate per tabella. Se
il valore è YES, è possibile specificare solo una colonna nella tabella
laterale.6. Salvare il relativo file con un’estensione DAD.
Il seguente esempio mostra un file DAD completo:
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "c:\install_dxx\samples\extenders\db2xml\dtd\dad.dtd">
<DAD>
<dtdid>C:\SG246130\code\person.dtd</dtdid>
<validation>YES</validation>
<Xcolumn>
<table name="person_names">
<column name="fname"
type="varchar(50)"
path="/person/firstName"
multi_occurrence="NO"/>
<column name="lname"
166 XML Extender - Amministrazione e programmazione
type="varchar(50)"
path="/person/lastName"
multi_occurrence="NO"/>
</table>
<table name="person_phone_number">
<column name="pnumber"
type="varchar(20)"
path="/person/phone/number"
multi_occurrence="YES"/>
</table>
<table name="person_phone_number">
<column name="pnumber"
type="varchar(20)"
path="/person/phone/number"
multi_occurrence="YES"/>
</table>
<table name="person_phone_type">
<column name="ptype"
type="varchar(20)"
path="/person/phone/type"
multi_occurrence="YES"/>
</table>
<Xcolumn>
</DAD>
Dopo aver creato un file DAD, il passaggio successivo per definire ed abilitare una
colonna XML è quello di creare la tabella in cui i relativi documenti XML verranno
memorizzati.
Argomenti correlati:
v “File DAD per le raccolte XML”
v “Raccolte XML come metodo di accesso e di memorizzazione” a pagina 89
File DAD per le raccolte XML
Per le raccolte XML, il file DAD associa la struttura del documento XML alle
tabelle DB2® da cui viene composto il documento. Mediante questo file DAD, è
anche possibile decomporre i documenti sulle tabelle DB2.
Ad esempio, se si ha un elemento denominato <Tax> nel documento XML, è
necessario associare <Tax> a una colonna denominata TAX. Il file DAD viene
utilizzato per definire la relazione tra i dati XML e i dati relazionali.
È necessario specificare il file DAD abilitando una raccolta o quando si utilizza un
file DAD nelle procedure memorizzate per le raccolte XML. Il file DAD è un
documento XML ubicato sul client. Se si decide di convalidare i documenti XML
con un file DTD, il file DAD può essere associato a tale DTD. Se utilizzato come
parametro di input delle procedure memorizzate XML Extender, il file DAD ha un
tipo di dati CLOB. Questo file può essere massimo 100 KB.
Per specificare il metodo di accesso e memorizzazione alla raccolta XML, utilizzare
la tag <Xcollection> nel file DAD.
<Xcollection>
Specifica che i dati XML devono essere decomposti dai documenti XML in
una raccolta di tabelle relazionali o devono essere composti in documenti
XML da una raccolta di tabelle relazionali.
Una raccolta XML è una serie di tabelle relazionali che contengono dati
XML. Le applicazioni consentono una raccolta XML di qualsiasi tabelle
Capitolo 9. File DAD (document access definition) 167
utente. Queste tabelle utente possono essere tabelle di dati aziendali
esistenti oppure tabelle recentemente create da XML Extender.
Il file DAD specifica le associazioni tra gli elementi o gli attributi del documento
XML e le colonne delle tabelle. Esso utilizza i seguenti tipi di nodo per specificare
tali associazioni:
root_node
Specifica il nodo root del documento.
element_node
Identifica un elemento, che può essere l’elemento root o un elemento
secondario.
text_node
Rappresenta il testo CDATA di un elemento.
attribute_node
Rappresenta un attributo di un elemento.
Figura 13 mostra un frammento dell’associazione utilizzata in un file DAD. I nodi
associano il contenuto dei documenti XML alle colonne delle tabelle in una tabella
relazionale.
In questo esempio, le prime due colonne hanno elementi ed attributi associati.
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "dtd\dad.dtd">
<DAD>
...
<Xcollection>
<SQL_stmt>
...
</SQL_stmt>
<prolog>?xml version="1.0"?</prolog>
<doctype>!DOCTYPE Order SYSTEM
"install_dxx\samples\db2xml\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
sono 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>
Figura 13. Definizioni di nodo per il documento XML associato alla tabella di raccolte XML
168 XML Extender - Amministrazione e programmazione
XML Extender supporta anche l’elaborazione di istruzioni per fogli di stile
mediante l’elemento <stylesheet>. Tale elemento deve trovarsi all’interno del nodo
root del file DAD, con gli elementi doctype e prolog definiti per il documento
XML. Ad esempio:
<Xcollection>
...
<prolog>...</prolog>
<doctype>...</doctype>
<stylesheet>?xml-stylesheet type="text/css" href="order.css"?</stylesheet>
<root_node>...</root_node>
...
</Xcollection>
Utilizzare un qualsiasi editor di testo per creare e aggiornare un file DAD.
Argomenti correlati:
v “Schemi di associazione per raccolte XML” a pagina 101
Composizione SQL
È possibile comporre documenti XML utilizzando colonne con lo stesso nome. Le
colonne selezionate con lo stesso nome, anche se provenienti da tabelle diverse,
devono essere identificate da un alias univoco in modo che ogni variabile nella
clausola select dell’istruzione SQL sia differente. Il seguente esempio mostra il
modo in cui assegnare alias univoci alle colonne che hanno gli stessi nomi.
<SQL_stmt>select o.order_key as oorder_key,
key, customer_name, customer_email,
p.part_key, p.order_key as porder_key,
color, qty, price, tax, ship_id, date, mode
from order_tab o.part_tab p
order by oorder_key, part_key</SQL_stmt>
È inoltre possibile comporre documenti XML utilizzando colonne con valori
generati casualmente. Se un’istruzione SQL in un file DAD ha un valore casuale, è
necessario assegnare alla funzione del valore casuale un alias in modo da
utilizzarlo nella clausola ORDER BY. Questo requisito è necessario in quanto il
valore non è associato ad alcuna colonna nella tabella specificata. Fare riferimento
all’alias per generate_unique alla fine della clausola ORDER BY nel seguente
esmepio.
<SQL_stmt>select o.order_key, customer_name,customer_email,
p.part_key,color,qty,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>2000 and
o.order_key=o.order_key and s.part_key
order by order_key, part_key,ship_id</SQL_stmt>
Composizione di nodi RDB
Le seguenti limitazioni si applicano soltanto alla composizione dei nodi RDB:
v La condizione associata a qualsiasi file DAD del nodo RDB non root_node deve
essere confrontata con un letterale.
v La condizione associata a un qualsiasi nodo RDB di livello inferiore nel DAD
deve essere confrontata con un letterale.
Capitolo 9. File DAD (document access definition) 169
v La condizione associata a un elemento root_node descrive la relazione tra le
tabelle coinvolte nella composizione di nodi RDB. Un esempio è la relazione
delle chiavi esterne primarie.
v Ogni condizione di uguaglianza nella condizione associata a un elemento
RDB_node di livello superiore specifica la relazione join tra le colonne di due
tabelle e viene applicata separatamente da altre condizioni di uguaglianza. In
altre parole, tutti i predicati connessi da AND non vengono applicati
simultaneamente per una singola condizione join: essi simulano una condizione
join più esterna quando viene composto il documento. La relazione parent-child
relationship tra ogni coppia di tabelle è determinata dalla relativa nidificazione
nel file DAD. Ad esempio:<condition>order_tab.order_key=part_tab.order_key AND
part_tab.part_key=ship_tab.part_key</condition>
Composizione da righe che hanno valori null
È possibile utilizzare colonne che hanno valori null per comporre documenti XML.
Il seguente esempio illustra come generare un documento XML da una tabella
MyTable che ha una riga contenente un valore null nella colonna Col 1. Il file DAD
utilizzato in questo esempio è nullcol.dad.
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">
<DAD>
<validation>NO validation>NO>
<Xcollection>
<SQL_stmt>SELECT 1 as X, Col1 FROM MyTable order by X, Col1<\SQL_stmt>
<prolog>?xml version="1.0"?prolog>?xml version="1.0"?>
<doctype>!DOCTYPE Order SYSTEM "e:\t3xml\x.dtd">
<root_node>
<element_node name="MyColumn">
<element_node name="Column1" multi_occurrence="YES">
<text_node>
<column name="Col1"/>
</text_node>
</element_node>
</element_node>
</roott_node>
</Xcollection>
</DAD>
MyTable
___________
| Col 1 |
|__________|
| 1 |
|__________|
| 3 |
|__________|
| — |
|__________|
Eseguire tests2x mydb nullcol.dad result_tab o utilizzare il comando dxxGenXML
per produrre il seguente documento. Non esiste un terzo elemento Column1 in
quanto quella riga nella tabella aveva un valore null.
170 XML Extender - Amministrazione e programmazione
<?xml version="1.0"?>
<!DOCTYPE Order SYSTEM "e:\t3xml\x.dtd">
<MyColumn>
<Column1>1</Column1>
<Column1>3</Column1>
</MyColumn>
DTD per il file DAD
In questa sezione vengono descritte le dichiarazioni DTD (document type
declarations) per il file DAD (document access definition). Il file DAD stesso è un
documento XML con struttura ad albero e richiede un DTD. Il nome del file DTD è
dad.dtd. Il seguente esempio mostra il DTD per il file DAD:
<?xml encoding="US-ASCII"?>
<!ELEMENT DAD ((schemabindings |dtdid)?, validation, (Xcolumn | Xcollection))>
<!ELEMENT dtdid (#PCDATA)>
<!ELEMENT schemabindings (nonamespacelocation)>
<!ELEMENT nonamespacelocation EMPTY>
<!ATTLIST nonamespacelocation location CDATA #REQUIRED>
<!ELEMENT validation (#PCDATA)>
<!ELEMENT Xcolumn (table*)>
<!ELEMENT table (column*)>
<!ATTLIST table name CDATA #REQUIRED
key CDATA #IMPLIED
orderBy CDATA #IMPLIED>
<!ELEMENT column EMPTY>
<!ATTLIST column
name CDATA #REQUIRED
type CDATA #IMPLIED
path CDATA #IMPLIED
multi_occurrence CDATA #IMPLIED>
<!ELEMENT Xcollection (SQL_stmt?, prolog, doctype?, stylesheet?, root_node)>
<!ELEMENT SQL_stmt (#PCDATA)>
<!ELEMENT prolog (#PCDATA)>
<!ELEMENT stylesheet (#PCDATA)>
<!ELEMENT doctype (#PCDATA)>
<!ELEMENT root_node (element_node)>
<!ELEMENT element_node (RDB_node?,
attribute_node*,
text_node?,
element_node*,
namespace_node*,
process_instruction_node*,
comment_node*)>
<!ATTLIST element_node
name CDATA #REQUIRED
ID CDATA #IMPLIED
multi_occurrence CDATA "NO"
BASE_URI CDATA #IMPLIED> <!--ignored -->
<!ELEMENT attribute_node (column | RDB_node)>
<!ATTLIST attribute_node
name CDATA #REQUIRED>
<!ELEMENT text_node (column | RDB_node)>
<!ELEMENT RDB_node (table+, column?, condition?)>
<!ELEMENT condition (#PCDATA)>
<!ELEMENT comment_node (#PCDATA)> <!-- ignored -->
<!ELEMENT namespace_node EMPTY> <!-- ignored -->
<!ATTLIST namespace_node
name CDATA #IMPLIED
value CDATA #IMPLIED>
<!ELEMENT process_instruction_node (#PCDATA)> <!-- ignored -->
Il file DAD contiene quattro elementi principali:
Capitolo 9. File DAD (document access definition) 171
v DTDID
v validation
v Xcolumn
v Xcollection
Xcolumn e Xcollection hanno un elemento secondario e attributi che consentono
l’associazione di dati XML alle tabelle relazionali in DB2. Nel seguente elenco sono
riportati gli elementi principali e i relativi elementi e attributi secondari. Gli esempi
della sintassi sono presi dall’esempio precedente.
Elemento DTDID
I DTD forniti a XML Extender cono memorizzati nella tabella DTD_REF.
Ogni DTD è identificato da un ID univoco fornito nella tag DTDID del file
DAD. La tag DTDID fa riferimento al DTD che convalida i documenti XML
oppure consente l’associazione tra le tabelle della raccolta XML e i
documenti XML. Per le raccolte XML, questo elemento è richiesto solo per
la convalida di documenti XML di input e di output. Per le colonne XML,
questo elemento è necessario solo per convalidare i documenti XML di
input. La tag DTDID deve essere uguale a SYSTEM ID specificato in doctype
nei documenti XML.
Sintassi: <!ELEMENT dtdid (#PCDATA)>
Elemento validation
Indica se il documento XML deve essere convalidato con il DTD per il
DAD. Se è specificato YES, allora deve essere specificato anche DTDID.
Sintassi: <!ELEMENT validation(#PCDATA)>
Elemento Xcolumn
Definisce lo schema di indicizzazione per una colonna XML. Esso è
costituito da zero o più tabelle.
Sintassi: <!ELEMENT Xcolumn (table*)>Xcolumn ha un elemento secondario,
table.
Elemento table
Definisce una o più tabelle relazionali create per l’indicizzazione di
elementi o attributi di documenti memorizzati in una colonna XML.
Sintassi:
<!ELEMENT table (column+)>
<!ATTLIST table name CDATA #REQUIRED
key CDATA #IMPLIED
orderBy CDATA #IMPLIED>
L’elemento table ha un attributo obbligatorio e due attributi impliciti:
Attributo name
Specifica il nome della tabella laterale.
Attributo key
La chiave primaria della tabella.
Attributo orderBy
I nomi delle colonne che determinano l’ordine di sequenza del
testo dell’elemento o dei valori dell’attributo con più ricorrenze
quando si generano i documenti XML.
L’elemento table ha un elemento secondario:
172 XML Extender - Amministrazione e programmazione
Elemento column
Associa un attributo di un nodo CDATA dal documento XML di
input a una colonna nella tabella.
Sintassi:
<!ATTLIST column
name CDATA #REQUIRED
type CDATA #IMPLIED
path CDATA #IMPLIED
multi_occurrence CDATA #IMPLIED>
L’elemento column ha i seguenti attributi:
Attributo name
Specifica il nome della colonna. Questo è il nome alias del
percorso della posizione che identifica un elemento o un
attributo.
Attributo type
Definisce il tipo di dati della colonna. Esso può essere un
qualsiasi tipo di dati SQL.
Attributo path
Mostra il percorso della posizione di un elemento o di un
attributo XML e deve essere il percorso semplice come
specificato nella Tabella 3.1.a.
Attributo multi_occurrence
Specifica se questo elemento o attributo è presente più
volte in un documento XML. I valori possono essere YES o
NO.
Xcollection
Definisce l’associazione tra documenti XML e una raccolta XML di tabelle
relazionali.
Sintassi:
<!ELEMENT Xcollection(SQL_stmt?, prolog, doctype, root_node)>
Xcollection ha i seguenti elementi secondari:
SQL_stmt
Specifica l’istruzione SQL utilizzata da XML Extender per definire
la raccolta. In particolare, l’istruzione seleziona i dati XML dalle
tabelle della raccolta XML e li utilizza per generare i documenti
XML nella raccolta. Il valore di questo elemento deve essere
un’istruzione SQL valida. Essa è utilizzata solo per la composizione
ed è consentito solo un elemento SQL_stmt.
Syntax: <!ELEMENT SQL_stmt #PCDATA >
prolog
Il testo per il prologo XML. Lo stesso prologo è fornito a tutti i
documenti nell’intera raccolta. Il valore di prolog è un valore fisso.
Sintassi: <!ELEMENT prolog #PCDATA>
doctype
Definisce il testo per il DTD (document type definition) XML.
Sintassi:
<!ELEMENT doctype (#PCDATA | RDB_node)*>
Capitolo 9. File DAD (document access definition) 173
doctype è utilizzato per specificare il DOCTYPE del documento
risultante. Definire un valore esplicito. Questo valore viene fornito
a tutti i documenti nell’intera raccolta.
doctype ha un elemento secondario:
root_node
Definisce il nodo root virtuale. root_node deve avere l’elemento
secondario richiesto, element_node, che può essere utilizzato solo
una volta. L’elemento element_node in root_node è l’elemento
root_node del documento XML.
Sintassi: <!ELEMENT root_node(element_node)>
RDB_node
Definisce la tabella del database DB2 in cui deve essere
memorizzato il contenuto di elemento XML o il valore di un
attributo XML o da cui verranno richiamati. rdb_node è un
elemento secondario di element_node, text_node e attribute_node e
ha i seguenti elementi secondari:
table Specifica la tabella in cui viene memorizzato il contenuto
dell’elemento o dell’attributo.
column
Specifica la colonna in cui viene memorizzato il contenuto
dell’elemento o dell’attributo.
condition
Specifica una condizione per la colonna (facoltativo).
element_node
Rappresenta un elemento XML. Esso deve essere definito nel DAD
specificato per la raccolta. Per l’associazione RDB_node, l’elemento
root element_node deve avere un RDB_node per specificare tutte le
tabelle contenenti i dati XML per sé stesso e per tutti i nodi
secondari. Esso può avere zero o più attribute_nodes e
element_nodes secondari, oltre a zero o un text_node. Per gli
elementi che non sono root, non è necessario alcun elemento
RDB_node.
Sintassi:
Un element_node è definito dai seguenti elementi secondari:
RDB_node
(Facoltativo) Specifica le tabelle, la colonna e le condizioni
per i dati XML. L’elemento RDB_node per un elemento
deve essere definito solo per l’associazione RDB_node. In
questo caso, è necessario specificare una o più tabelle. La
colonna non è necessaria in quanto il contenuto
dell’elemento è specificato dall’elemento text_node. La
condizione è facoltativa, a seconda della DTD e della
condizione dell’interrogazione.
child nodes
Facoltativo: un elemento element_node può avere i seguenti
nodi secondari:
element_node
Rappresenta gli elementi secondari dell’elemento
XML corrente.
174 XML Extender - Amministrazione e programmazione
attribute_node
Rappresenta gli attributi dell’elemento XML
corrente.
text_node
Rappresenta il testo CDATA dell’elemento XML
corrente.
attribute_node
Rappresenta un attributo XML. Questo è il nodo che definisce
l’associazione tra un attributo XML e i dati della colonna in una
tabella relazionale.
Sintassi:
L’elemento attribute_node deve avere definizioni per un attributo
name e un elemento secondario column o RDB_node. attribute_node
ha il seguente attributo:
name Il nome dell’attributo.
attribute_node ha i seguenti elementi secondari:
column
Utilizzato per l’associazione SQL. La colonna deve essere
specificata nella clausola SELECT di SQL_stmt.
RDB_node
Utilizzato per l’associazione RDB_node. Il nodo definisce
l’associazione tra questo attributo e i dati della colonna
nella tabella relazionale. È necessario specificare la tabella e
la colonna. La condizione è facoltativa.
text_node
Rappresenta il contenuto del testo di un elemento XML. Questo è il
nodo che definisce l’associazione tra il contenuto di un elemento
XML e i dati della colonna in una tabella relazionale.
Sintassi: Esso deve essere definito da un elemento secondario
column o RDB_node:
column
Necessario per l’associazione SQL. In questo caso, la
colonna deve essere specificata nella clausola SELECT di
SQL_stmt.
RDB_node
Necessario per l’associazione RDB_node. Il nodo definisce
l’associazione tra questo contenuto di testo e i dati della
colonna nella tabella relazionale. È necessario specificare
table e column. La condizione è facoltativa.
Argomenti correlati:
v “File DAD per le raccolte XML” a pagina 167
Attività correlate:
v “Sovrascrittura dinamica di valori nel file DAD”
Sovrascrittura dinamica di valori nel file DAD
Procedura:
Capitolo 9. File DAD (document access definition) 175
Per le interrogazioni dinamiche è possibile utilizzare due parametri facoltativi per
sovrascrivere le condizioni nel file DAD: override e overrideType. In base all’input di
overrideType, l’applicazione può sovrascrivere i valori della tag <SQL_stmt> per
l’associazione SQL o le condizioni in RDB_nodes per l’associazione RDB_node nel
file DAD.
Tali parametri hanno i seguenti valori e regole:
overrideType
Questo parametro è un parametro di input richiesto (IN) che indica il tipo di
parametro override. Il parametro overrideType ha i seguenti valori:
NO_OVERRIDE
Specifica di non sovrascrivere una condizione nel file DAD.
SQL_OVERRIDE
Specifica di sovrascrivere l’istruzione SQL nel file DAD.
XML_OVERRIDE
Specifica di sovrascrivere una condizione nel file DAD con una condizione
basata sul percorso della posizione.
override
Questo parametro è un parametro di input facoltativo (IN) che specifica la
condizione override per il file DAD. La sintassi del valore di input corrisponde
al valore specificato sul parametro overrideType:
v Se si specifica NO_OVERRIDE, il valore di input è una stringa NULL.
v Se si specifica SQL_OVERRIDE, il valore di input è una istruzione SQL
valida.
Per utilizzare SQL_OVERRIDE, è necessario utilizzare lo schema di
associazione SQL nel file DAD. L’istruzione SQL di input sovrascrive
l’istruzione SQL specificata dall’elemento <SQL_stmt> nel file DAD.
v Se si specifica XML_OVERRIDE, il valore di input è una stringa che contiene
una o più espressioni.
Se si utilizza XML_OVERRIDE e un’espressione, è necessario utilizzare lo
schema di associazione RDB_node nel file DAD. L’espressione XML di input
sovrascrive la condizione RDB_node specificata nel file DAD. L’espressione
utilizza la seguente sintassi:
��
�
AND
percorso della posizione semplice
=
valore
>
<
<>
>=
<=
LIKE
��
La sintassi ha i seguenti componenti:
percorso della posizione semplice
Specifica un percorso semplce mediante la sintassi definita da XPath.
operatori
Gli operatori SQL presenti nel diagramma della sintassi possono
contenere uno spazio per separare l’operatore da altre parti
dell’espressione.
176 XML Extender - Amministrazione e programmazione
Gli spazi prima e dopo gli operatori sono facoltativi. Gli spazi sono
invece obbligatori attorno all’operatore LIKE.
valore
Un valore numerico o una stringa racchiusa tra virgolette singole.
AND
L’operatore AND viene trattato come un operatore logico sullo stesso
percorso della posizione. Se un percorso semplice viene specificato più
di una volta nella stringa override, allora tutti i predicati per il percorso
semplice vengono applicati simultaneamente.Se si specifica XML_OVERRIDE, la condizione per RDB_node nell’elemento
text_node o attribute_node che corrisponde al percorso semplice verrà
sovrascritto dall’espressione specificata.
XML_OVERRIDE non è completamente conforme con XPath. Il percorso
semplice è utilizzato solo per identificare l’elemento o l’attributo associato a
una colonna.
I seguenti esempi utilizzano SQL_OVERRIDE e XML_OVERRIDE per visualizzare
la condizione override dinamica.
Esempio 1: una procedura memorizzata che utilizza SQL_OVERRIDE. In questo
esempio, l’elemento <xcollection> nel file DAD deve avere un elemento
<SQL_stmt>. Il parametro override sovrascrive il valore di <SQL_stmt>,
modificando il prezzo in modo che sia maggiore di 50.00 e la data in modo che sia
successiva a 1998-12-01.
include "dxx.h"
include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char collection[32]; /* buffer dad */
char result_tab[32]; /* nome della tabella dei risultati */
char override[256]; /* override, SQL_stmt */
short overrideType; /* definito in dxx.h */
short max_row; /* numero massimo di righe */
short num_row; /* numero reale di righe */
long returnCode; /* codice ritorno errore */
char returnMsg[1024]; /* testo messaggio di errore */
short rtab_ind;
short collection_ind;
short ovtype_ind;
short ov_ind;
short maxrow_ind;
short numrow_ind;
short returnCode_ind;
short returnMsg_ind;
EXEC SQL END DECLARE SECTION;
/* crea la tabella */
EXEC SQL CREATE TABLE xml_order_tab (xmlorder XMLVarchar);
/* inizializza la variabile host e gli indicatori */
strcpy(collection,"sales_ord");
strcpy(result_tab,"xml_order_tab");
sprintf(override,"%s %s %s %s %s %s %s",
"SELECT o.order_key, customer, p.part_key,
quantity, price,", "tax, ship_id, date, mode ",
"FROM order_tab o, part_tab p,",
"table(select substr(char(timestamp
Capitolo 9. File DAD (document access definition) 177
(generate_unique())),16)",
"as ship_id, date, mode from ship_tab) s",
"WHERE p.price > 50.00 and s.date >’1998-12-01’ AND",
"p.order_key = o.order_key and s.part_key = p.part_key");
overrideType = SQL_OVERRIDE;
max_row = 500;
num_row = 0;
returnCode = 0;
msg_txt[0] = ’\0’;
collection_ind = 0;
rtab_ind = 0;
ov_ind = 0;
ovtype_ind = 0;
maxrow_ind = 0;
numrow_ind = -1;
returnCode_ind = -1;
returnMsg_ind = -1;
/* Richiama la procedura memorizzata */
EXEC SQL CALL db2xml.dxxRetrieveXML(:collection:collection_ind;
:result_tab:rtab_ind,
:overrideType:ovtype_ind,:override:ov_ind,
:max_row:maxrow_ind,:num_row:numrow_ind,
:returnCode:returnCode_ind,:returnMsg:returnMsg_ind);
Esempio 2: una procedura memorizzata che utilizza XML_OVERRIDE. In questo
esempio, l’elemento <collection> nel file DAD ha un RDB_node per l’elemento root
element_node. Il valore override si basa sul contenuto XML. XML Extender converte
il percorso semplice nella colonna del database DB2 associata.
include "dxx.h"
include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char collection[32]; /* buffer dad */
char result_tab[32]; /* nome della tabella dei risultati */
char override[256]; /* override, condizione XPATH */
short overrideType; /* definito in dxx.h */
short max_row; /* numero massimo di righe */
short num_row; /* numero reale di righe */
long returnCode; /* codice ritorno errore */
char returnMsg[1024]; /* testo messaggio di errore */
short dadbuf_ind;
short rtab_ind;
short collection_ind;
short ovtype_ind;
short ov_ind;
short maxrow_ind;
short numrow_ind;
short returnCode_ind;
short returnMsg_ind;
EXEC SQL END DECLARE SECTION;
/* crea la tabella */
EXEC SQL CREATE TABLE xml_order_tab (xmlorder XMLVarchar);
/* inizializza la variabile host e gli indicatori */
strcpy(collection,"sales_ord");
strcpy(result_tab,"xml_order_tab");
sprintf(override,"%s %s",
"/Order/Part/Price > 50.00 AND ",
"Order/Part/Shipment/ShipDate > ’1998-12-01’");
overrideType = XML_OVERRIDE;
max_row = 500;
num_row = 0;
178 XML Extender - Amministrazione e programmazione
returnCode = 0;
msg_txt[0] = ’\0’;
collection_ind = 0;
rtab_ind = 0;
ov_ind = 0;
ovtype_ind = 0;
maxrow_ind = 0;
numrow_ind = -1;
returnCode_ind = -1;
returnMsg_ind = -1;
/* Richiama la procedura memorizzata */
EXEC SQL CALL db2xml.dxxRetrieveXML(:collection:collection_ind;
:result_tab:rtab_ind,
:overrideType:ovtype_ind,:override:ov_ind,
:max_row:maxrow_ind,:num_row:numrow_ind,
:returnCode:returnCode_ind,:returnMsg:returnMsg_ind);
Sovrascritture multiple
XML Extender supporta più sovrascritture nello stesso percorso. Tutte le
sovrascritture specificate sul nodo RDB verranno accettate.
È possibile specificare più sovrascritture XML sullo stesso percorso di posizione
per ridefinire le condizioni set nella ricerca. Nel seguente esempio, un documento
XML è composto dalle due tabelle mediante il file test.dad.
Tabella 45. Tabella Reparto
Numero reparto Nome reparto
10 Ingegneria
20 Operazioni
30 Marketing
Tabella 46. Tabella Impiegato
Numero impiegato Numero reparto Salario
123 10 $98,000.00
456 10 $87,000.00
111 20 $65,000.00
222 20 $71,000.00
333 20 $66,000.00
500 30 $55,000.00
Il file DAD test.dad illustrato di seguito contiene una condizione che confronta la
variabile deptno con il valore 10. Per espandere la ricerca a valori maggiori di 10 e
minori di 30, è necessario sovrascrivere questa condizione. È necessario impostare
il parametro override quando si richiama dXXGenXML come riportato di seguito:
/ABC.com/Department>10 AND /ABC.com/Department<30
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "C:\dxx_xml\test\dtd\dad.dtd">
<DAD>
<dtdid>E:\dtd\lineItem.dtd</dtdid>
<validation>NO</validation>
<Xcollection>
<porlog>?xmol version="1.0"?</prolog>
Capitolo 9. File DAD (document access definition) 179
<doctype>!DOCTYPE Order SYSTEM "C:\dxx_xml\test\dtd\LineItem.dtd"</doctype>
<root_node>
<element_node name="ABC.com">
<TDB_node>
<table name="dept" key="deptno"/>
<table name="empl" key="emplno"/>
<condition>dept deptno=empl.deptno</condition>
</RDB_node>
<element_node name="Department" multi_occurrence="YES">
<text_node>
<RDB_node>
<table name="dept"/>
<column name="deptno">
<condition>deptno=10</condition><RDB_node></RDB_node><text_node></text_node>
<element_node name="Employees" multi_occurrence="YES">
<text_node>
<RDB_node>
<table name="dept"><column name="deptnot"><condition>deptno=10</condition>
</table></RDB_node></text_node>
<element_node name="Employees" multi_occurence="YES">
<element_node name="EmployeeNo">
<text_node>
<RDB_node>
<table name="empl"><column name="emplno"><condition>emplno<500</condition>
</table></RDB_node></text_node></element_node>
<element_node name="Salary">
<text_node>
<RDB_node>
<table name="empl"><column name="salary"><condition>salary>5000.00</condition>
</table></RDB_node></text_node></element_node></element_node></element_node>
Per comporre un documento XML senza una condizione override, immettere
tests2x mydb test.dad result_tab o richiamare dxxGenXML senza impostare
l’override. Si avrà un documento simile al seguente:
<?xml version="1.0">
<!DOCTYPE Order SYSTEM "C:\dxx_xml\test\dtd\LineItem.dtd">
<ABC.com>
<Department>10
<Employees>
<EmployeeNo>123</EmployeeNO>
<Salary>98,000.00</Salary>
</Employees>
<Employees>
<EmployeeNo>456</EmployeeNo>
<Salary>87,000.00</Salary>
</Employees>
</Department>
</ABC.COM>
Per sovrascrivere il file DAD è possibile richiamare dxxGenXML come già citato
oppure eseguire il programma test2x con le condizioni specificate:
180 XML Extender - Amministrazione e programmazione
tests2x mydb test.dad result_tab -o 2 ″/ABC.com/Department>10 AND
/ABC.com/Department<30″
<?xml version="1.0">
<!DOCTYPE Order SYSTEM "C:\dxx_xml\test\dtd\LineItem.dtd">
<ABC.com>
<Department>20
<Employees>
<EmployeeNo>111</EmployeeNo>
<Salary>65,000.00</Salary>
</Employees>
<EmployeeNo>222</EmployeeNo>
<Salary>71,000.00</Salary>
</Employees>
<Employees>
<EmployeeNo>333</EmployeeNo>
<Salary>66,000.00</Salary>
</Employees>
</Department>
</ABC.com>
Argomenti correlati:
v “File DAD per le raccolte XML” a pagina 167
Riferimenti correlati:
v “DTD per il file DAD” a pagina 171
Capitolo 9. File DAD (document access definition) 181
182 XML Extender - Amministrazione e programmazione
Capitolo 10. Procedure memorizzate di XML Extender
Procedure memorizzate di XML Extender - Panoramica
XML Extender fornisce procedure memorizzate per la gestione di colonne e
raccolte XML. Tali procedure memorizzate possono essere richiamate dal client
DB2. L’interfaccia client può essere integrata in SQL, ODBC o JDBC. Fare
riferimento alla sezione sulle procedure memorizzate nei manuali IBM DB2
Administration Guide per maggiori dettagli su come richiamare le procedure.
Le procedure memorizzate utilizzano lo schema DB2XML, che è il nome schema di
XML Extender.
XML Extender fornisce tre tipi di procedure memorizzate:
Procedure memorizzate di gestione
consentono agli utenti di completare le attività di gestione
Procedure memorizzate di composizione
generano documenti XML utilizzando i dati nelle tabelle di database
esistenti
Procedure memorizzate di decomposizione
interrompono o suddividono i documenti XML in entrata e memorizzano i
dati in tabelle di database nuove o esistenti
Verificare di includere i file di intestazione esterni di XML Extender nel
programma che richiama le procedure. I file di intestazione si trovano nella
directory ″install_dxx\dxx\samples\extenders\db2xml\include″, dove install_dxx è
la directory in cui è stato installato DB2 XML Extender. I file di intestazione sono:
dxx.h La costante definita e i tipi di dati di XML Extender
dxxrc.h Il codice di ritorno di XML Extender
La sintassi per includere i file di intestazione è:
#include "dxx.h"
#include "dxxrc.h"
Verificare che il percorso dei file di inclusione sia stato indicato nel makefile
insieme alle opzioni di compilazione.
Richiamo delle procedure memorizzate XML Extender
È possibile utilizzare XML Extender in diversi sistemi operativi da una singola
applicazione client, scrivendo i nomi della procedura memorizzata in maiuscolo e
in minuscolo. Per richiamare le procedure memorizzate in questo modo, utilizzare
le versioni result_colname e valid_colname delle procedure memorizzate di
composizione. L’utilizzo di questo metodo offre i seguenti vantaggi:
v È possibile utilizzare le procedure memorizzate in tutti gli ambienti di DB2
Database poiché è possibile includere molte colonne nella tabella dei risultati. Le
versioni delle procedure memorizzate che non supportano result_colname e
valid_colname richiedono esattamente una colonna nella tabella dei risultati.
© Copyright IBM Corp. 1999 - 2006 183
v È possibile utilizzare una tabella temporanea dichiarata come tabella dei
risultati. La tabella temporanea è identificata da uno schema impostato su
″session″. Le tabelle temporanee dichiarate consentono di supportare gli
ambienti client multi-utenti.
Utilizzare il maiuscolo quando si richiamano le procedure memorizzate DB2 XML
Extender per accedere alle procedure memorizzate sulle piatteforme.
Prerequisiti: Associare il database alla procedura memorizzata XML Extender e i
file di collegamento DB2 CLI. È possibile utilizzare un file di comando di esempio,
getstart_prep.cmd, per associare i file. Questo file di comando si trova nella
directory ″c:\cmd″. Per associare:
1. Collegarsi al database. Ad esempio:
db2 "connect to SALES_DB"
2. Passare alla directory ″c:\bnd″ e associare XML Extender al database.
db2 "bind @dxxbind.lst"
3. Passare alla directory ″c:\bnd″ e associare CLI al database.
db2 "bind @db2cli.lst"
4. Terminare la connessione.
db2 "terminate"
Procedura:
Richiamare XML Extender utilizzando la seguente sintassi:
CALL DB2XML.function_entry_point
Dove:
function_entry_point
Specifica il nome della funzione.
Nell’istruzione CALL, gli argomenti trasferiti alla procedura memorizzata devono
essere variabili host, non costanti o espressioni. Le variabili host possono avere
indicatori nulli.
Consultare gli esempi per richiamare le procedure memorizzate nel file di origine
dxx_install/samples/extenders/db2xml/c e dxx_install/samples/extenders/db2xml/cli. Nella la directory dxx_install/samples/extenders/db2xml/c, i file del
codice SQX sono forniti per richiamare le procedure memorizzate della raccolta
XML utilizzando SQL integrato. Nella directory dxx_install/samples/extenders/db2xml/cli, i file di esempio mostrano come richiamare le procedure memorizzate
utilizzando la CLI (Call Level Interface).
Procedure memorizzate che restituiscono CLOB
Se si hanno file CLOB più grandi di un 1 MB, è possibile ridefinire il parametro
della procedura memorizzata creando ed eseguendo un file contenente i seguenti
comandi:
drop procedure db2xml.dxxGenXMLClob;
create procedure db2xml.dxxGenXMLClob(
in dadBuf clob(100K),
in overrideType integer,
in override varchar(32672),
out resultDoc clob(1M),
184 XML Extender - Amministrazione e programmazione
out valid integer,
out numDocs integer,
out returnCode integer,
out returnMsg varchar(1024)
)
external name ’db2xml!dxxGenXMLClob’
specific DB2XML.DXXGENXMLCLOB
language C
parameter style SQL
not deterministic
fenced
null call;
drop procedure db2xml.dxxRetrieveXMLClob;
create procedure db2xml.dxxRetrieveXMLClob(
in collectionName varchar(128),
in overrideType integer,
in override varchar(32672),
out resultDoc clob(1M),
out valid integer,
out numDocs integer,
out returnCode integer,
out returnMsg varchar(1024)
)
external name ’db2xml!dxxRetrieveXMLClob’
specific DB2XML.DXXRETRIEVEXMLCLOB
language C
parameter style SQL
not deterministic
fenced
Per specificare la lunghezza CLOB: Aprire il file in un editor e modificare il
parametro resultDoc mostrato nel seguente esempio:
out resultDoc clob(clob_size),
Se viene generato più di un documento, la procedura memorizzata restituisce il
primo documento.
Raccomandazioni sulle dimensioni: Il limite delle dimensioni del parametro
resultDoc dipende dalla relativa impostazione del sistema. Notare che la quantità
specificata in questo parametro è la quantità allocata da JDBC, a prescindere dalla
dimensione del documento. La dimensione deve corrispondere ai file XML più
grandi, ma non deve superare 1.5 gigabyte.
Per eseguire il file di comando dalla riga di comando DB2 e la directory dove il file
è posizionato, immettere:
db2 -tf crtgenxc.db2
Attività correlate:
v “Richiamo delle procedure memorizzate XML Extender” a pagina 183
Capitolo 10. Procedure memorizzate di XML Extender 185
Procedure memorizzate di gestione di XML Extender
Procedure memorizzate di gestione di XML Extender -
Panoramica
Queste procedure memorizzate sono utilizzate per le attività di gestione, come ad
esempio l’abilitazione o la disabilitazione di una colonna o una raccolta XML. Esse
sono richiamate dal wizard di gestione di XML Extender e dal comando di
gestione dxxadm.
v dxxEnableDB()
v dxxDisableDB()
v dxxEnableColumn()
v dxxDisableColumn()
v dxxEnableCollection()
v dxxDisableCollection()
Procedura memorizzata dxxEnableDB()
Scopo:
Abilita il database. Una volta abilitato il database, XML Extender crea i seguenti
oggetti:
v I tipi di XML Extender definiti dall’utente (UDT).
v Le funzioni di XML Extender definite dall’utente (UDF).
v La tabella di repository DTD XML Extender, DTD_REF, che memorizza i DTD e
le rispettive informazioni.
v La tabella di utilizzo XML Extender, XML_USAGE, che memorizza le
informazioni comuni per ogni colonna e raccolta abilitata per XML.
Sintassi:
DB2XML.dxxEnableDB(char(dbName) dbName, /* input */
long returnCode, /* output */
varchar(1024) returnMsg) /* output */
Parametri:
Tabella 47. Parametri di dxxEnableDB()
Parametro Descrizione Parametro IN/OUT
dbName Il nome del database. IN
returnCode Il codice di ritorno dalla procedura
memorizzata.
OUT
returnMsg Il testo di messaggio restituito in
caso di errore.
OUT
Argomenti correlati:
v “Procedure memorizzate di gestione di XML Extender - Panoramica”
v Capitolo 13, “Tabelle del supporto di gestione di XML Extender”, a pagina 261
Attività correlate:
v “Richiamo delle procedure memorizzate XML Extender” a pagina 183
186 XML Extender - Amministrazione e programmazione
v “Abilitare i server del database per XML” a pagina 51
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxDisableDB()
Scopo:
Disabilita il database. Quando XML Extender disabilita il database, elimina i
seguenti oggetti:
v I tipi di XML Extender definiti dall’utente (UDT).
v Le funzioni di XML Extender definite dall’utente (UDF).
v La tabella di repository DTD XML Extender, DTD_REF, che memorizza i DTD e
le rispettive informazioni.
v La tabella di utilizzo XML Extender, XML_USAGE, che memorizza le
informazioni comuni per ogni colonna abilitata per XML e per ogni raccolta.
Importante: è necessario disabilitare tutte le colonne XML prima di tentare di
disabilitare un database. XML Extender non può disabilitare un database che
contiene colonne o raccolte abilitate per XML Extender.
Sintassi:
DB2XML.dxxDisableDB(char(dbName) dbName, /* input */
long returnCode, /* output */
varchar(1024) returnMsg) /* output */
Parametri:
Tabella 48. Parametri di dxxDisableDB()
Parametro Descrizione Parametro IN/OUT
dbName Il nome del database. IN
returnCode Il codice di ritorno dalla procedura
memorizzata.
OUT
returnMsg Il testo di messaggio restituito in
caso di errore.
OUT
Argomenti correlati:
v “Procedure memorizzate di gestione di XML Extender - Panoramica” a pagina
186
v Capitolo 13, “Tabelle del supporto di gestione di XML Extender”, a pagina 261
Attività correlate:
v “Richiamo delle procedure memorizzate XML Extender” a pagina 183
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxEnableColumn()
Scopo:
Capitolo 10. Procedure memorizzate di XML Extender 187
Abilita una colonna XML. Quando si abilita una colonna, XML Extender effettua le
seguenti attività:
v Determina se la tabella XML ha una chiave primaria; in caso contrario XML
Extender modifica la tabella XML e aggiunge una colonna denominata
DXXROOT_ID.
v Crea tabelle laterali specificate nel file DAD con una colonna contenente un
identificativo univoco per ogni riga nella tabella XML. Questa colonna è l’ID
root specificato dall’utente o DXXROOT_ID indicato da XML Extender.
v Crea una vista predefinita per la tabella XML e le relative tabelle laterali, in
alcuni casi utilizzando un nome specificato dall’utente.
Sintassi:
DB2XML.dxxEnableColumn(char(dbName) dbName, /* input */
char(tbName) tbName, /* input */
char(colName) colName, /* input */
CLOB(100K) DAD, /* input */
char(tablespace) tablespace, /* input */
char(defaultView) defaultView, /* input */
char(rootID) rootID, /* input */
long returnCode, /* output */
varchar(1024) returnMsg) /* output */
Parametri:
Tabella 49. Parametri di dxxEnableColumn()
Parametro Descrizione Parametro IN/OUT
dbName Il nome del database. IN
tbName Il nome della tabella contenente la
colonna XML.
IN
colName Il nome della colonna XML. IN
DAD Un CLOB contenente il file DAD. IN
tablespace Il tablespace che contiene le tabelle
laterali diverse dal tablespace
predefinito. Se non è specificato,
viene utilizzato quello predefinito.
IN
defaultView Il nome della vista predefinita che
unisce le tabelle laterali e la tabella
dell’applicazione.
IN
rootID Il nome della singola chiave
primaria nella tabella
dell’applicazione da utilizzare come
ID root per le tabelle laterali.
IN
returnCode Il codice di ritorno dalla procedura
memorizzata.
OUT
returnMsg Il testo di messaggio restituito in
caso di errore.
OUT
Argomenti correlati:
v “Colonne XML come metodo di accesso e di memorizzazione” a pagina 74
v “Procedure memorizzate di gestione di XML Extender - Panoramica” a pagina
186
Attività correlate:
188 XML Extender - Amministrazione e programmazione
v “Richiamo delle procedure memorizzate XML Extender” a pagina 183
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxDisableColumn()
Scopo:
Disabilita la colonna abilitata per XML.
Sintassi:
DB2XML.dxxDisableColumn(char(dbName) dbName, /* input */
char(tbName) tbName, /* input */
char(colName) colName, /* input */
long returnCode, /* output */
varchar(1024) returnMsg) /* output */
Parametri:
Tabella 50. Parametri di dxxDisableColumn()
Parametro Descrizione Parametro IN/OUT
dbName Il nome del database. IN
tbName Il nome della tabella contenente la
colonna XML.
IN
colName Il nome della colonna XML. IN
returnCode Il codice di ritorno dalla procedura
memorizzata.
OUT
returnMsg Il testo di messaggio restituito in
caso di errore.
OUT
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxEnableCollection()
Scopo:
Abilita una raccolta XML associata a una tabella dell’applicazione.
Sintassi:
dxxEnableCollection(char(dbName) dbName, /* input */
char(colName) colName, /* input */
CLOB(100K) DAD, /* input */
char(tablespace) tablespace, /* input */
long returnCode, /* output */
varchar(1024) returnMsg) /* output */
Parametri:
Tabella 51. Parametri di dxxEnableCollection()
Parametro Descrizione Parametro IN/OUT
dbName Il nome del database. IN
Capitolo 10. Procedure memorizzate di XML Extender 189
Tabella 51. Parametri di dxxEnableCollection() (Continua)
Parametro Descrizione Parametro IN/OUT
colName Il nome della raccolta XML. IN
DAD Un CLOB contenente il file DAD. IN
tablespace Il tablespace che contiene le tabelle
laterali diverse dal tablespace
predefinito. Se non è specificato,
viene utilizzato quello predefinito.
IN
returnCode Il codice di ritorno dalla procedura
memorizzata.
OUT
returnMsg Il testo di messaggio restituito in
caso di errore.
OUT
Argomenti correlati:
v “Raccolte XML come metodo di accesso e di memorizzazione” a pagina 89
v “Procedure memorizzate di gestione di XML Extender - Panoramica” a pagina
186
Attività correlate:
v “Richiamo delle procedure memorizzate XML Extender” a pagina 183
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxDisableCollection()
Scopo:
Disabilita una raccolta abilitata per XML, rimuovendo in contrassegni che
identificano le tabelle e le colonne come parte di una raccolta.
Sintassi:
dxxDisableCollection(char(dbName) dbName, /* input */
char(colName) colName, /* input */
long returnCode, /* output */
varchar(1024) returnMsg) /* output */
Parametri:
Tabella 52. Parametri di dxxDisableCollection()
Parametro Descrizione Parametro IN/OUT
dbName Il nome del database. IN
colName Il nome della raccolta XML. IN
returnCode Il codice di ritorno dalla procedura
memorizzata.
OUT
returnMsg Il testo di messaggio restituito in
caso di errore.
OUT
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
190 XML Extender - Amministrazione e programmazione
Procedure memorizzate di composizione di XML Extender
Procedure memorizzate di composizione di XML Extender -
Panoramica
Le procedure memorizzate di composizione dxxGenXML(), dxxRetrieveXML(),
dxxGenXMLCLOB() e dxxRetrieveXMLCLOB() sono utilizzate per generare
documenti XML che utilizzano i dati presenti nelle tabelle di database esistenti. La
procedure memorizzata dxxGenXML() utilizza un file DAD come input e non
richiede una raccolta XML abilitata. La procedura memorizzata dxxRetrieveXML()
utilizza un nome di raccolta XML abilitata come input.
I seguenti miglioramenti alle prestazioni sono stati apportati per le procedure
memorizzate di composizione dxxGenXMLClob e DXXRetrieveXMLClob.
v Su sistemi UNIX® e Windows®, la lunghezza del parametro override è
aumentata da 1 KB a 32 KB.
La sovrascrittura da 1 KB imponeva una limitazione sulla lunghezza
dell’istruzione SQL per la composizione SQL. Tale limitazione incoraggiava l’uso
delle viste di database per ridurre la lunghezza dell’istruzione SQL richiesta.
Tuttavia, le viste del database possono a volte contenere una lunghezza di
percorso maggiore a causa della materializzazione. Con un parametro override
lungo, la necessità di utilizzare le viste viene ridotta notevolmente.
v Il requisito per una tabella di risultati intermedia è stato rimosso.
v Utilizzando queste procedure memorizzate:
– Viene ridotta la lunghezza del percorso delle istruzioni poiché non è
necessario creare tabelle di risultati.
– Si semplifica la programmazione.v Utilizzare le procedure memorizzate che richiedono una tabella di risultati
intermedia se si desidera creare più di un documento.
Procedura memorizzata dxxGenXML()
Scopo:
Crea documenti XML utilizzando dati che sono memorizzati nelle tabelle della
raccolta XML, specificate dall’elemento <Xcollection> nel file DAD. È possibile
aprire un cursore sulla tabella dei risultati e utilizzare quindi la serie di risultati.
Per fornire una flessibilità elevata, dxxGenXML() consente all’utente di specificare
il numero massimo di righe da generare nella tabella dei risultati. Questa
operazione riduce il tempo che l’applicazione deve attendere per ottenere i risultati
durante un qualsiasi processo di prova. La procedura memorizzata restituisce il
numero reale di righe nella tabella e i codici di ritorno e i messaggi.
Per supportare un’interrogazione dinamica, dxxGenXML() utilizza un parametro di
input, override. In base all’input di overrideType, l’applicazione può sovrascrivere i
valori della tag SQL_stmt per l’associazione SQL o le condizioni in RDB_node per
l’associazione RDB_node nel file DAD. Il parametro di input overrideType è
utilizzato per chiarire il tipo di override.
Sintassi:
Capitolo 10. Procedure memorizzate di XML Extender 191
dxxGenXML(CLOB(100k) DAD, /* input */
varchar(resultTabName) resultTabName,/* input */
varchar(resultColumn) result_column,/* input */
varchar(validColumn) valid_column, /* input */
integer overrideType, /* input */
varchar(varchar_value) override, /* input */
integer maxRows, /* input */
integer numRows, /*output*/
integer returnCode, /*output*/
varchar(1024) returnMsg) /*output*/
dove varchar_value è 32672 per Windows e UNIX e 16366 per i5/OS e z/OS.
Parametri:
Tabella 53. Parametri di dxxGenXML()
Parametro Descrizione Parametro
IN/OUT
DAD Un CLOB contenente il file DAD. IN
resultTabName Il nome della tabella dei risultati, che deve
già essere presente prima della chiamata.
La tabella contiene solo una colonna di
tipo XMLVARCHAR o XMLCLOB.
IN
result_column Il nome della colonna nella tabella dei
risultati in cui sono memorizzati i
documenti XML composti.
IN
valid_column Il nome della colonna che indica se il
documento XML è valido quando viene
convalidato rispetto a una DTD (document
type definition).
IN
overrideType Un indicatore che indica il tipo di
parametro override:
v NO_OVERRIDE: Nessuna
sovrascrittura.
v SQL_OVERRIDE: Sovrascrittura da
SQL_stmt.
v XML_OVERRIDE: Sovrascrittura da
una condizione basata su un percorso di
posizione.
IN
override Sovrascrive la condizione nel file DAD. Il
valore di input si basa su overrideType.
v NO_OVERRIDE: una stringa NULL.
v SQL_OVERRIDE: un’istruzione SQL
valida. L’utilizzo di questo overrideType
richiede che venga utilizzata
l’associazione SQL nel file DAD.
L’istruzione SQL di input sovrascrive
SQL_stmt nel file DAD.
v XML_OVERRIDE: una stringa che
contiene una o più espressioni separate
dalla parola AND. L’utilizzo di questo
overrideType richiede che venga
utilizzata l’associazione RDB_node nel
file DAD.
IN
varchar_value La dimensione del VARCHAR. IN
192 XML Extender - Amministrazione e programmazione
Tabella 53. Parametri di dxxGenXML() (Continua)
Parametro Descrizione Parametro
IN/OUT
maxRows Il numero massimo di righe nella tabella
dei risultati.
IN
numRows Il numero reale di righe generate nella
tabella dei risultati.
OUT
returnCode Il codice di ritorno dalla procedura
memorizzata.
OUT
returnMsg Il testo del messaggio restituito in caso di
errore.
OUT
Esempi:
Nel seguente frammento di esempio si assume che venga creata una tabella di
risultati denominata XML_ORDER_TAB e che la tabella abbia una colonna di tipo
XMLVARCHAR. Un esempio operativo completo si trova in samples/extenders/db2xml/c/tests2x.sqx.
#include "dxx.h"
#include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
SQL TYPE is CLOB(100K) dad; /* DAD */
SQL TYPE is CLOB_FILE dadFile; /* file dad */
char result_tabname[160]; /* nome della tabella di risultati */
char result_colname[129]; /* nome della colonna per
il documento dei risultati*/
char result_valname[129]; /* nome della colonna
per i risultati della convalida*/
char verride[2]; /* override, impostato su NULL*/
short overrideType; /* definito in dxx.h */
short max_row; /* numero massimo di righe */
short num_row; /* numero effettivo di righe */
long returnCode; /* codice ritorno errore */
char returnMsg[1024]; /* testo messaggio di errore */
short dad_ind;
short rtab_ind;
short rcol_ind;
short rval_ind;
short ovtype_ind;
short ov_inde;
short maxrow_ind;
short numrow_ind;
short returnCode_ind;
short returnMsg_ind;
EXEC SQL END DECLARE SECTION;
/* crea la tabella */
EXEC SQL CREATE TABLE xml_order_tab (xmlorder XMLVarchar);
/* legge i dati da un file su un CLOB */
strcpy(dadfile.name,"dxxinstall/dad/litem3.dad");
dadfile.name_length = strlen("dxxinstall/dad/litem3.dad");
dadfile.file_options = SQL_FILE_READ;
EXEC SQL VALUES (:dadfile) INTO :dad;
strcpy(result_tabname,"xml_order_tab");
override[0] = ’\0’;
Capitolo 10. Procedure memorizzate di XML Extender 193
overrideType = NO_OVERRIDE;
max_row = 500;
num_row = 0;
returnCode = 0;
msg_txt[0] = ’\0’;
collection_ind = 0;
dad_ind = 0;
rtab_ind = 0;
rcol_ind = 0;
rval_ind = 0;
ov_ind = -1;
ovtype_ind = 0;
maxrow_ind = 0;
numrow_ind = -1;
returnCode_ind = -1;
returnMsg_ind = -1;
/* Richiama la procedura memorizzata */
EXEC SQL CALL db2xml.dxxGenXML(:dad:dad_ind;
:result_tabname:rtab_ind,
:result_colname:rcol_ind,
:result_valname:rval_ind,
:overrideType:ovtype_ind,:override:ov_ind,
:max_row:maxrow_ind,:num_row:numrow_ind,
:returnCode:returnCode_ind,:returnMsg:returnMsg_ind);
Argomenti correlati:
v “Procedure memorizzate di composizione di XML Extender - Panoramica” a
pagina 191
Attività correlate:
v “Richiamo delle procedure memorizzate XML Extender” a pagina 183
v “Composizione di raccolte XML utilizzando l’associazione RDB_node” a pagina
62
v “Composizione dei documenti XML utilizzando l’associazione SQL” a pagina 59
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxRetrieveXML()
Scopo:
La procedura memorizzata dxxRetrieveXML() è un mezzo per richiamare i
documenti XML decomposti. Come input, dxxRetrieveXML() utilizza il nome di
una raccolta XML abilitata, il nome della tabella dei risultati creata e il numero
massimo di righe da restituire. Essa restituisce la serie di risultati dalla tabella dei
risultati, il numero di righe nella serie di risultati, un codice di errore e il testo di
un messaggio.
Per supportare un’interrogazione dinamica, dxxRetrieveXML() utilizza un
parametro di input, override. In base all’input overrideType, l’applicazione può
sostituire SQL_stmt per l’associazione SQL o le condizioni in RDB_node per
l’associazione RDB_node nel file DAD. Il parametro di input overrideType viene
utilizzato per chiarire il tipo di override.
I requisiti del file DAD per dxxRetrieveXML() sono gli stessi utilizzati per
dxxGenXML(). L’unica differenza è che il file DAD non è un parametro di input
per dxxRetrieveXML(), ma è il nome di una raccolta XML abilitata.
194 XML Extender - Amministrazione e programmazione
Sintassi:
dxxRetrieveXML(char(collectionName) collectionName, /* input */
char(resultTabName) resultTabName, /* input */
char(resultColumn) result_column,
char(validColumn) valid_column,
integer overrideType, /* input */
varchar(varchar_value) override,
integer maxRows, /* input */
integer numRows, /* output */
long returnCode, /* output */
varchar(1024) returnMsg) /* output */
Dove varchar_value è 32672 per Windows e UNIX e 16366 per iSeries e z/OS.
Parametri:
Tabella 54. Parametri di dxxRetrieveXML()
Parametro Descrizione Parametro
IN/OUT
collectionName Il nome della raccolta XML abilitata. IN
resultTabName Il nome della tabella dei risultati, che
deve già essere presente prima della
chiamata. La tabella contiene solo una
colonna di tipo XMLVARCHAR o
XMLCLOB.
IN
resultColName Il nome della colonna nella tabella dei
risultati in cui sono memorizzati i
documenti XML composti.
IN
resultValidCol Il nome della colonna che indica se il
documento XML è valido quando viene
convalidato rispetto a una DTD
(document type definition).
IN
overrideType Un indicatore relativo al seguente tipo di
parametro override:
v NO_OVERRIDE: Nessuna
sostituzione.
v SQL_OVERRIDE: Sostituzione da
parte di SQL_stmt.
v XML_OVERRIDE: Sostituzione da
parte di una condizione basata sul
percorso.
IN
override Sostituisce la condizione nel file DAD. Il
valore di input si basa su overrideType.
v NO_OVERRIDE: Una stringa NULL.
v SQL_OVERRIDE: Un’istruzione SQL
valida. Utilizzando overrideType, è
necessario usare l’associazione SQL
utilizzata nel file DAD. L’istruzione
SQL di input sostituisce SQL_stmt nel
file DAD.
v XML_OVERRIDE: una stringa che
contiene una o più espressioni separate
dalla parola AND. Utilizzando
overrideType, è necessario usare
l’associazione RDB_node nel file DAD.
IN
Capitolo 10. Procedure memorizzate di XML Extender 195
Tabella 54. Parametri di dxxRetrieveXML() (Continua)
Parametro Descrizione Parametro
IN/OUT
maxRows Il numero massimo di righe nella tabella
dei risultati.
IN
numRows Il numero reale di righe generate nella
tabella dei risultati.
OUT
returnCode Il codice di ritorno dalla procedura
memorizzata.
OUT
returnMsg Il testo di messaggio restituito in caso di
errore.
OUT
Esempi:
Il seguente frammento è un esempio di chiamata a dxxRetrieveXML(). In questo
esempio, si assume che venga creata una tabella di risultati denominata
XML_ORDER_TAB e che la tabella abbia una colonna di tipo XMLVARCHAR. Un
esempio operativo completo si trova in install_dxx/samples/extenders/db2xml/c/qcsrc(rtrx).
#include "dxx.h"
#include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char collection[32]; /* buffer dad */
char result_tabname[160]; /* nome della tabella dei risultati */
char result_colname[129]; /* nome della colonna per
il documento dei risultati*/
char result_valname[129]; /* nome della colonna
per i risultati della convalida*/
char override[2]; /* override, impostata su NULL*/
short overrideType; /* definito in dxx.h */
short max_row; /* numero massimo di righe */
short num_row; /* numero effettivo di righe */
long returnCode; /* codice ritorno errore */
char returnMsg[1024]; /* testo messaggio di errore */
short dadbuf_ind;
short rtab_ind;
short rcol_ind;
short rval_ind;
short ovtype_ind;
short ov_inde;
short maxrow_ind;
short numrow_ind;
short returnCode_ind;
short returnMsg_ind;
EXEC SQL END DECLARE SECTION;
/* crea la tabella */
EXEC SQL CREATE TABLE xml_order_tab (xmlorder XMLVarchar);
/* inizializza la variabile host e gli indicatori */
strcpy(collection,"sales_ord");
strcpy(result_tabname,"xml_order_tab");
override[0] = ’\0’;
overrideType = NO_OVERRIDE;
max_row = 500;
num_row = 0;
196 XML Extender - Amministrazione e programmazione
returnCode = 0;
msg_txt[0] = ’\0’;
collection_ind = 0;
rtab_ind = 0;
rcol_ind = 0;
rval_ind = 0;
ov_ind = -1;
ovtype_ind = 0;
maxrow_ind = 0;
numrow_ind = -1;
returnCode_ind = -1;
returnMsg_ind = -1;
/* Richiama la procedura memorizzata */
EXEC SQL CALL db2xml.dxxRetrieve(:collection:collection_ind;
:result_tabname:rtab_ind,
:result_colname:rcol_ind,
:result_calname:rval_ind,
:overrideType:ovtype_ind,:override:ov_ind,
:max_row:maxrow_ind,:num_row:numrow_ind,
:returnCode:returnCode_ind,:returnMsg:returnMsg_ind);
Argomenti correlati:
v “Procedure memorizzate di composizione di XML Extender - Panoramica” a
pagina 191
Attività correlate:
v “Richiamo delle procedure memorizzate XML Extender” a pagina 183
v “Composizione di raccolte XML utilizzando l’associazione RDB_node” a pagina
62
v “Composizione dei documenti XML utilizzando l’associazione SQL” a pagina 59
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxGenXMLClob
Scopo:
Come input, dxxGenXMLClob acquisisce un buffer contenente DAD. Esso crea i
documenti XML utilizzando i dati memorizzati nelle tabelle di raccolta XML
specificate da <Xcollection> in DAD e restituisce il primo e generalmente l’unico
documento XML generato nel CLOB resultDoc.
Sintassi:
dxxGenXMLClob(CLOB(100k) DAD /*input*/
integer overrideType, /*input*/
varchar(varchar_value) override, /*input*/
CLOB(1M) resultDoc, /*output*/
integer valid, /*output*/
integer numDocs, /*output*/
long returnCode, /*output*/
varchar(1024) returnMsg) /*output*/
Dove varchar_value è 32672 per Windows e UNIX e 16366 per i5/OS e z/OS.
Capitolo 10. Procedure memorizzate di XML Extender 197
Parametri:
Tabella 55. Parametri dxxGenXMLClob
Parametro Descrizione Parametro IN/OUT
DAD Un CLOB contenente il file
DAD.
IN
overrideType Un indicatore relativo al tipo
di parametro override:
NO_OVERRIDE
Nessuna
sostituzione.
SQL_OVERRIDE
Sostituzione da parte
di SQL_stmt
XML_OVERRIDE
Sostituzione da parte
di una condizione
basata sul percorso.
IN
override Sostituisce la condizione nel
file DAD. Il valore di input si
basa su overrideType.
NO_OVERRIDE
Una stringa NULL.
SQL_OVERRIDE
Un’istruzione SQL
valida. Utilizzando
overrideType, è
necessario usare
l’associazione SQL
nel file DAD.
L’istruzione SQL di
input sostituisce
SQL_stmt nel file
DAD.
XML_OVERRIDE
Una stringa che
contiene una o più
espressioni separate
dalla parola AND.
Utilizzando
overrideType, è
necessario usare
l’associazione
RDB_node nel file
DAD.
IN
resultDoc Un CLOB contenente il
documento XML composto.
OUT
198 XML Extender - Amministrazione e programmazione
Tabella 55. Parametri dxxGenXMLClob (Continua)
Parametro Descrizione Parametro IN/OUT
valid valid è impostato nel modo
seguente:
v If VALIDATION=YES then
valid=1 per una convalida
corretta o valid=0 per una
convalida non corretta.
v If VALIDATION=NO then
valid=NULL.
OUT
numDocs Il numero di documenti XML
che verrebbero generati dai
dati di input.
Nota: attualmente, viene
restituito solo il primo
documento.
OUT
returnCode Il codice di ritorno dalla
procedura memorizzata.
OUT
returnMsg Il testo di messaggio
restituito in caso di errore.
OUT
La dimensione del parametro CLOB è 1 MB. Se sono presenti file CLOB di
dimensioni superiori a 1 MB, XML Extender fornisce un file di comando per
ridefinire il parametro della procedura memorizzata. Scaricare il file crtgenxc.zip
dal sito Web di DB2 XML Extender. Tale file ZIP contiene i seguenti programmi:
crtgenxc.db2
Per l’utilizzo su XML Extender V7.2 FixPak 5 e versioni successive per
UNIX e Windows.
crtgenxc.iseries
Per l’utilizzo con XML Extender per iSeries
crtgenxc.zos.jcl e crtgenxc.zos.cmd
Per l’utilizzo con XML Extender per OS/390 V7, APAR PQ58249 e versioni
successive.
Per specificare la lunghezza CLOB: aprire il file in un editor e modificare il
parametro resultDoc, mostrato nel seguente esempio.
out resultDoc clob(dimensione_clob),
Consiglio sulla dimensione: Il limite di dimensione del parametro resultDoc
dipende dalla configurazione del sistema, ma tenere presente che la quantità
specificata in questo parametro è quella assegnata da JDBC, indipendentemente
dalla dimensione del documento. La dimensione dovrebbe contenere i file XML di
dimensioni maggiori, ma non deve superare 1.5 gigabyte.
Per eseguire il file di comando su UNIX o Windows, dalla riga comandi DB2 e
dalla directory contenente il file, immettere:
db2 -tf crtgenxc.db2
Argomenti correlati:
v “Procedure memorizzate di composizione di XML Extender - Panoramica” a
pagina 191
Attività correlate:
Capitolo 10. Procedure memorizzate di XML Extender 199
v “Richiamo delle procedure memorizzate XML Extender” a pagina 183
v “Composizione di raccolte XML utilizzando l’associazione RDB_node” a pagina
62
v “Composizione dei documenti XML utilizzando l’associazione SQL” a pagina 59
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxRetrieveXMLClob
Scopo:
La procedura memorizzata dxxRetrieveXMLClob abilita la composizione di
documenti dai dati relazionali.
I requisiti per l’utilizzo di dxxRetrieveXMLClob sono gli stessi utilizzati per
dxxGenXMLClob. L’unica differenza è che DAD non è un parametro di input per
dxxRetrieveXMLClob, ma è il nome della raccolta XML abilitata.
Sintassi:
dxxRetrieveXMLClob(varchar(collectionName) collectionName /*input*/
integer overrideType, /*input*/
varchar(varchar_value) override, /*input*/
CLOB(1M) resultDoc, /*output*/
integer valid, /*output*/
integer numDocs, /*output*/
integer returnCode, /*output*/
varchar(1024) returnMsg) /*output*/
Parametri:
Tabella 56. Parametri dxxRetrieveXMLClob
Parametro Descrizione Parametro
IN/OUT
collectionName Il nome della raccolta XML abilitata. IN
overrideType Un indicatore relativo al tipo di
parametro override:
NO_OVERRIDE
Nessuna sostituzione.
SQL_OVERRIDE
Sostituzione da parte di
SQL_stmt
XML_OVERRIDE
Sostituzione da parte di una
condizione basata sul percorso.
IN
200 XML Extender - Amministrazione e programmazione
Tabella 56. Parametri dxxRetrieveXMLClob (Continua)
Parametro Descrizione Parametro
IN/OUT
override Sostituisce la condizione nel file DAD. Il
valore di input si basa su overrideType.
NO_OVERRIDE
Una stringa NULL.
SQL_OVERRIDE
Un’istruzione SQL valida.
Utilizzando overrideType, è
necessario usare l’associazione
SQL nel file DAD. L’istruzione
SQL di input sostituisce
SQL_stmt nel file DAD.
XML_OVERRIDE
Una stringa che contiene una o
più espressioni separate dalla
parola AND. Utilizzando
overrideType, è necessario usare
l’associazione RDB_node nel file
DAD.
IN
resultDoc Un CLOB contenente il documento XML
composto.
IN
valid valid è impostato nel modo seguente:
v If VALIDATION=YES then valid=1 per
una convalida corretta o valid=0 per
una convalida non corretta.
v If VALIDATION=NO then
valid=NULL.
OUT
numDocs Il numero di documenti XML che
verrebbero generati dai dati di input.
NOTA: attualmente, viene restituito solo
il primo documento.
OUT
returnCode Il codice di ritorno dalla procedura
memorizzata.
OUT
returnMsg Il testo di messaggio restituito in caso di
errore.
OUT
La dimensione del parametro CLOB è 1 MB.
Argomenti correlati:
v “Procedure memorizzate di composizione di XML Extender - Panoramica” a
pagina 191
Attività correlate:
v “Procedure memorizzate che restituiscono CLOB” a pagina 184
v “Richiamo delle procedure memorizzate XML Extender” a pagina 183
v “Composizione di raccolte XML utilizzando l’associazione RDB_node” a pagina
62
v “Composizione dei documenti XML utilizzando l’associazione SQL” a pagina 59
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Capitolo 10. Procedure memorizzate di XML Extender 201
Procedure memorizzate di decomposizione di XML Extender
Procedure memorizzate di decomposizione di XML Extender -
Panoramica
Le procedure memorizzate di decomposizione dxxInsertXML() e dxxShredXML()
sono utilizzate per interrompere o suddividere i documenti XML in entrata e per
memorizzare i dati in tabelle di database nuove o esistenti. La procedura
memorizzata dxxInsertXML() utilizza un nome di raccolta XML abilitata come
input. La procedura memorizzata dxxShredXML() utilizza invece un file DAD
come input; essa non richiede una raccolta XML abilitata.
Procedura memorizzata dxxShredXML()
Scopo:
Decompone i documenti XML in base ad un’associazione del file DAD e
memorizza il contenuto degli elementi e degli attributi XML in specifiche tabelle
DB2. Per il corretto funzionamento di dxxShredXML(), tutte le tabelle specificate
nel file DAD devono essere presenti e tutte le colonne e i relativi tipi di dati
specificati in DAD devono essere coerenti con le tabelle esistenti. La procedura
memorizzata richiede che le colonne specificate nella condizione di unione di
DAD, corrispondano alle relazioni di chiavi primaria-esterna nelle tabelle esistenti.
Le colonne della condizione di unione specificate in RDB_node dell’element_node
devono essere presenti nelle tabelle.
Il frammento della procedura memorizzata in questa sezione è a scopo di
spiegazione.
Sintassi:
dxxShredXML(CLOB(100K) DAD, /* input */
CLOB(1M) xmlobj, /* input */
long returnCode, /* output */
varchar(1024) returnMsg) /* output */
Parametri:
Tabella 57. Parametri di dxxShredXML()
Parametro Descrizione Parametro
IN/OUT
DAD Un CLOB contenente il file DAD. IN
xmlobj Un documento XML in un tipo
XMLCLOB
IN
returnCode Il codice di ritorno dalla procedura
memorizzata.
OUT
returnMsg Il testo di messaggio restituito in caso di
errore.
OUT
Esempi:
Il seguente frammento è un esempio di chiamata a dxxShredXML().
202 XML Extender - Amministrazione e programmazione
#include "dxx.h"
#include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
SQL TYPE is CLOB_FILE dadFile; /* file DAD */
SQL TYPE is CLOB_FILE dadFile; /* file DAD */
SQL TYPE è CLOB_FILE xmlDoc; /* documento XML di input */
SQL TYPE is CLOB_FILE xmlFile; /* file XML di input */
long returnCode; /* codice errore */
char returnMsg[1024]; /* testo messaggio di errore */
short dad_ind;
short xmlDoc_ind;
short returnCode_ind;
short returnMsg_ind;
EXEC SQL END DECLARE SECTION;
/* inizializza la variabile host e gli indicatori */
strcpy(dadFile.name,"install_dxx
/samples/extenders/db2xml/dad/getstart_xcollection.dad
");
dadFile.name_length=strlen("install_dxx
/samples/extenders/db2xml/dad/getstart_xcollection.dad
");
dadFile.file_option=SQL_FILE_READ;
strcpy(xmlFile.name,"install_dxx
/samples/extenders/db2xml/xml/getstart.xml");
xmlFile.name_length=strlen("install_dxx
/samples/extenders/db2xml/xml/getstart.xml")");
xmlFile.file_option=SQL_FILE_READ;
SQL EXEC VALUES (:dadFile) INTO :dad;
SQL EXEC VALUES (:xmlFile) INTO :xmlDoc;
returnCode = 0;
returnMsg[0] = ’\0’;
dad_ind = 0;
xmlDoc_ind = 0;
returnCode_ind = -1;
returnMsg_ind = -1;
/* Richiama la procedura memorizzata */
EXEC SQL CALL DB2XML.dxxShredXML(:dad:dad_ind;
:xmlDoc:xmlDoc_ind,
:returnCode:returnCode_ind,
:returnMsg:returnMsg_ind);
Argomenti correlati:
v “Procedure memorizzate di decomposizione di XML Extender - Panoramica” a
pagina 202
Attività correlate:
v “Richiamo delle procedure memorizzate XML Extender” a pagina 183
v “Decomposizione di una raccolta XML utilizzando l’associazione RDB_node” a
pagina 66
v “Decomposizione di documenti XML in dati di database DB2” a pagina 94
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxInsertXML()
Scopo:
Capitolo 10. Procedure memorizzate di XML Extender 203
Utilizza due parametri di input, un file name e il documento XML che deve essere
decomposto, e restituisce due parametri di output, un codice di ritorno e un
messaggio.
Sintassi:
dxxInsertXML(char(collectionName) collectionName, /*input*/
CLOB(1M) xmlobj, /* input */
long returnCode, /* output */
varchar(1024) returnMsg) /* output */
Parametri:
Tabella 58. Parametri di dxxInsertXML()
Parametro Descrizione Parametro IN/OUT
collectionName Il nome della raccolta XML
abilitata.
IN
xmlobj Un documento XML in un tipo
CLOB
IN
returnCode Il codice di ritorno dalla procedura
memorizzata.
OUT
returnMsg Il testo di messaggio restituito in
caso di errore.
OUT
Esempi:
Nel seguente esempio di frammentazione, la chiamata a dxxInsertXML() richiama
il documento XML di input install_dxx/xml/order1.xml e inserisce i dati nelle
tabelle di raccolta SALES_ORDER, secondo l’associazione specificata nel file DAD
con cui è stata abilitata. Il programma operativo completo si trova in
install_dxx/samples/extenders/db2xml/c/insertx.sqx.
#include "dxx.h"
#include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char collection[64]; /* nome di una raccolta XML */
SQL TYPE è CLOB_FILE xmlDoc; /* documento XML di input */
SQL TYPE è CLOB(1M) *xmlobj=NULL;
long returnCode; /* codice errore */
char returnMsg[1024]; /* testo messaggio di errore */
short collection_ind;
short xmlDoc_ind;
short returnCode_ind;
short returnMsg_ind;
EXEC SQL END DECLARE SECTION;
/* inizializza la variabile host e gli indicatori */
strcpy(collection,"sales_ord")
strcpy(xmldoc.name,"install_dxx/samples/extenders/db2xml/xml/getstart.xml");
xmldoc.name_length=strlen(xmldoc.name);
xmldoc.file_option=SQL_FILE_READ;
returnCode = 0;
returnMsg[0] = ’\0’;
collection_ind = 0;
xmlobj_ind = 0;
returnCode_ind = -1;
returnMsg_ind = -1;
/* Richiama la procedura memorizzata */
204 XML Extender - Amministrazione e programmazione
EXEC SQL VALUES (:xmlfile) INTO :*xmlDoc;
EXEC SQL CALL DB2XML.dxxInsertXML(:collection:collection_ind;
:*xmlDoc:xmlobj_ind,
:returnCode:returnCode_ind,:returnMsg:returnMsg_ind);
Argomenti correlati:
v “Procedure memorizzate di decomposizione di XML Extender - Panoramica” a
pagina 202
Attività correlate:
v “Richiamo delle procedure memorizzate XML Extender” a pagina 183
v “Decomposizione di una raccolta XML utilizzando l’associazione RDB_node” a
pagina 66
v “Decomposizione di documenti XML in dati di database DB2” a pagina 94
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Capitolo 10. Procedure memorizzate di XML Extender 205
206 XML Extender - Amministrazione e programmazione
Capitolo 11. Procedure memorizzate e funzioni di XML
Extender per MQSeries
Procedure memorizzate XML Extender e funzioni per MQSeries -
Panoramica
XML Extender fornisce due metodi per la memorizzazione e l’accesso ai dati XML.
Utilizzando il metodo delle colonne XML, è possibile memorizzare i documenti
XML in una tabella DB2® durante l’interrogazione, l’aggiornamento e il richiamo
del contenuto dei documenti. Le funzioni definite dall’utente XML MQ consentono
di interrogare i documenti XML e pubblicare quindi i risultati su una coda di
messaggi. Inoltre, è possibile utilizzare la raccolta XML per memorizzare il
contenuto senza tag di un documento XML in una o più tabelle o comporre i
documenti XML da più tabelle. Mediante le procedure memorizzate XML MQ, è
possibile richiamare un documento XML da una coda di messaggi, decomporlo in
dati senza tag e memorizzare tali dati nelle tabelle DB2. È inoltre possibile
comporre un documento XML dai dati DB2 e inviare il documento a una coda di
messaggi MQSeries®.
MQSeries supporta tre modelli di messaggistica per distribuire i dati e i documenti
XML:
datagrammi
I messaggi vengono inviati a un’unica destinazione senza aspettarsi una
risposta.
pubblicazione/sottoscrizione
Uno o più publisher inviano un messaggio a un servizio di pubblicazione
che distribuisce il messaggio ai sottoscrittori interessati.
richiesta/risposta
I messaggi vengono inviati a un’unica destinazione e il mittente si aspetta
di ricevere una risposta.
MQSeries può essere utilizzato in diversi modi. I datagrammi semplici vengono
scambiati per coordinare più applicazioni, per scambiare informazioni, per
richiedere servizi e per fornire una notifica su eventi iteressanti. La
pubblicazione/sottoscrizione viene utilizzata più spesso per diffondere
informazioni in tempo reale in maniera sincronizzata. Il modello di
richiesta/risposta viene di solito utilizzato come forma semplice di una chiamata a
una procedure remota pseudo-sincronizzata. Combinando questi stili di base, è
possibile creare modelli più complessi.
Le tecniche di messaggistica fondamentali qui descritte sono utilizzate in diversi
modi. Poiché MQSeries è disponibile su diversi sistemi operativi, esso fornisce un
importante meccanismo per collegare diverse applicazioni da ambienti simili o
differenti.
Per utilizzare le funzioni MQXML e le procedure memorizzate, verificare che il
seguente software sia installato.
v DB2 Database™ Versione 9.1 o successivo
© Copyright IBM Corp. 1999 - 2006 207
v DB2 MQSeries Functions Versione 9.1 (disponibile come funzione opzionale di
DB2 Database Versione 9.1. Maggiori informazioni sono disponibili nel manuale
DB2 Database Versione 9.1 Command Reference.)
Funzioni MQSeries per XML Extender
Funzioni MQSeries di XML Extender - Panoramica
DB2® XML Extender include le seguenti funzioni da utilizzare con MQSeries®:
v MQPublishXML
v MQReadXML
v MQReadAllXML
v MQReadXMLCLOB
v MQReadAllXMLCLOB
v MQReceiveXML
v MQReceiveAllXML
v MQRcvAllXMLCLOB
v MQReceiveXMLCLOB
v MQSENDXML
v MQSENDXMLFILE
v MQSendXMLFILECLOB
Argomenti correlati:
v “XML Extender MQSeries procedure memorizzate - Panoramica” a pagina 229
v “Procedure memorizzate XML Extender e funzioni per MQSeries - Panoramica”
a pagina 207
Riferimenti correlati:
v “Funzione MQPublishXML”
v “Funzione MQRcvAllXMLCLOB” a pagina 221
v “Funzione MQRcvXMLCLOB” a pagina 224
v “Funzione MQReadAllXML” a pagina 212
v “Funzione MQReadAllXMLCLOB” a pagina 215
v “Funzione MQReadXML” a pagina 210
v “Funzione MQReadXMLCLOB” a pagina 214
v “Funzione MQReceiveAllXML” a pagina 219
v “Funzione MQReceiveXML” a pagina 217
v “Funzione MQReceiveXMLCLOB” a pagina 223
v “Funzione MQSendXMLFILECLOB” a pagina 228
v “Funzione MQSENDXML” a pagina 225
v “Funzione MQSENDXMLFILE” a pagina 226
Funzione MQPublishXML
Scopo:
La funzione MQPublishXML pubblica i dati XMLVARCHAR e XMLCLOB su
MQSeries. Consultare il seguente sito Web per ulteriori informazioni:
208 XML Extender - Amministrazione e programmazione
http://www.software.ibm.com/MQSeries
La funzione MQPublishXML pubblica i dati XML contenuti in dati-msg nel
publisher MQSeries specificato dal servizio-publisher utilizzando la qualità del
criterio di pubblicazione criterio-pubblicazione. L’argomento del messaggio viene
specificato opzionalmente dall’argomento. È inoltre possibile specificare un
identificativo di correlazione del messaggio definito dall’utente tramite id-correl. La
funzione restituisce 1 in caso di operazione riuscita.
Sintassi:
�� MQPublishXML ( dati-msg , )
servizio-publisher
argomento
servizio-publisher
,
criterio-pubblicazione
��
Parametri:
Tabella 59. Parametri MQPublishXML
Parametro Tipo di dati Descrizione
servizio-publisher VARCHAR(48) Una stringa contenente la
destinazione MQSeries logica
a cui inviare i messaggi.
Quando specificato, il
servizio-publisher si riferisce a
un punto di servizio del
publisher definito nel file di
repository AMT.XML. Se il
servizio-publisher non è
specificato, verrà utilizzato
DB2.DEFAULT.PUBLISHER.
La dimensione massima del
servizio-publisher è 48 byte.
criterio-pubblicazione VARCHAR(48) Una stringa contenente il
criterio di pubblicazione
MQSeries AMI utilizzato per
gestire questo messaggio.
Quando specificato,
criterio-pubblicazione si
riferisce a un criterio definito
nel file di repository
AMT.XML. Il criterio di
pubblicazione definisce
inoltre una serie di qualità di
opzioni di pubblicazione da
applicare alle opzioni
dell’operazione di
messaggistica. Tali opzioni
includono la priorità e la
permanenza del messaggio.
Se il criterio-servizio non è
specificato, verrà utilizzato
DB2.DEFAULT.POLICY
predefinito. La dimensione
massima di criterio-servizio è
48 byte. Per ulteriori
informazioni, consultare il
manuale MQSeries
Application Messaging
Interface.
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 209
Tabella 59. Parametri MQPublishXML (Continua)
Parametro Tipo di dati Descrizione
dati-msg XMLVARCHAR o XMLCLOB Un’espressione
XMLVARCHAR o XMLCLOB
contenente i dati da inviare
tramite MQSeries.
argomento VARCHAR(40) Una stringa contenente
l’argomento in cui deve
essere pubblicato il
messaggio. Se non viene
specificato alcun argomento,
non ne verrà associato alcuno
al messaggio. La dimensione
massima dell’argomento è 40
byte. È possibile elencare più
argomenti all’interno di una
stringa di argomento,
separando ogni argomento
con ″:″.
Codici di ritorno:
In caso di esito positivo, le funzioni MQPublishXML restituiscono 1. Il valore 0
viene restituito se la funzione ha esito negativo.
Argomenti correlati:
v “Procedure memorizzate XML Extender e funzioni per MQSeries - Panoramica”
a pagina 207
Funzione MQReadXML
Scopo:
La funzione MQREADXML restituisce i dati XMLVARCHAR dal percorso
MQSeries specificato da servizio-ricezione. Essa utilizza la qualità di criterio-ricezione.
La funzione MQREADXML non rimuove i messaggi dalla coda associata a
servizio-ricezione
Sintassi:
�� MQREADXML ( )
servizio-ricezione
servizio-ricezione
,
criterio-ricezione
��
Parametri:
210 XML Extender - Amministrazione e programmazione
Tabella 60. Parametri MQReadXML
Parametro Tipo di dati Descrizione
servizio-ricezione VARCHAR(48) Una stringa contenente la
destinazione MQSeries logica
da cui ricevere i messaggi.
Quando è specificato
servizio-ricezione, esso si
riferisce al punto di servizio
definito nel file di repository
AMT.XML. Se
servizio-ricezione non è
specificato, verrà utilizzato
DB2.DEFAULT.SERVICE. La
dimensione massima del
servizio-ricezione è 48 byte.
criterio-ricezione VARCHAR(48) Una stringa contenente il
criterio di servizio MQSeries
AMI utilizzato per gestire un
messaggio. Quando è
specificato criterio-ricezione,
esso si riferisce a un criterio
definito nel file di repository
AMT.XML. Un criterio di
ricezione definisce una serie
di qualità di opzioni di
ricezione, applicate
all’operazione di
messaggistica. Tali opzioni
includono la priorità e la
permanenza del messaggio.
Se criterio-ricezione non è
specificato, verrà utilizzato
DB2.DEFAULT.POLICY
predefinito. La dimensione
massima di criterio-ricezione è
48 byte.
Risultati:
Quando un messaggio in una coda viene letto correttamente, MQREADXML
restituisce db2xml.xmlvarchar. Viene restituito NULL se non è disponibile alcun
messaggio.
Esempi:
Esempio 1: questo esempio legge il messaggio presente nell’intestazione della coda,
specificato dal servizio predefinito DB2.DEFAULT.SERVICE. Utilizza il criterio
predefinito DB2.DEFAULT.POLICY per leggere il messaggio.
values DB2XML.MQREADXML()
Questo esempio restituisce il contenuto del messaggio come XMLVARCHAR. Se
non è disponibile alcun messaggio, viene restituito NULL.
Esempio 2: questo esempio legge il messaggio presente nell’intestazione della coda
specificata dal servizio MYSERVICE utilizzando il criterio predefinito
DB2.DEFAULT.POLICY.
values DB2XML.MQREADXML(’MYSERVICE’)
Nell’esempio, il contenuto del messaggio viene restituito come XMLVARCHAR. Se
non è disponibile alcun messaggio, viene restituito NULL.
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 211
Esempio 3: questo esempio legge il messaggio presente nell’intestazione della coda
specificata dal servizio MYSERVICE utilizzando il criterio MYPOLICY.
values DB2XML.MQREADXML(’MYSERVICE’,’MYPOLICY’)
Il contenuto del messaggio viene restituito come XMLVARCHAR in caso di
operazione riuscita. Se non è disponibile alcun messaggio, viene restituito NULL.
Argomenti correlati:
v “Procedure memorizzate XML Extender e funzioni per MQSeries - Panoramica”
a pagina 207
Funzione MQReadAllXML
Scopo:
La funzione MQReadAllXML restituisce una tabella contenente i messaggi e i
relativi metadati dal percorso MQSeries specificato dal servizio-ricezione utilizzando
la qualità del criterio-servizio. Tale operazione non rimuove i messaggi dalla coda
associata al servizio-ricezione. Se si specifica num-righe, verrà restituito un massimo
di messaggi relativi al num-righe. In caso contrario, verranno restituiti tutti i
messaggi disponibili.
Sintassi:
�� MQREADALLXML ( )
servizio-ricezione
num-righe
servizio-ricezione
,
criterio-servizio
��
Parametri:
Tabella 61. Parametri MQReadAllXML
Parametro Tipo di dati Descrizione
servizio-ricezione VARCHAR(48) Una stringa contenente la
destinazione MQSeries logica
da cui leggere i messaggi.
Quando specificato,
servizio-ricezione deve fare
riferimento a un punto di
servizio definito nel file di
repository AMT.XML.
Tuttavia, se servizio-ricezione
non è specificato, verrà
utilizzato
DB2.DEFAULT.SERVICE. La
dimensione massima del
servizio-ricezione è 48 byte.
212 XML Extender - Amministrazione e programmazione
Tabella 61. Parametri MQReadAllXML (Continua)
Parametro Tipo di dati Descrizione
criterio-servizio VARCHAR(48) Una stringa contenente il
criterio di servizio MQSeries
AMI utilizzato per gestire
questo messaggio. Quando è
specificato criterio-servizio,
esso si riferisce a un criterio
definito nel file di repository
AMT.XML. La dimensione
massima del
servizio-ricezione è 48 byte.
Per ulteriori informazioni fare
riferimento al manuale
MQSeries Application
Messaging Interface.
num-righe INTEGER Un numero intero positivo
contenente il numero
massimo di messaggi da
restituire tramite la funzione.
Risultati:
La funzione MQReadAllXML restituisce una tabella contenente i messaggi e i
relativi metadati, come descritto di seguito.
Tabella 62. Tabella della serie di risultati
Nome colonna Tipo di dati Descrizione
MSG XMLVARCHAR Il contenuto del messaggio
MQSeries. La lunghezza
massima è 4Kbyte.
CORRELID VARCHAR(24) Un ID di correlazione che è
possibile utilizzare in
correlazione ai messaggi.
TOPIC VARCHAR(40) L’argomento in cui è stato
pubblicato il messaggio, se
disponibile.
QNAME VARCHAR(48) Il nome coda in cui è stato
ricevuto il messaggio.
MSGID VARCHAR(24) L’identificativo univoco
assegnato da MQSeries per
un messaggio.
MSGFORMAT VARCHAR(8) Il formato del messaggio
come definito da MQSeries.
Le stringhe classiche hanno il
formato MQSTR.
Esempi:
Esempio 1: tutti i messaggi dalla coda che sono specificati dal servizio predefinito
DB2.DEFAULT.SERVICE vengono letti utilizzando il criterio predefinito
DB2.DEFAULT.POLICY. I messaggi e tutti i metadati vengono restituiti in formato
tabella.
select * from table (DB2XML.MQREADALLXML()) t
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 213
Esempio 2: Tutti i messaggi specificati dal servizio MYSERVICE utilizzando il
criterio predefinito DB2.DEFAULT.POLICY. Vengono restituite solo le colonne msg
e correlid. La coda messaggi ha il formato tabella, nel cui caso è possibile
selezionare i campi desiderati.
select t.MSG, t.CORRELID from table (DB2XML.MQREADALLXML(’MYSERVICE’)) t
Esempio 3: la coda specificata dal servizio predefinito DB2.DEFAULT.SERVICE
viene letta utilizzando il criterio predefinito DB2.DEFAULT.POLICY. Vengono
restituiti solo i messaggi con CORRELID ’1234’. Vengono letti e restituiti un
massimo di 10 messaggi. Vengono restituite tutte le colonne.
select * from table (DB2XML.MQREADALLXML()) t where t.CORRELID = ’1234’
Esempio 4: i messaggi specificati dal servizio predefinito DB2.DEFAULT.SERVICE
vengono letti utilizzando il criterio predefinito DB2.DEFAULT.POLICY. Vengono
restituite tutte le colonne.
select * from table (DB2XML.MQREADALLXML(10)) t
Argomenti correlati:
v “Procedure memorizzate XML Extender e funzioni per MQSeries - Panoramica”
a pagina 207
Funzione MQReadXMLCLOB
Scopo:
La funzione MQREADXMLCLOB restituisce dati XMLCLOB dal percorso
MQSeries specificato da receive-service mediante la politica QoS (quality of
service)receive-policy. L’esecuzione di questa operazione non rimuove il messaggio
dalla coda associata a receive-service. Verrà restituito il messaggio in cima alla coda.
Il valore di ritorno è un XMLCLOB contenente i messaggi. Se non può essere
restituito alcun messaggio, verrà restituito un valore NULL.
Sintassi:
�� MQReadXMLCLOB ( )
receive-service
receive-service
,
receive-policy
��
Parametri:
214 XML Extender - Amministrazione e programmazione
Tabella 63. Parametri di MQReadXMLCLOB
Parametro Tipo di dati Descrizione
receive-service VARCHAR(48) Una stringa contenente la
destinazione logica di
MQSeries da cui deve essere
ricevuto il messaggio. Se
specificato, receive-service fa
riferimento a un punto di
servizio definito nel file del
repository AMT.XML. Se
receive-service non viene
specificato, allora verrà
utilizzato
DB2.DEFAULT.SERVICE. La
dimensione massima di
receive-service è 48 byte.
receive-policy VARCHAR(48) Una stringa contenente la
politica di servizio AMI di
MQSeries utilizzata per la
gestione di questo messaggio.
Quando viene specificato
receive-policy, questo fa
riferimento a una politica
definita nel file del repository
AMT.XML. Una politica di
servizio definisce una serie di
opzioni QoS che vengono
applicate all’operazione di
messaggistica. Queste opzioni
includono la priorità e la
permanenza dei messaggi. Se
receive-policy non viene
specificato, allora verrà
utilizzato il
DB2.DEFAULT.POLICY
predefinito. La dimensione
massima di receive-service è
48 byte.
Risultati:
Quando un messaggio sulla coda è stato letto correttamente, MQREADXMLCLOB
restituisce un db2xml.xmlclob. Se non è disponibile alcun messaggio, viene
restituito NULL.
Funzione MQReadAllXMLCLOB
Scopo:
La funzione MQReadAllXMLCLOB restituisce una tabella contenente i messaggi e i
relativi metadati dal percorso MQSeries specificato dal servizio-ricezione utilizzando
la qualità del servizio-ricezione del criterio di servizio. Tale operazione non
rimuove i messaggi dalla coda associata al servizio-ricezione. Se si specifica
num-righe, verrà restituito un massimo di messaggi relativi al num-righe. In caso
contrario, verranno restituiti tutti i messaggi disponibili.
Sintassi:
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 215
�� MQReadAllXMLCLOB ( )
servizio-ricezione
num-righe
servizio-ricezione
,
criterio-servizio
��
Parametri:
Tabella 64. Parametri MQReadAllXMLCLOB
Parametro Tipo di dati Descrizione
servizio-ricezione VARCHAR(48) Una stringa contenente la
destinazione MQSeries logica
da cui leggere i messaggi.
Quando specificato,
servizio-ricezione deve fare
riferimento a un punto di
servizio definito nel file di
repository AMT.XML.
Tuttavia, se servizio-ricezione
non è specificato, verrà
utilizzato
DB2.DEFAULT.SERVICE. La
dimensione massima del
servizio-ricezione è 48 byte.
criterio-servizio VARCHAR(48) Una stringa contenente il
criterio di servizio MQSeries
AMI utilizzato per gestire
questo messaggio. Quando è
specificato criterio-servizio,
esso si riferisce a un criterio
definito nel file di repository
AMT.XML. La dimensione
massima di criterio-servizio è
48 byte.
num-righe INTEGER Un numero intero positivo
contenente il numero
massimo di messaggi da
restituire tramite la funzione.
Risultati:
La funzione MQReadAllXMLCLOB restituisce una tabella contenente i messaggi e i
relativi metadati, come descritto di seguito.
Tabella 65. Tabella della serie di risultati MQReadAllXMLCLOB
Nome colonna Tipo di dati Descrizione
MSG XMLCLOB Il contenuto del messaggio
MQSeries, con lunghezza
massima di 1MB.
CORRELID VARCHAR(24) Un ID di correlazione che è
possibile utilizzare in
correlazione ai messaggi.
TOPIC VARCHAR(40) L’argomento in cui è stato
pubblicato il messaggio, se
disponibile.
QNAME VARCHAR(48) Il nome coda in cui è stato
ricevuto il messaggio.
216 XML Extender - Amministrazione e programmazione
Tabella 65. Tabella della serie di risultati MQReadAllXMLCLOB (Continua)
Nome colonna Tipo di dati Descrizione
MSGID VARCHAR(24) L’identificativo univoco
assegnato da MQSeries per
questo messaggio.
MSGFORMAT VARCHAR(8) Il formato del messaggio
come definito da MQSeries.
Le stringhe classiche hanno il
formato MQSTR.
Esempio 1: tutti i messaggi dalla coda che sono specificati dal servizio predefinito
DB2.DEFAULT.SERVICE vengono letti utilizzando il criterio predefinito
DB2.DEFAULT.POLICY. I messaggi e tutti i metadati vengono restituiti in formato
tabella.
select * from table (DB2XML.MQREADALLXMLCLOB()) t
Esempio 2:i messaggi dell’intestazione coda vengono specificati dal servizio
MYSERVICE utilizzando il criterio predefinito DB2.DEFAULT.POLICY. Vengono
restituite solo le colonne msg e correlid.
select t.MSG, t.CORRELID
from table (DB2XML.MQREADALLXMLCLOB(’MYSERVICE’)) t
Esempio 3: l’intestazione della coda specificata dal servizio predefinito
DB2.DEFAULT.SERVICE viene letta utilizzando il criterio predefinito
DB2.DEFAULT.POLICY. Vengono restituiti solo i messaggi con CORRELID ’1234’.
Vengono restituite tutte le colonne.
select *
from table (DB2XML.MQREADALLXMLCLOB()) t where t.CORRELID = ’1234’
Esempio 4: i primi 10 messaggi dell’intestazione coda, specificati dal servizio
predefinito DB2.DEFAULT.SERVICE vengono letti utilizzando il criterio predefinito
DB2.DEFAULT.POLICY. Vengono restituite tutte le colonne.
select * from table (DB2XML.MQREADALLXMLCLOB(10)) t
Argomenti correlati:
v “Procedure memorizzate XML Extender e funzioni per MQSeries - Panoramica”
a pagina 207
Funzione MQReceiveXML
Scopo:
MQReceiveXML rimuove un messaggio associato al servizio-ricezione dalla coda. La
funzione restituisce i dati XMLVARCHAR dal percorso MQSeries specificato dalla
funzione servizio-ricezione che utilizza la qualità del servizio-ricezione.
Sintassi:
�� MQReceiveXML ( )
servizio-ricezione
servizio-ricezione
,
criterio-servizio
servizio-ricezione
,
criterio-servizio
id-correl
��
Parametri:
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 217
Tabella 66. Parametri MQReceiveXML
Parametro Tipo di dati Descrizione
servizio-ricezione VARCHAR(48) Una stringa contenente la
destinazione MQSeries logica
da cui ricevere i messaggi.
Quando specificato,
servizio-ricezione si riferisce a
un punto di servizio definito
nel file di repository
AMT.XML. Se
servizio-ricezione non è
specificato, verrà utilizzato
DB2.DEFAULT.SERVICE. La
dimensione massima del
servizio-ricezione è 48 byte.
criterio-servizio VARCHAR(48) Una stringa contenente il
criterio di servizio MQSeries
AMI utilizzato per gestire
questo messaggio. Quando
specificato, criterio-servizio
deve fare riferimento a un
criterio definito nel file di
repository AMT.XML. Se
criterio-servizio non è
specificato, verrà utilizzato
DB2.DEFAULT.POLICY
predefinito. La dimensione
massima di criterio-servizio è
48 byte.
id-correl VARCHAR(24) Una stringa contenente un
identificativo di correlazione
facoltativo associato a questo
messaggio. L’id-correl viene
spesso specificato in scenari
di richiesta/risposta per
associare le richieste alle
repliche. Se non è specificato,
non verrà mostrato alcun ID
correlazione. La dimensione
massima di id-correl è 24 byte.
Risultati:
Le funzioni MQReceiveXML restituiscono db2xml.XMLVARCHAR se i messaggi
vengono ricevuti correttamente dalla coda. La dimensione massima di un
messaggio è 32000 byte. Viene restituito NULL se non è disponibile alcun
messaggio. Se si specifica id-correl, verrà restituito il primo messaggio con un
identificativo di correlazione corrispondente. Se non si specifica id-correl, verrà
restituito il messaggio nell’intestazione della coda. Il messaggio viene rimosso dalla
coda.
Esempi:
Esempio 1: questo esempio riceve il messaggio presente nell’intestazione della coda
ed è specificato dal servizio predefinito DB2.DEFAULT.SERVICE utilizzando il
criterio predefinito DB2.DEFAULT.POLICY.
values db2xml.MQRECEIVEXML()
Se corretto, questo esempio restituisce il contenuto di un messaggio come
XMLVARCHAR. Se non è disponibile alcun messaggio, viene restituito NULL.
218 XML Extender - Amministrazione e programmazione
Argomenti correlati:
v “Procedure memorizzate XML Extender e funzioni per MQSeries - Panoramica”
a pagina 207
Funzione MQReceiveAllXML
Scopo:
MQReceiveAllXML rimuove i messaggi associati al servizio-ricezione dalla coda. Se
si specifica id-correl, verranno restituiti solo i messaggi con un identificativo di
correlazione corrispondente. Se non si specifica id-correl, verrà restituito il
messaggio nell’intestazione della coda. Se si specifica num-righe, verrà restituito un
massimo di messaggi relativi al num-righe. In caso contrario, verranno restituiti
tutti i messaggi disponibili.
Sintassi:
�� MQReceiveALLXML ( )
servizio-ricezione
num-righe
servizio-ricezione
,
criterio-ricezione
servizio-ricezione
,
criterio-ricezione
id-correl
��
Parametri:
Tabella 67. Parametri MQReceiveAllXML
Parametro Tipo di dati Descrizione
servizio-ricezione VARCHAR(48) Una stringa contenente la
destinazione MQSeries logica
a cui inviare i messaggi.
Quando specificato, il
servizio-invio si riferisce a un
criterio definito nel file di
repository ATM.XML. Se
servizio-invio non è
specificato, verrà utilizzato
DB2.DEFAULT.SERVICE. La
dimensione massima di
servizio-invio è 48 byte.
criterio-ricezione VARCHAR(48) Una stringa contenente il
criterio di servizio MQSeries
AMI utilizzato per gestire
questo messaggio. Quando
specificato, criterio-ricezione
deve fare riferimento a un
criterio definito nel file di
repository AMT.XML. Se
criterio-ricezione non è
specificato, verrà utilizzato
DB2.DEFAULT.POLICY
predefinito. La dimensione
massima di criterio-ricezione è
48 byte.
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 219
Tabella 67. Parametri MQReceiveAllXML (Continua)
Parametro Tipo di dati Descrizione
id-correl VARCHAR(24) Una stringa contenente un
identificativo di correlazione
facoltativo associato a questo
messaggio. L’id-correl viene
spesso specificato in scenari
di richiesta/risposta per
associare le richieste alle
repliche. Se non è specificato,
non verrà mostrato alcun id
correlazione. La dimensione
massima di id-correl è 24 byte.
num-righe INTEGER Un numero intero positivo
contenente il numero
massimo di messaggi
restituiti dalla funzione.
Risultati:
Quando la coda riceve correttamente una tabella di messaggi, MQRECEIVEXML
restituisce db2xml.xmlvarchar. Viene restituito NULL se non è disponibile alcun
messaggio. I messaggi vengono restituiti come tabella di messaggi con metadati.
Nome colonna Tipo di dati Descrizione
MSG XMLVARCHAR Il contenuto del messaggio
MQSeries.
CORRELID VARCHAR(24) Un ID di correlazione che è
possibile utilizzare in
correlazione ai messaggi.
TOPIC VARCHAR(40) L’argomento in cui è stato
pubblicato il messaggio, se
disponibile.
QNAME VARCHAR(48) Il nome coda in cui è stato
ricevuto il messaggio.
MSGID CHAR(24) L’identificativo univoco
assegnato da MQSeries per
questo messaggio.
MSGFORMAT VARCHAR(8) Il formato del messaggio
come definito da MQSeries.
Le stringhe classiche hanno il
formato MQSTR.
Esempi:
Esempio 1: tutti i messaggi ricevuti dalla coda vengono specificati dal servizio
predefinito (DB2.DEFAULT.SERVICE) utilizzando il criterio predefinito
DB2.DEFAULT.POLICY. I messaggi e tutti i metadati vengono restituiti come
tabella.
select * from table (MQRECEIVEALLXML()) t
Esempio 2: tutti i messaggi vengono ricevuti dall’intestazione coda vengono
specificati dal servizio MYSERVICE utilizzando il criterio predefinito
(DB2.DEFAULT.POLICY). Vengono restituite solo le colonne MSG e CORRELID. I
messaggi hanno il formato tabella, mentre è possibile selezionare i campi
desiderati.
select t.MSG, t.CORRELID from table (MQRECEIVEALLXML(’MYSERVICE’)) t
220 XML Extender - Amministrazione e programmazione
Esempio 3: tutti i messaggi ricevuti dall’intestazione coda vengono specificati dal
servizio MYSERVICE utilizzando il criterio MYPOLICY che corrisponde all’id
’1234’. Vengono restituite solo le colonne MSG e CORRELID.
select t.MSG, t.CORRELID from table
(MQRECEIVEALLXML(’MYSERVICE’,’MYPOLICY’,’1234’)) t
Esempio 4: i primi 10 messaggi vengono ricevuti dall’intestazione coda e specificati
dal servizio predefinito (DB2.DEFAULT.SERVICE) utilizzando il criterio predefinito
(DB2.DEFAULT.POLICY). Vengono restituite tutte le colonne.
select * from table (MQRECEIVEALLXML(10)) t
Funzione MQRcvAllXMLCLOB
Scopo:
La funzione MQRcvAllXMLCLOB rimuove i messaggi dalla coda associata al
servizio-ricezione. Se si specifica id-correl, verranno restituiti solo i messaggi con un
identificativo di correlazione corrispondente. Se non si specifica id-correl, verranno
restituiti tutti i messaggi. Se si specifica num-righe, verrà restituito come XMLCLOB
un massimo di messaggi relativi al num-righe. In caso contrario, verranno restituiti
tutti i messaggi disponibili.
Sintassi:
�� MQRcvAllXMLCLOB ( )
servizio-ricezione
num-righe
servizio-ricezione
,
criterio-ricezione
servizio-ricezione
,
criterio-ricezione
id-correl
��
Parametri:
Tabella 68. Parametri MQRcvAllXMLCLOB
Parametro Tipo di dati Descrizione
servizio-ricezione VARCHAR(48) Una stringa contenente la
destinazione MQSeries logica
da cui ricevere i messaggi.
Quando specificato, il
servizio-ricezione si riferisce a
un criterio definito nel file di
repository AMT.XML. Se
servizio-ricezione non è
specificato, verrà utilizzato
DB2.DEFAULT.SERVICE. La
dimensione massima del
servizio-ricezione è 48 byte.
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 221
Tabella 68. Parametri MQRcvAllXMLCLOB (Continua)
Parametro Tipo di dati Descrizione
criterio-ricezione VARCHAR(48) Una stringa contenente il
criterio di servizio MQSeries
AMI utilizzato per gestire
questo messaggio. Quando
specificato, criterio-ricezione
deve fare riferimento a un
criterio definito nel file di
repository AMT.XML. Se
criterio-ricezione non è
specificato, verrà utilizzato
DB2.DEFAULT.POLICY
predefinito. La dimensione
massima di criterio-ricezione è
48 byte.
id-correl VARCHAR(24) Una stringa contenente un
identificativo di correlazione
facoltativo associato a questo
messaggio. L’id-correl viene
spesso specificato in scenari
di richiesta/risposta per
associare le richieste alle
repliche. Se non è specificato,
non verrà mostrato alcun id
correlazione. La dimensione
massima di id-correl è 24 byte.
num-righe INTEGER Un numero intero positivo
contenente il numero
massimo di messaggi
restituiti dalla funzione.
Risultati:
Quando una coda riceve correttamente un messaggio, MQRcvAllXMLCLOB
restituisce un XMLCLOB. Viene restituito NULL se non è disponibile alcun
messaggio. I messaggi vengono restituiti in una tabella, come descritto di seguito
Tabella 69. Tabella della serie di risultati MQRcvAllXML
Nome colonna Tipo di dati Descrizione
MSG XMLCLOB Il contenuto del messaggio
MQSeries.
CORRELID VARCHAR(24) Un ID di correlazione che è
possibile utilizzare in
correlazione ai messaggi.
TOPIC VARCHAR(40) L’argomento in cui è stato
pubblicato il messaggio, se
disponibile.
QNAME VARCHAR(48) Il nome coda in cui è stato
ricevuto il messaggio.
MSGID CHAR(24) L’identificativo univoco
assegnato da MQSeries per
questo messaggio.
222 XML Extender - Amministrazione e programmazione
Tabella 69. Tabella della serie di risultati MQRcvAllXML (Continua)
Nome colonna Tipo di dati Descrizione
MSGFORMAT VARCHAR(8) Il formato del messaggio
come definito da MQSeries.
Le stringhe classiche hanno il
formato MQSTR.
Funzione MQReceiveXMLCLOB
Scopo:
MQReceiveXMLCLOB rimuove i messaggi associati al servizio-ricezione dalla coda.
La funzione restituisce i dati XMLVARCHAR dal percorso MQSeries specificato
dalla funzione criterio-servizio che utilizza la qualità del servizio-ricezione.
Sintassi:
�� MQReceiveXMLCLOB ( )
servizio-ricezione
servizio-ricezione
,
criterio-servizio
servizio-ricezione
,
criterio-servizio
id-correl
��
Parametri:
Tabella 70. Parametri MQReceiveXMLCLOB
Parametro Tipo di dati Descrizione
servizio-ricezione VARCHAR(48) Una stringa contenente la
destinazione MQSeries logica
da cui ricevere i messaggi.
Quando è specificato
servizio-ricezione, esso si
riferisce al punto di servizio
definito nel file di repository
AMT.XML. Tuttavia, se
servizio-ricezione non è
specificato, verrà utilizzato
DB2.DEFAULT.SERVICE. La
dimensione massima del
servizio-ricezione è 48 byte.
criterio-servizio VARCHAR(48) Una stringa contenente il
criterio di servizio MQSeries
AMI utilizzato per gestire
questo messaggio. Quando
specificato, il
servizio-ricezione deve fare
riferimento a un criterio
definito nel file di repository
AMT.XML. Se criterio-servizio
non è specificato, verrà
utilizzato
DB2.DEFAULT.POLICY
predefinito. La dimensione
massima di criterio-servizio è
48 byte.
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 223
Tabella 70. Parametri MQReceiveXMLCLOB (Continua)
Parametro Tipo di dati Descrizione
id-correl VARCHAR(24) Una stringa contenente un
identificativo di correlazione
facoltativo associato a questo
messaggio. L’id-correl viene
spesso specificato in scenari
di richiesta/risposta per
associare le richieste alle
repliche. Se non è specificato,
non verrà mostrato alcun ID
correlazione. La dimensione
massima di id-correl è 24 byte.
Risultati:
Le funzioni MQReceiveXMLCLOB restituiscono db2xml.XMLCLOB se i messaggi
vengono ricevuti correttamente dalla coda. Viene restituito NULL se non è
disponibile alcun messaggio. Se si specifica id-correl, verrà restituito il primo
messaggio con un identificativo di correlazione corrispondente. Tuttavia, se non si
specifica id-correl, verrà restituito il messaggio nell’intestazione della coda.
Funzione MQRcvXMLCLOB
Scopo:
MQRcvXMLCLOB rimuove i messaggi associati al servizio-ricezione dalla coda. La
funzione restituisce i dati XMLVARCHAR dal percorso MQSeries specificato dalla
funzione servizio-ricezione che utilizza la qualità del servizio-ricezione.
Sintassi:
�� MQRcvXMLCLOB ( )
servizio-ricezione
servizio-ricezione
,
servizio-ricezione
servizio-ricezione
,
servizio-ricezione
id-correl
��
Parametri:
Tabella 71. Parametri MQRcvXMLCLOB
Tipo di dati Tipo di dati Descrizione
servizio-ricezione VARCHAR(48) Una stringa contenente la
destinazione MQSeries logica
da cui ricevere i messaggi.
Quando è specificato
servizio-ricezione, esso si
riferisce al punto di servizio
definito nel file di repository
AMT.XML. Tuttavia, se
servizio-ricezione non è
specificato, verrà utilizzato
DB2.DEFAULT.SERVICE. La
dimensione massima del
servizio-ricezione è 48 byte.
224 XML Extender - Amministrazione e programmazione
Tabella 71. Parametri MQRcvXMLCLOB (Continua)
Tipo di dati Tipo di dati Descrizione
servizio-ricezione VARCHAR(48) Una stringa contenente il
criterio di servizio MQSeries
AMI utilizzato per gestire
questo messaggio. Quando
specificato, il
servizio-ricezione deve fare
riferimento a un criterio
definito nel file di repository
AMT.XML. Se
servizio-ricezione non è
specificato, verrà utilizzato
DB2.DEFAULT.POLICY. La
dimensione massima del
servizio-ricezione è 48 byte.
id-correl VARCHAR(24) Una stringa contenente un
identificativo di correlazione
facoltativo associato a questo
messaggio. L’id-correl viene
spesso specificato in scenari
di richiesta/risposta per
associare le richieste alle
repliche. Se non è specificato,
non verrà mostrato alcun ID
correlazione. La dimensione
massima di id-correl è 24 byte.
Risultati:
Le funzioni MQRcvMLCLOB restituiscono db2xml.XMLCLOB se i messaggi
vengono ricevuti correttamente dalla coda. La dimensione massima di un
messaggio è 1M. Viene restituito NULL se non è disponibile alcun messaggio. Se si
specifica id-correl, verrà restituito il primo messaggio con un identificativo di
correlazione corrispondente. Tuttavia, se non si specifica id-correl, verrà restituito il
messaggio nell’intestazione della coda.
Funzione MQSENDXML
Scopo:
La funzione MQSENDXML invia i dati contenuti in dati-msg al percorso MQSeries
specificato dal servizio di invio utilizzando il criterio di invio. È inoltre possibile
specificare un identificativo di correlazione del messaggio definito dall’utente
tramite id-correl. La funzione restituisce 1 in caso di operazione riuscita.
Sintassi:
�� MQSENDXML ( dati-msg , )
servizio-invio
id-correl
servizio-invio
,
criterio-invio
��
Parametri:
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 225
Tabella 72. Parametri MQSendXML
Parametro Tipo di dati Descrizione
dati-msg XMLVARCHAR o XMLCLOB Un’espressione contenente i
dati da inviare tramite
MQSeries.
servizio-invio VARCHAR(48) Una stringa contenente la
destinazione MQSeries logica
a cui inviare i messaggi.
Quando è presente
servizio-invio, esso si riferisce
al punto di servizio definito
nel file di repository
AMT.XML.
DB2.DEFAULT.SERVICE
viene utilizzato quando non
si specifica servizio-invio. La
dimensione massima di
servizio-invio è 48 byte.
criterio-invio VARCHAR(48) Una stringa contenente il
criterio di servizio MQSeries
AMI utilizzato per gestire il
messaggio. Quando
specificato, criterio-invio si
riferisce a un criterio definito
nel file di repository
AMT.XML. Se criterio-invio
non è specificato, verrà
utilizzato
DB2.DEFAULT.POLICY. La
dimensione massima di
policyName è 48 byte.
id-correl VARCHAR(24) Una stringa contenente un
identificativo di correlazione
facoltativo associato al
messaggio. L’id-correl viene
spesso specificato in scenari
di richiesta/risposta per
associare le richieste alle
repliche. Se non è specificato,
non verrà mostrato alcun id
correlazione. La dimensione
massima dell’id-correl è 24
byte.
Risultati:
Un messaggio di operazione riuscita produce il valore 1. Un messaggio contenente
dati-msg verrà inviato al percorso specificato dal servizio-invio utilizzando il
criterio definito da criterio-invio.
Funzione MQSENDXMLFILE
Scopo:
La funzione MQSENDXMLFILE invia i dati contenuti nel file-xml al percorso
MQSeries specificato dal servizio di invio utilizzando la qualità del criterio di
226 XML Extender - Amministrazione e programmazione
servizio. È inoltre possibile specificare un identificativo di correlazione del
messaggio definito dall’utente tramite id-correl. La funzione restituisce ’1’ in caso
di operazione riuscita.
Sintassi:
�� MQSENDXMLFILE ( file_xml , )
servizio-invio
id-correl
servizio-invio
,
criterio-invio
��
Parametri:
Tabella 73. Parametro MQSENDXMLFILE
Parametro Tipo di dati Descrizione
file_xml XMLCLOB Un nome di file XML con
una dimensione massima di
80 byte. Il file contiene i dati
da inviare tramite MQSeries.
servizio-invio VARCHAR(48) Una stringa contenente la
destinazione MQSeries logica
a cui inviare i messaggi.
Quando specificato, il
servizio-invio si riferisce a un
criterio definito nel file di
repository AMT.XML. Se
servizio-invio non è
specificato, verrà utilizzato
DB2.DEFAULT.SERVICE. La
dimensione massima di
servizio-invio è 48 byte.
criterio-invio VARCHAR(48) Una stringa contenente il
servizio MQSeries AMI
utilizzato per gestire questo
messaggio. Quando
specificato, criterio-invio si
riferisce a un criterio definito
nel file di repository
AMT.XML. Se criterio-invio
non è specificato, verrà
utilizzato
DB2.DEFAULT.POLICY
predefinito. La dimensione
massima di criterio-invio è 48
byte.
id-correl VARCHAR(24) Una stringa contenente un
identificativo di correlazione
facoltativo associato a questo
messaggio. L’id-correl viene
spesso specificato in scenari
di richiesta/risposta per
associare le richieste alle
repliche. Se non è specificato,
non verrà mostrato alcun id
correlazione. La dimensione
massima di id-correl è 24 byte.
Risultati:
Se la funzione ha esito positivo, il risultato è ’1’. L’effetto collaterale dell’esecuzione
di questa funzione è che un messaggio contenente dati-msg verrà inviato al
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 227
percorso specificato dal servizio-invio utilizzando il criterio definito da criterio-invio.
Esempi:
Esempio 1: i documenti XML contenuti nel file ″c:\xml\test1.xml″ vengono inviati
al servizio predefinito (DB2.DEFAULT.SERVICE) utilizzando il criterio predefinito
(DB2.DEFAULT.POLICY) senza alcun identificativo di correlazione.
Values MQSENDXMLFILE(’c:\xml\test1.xml’);
Questo esempio restituisce il valore ’1’ in caso di esito positivo
Esempio 2: i documenti XML contenuti nel file c:\xml\test2.xml vengono inviati
al servizio MYSERVICE utilizzando il criterio MYPOLICY senza identificativo di
correlazione.
Values MQSENDXMLFILE(’MYSERVICE’, ’MYPOLICY’, ’c:\xml\test2.xml’);
Questo esempio restituisce il valore ’1’ in caso di esito positivo
Esempio 3: i documenti XML contenuti nel file ″c:\xml\test3.xml″ vengono inviati
al servizio MYSERVICE utilizzando il criterio MYPOLICY con l’identificativo di
correlazione ″Test3″.
Values MQSENDXML(’MYSERVICE’,’MYPOLICY’, ’c:\xml\test3.xml’, ’Test3’);
Questo esempio restituisce il valore ’1’ in caso di esito positivo.
Esempio 4: i documenti XML contenuti nel file ″c:\xml\test4.xml″ vengono inviati
al servizio MYSERVICE utilizzando il criterio predefinito (DB2.DEFAULT.POLICY)
senza alcun identificativo di correlazione.
Values MQSENDXMLFILE(’MYSERVICE’, ’c:\xml\test4.xml’);
Questo esempio restituisce il valore ’1’ in caso di esito positivo.
Funzione MQSendXMLFILECLOB
Scopo:
La funzione MQSendXMLFILECLOB invia i dati contenuti nel file-xml al percorso
MQSeries specificato dal servizio di invio utilizzando la qualità criterio-invio. Il tipo
di dati inviato è XMLCLOB. È inoltre possibile specificare un identificativo di
correlazione del messaggio definito dall’utente tramite id-correl. La funzione
restituisce 1 in caso di operazione riuscita.
Sintassi:
�� MQSendXMLFILECLOB ( file_xml , )
servizio-invio
id-correl
servizio-invio
,
criterio-invio
��
Parametri:
Tabella 74. Parametro MQSENDXMLFILE
Parametro Tipo di dati Descrizione
file_xml XMLCLOB Un nome di file XML con
una dimensione massima di
80 byte. Il file contiene i dati
da inviare tramite MQSeries.
228 XML Extender - Amministrazione e programmazione
Tabella 74. Parametro MQSENDXMLFILE (Continua)
Parametro Tipo di dati Descrizione
servizio-invio VARCHAR(48) Una stringa contenente la
destinazione MQSeries logica
a cui inviare i messaggi.
Quando specificato, il
servizio-invio si riferisce a un
criterio definito nel file di
repository AMT.XML. Se
servizio-invio non è
specificato, verrà utilizzato
DB2.DEFAULT.SERVICE. La
dimensione massima di
servizio-invio è 48 byte.
criterio-invio VARCHAR(48) Una stringa contenente il
servizio MQSeries AMI
utilizzato per gestire questo
messaggio. Quando
specificato, criterio-invio si
riferisce a un criterio definito
nel file di repository
AMT.XML. Se criterio-invio
non è specificato, verrà
utilizzato
DB2.DEFAULT.POLICY
predefinito. La dimensione
massima di criterio-invio è 48
byte.
id-correl VARCHAR(24) Una stringa contenente un
identificativo di correlazione
facoltativo associato a questo
messaggio. L’id-correl viene
spesso specificato in scenari
di richiesta/risposta per
associare le richieste alle
repliche. Se non è specificato,
non verrà mostrato alcun id
correlazione. La dimensione
massima di id-correl è 24 byte.
Risultati:
Se la funzione ha esito positivo, il risultato è ’1’. L’effetto collaterale dell’esecuzione
di questa funzione è che un messaggio contenente dati-msg verrà inviato al
percorso specificato dal servizio-invio utilizzando il criterio definito da criterio-invio.
Procedure memorizzate di MQSeries per XML Extender
XML Extender MQSeries procedure memorizzate - Panoramica
Procedure memorizzate di composizione
Utilizzare le procedure memorizzate di composizione, dxxmqGen(),
dxxmqGenCLOB(), dxxmqRetrieve() e dxxmqRetrieveCLOB() per generare
documenti XML utilizzando i dati nelle tabelle del database esistente e per
inviare i documenti XML generati ad una coda di messaggi. Le procedure
memorizzate dxxmqGen() e dxxmqGenCLOB() utilizzano un file DAD
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 229
come input. Tali procedure non richiedono raccolte XML abilitate. Le
procedure memorizzate dxxmqRetrieve e dxxmqRetrieveCLOB utilizzano
nomi di raccolta come input.
Procedure memorizzate di decomposizione
Le procedure memorizzate di decomposizione dxxmqInsert(),
dxxmqInsertAll(), dxxInsertCLOB(), dxxmqShred(), dxxmqShredCLOB e
dxxmqShredAll() vengono utilizzate per interrompere o rompere
documenti XML in arrivo da una coda di messaggi e per immagazzinare i
dati in tabelle del database nuove o esistenti.
Le procedure memorizzate dxxmqInsert(), dxxmqInsertAll(),
dxxmqInsertAllCLOB() e dxxInsertCLOB() utilizzano un nome di raccolta XML
abilitato come input.
Le procedure memorizzate dxxmqShred(), dxxmqShredAll(), dxxmqShredCLOB e
dxxmqShredAllCLOB utilizzano un file DAD come input. Non richiedono una
raccolta XML abilitata.
La seguente tabella riassume le differenti procedure memorizzate e illustra le
relative funzioni.
Tabella 75. Le procedure memorizzate XML MQSeries®
Funzione Finalità
dxxmqGen Invoca la procedura memorizzata dxxmqGen
per comporre documenti XML, utilizzando
un file DAD come parametro di input. Il tipo
di documento risultante è
XMLVARCHAR(32000).
dxxmqGenCLOB Costruisce un documento XML dai dati
memorizzati nelle tabelle di raccolta XML
specificate nel file DAD e invia il documento
XML ad una coda di messaggi MQ. Il tipo di
documento risultante è XMLCLOB(1M).
dxxmqRetrieve Invoca la procedura memorizzata
dxxmqRetrieve per comporre documenti
XML, utilizzando un nome di raccolta come
parametro di input. Il tipo di documento
risultante è XMLVARCHAR(32000).
dxxmqRetrieveCLOB Invoca la procedura memorizzata
dxxmqRetrieve per comporre documenti
XML, utilizzando un nome di raccolta come
parametro di input. Il tipo di documento
risultante è XMLCLOB(1M).
dxxmqShred Invoca la procedura memorizzata
dxxmqShred per decomporre un documento
XML utilizzando un file DAD come un
parametro di input. Il tipo di documento
risultante è XMLVARCHAR(32000).
dxxmqShredAll Invoca la procedura memorizzata
dxxmqShredAll per decomporre documenti
XML multipli utilizzando un file DAD come
parametro di input. Il tipo di documento
risultante è XMLVARCHAR(32000).
230 XML Extender - Amministrazione e programmazione
Tabella 75. Le procedure memorizzate XML MQSeries® (Continua)
Funzione Finalità
dxxmqShredCLOB Decompone un documento XML in arrivo da
una coda di messaggi, in base ad
un’associazione del file DAD e memorizza il
contenuto degli elementi e degli attributi
XML in specifiche tabelle DB2®. Il tipo di
documento risultante è XMLCLOB(1M).
dxxmqShredAllCLOB Decompone un documento XML in arrivo da
una coda di messaggi, in base ad
un’associazione del file DAD e memorizza il
contenuto degli elementi e attributi XML in
tabelle DB2 specifiche. Il tipo di documento
risultante è XMLCLOB(1M).
dxxmqInsert Invoca la procedura memorizzata
dxxmqInsert per decomporre un documento
XML utilizzando un nome di raccolta come
parametro di input. Il tipo di documento
risultante è XMLVARCHAR(32000).
dxxmqInsertAll Invoca la procedura memorizzata
dxxmqInsertAll per decomporre documenti
XML multipli utilizzando un nome di
raccolta come parametro di input. Il tipo di
documento risultante è
XMLVARCHAR(32000).
dxxmqInsertCLOB Interrompe o elimina un documento XML in
arrivo da una coda di messaggi e memorizza
i dati in tabelle del database nuove o
esistenti. Il tipo di documento risultante è
XMLCLOB(1M).
dxxmqInsertAllCLOB Interrompe o elimina tutti i documenti XML
in arrivo da una coda di messaggi e
memorizza i dati in tabelle del database
nuove o esistenti. La procedura memorizzata
dxxmqInsertAllCLOB utilizza un nome di
raccolta, invece che un nome del file DAD,
per determinare come immagazzinare i dati.
Il tipo di documento risultante è
XMLCLOB(1M).
Riferimenti correlati:
v “Procedura memorizzata dxxmqGen()” a pagina 232
v “Procedura memorizzata dxxmqGenCLOB” a pagina 234
v “Procedura memorizzata dxxmqInsert” a pagina 246
v “Procedura memorizzata dxxmqInsertAll” a pagina 250
v “Procedura memorizzata dxxmqInsertAllCLOB” a pagina 251
v “Procedura memorizzata dxxmqInsertCLOB” a pagina 248
v “Procedura memorizzata dxxmqRetrieve” a pagina 236
v “Procedura memorizzata dxxmqRetrieveCLOB” a pagina 239
v “Procedura memorizzata dxxmqShred” a pagina 241
v “Procedura memorizzata dxxmqShredAll” a pagina 242
v “Procedura memorizzata dxxmqShredAllCLOB” a pagina 245
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 231
v “Procedura memorizzata dxxmqShredCLOB” a pagina 244
Procedura memorizzata dxxmqGen()
Scopo:
Crea un documento XML dai dati memorizzati nelle tabelle di raccolta XML
specificate nel file DAD e invia il documento XML a una coda di messaggi MQ. La
procedura memorizzata restituisce una stringa per indicare il proprio stato.
Per supportare la query dinamica, dxxmqGen() richiama un parametro di input,
override. In base all’input overrideType, l’applicazione può sostituire SQL_stmt per
l’associazione SQL o le condizioni in RDB_node per l’associazione RDB_node nel
file DAD. Il parametro di input overrideType viene utilizzato per chiarire il tipo di
override.
Sintassi:
dxxmqGen(varchar(48) serviceName, /*input*/
varchar(48) policyName, /* input */
varchar(80) dadFileName, /* input */
integer overrideType, /*input*/
varchar(varchar_value) override, /*input*/
integer maxRows, /*input*/
integer numRows, /*output*/
char(20) status) /*output*/
Parametri:
Tabella 76. Parametri dxxmqGen()
Parametro Descrizione Parametro
IN/OUT
serviceName Una stringa contenente la destinazione
MQSeries logica a cui inviare i messaggi.
Quando è presente serviceName, esso si
riferisce al punto di servizio definito nel
file di repository AMT.XML.
DB2.DEFAULT.SERIVCE viene utilizzato
quando non si specifica serviceName. La
dimensione massima di serviceName è 48
byte.
IN
policyName Una stringa contenente il criterio di
servizio MQSeries AMI utilizzato per
gestire i messaggi. Quando specificato,
policyName si riferisce a un criterio definito
nel file di repository AMT.XML. Se
policyName non è specificato, verrà
utilizzato DB2.DEFAULT.POLICY. La
dimensione massima di policyName è 48
byte.
IN
dadFileName Il nome del file DAD. IN
232 XML Extender - Amministrazione e programmazione
Tabella 76. Parametri dxxmqGen() (Continua)
Parametro Descrizione Parametro
IN/OUT
overrideType Un indicatore relativo al seguente tipo di
parametro override:
v NO_OVERRIDE: Nessuna sostituzione.
v SQL_OVERRIDE: Sostituzione da parte
di SQL_stmt.
v XML_OVERRIDE: Sostituzione da
parte di una condizione basata sul
percorso.
IN
override Sostituisce la condizione nel file DAD. Il
valore di input si basa su overrideType.
v NO_OVERRIDE: Una stringa NULL.
v SQL_OVERRIDE: Un’istruzione SQL
valida. Utilizzando overrideType, è
necessario usare l’associazione SQL
utilizzata nel file DAD. L’istruzione SQL
di input sostituisce SQL_stmt nel file
DAD.
v XML_OVERRIDE: Una stringa che
contiene una o più espressioni tra
virgolette separate dalla parola ″AND″.
Utilizzando overrideType, è necessario
usare l’associazione RDB_node nel file
DAD.
IN
maxRows Il numero massimo di messaggi generati
nella relativa coda.
IN
numRows Il numero effettivo di righe generate nella
coda messaggi.
OUT
stato Il testo e i codici restituiti che specificano
se la procedura è stata eseguita
correttamente o meno, i codici di errore
generati e il numero di documenti XML
ricevuti o inviati alla coda messaggi.
OUT
Esempi:
Il seguente frammento di esempio genera un documento XML e lo invia alla coda.
Si presuppone che un servizio MQ/AMI, myService ed è stato definito un criterio,
myPolicy, nel file di repository. Questo file memorizza le definizioni di repository in
formato XML.
#include "dxx.h"
#include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char serviceName[48]; /* nome del servizio MQ/AMI */
char policyName[48]; /* nome del criterio MQ/AMI */
char dadFileName[80]; /* nome del file DAD */
char override[2]; /* sostituzione, impostata su NULL*/
short overrideType; /* definito in dxx.h */
short max_row; /* numero massimo di righe */
short num_row; /* numero effettivo di righe */
char status[20] /* messaggio o codice di stato */
short ovtype_ind;
short ov_ind;
short maxrow_ind;
short numrow_ind;
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 233
short dadFileName_ind;
short serviceName_ind;
short policyName_ind;
short status_ind;
EXEC SQL END DECLARE SECTION;
strcpy(dadFileName,"c:\dxx\dad\litem3.dad");
strcpy(serviceName, "myService");
strcpy(policyName, "myPolicy");
override[0] = ’\0’;
overrideType = NO_OVERRIDE;
max_row = 500;
num_row = 0;
status[0] = ’\0’;
dadFileName_ind = 0;
serviceName_ind = 0;
policyName_ind = 0;
maxrow_ind = 0;
numrow_ind = -1;
ovtype_ind=0;
ov_ind=-1;
status_ind = -1;
/* Richiama la procedura memorizzata */
EXEC SQL CALL db2xml.dxxmqGen(:serviceName:serviceName_ind,
:policyName:policyName_ind,
:dadFileName:dadFileName_ind,
:overrideType:ovtype_ind,
:override:ov_ind,
:max_row:maxrow_ind,
:num_row:numrow_ind,
:status:status_ind);
Argomenti correlati:
v “Procedure memorizzate XML Extender e funzioni per MQSeries - Panoramica”
a pagina 207
Attività correlate:
v “Richiamo delle procedure memorizzate XML Extender” a pagina 183
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxmqGenCLOB
Scopo:
Crea un documento XML dai dati memorizzati nelle tabelle di raccolta XML
specificate nel file DAD e invia il documento XML a una coda di messaggi MQ. Il
tipo di documento è XMLCLOB. La procedura memorizzata restituisce una stringa
per indicare il proprio stato. Tale procedura memorizzata non è supportata per ESE
(Enterprise Server Edition).
Per supportare la query dinamica, dxxmqGenCLOB richiama un parametro di
input, override. In base all’input overrideType, l’applicazione può sostituire SQL_stmt
per l’associazione SQL o le condizioni in RDB_node per l’associazione RDB_node
nel file DAD. Il parametro di input overrideType viene utilizzato per chiarire il tipo
di override.
Sintassi:
234 XML Extender - Amministrazione e programmazione
dxxmqGenCLOB(varchar(48) serviceName, /*input*/
varchar(48) policyName, /* input */
varchar(80) dadFileName, /* input */
integer overrideType, /*input*/
varchar(varchar_value) override, /*input*/
integer maxRows, /*input*/
integer numRows, /*output*/
char(20) status) /*output*/
Parametri:
Tabella 77. Parametri dxxmqGenCLOB
Parametro Descrizione Parametro
IN/OUT
serviceName Una stringa contenente la destinazione
MQSeries logica a cui inviare i messaggi.
Quando è presente serviceName, esso si
riferisce a una voce di servizio nella
tabella DB2MQ.MQService.
DB2.DEFAULT.SERIVCE viene utilizzato
quando non si specifica serviceName. La
dimensione massima di serviceName è 48
byte.
IN
policyName Una stringa contenente il criterio di
servizio MQSeries utilizzato per gestire i
messaggi. Quando specificato, policyName
si riferisce a un criterio definito nella
tabella DB2MQ.MQPolicy. Se policyName
non è specificato, verrà utilizzato
DB2.DEFAULT.POLICY. La dimensione
massima di policyName è 48 byte.
IN
dadFileName Il nome del file DAD. IN
overrideType Un indicatore relativo al seguente tipo di
parametro override:
v NO_OVERRIDE: Nessuna sostituzione.
v SQL_OVERRIDE: Sostituzione da parte
di SQL_stmt.
v XML_OVERRIDE: Sostituzione da
parte di una condizione basata sul
percorso.
IN
override Sostituisce la condizione nel file DAD. Il
valore di input si basa su overrideType.
v NO_OVERRIDE: Una stringa NULL.
v SQL_OVERRIDE: Un’istruzione SQL
valida. Utilizzando overrideType, è
necessario usare l’associazione SQL
utilizzata nel file DAD. L’istruzione SQL
di input sostituisce SQL_stmt nel file
DAD.
v XML_OVERRIDE: Una stringa che
contiene una o più espressioni tra
virgolette separate dalla parola ″AND″.
Utilizzando overrideType, è necessario
usare l’associazione RDB_node nel file
DAD.
IN
maxRows Il numero massimo di messaggi generati
nella relativa coda.
IN
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 235
Tabella 77. Parametri dxxmqGenCLOB (Continua)
Parametro Descrizione Parametro
IN/OUT
numRows Il numero effettivo di righe generate nella
coda messaggi.
OUT
stato Il testo e i codici restituiti che specificano
se la procedura è stata eseguita
correttamente o meno, i codici di errore
generati e il numero di documenti XML
ricevuti o inviati alla coda messaggi.
OUT
Argomenti correlati:
v “Procedure memorizzate XML Extender e funzioni per MQSeries - Panoramica”
a pagina 207
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxmqRetrieve
Scopo:
La procedura memorizzata dxxmqRetrieve() è un mezzo per richiamare i
documenti XML decomposti. Come input, dxxmqRetrieve() utilizza un buffer
contenente il nome raccolta XML abilitato, il servizio MQ e i nomi criterio. Invia
quindi il documento XML composto a una coda MQ; restituisce il numero di righe
inviate alla coda e un messaggio sullo stato. La procedura memorizzata
dxxmqRetrieve consente l’utilizzo dello stesso file DAD sia per la composizione
che per la decomposizione.
Per supportare la query dinamica, dxxmqRetrieve() richiama un parametro di
input, override. In base all’input overrideType, l’applicazione può sostituire SQL_stmt
per l’associazione SQL o le condizioni in RDB_node per l’associazione RDB_node
nel file DAD. Il parametro di input overrideType viene utilizzato per chiarire il tipo
di override.
I requisiti per l’utilizzo del file DAD per dxxRetrieve() sono gli stessi utilizzati per
dxxmqGen(). L’unica differenza è che DAD non è un parametro di input per
dxxmqRetrieve(); il parametro richiesto è il nome della raccolta XML abilitata.
Sintassi:
dxxmqRetrieve(varchar(48) serviceName, /*input*/
varchar(48) policyName, /* input */
varchar(80) collectionName, /* input */
integer overrideType, /*input*/
varchar(varchar_value) override, /*input*/
integer maxrows, /*input*/
integer numrows, /*output*/
char(20) status) /*output*/
236 XML Extender - Amministrazione e programmazione
Parametri:
Tabella 78. Parametri dxxmqRetrieve()
Parametro Descrizione Parametro
IN/OUT
serviceName Una stringa contenente la destinazione
MQSeries logica a cui inviare i messaggi.
Quando è presente serviceName, esso si
riferisce al punto di servizio definito nel
file di repository AMT.XML.
DB2.DEFAULT.SERVICE viene utilizzato
quando non si specifica serviceName. La
dimensione massima di serviceName è 48
byte.
IN
policyName Una stringa contenente il criterio di
servizio MQSeries AMI utilizzato per
gestire i messaggi. Quando specificato,
policyName si riferisce a un criterio
definito nel file di repository AMT.XML.
Se policyName non è specificato, verrà
utilizzato DB2.DEFAULT.POLICY. La
dimensione massima di policyName è 48
byte.
IN
collectionName Il nome della raccolta abilitata. IN
overrideType Un indicatore relativo al seguente tipo di
parametro override:
v NO_OVERRIDE: Nessuna
sostituzione.
v SQL_OVERRIDE: Sostituzione da
parte di SQL_stmt.
v XML_OVERRIDE: Sostituzione da
parte di una condizione basata sul
percorso.
IN
override Sostituisce la condizione nel file DAD. Il
valore di input si basa su overrideType.
v NO_OVERRIDE: Una stringa NULL.
v SQL_OVERRIDE: Un’istruzione SQL
valida. Utilizzando overrideType, è
necessario usare l’associazione SQL
utilizzata nel file DAD. L’istruzione
SQL di input sostituisce SQL_stmt nel
file DAD.
v XML_OVERRIDE: Una stringa che
contiene una o più espressioni tra
virgolette separate dalla parola ″AND″.
La lunghezza massima è 1024 byte. La
stringa overrideType richiede l’utilizzo
dell’associazione RDB_node nel file
DAD.
IN
maxRows Il numero massimo di righe nella tabella
dei risultati.
IN
numRows Il numero effettivo di righe generate nella
tabella dei risultati.
OUT
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 237
Tabella 78. Parametri dxxmqRetrieve() (Continua)
Parametro Descrizione Parametro
IN/OUT
stato Il testo e i codici restituiti che specificano
se la procedura è stata eseguita
correttamente o meno, i codici di errore
generati e il numero di documenti XML
ricevuti o inviati alla coda messaggi.
OUT
Esempi:
Il seguente frammento è un esempio di chiamata a dxxmqRetrieve().
#include "dxx.h"
#include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char serviceName[48]; /* nome del servizio MQ/AMI */
char policyName[48]; /* nome del criterio MQ/AMI */
char collection[32]; /* nome della raccolta XML */
char override[2]; /* sostituzione, impostata su NULL*/
short overrideType; /* definito in dxx.h */
short max_row; /* numero massimo di righe */
short num_row; /* numero effettivo di righe */
char status[20]; /* messaggio o codice di stato */
short ovtype_ind;
short ov_ind;
short maxrow_ind;
short numrow_ind;
short collection_ind;
short serviceName_ind;
short policyName_ind;
short status_ind;
EXEC SQL END DECLARE SECTION;
/* inizializza la variabile host e gli indicatori */
strcpy(collection,"sales_ord");
strcpy(serviceName, "myService");
strcpy(policyName, "myPolicy");
override[0] = ’\0’;
overrideType = NO_OVERRIDE;
max_row = 500;
num_row = 0;
status[0] = ’\0’;
serviceName_ind = 0;
policyName_ind = 0;
collection_ind = 0;
maxrow_ind = 0;
numrow_ind = -1;
ovtype_ind=0;
ov_ind=-1;
status_ind = -1;
/* Richiama la procedura memorizzata */
EXEC SQL CALL db2xml.dxxmqRetrieve(:serviceName:serviceName_ind,
:policyName:policyName_ind,
:collection:collection_ind,
:overrideType:ovtype_ind,
:override:ov_ind,
:max_row:maxrow_ind,
:num_row:numrow_ind,
:status:status_ind);
238 XML Extender - Amministrazione e programmazione
Argomenti correlati:
v “Procedure memorizzate XML Extender e funzioni per MQSeries - Panoramica”
a pagina 207
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxmqRetrieveCLOB
Scopo:
La procedura memorizzata dxxmqRetrieveCLOB è un mezzo per richiamare i
documenti XML decomposti. Come input, dxxmqRetrieveCLOB utilizza un buffer
contenente il nome raccolta XML abilitato, il servizio MQ/AMI e i nomi criterio.
Invia il documento XML composto a una coda MQ e restituisce il numero di righe
inviate alla coda e un messaggio sullo stato.La procedura memorizzata
dxxmqRetrieveCLOB consente l’utilizzo dello stesso file DAD sia per la
composizione che per la decomposizione. Tale procedura memorizzata non è
supportata per ESE (Enterprise Server Edition).
Per supportare la query dinamica, dxxmqRetrieveCLOB richiama un parametro di
input, override. In base all’input overrideType, l’applicazione può sostituire SQL_stmt
per l’associazione SQL o le condizioni in RDB_node per l’associazione RDB_node
nel file DAD. Il parametro di input overrideType viene utilizzato per chiarire il tipo
di override.
I requisiti per l’utilizzo del file DAD per dxxRetrieveXMLClob sono gli stessi
utilizzati per dxxmqGenCLOB. L’unica differenza è che DAD non è un parametro
di input per dxxmqRetrieveCLOB; il parametro richiesto è il nome della raccolta
XML abilitata.
Sintassi:
dxxmqRetrieveCLOB(varchar(48) serviceName, /*input*/
varchar(48) policyName, /* input */
varchar(80) collectionName, /* input */
integer overrideType, /*input*/
varchar(varchar_value) override, /*input*/
integer maxrows, /*input*/
integer numrows, /*output*/
char(20) status) /*output*/
Parametri:
Tabella 79. Parametri dxxmqRetrieveCLOB
Parametro Descrizione Parametro
IN/OUT
serviceName Una stringa contenente la destinazione
MQSeries logica a cui inviare i messaggi.
Quando è presente serviceName, esso si
riferisce al punto di servizio definito nel
file di repository AMT.XML.
DB2.DEFAULT.SERVICE viene utilizzato
quando non si specifica serviceName. La
dimensione massima di serviceName è 48
byte.
IN
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 239
Tabella 79. Parametri dxxmqRetrieveCLOB (Continua)
Parametro Descrizione Parametro
IN/OUT
policyName Una stringa contenente il criterio di
servizio MQSeries AMI utilizzato per
gestire i messaggi. Quando specificato,
policyName si riferisce a un criterio
definito nel file di repository AMT.XML.
Se policyName non è specificato, verrà
utilizzato DB2.DEFAULT.POLICY. La
dimensione massima di policyName è 48
byte.
IN
collectionName Il nome della raccolta abilitata. IN
overrideType Un indicatore relativo al seguente tipo di
parametro override:
v NO_OVERRIDE: Nessuna
sostituzione.
v SQL_OVERRIDE: Sostituzione da
parte di SQL_stmt.
v XML_OVERRIDE: Sostituzione da
parte di una condizione basata sul
percorso.
IN
override Sostituisce la condizione nel file DAD. Il
valore di input si basa su overrideType.
v NO_OVERRIDE: Una stringa NULL.
v SQL_OVERRIDE: Un’istruzione SQL
valida. Utilizzando overrideType, è
necessario usare l’associazione SQL
utilizzata nel file DAD. L’istruzione
SQL di input sostituisce SQL_stmt nel
file DAD.
v XML_OVERRIDE: Una stringa che
contiene una o più espressioni tra
virgolette separate dalla parola ″AND″.
La dimensione massima è 1024 byte. La
stringa overrideType richiede l’utilizzo
dell’associazione RDB_node nel file
DAD.
IN
maxRows Il numero massimo di righe nella tabella
dei risultati.
IN
numRows Il numero effettivo di righe generate nella
tabella dei risultati.
OUT
stato Il testo e i codici restituiti che specificano
se la procedura è stata eseguita
correttamente o meno, i codici di errore
generati e il numero di documenti XML
ricevuti o inviati alla coda messaggi.
OUT
Argomenti correlati:
v “Procedure memorizzate XML Extender e funzioni per MQSeries - Panoramica”
a pagina 207
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
240 XML Extender - Amministrazione e programmazione
Procedura memorizzata dxxmqShred
Scopo:
Decompone un documento XML in entrata da una coda messaggi, in base a
un’associazione di file DAD e memorizza il contenuto degli attributi ed elementi
XML nelle tabelle DB2 specificate.
Per il corretto funzionamento di dxxmqShred(), tutte le tabelle specificate nel file
DAD devono essere presenti e tutte le colonne e i relativi tipi di dati specificati in
DAD devono essere coerenti con le tabelle esistenti. La procedura memorizzata
richiede che le colonne specificate nella condizione di unione di DAD,
corrispondano alle relazioni di chiavi primaria-esterna nelle tabelle esistenti. Le
colonne della condizione di unione specificate in RDB_node dell’element_node
devono essere presenti nelle tabelle.
Sintassi:
dxxmqShred(varchar(48) serviceName, /* input */
varchar(48) policyName, /* input */
varchar(80) dadFileName, /* input */
varchar(10) status) /* output */
Parametri:
Tabella 80. Parametri dxxmqShred()
Parametro Descrizione Parametro
IN/OUT
serviceName Una stringa contenente la destinazione
MQSeries logica a cui inviare i messaggi.
Quando è presente serviceName, esso si
riferisce al punto di servizio definito nel
file di repository AMT.XML.
DB2.DEFAULT.SERVICE viene utilizzato
quando non si specifica serviceName. La
dimensione massima di serviceName è 48
byte.
IN
policyName Una stringa contenente il criterio di
servizio MQSeries AMI utilizzato per
gestire i messaggi. Quando specificato,
policyName si riferisce a un criterio
definito nel file di repository AMT.XML.
Se policyName non è specificato, verrà
utilizzato DB2.DEFAULT.POLICY. La
dimensione massima di policyName è 48
byte.
IN
dadFileName Il nome del file DAD. La dimensione
massima è 80 byte.
IN
stato Il testo e i codici restituiti che specificano
se la procedura è stata eseguita
correttamente o meno, i codici di errore
generati e il numero di documenti XML
ricevuti o inviati alla coda messaggi.
OUT
Esempi:
Il seguente frammento è un esempio di chiamata a dxxmqShred().
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 241
#include "dxx.h"
#include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char serviceName[48]; /* nome del servizio MQ/AMI */
char policyName[48]; /* nome del criterio MQ/AMI */
char dadFileName[80]; /* nome del file DAD */
char status[20]; /* messaggio o codice di stato */
short serviceName_ind;
short policyName_ind;
short dadFileName_ind;
short status_ind;
EXEC SQL END DECLARE SECTION;
/* inizializza la variabile host e gli indicatori */
strcpy(dadFileName,"e:/dxx/samples/dad/getstart_xcollection.dad");
strcpy(serviceName, "myService");
strcpy(policyName, "myPolicy");
status[0]=’\0’;
serviceName_ind=0;
policyName_ind=0;
dadFileName_ind=0;
status_ind=-1;
/* Richiama la procedura memorizzata */
EXEC SQL CALL db2xml.dxxmqShred(:serviceName:serviceName_ind,
:policyName:policyName_ind,
:dadFileName:dadFileName_ind,
:status:status_ind);
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxmqShredAll
Scopo:
Decompone tutti i documenti XML file entrata da una coda messaggi in base a
un’associazione di file DAD. Il contenuto degli attributi ed elementi XML è
memorizzato in tabelle DB2 specifiche.
Per il corretto funzionamento di dxxmqShredAll(), tutte le tabelle specificate nel
file DAD devono essere presenti e tutte le colonne e i relativi tipi di dati specificati
in DAD devono essere coerenti con le tabelle esistenti. La procedura memorizzata
richiede che le colonne specificate nella condizione di unione di DAD,
corrispondano alle relazioni di chiavi primaria-esterna nelle tabelle esistenti. Le
colonne della condizione di unione specificate in RDB_node dell’element_node
devono essere presenti nelle tabelle.
Sintassi:
dxxmqShredAll(varchar(48) serviceName, /* input */
varchar(48) policyName, /* input */
varchar(80) dadFileName, /* input */
varchar(20) status) /* output */
242 XML Extender - Amministrazione e programmazione
Parametri:
Tabella 81. Parametri dxxmqShredAll()
Parametro Descrizione Parametro
IN/OUT
serviceName Una stringa contenente la destinazione
MQSeries logica a cui inviare i messaggi.
Quando è presente serviceName, esso si
riferisce al punto di servizio definito nel
file di repository AMT.XML.
DB2.DEFAULT.SERVICE viene utilizzato
quando non si specifica serviceName. La
dimensione massima di serviceName è 48
byte.
IN
policyName Una stringa contenente il criterio di
servizio MQSeries AMI utilizzato per
gestire i messaggi. Quando specificato,
policyName si riferisce a un criterio
definito nel file di repository AMT.XML.
Se policyName non è specificato, verrà
utilizzato DB2.DEFAULT.POLICY. La
dimensione massima di policyName è 48
byte.
IN
dadFileName Il nome del file DAD. La dimensione
massima è 80 byte.
IN
stato Il testo e i codici restituiti che specificano
se la procedura è stata eseguita
correttamente o meno, i codici di errore
generati e il numero di documenti XML
ricevuti o inviati alla coda messaggi.
OUT
Esempi:
Il seguente frammento è un esempio di chiamata a dxxmqShredAll().
#include "dxx.h"
#include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char serviceName[48]; /* nome del servizio MQ/AMI */
char policyName[48]; /* nome del criterio MQ/AMI */
char dadFileName[80]; /* nome del file DAD */
char status[20]; /* messaggio o codice di stato */
short serviceName_ind;
short policyName_ind;
short dadFileName_ind;
short status_ind;
EXEC SQL END DECLARE SECTION;
/* inizializza la variabile host e gli indicatori */
strcpy(dadFileName,"e:/dxx/samples/dad/getstart_xcollection.dad");
strcpy(serviceName, "myService");
strcpy(policyName, "myPolicy");
status[0]=\0;
serviceName_ind=0;
policyName_ind=0;
dadFileName_ind=0;
status_ind=-1;
/* Richiama la procedura memorizzata */
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 243
EXEC SQL CALL db2xml.dxxmqShredAll(:serviceName:serviceName_ind,
:policyName:policyName_ind,
:dadFileName:dadFileName_ind,
:status:status_ind);
Argomenti correlati:
v “Procedure memorizzate XML Extender e funzioni per MQSeries - Panoramica”
a pagina 207
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxmqShredCLOB
Scopo:
Decompone un documento XML in entrata da una coda messaggi, in base a
un’associazione di file DAD e memorizza il contenuto degli attributi ed elementi
XML nelle tabelle DB2 specificate. Il tipo di documento in entrata è XMLCLOB.
Per dxxmqShredCLOB, tutte le tabelle specificate nel file DAD devono essere
presenti e tutte le colonne e i tipi di dati specificati in DAD devono essere coerenti
con le tabelle esistenti. Questa procedura memorizzata richiede che le colonne
specificate nella condizione di unione di DAD, corrispondano alle relazioni di
chiavi primaria-esterna nelle tabelle esistenti. Le colonne della condizione di
unione specificate in RDB_node dell’element_node devono essere presenti nelle
tabelle.
Sintassi:
dxxmqShredCLOB(varchar(48) serviceName, /* input */
varchar(48) policyName, /* input */
varchar(80) dadFileName, /* input */
varchar(10) status) /* output */
Parametri:
Tabella 82. Parametri dxxmqShredCLOB
Parametro Descrizione Parametro
IN/OUT
serviceName Una stringa contenente la destinazione
MQSeries logica a cui inviare i messaggi.
Quando è presente serviceName, esso si
riferisce al punto di servizio definito nel
file di repository AMT.XML.
DB2.DEFAULT.SERVICE viene utilizzato
quando non si specifica serviceName. La
dimensione massima di serviceName è 48
byte.
IN
244 XML Extender - Amministrazione e programmazione
Tabella 82. Parametri dxxmqShredCLOB (Continua)
Parametro Descrizione Parametro
IN/OUT
policyName Una stringa contenente il criterio di
servizio MQSeries AMI utilizzato per
gestire i messaggi. Quando specificato,
policyName si riferisce a un criterio
definito nel file di repository AMT.XML.
Se policyName non è specificato, verrà
utilizzato DB2.DEFAULT.POLICY. La
dimensione massima di policyName è 48
byte.
IN
dadFileName Il nome del file DAD. La dimensione
massima è 80 byte.
IN
stato Il testo e i codici restituiti che specificano
se la procedura è stata eseguita
correttamente o meno, i codici di errore
generati e il numero di documenti XML
ricevuti o inviati alla coda messaggi.
OUT
Argomenti correlati:
v “Procedure memorizzate XML Extender e funzioni per MQSeries - Panoramica”
a pagina 207
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxmqShredAllCLOB
Scopo:
Decompone un documento XML in entrata da una coda messaggi, in base a
un’associazione di file DAD e memorizza il contenuto degli attributi ed elementi
XML nelle tabelle database DB2 specificate.
Per dxxmqShredAllCLOB, tutte le tabelle specificate nel file DAD devono essere
presenti e tutte le colonne e i tipi di dati specificati in DAD devono essere coerenti
con le tabelle esistenti. Questa procedura memorizzata richiede che le colonne
specificate nella condizione di unione di DAD, corrispondano alle relazioni di
chiavi primaria-esterna nelle tabelle esistenti. Le colonne della condizione di
unione specificate in RDB_node dell’element_node devono essere presenti nelle
tabelle.
Sintassi:
dxxmqShredCLOB(varchar(48) serviceName, /* input */
varchar(48) policyName, /* input */
varchar(80) dadFileName, /* input */
varchar(10) status) /* output */
Parametri:
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 245
Tabella 83. Parametri dxxmqShredAllCLOB
Parametro Descrizione Parametro
IN/OUT
serviceName Una stringa contenente la destinazione
MQSeries logica a cui inviare i messaggi.
Quando è presente serviceName, esso si
riferisce al punto di servizio definito nel
file di repository AMT.XML.
DB2.DEFAULT.SERVICE viene utilizzato
quando non si specifica serviceName. La
dimensione massima di serviceName è 48
byte.
IN
policyName Una stringa contenente il criterio di
servizio MQSeries AMI utilizzato per
gestire i messaggi. Quando specificato,
policyName si riferisce a un criterio
definito nel file di repository AMT.XML.
Se policyName non è specificato, verrà
utilizzato DB2.DEFAULT.POLICY. La
dimensione massima di policyName è 48
byte.
IN
dadFileName Il nome del file DAD. La dimensione
massima è 80 byte.
IN
stato Il testo e i codici restituiti che specificano
se la procedura è stata eseguita
correttamente o meno, i codici di errore
generati e il numero di documenti XML
ricevuti o inviati alla coda messaggi.
OUT
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxmqInsert
Scopo:
Interrompe o suddivide un documento XML in entrata da una coda messaggi e
memorizza i dati nelle tabelle database nuove o esistenti. dxxmqInsert utilizza un
nome di raccolta anziché un nome file DAD, per determinare come memorizzare i
dati.
Sintassi:
dxxmqInsert(varchar(48) serviceName, /* input */
varchar(48) policyName, /* input */
varchar(80) collectionName, /* input */
varchar(20) status) /* output */
246 XML Extender - Amministrazione e programmazione
Parametri:
Tabella 84. Parametri dxxmqInsert()
Parametro Descrizione Parametro IN/OUT
serviceName Una stringa contenente la
destinazione MQSeries logica a cui
inviare i messaggi. Quando è
presente serviceName, esso si
riferisce al punto di servizio
definito nel file di repository
AMT.XML.
DB2.DEFAULT.SERVICE viene
utilizzato quando non si specifica
serviceName. La dimensione
massima di serviceName è 48 byte.
IN
policyName Una stringa contenente il criterio di
servizio MQSeries AMI utilizzato
per gestire i messaggi. Quando
specificato, policyName si riferisce a
un criterio definito nel file di
repository AMT.XML. Se policyName
non è specificato, verrà utilizzato
DB2.DEFAULT.POLICY. La
dimensione massima di policyName
è 48 byte.
IN
collectionName Il nome della raccolta XML
abilitata. La dimensione massima è
80 byte.
IN
stato Il testo e i codici restituiti che
specificano se la procedura è stata
eseguita correttamente o meno, i
codici di errore generati e il numero
di documenti XML ricevuti o inviati
alla coda messaggi.
OUT
Esempi:
Nel seguente esempio di frammentazione, la chiamata dxxmqInsert richiama il
documento XML di input order1.xml da una coda messaggi definita da
serviceName, deframmenta il documento e inserisce i dati nelle tabelle di raccolta
SALES_ORDER, secondo l’associazione specificata nel file DAD con cui è stata
abilitata.
#include "dxx.h"
#include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char serviceName[48];
char policyName[48];
char collection[80]; /* nome di una raccolta XML */
char status[10];
short serviceName_ind;
short policyName_ind;
short collection_ind;
short status_ind;
EXEC SQL END DECLARE SECTION;
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 247
/* inizializza la variabile host e gli indicatori */
strcpy(serviceName, "myService");
strcpy(policyName, "myPolicy");
strcpy(collection,"sales_ord")
status[0]=\0;
serviceName_ind = 0;
policyName_ind = 0;
collection_ind = 0;
status_ind = -1;
/* Richiama la procedura memorizzata */
EXEC SQL CALL db2xml.dxxmqInsert(:serviceName:serviceName_ind,
:policyName:policyName_ind,
:collection:collection_ind,
:status:status_ind);
Argomenti correlati:
v “Procedure memorizzate XML Extender e funzioni per MQSeries - Panoramica”
a pagina 207
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxmqInsertCLOB
Scopo:
Interrompe o suddivide un documento XML in entrata da una coda messaggi e
memorizza i dati nelle tabelle database nuove o esistenti. dxxmqInsertAllCLOB
utilizza un nome di raccolta anziché un nome file DAD, per determinare come
memorizzare i dati. Il tipo di documento in entrata è XMLCLOB.
Sintassi:
dxxmqInsertCLOB(varchar(48) serviceName, /* input */
varchar(48) policyName, /* input */
varchar(80) collectionName, /* input */
varchar(20) status) /* output */
Parametri:
Tabella 85. Parametri dxxmqInsertCLOB()
Parametro Descrizione Parametro IN/OUT
serviceName Una stringa contenente la
destinazione MQSeries logica a cui
inviare i messaggi. Quando è
presente serviceName, esso si
riferisce al punto di servizio
definito nel file di repository
AMT.XML.
DB2.DEFAULT.SERVICE viene
utilizzato quando non si specifica
serviceName. La dimensione
massima di serviceName è 48 byte.
IN
248 XML Extender - Amministrazione e programmazione
Tabella 85. Parametri dxxmqInsertCLOB() (Continua)
Parametro Descrizione Parametro IN/OUT
policyName Una stringa contenente il criterio di
servizio MQSeries AMI utilizzato
per gestire i messaggi. Quando
specificato, policyName si riferisce a
un criterio definito nel file di
repository AMT.XML. Se policyName
non è specificato, verrà utilizzato
DB2.DEFAULT.POLICY. La
dimensione massima di policyName
è 48 byte.
IN
collectionName Il nome della raccolta XML
abilitata.
IN
stato Il testo e i codici restituiti che
specificano se la procedura è stata
eseguita correttamente o meno, i
codici di errore generati e il numero
di documenti XML ricevuti o inviati
alla coda messaggi.
OUT
Esempi:
Nel seguente esempio di frammentazione, la chiamata dxxmqInsertCLOB richiama
il documento XML di input order1.xml da una coda messaggi definita da
serviceName, deframmenta il documento e inserisce i dati nelle tabelle di raccolta
SALES_ORDER, secondo l’associazione specificata nel file DAD con cui è stata
abilitata.
#include "dxx.h"
#include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char serviceName[48];
char policyName[48];
char collection[48]; /* nome di una raccolta XML */
char status[10];
short serviceName_ind;
short policyName_ind;
short collection_ind;
short status_ind;
EXEC SQL END DECLARE SECTION;
/* inizializza la variabile host e gli indicatori */
strcpy(serviceName, "myService");
strcpy(policyName, "myPolicy");
strcpy(collection,"sales_ord")
status[0] = \0;
serviceName_ind = 0;
policyName_ind = 0;
collection_ind = 0;
status_ind = -1;
/* Richiama la procedura memorizzata */
EXEC SQL CALL db2xml.dxxmqInsertCLOB(:serviceName:serviceName_ind;
:policyName:policyName_ind,
:collection:collection_ind,
:status:status_ind);
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 249
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxmqInsertAll
Scopo:
Interrompe o suddivide tutti i documenti XML in entrata da una coda messaggi e
memorizza i dati nelle tabelle database nuove o esistenti. dxxmqInsertAll utilizza
un nome di raccolta anziché un nome file DAD, per determinare come
memorizzare i dati.
Sintassi:
dxxmqInsertAll(varchar(48) serviceName, /* input */
varchar(48) policyName, /* input */
varchar(48) collectionName, /* input */
varchar(20) status) /* output */
Parametri:
Tabella 86. Parametri dxxmqInsertAll()
Parametro Descrizione Parametro IN/OUT
serviceName Una stringa contenente la
destinazione MQSeries logica a cui
inviare i messaggi. Quando è
presente serviceName, esso si
riferisce al punto di servizio
definito nel file di repository
AMT.XML.
DB2.DEFAULT.SERVICE viene
utilizzato quando non si specifica
serviceName. La dimensione
massima di serviceName è 48 byte.
IN
policyName Una stringa contenente il criterio di
servizio MQSeries AMI utilizzato
per gestire i messaggi. Quando
specificato, policyName si riferisce a
un criterio definito nel file di
repository AMT.XML. Se policyName
non è specificato, verrà utilizzato
DB2.DEFAULT.POLICY. La
dimensione massima di policyName
è 48 byte.
IN
collectionName Il nome della raccolta XML
abilitata. La dimensione massima è
80 byte.
IN
stato Il testo e i codici restituiti che
specificano se la procedura è stata
eseguita correttamente o meno, i
codici di errore generati e il numero
di documenti XML ricevuti o inviati
alla coda messaggi.
OUT
Esempi:
250 XML Extender - Amministrazione e programmazione
Nel seguente esempio di frammentazione, la chiamata dxxmqInsertAll richiama
tutti i documenti XML di input da una coda messaggi definita da serviceName,
deframmenta i documenti e inserisce i dati nelle tabelle di raccolta SALES_ORDER,
secondo l’associazione specificata nel file DAD con cui è stata abilitata.
#include "dxx.h"
#include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char serviceName[48];
char policyName[48];
char collection[80]; /* nome di una raccolta XML */
char status[10];
short serviceName_ind;
short policyName_ind;
short collection_ind;
short status_ind;
EXEC SQL END DECLARE SECTION;
/* inizializza la variabile host e gli indicatori */
strcpy(serviceName, "myService");
strcpy(policyName, "myPolicy");
strcpy(collection,"sales_ord");
status[0]=’\0’;
serviceName_ind = 0;
policyName_ind = 0;
collection_ind = 0;
status_ind = -1;
/* Richiama la procedura memorizzata */
EXEC SQL CALL db2xml.dxxmqInsertAll(:serviceName:serviceName_ind,
:policyName:policyName_ind,
:collection:collection_ind,
:status:status_ind);
Argomenti correlati:
v “Procedure memorizzate XML Extender e funzioni per MQSeries - Panoramica”
a pagina 207
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Procedura memorizzata dxxmqInsertAllCLOB
Scopo:
Interrompe o suddivide tutti i documenti XML in entrata da una coda messaggi e
memorizza i dati nelle tabelle database nuove o esistenti. La procedura
memorizzata dxxmqInsertAllCLOB utilizza un nome di raccolta anziché un nome
file DAD, per determinare come memorizzare i dati.
Sintassi:
dxxmqInsertAllCLOB(varchar(48) serviceName, /* input */
varchar(48) policyName, /* input */
varchar(48) collectionName, /* input */
varchar(20) status) /* output */
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 251
Parametri:
Tabella 87. Parametri dxxmqInsertAllCLOB()
Parametro Descrizione Parametro IN/OUT
serviceName Una stringa contenente la
destinazione MQSeries logica a cui
inviare i messaggi. Quando è
presente serviceName, esso si
riferisce al punto di servizio
definito nel file di repository
AMT.XML.
DB2.DEFAULT.SERVICE viene
utilizzato quando non si specifica
serviceName. La dimensione
massima di serviceName è 48 byte.
IN
policyName Una stringa contenente il criterio di
servizio MQSeries AMI utilizzato
per gestire i messaggi. Quando
specificato, policyName si riferisce a
un criterio definito nel file di
repository AMT.XML. Se policyName
non è specificato, verrà utilizzato
DB2.DEFAULT.POLICY. La
dimensione massima di policyName
è 48 byte.
IN
collectionName Il nome della raccolta XML
abilitata.
IN
stato Il testo e i codici restituiti che
specificano se la procedura è stata
eseguita correttamente o meno, i
codici di errore generati e il numero
di documenti XML ricevuti o inviati
alla coda messaggi.
OUT
Esempi:
Nel seguente esempio di frammentazione, la chiamata dxxmqInsertAllCLOB
richiama tutti i documenti XML di input da una coda messaggi definita da
serviceName, deframmenta i documenti e inserisce i dati nelle tabelle di raccolta
SALES_ORDER, secondo l’associazione specificata nel file DAD con cui è stata
abilitata.
#include "dxx.h"
#include "dxxrc.h"
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
char serviceName[48];
char policyName[48];
char collection[48]; /* nome di una raccolta XML */
char status[10];
short serviceName_ind;
short policyName_ind;
short collection_ind;
short status_ind;
EXEC SQL END DECLARE SECTION;
/* inizializza la variabile host e gli indicatori */
strcpy(serviceName, "myService");
252 XML Extender - Amministrazione e programmazione
strcpy(policyName, "myPolicy");
strcpy(collection,"sales_ord")
status[0] = ’\0’;
serviceName_ind = 0;
policyName_ind = 0;
collection_ind = 0;
status_ind = -1;
/* Richiama la procedura memorizzata */
EXEC SQL CALL db2xml.dxxmqInsertAllCLOB(:serviceName:serviceName_ind;
:policyName:policyName_ind,
:collection:collection_ind,
:status:status_ind);
Riferimenti correlati:
v Appendice C, “Limiti di XML Extender”, a pagina 305
Capitolo 11. Procedure memorizzate e funzioni di XML Extender per MQSeries 253
254 XML Extender - Amministrazione e programmazione
Capitolo 12. XSLT (extensible stylesheet language
transformation)
Creazione di un documento HTML utilizzando un foglio di stile XSLT
XSLT (Extensible stylesheet language transformation) consiste in serie di markup
che possono essere utilizzate per applicare le regole di formattazione per ognuno
degli elementi interni ad un documento XML. XSL funziona con l’applicazione di
varie regole di stile ai contenuti di un documento XML basato sugli elementi che
incontra. Dal punto di vista della progettazione, i fogli di stile XSLT sono normali
documenti XML.
Originariamente creati per il layout di pagina, XSLT viene ora utilizzato in molti
modi. Ad esempio, può essere utilizzato come uno strumento di traduzione a
scopo generale, come sistema per riorganizzare il contenuto del documento o come
un modo per generare risultati multipli da una singola origine come ad esempio
HTML, WAP e SVG.
XSLT è un passaggio critico tra l’elaborazione XML e linguaggi più familiari come
ad esempio HTML. XSLT consente di effettuare le seguenti operazioni:
v Trasformare una struttura XML in altri tipi di dati rimuovendo o sostituendo le
tag XML
v Modificare l’ordine delle informazioni
v Estrarre informazioni speciali
v Ordinare le informazioni
Prerequisiti:
Prima di trasformare un documento XML in HTML, completare le seguenti
operazioni:
1. Inserire un documento XML nella colonna doc della tabella result_tab.
2. Creare un foglio di stile.
E’ possibile creare il relativo file HTML utilizzando i file UDF XSLTransformToFile
o XSLTransformToClob. Il primo restituisce il documento HTML in un file mentre il
secondo lo restituisce come CLOB
Procedura:
Per creare il relativo documento HTML come un file, utilizzare la seguente sintassi:
SELECT XSLTransformToFile( CAST(doc AS CLOB(4k)),
’install_dxx\samples\extenders\db2xml\xslt\getstart.xsl’,
0,
’html\getstart.html’)
FROM RESULT_TAB
dove install_dxx e la directory dove è installato DB2 XML Extender.
Per comodità, il file di comando degli esempi, install_dxx\samples\extenders\db2xml\getstart_xslt.cmd, effettua il setup e richiama XSLTransformToFile.
Riferimenti correlati:
© Copyright IBM Corp. 1999 - 2006 255
v “Funzione XSLTransformToFile() definita dall’utente” a pagina 257
v “Funzione XSLTransformToClob() definita dall’utente”
Funzione XSLTransformToClob() definita dall’utente
Scopo:
XSLTransformToClob() legge un documento XML come indicatore di posizione
CLOB e un foglio di stile come CLOB o da un file e restituisce il documento come
CLOB.
Sintassi:
�� XSLTransformToClob ( xmlobj , stylesheet , validate )
,
param ��
Parametri:
Parametro Tipo di dati Descrizione
xmlobj CLOB Il documento XML
stylesheet CLOB,
VARCHAR
Il foglio di stile
Il percorso e il nome del file
di input del foglio di stile
param CLOB
VARCHAR
Il documento del parametro
XSLT.
Il percorso e il nome del file
di parametro XSLT.
validate INTEGER Abilitazione (1) o
disabilitazione (0) convalida
di xmlobj
Risultati:
XSLTransformToClob() restituisce un dato di tipo CLOB, in caso di esito positivo.
Esempi:
Il seguente esempio crea una tabella, xslt_tab, in cui vengono inseriti il contenuto
dei file getstart.xml (il documento XML), getstart.xsl (il foglio di stile) e
xslt_param.xml (il documento del parametro XSLT).
CREATE TABLE xslt_tab(xmlobj CLOB(4k), stylesheet CLOB(4k), parameters CLOB(4k))
INSERT INTO xslt_tab(xmlobj, stylesheet, parameters)
VALUES( DB2XML.XMLCLOBFromFile(
install_dxx\samples\extenders\db2xml\xml\getstart.xml ),
DB2XML.XMLCLOBFromFile(install_dxx\samples\extenders\db2xml\xslt\getstart.xsl ),
DB2XML.XMLCLOBFromFile(xslt_param.xml))
Creare un file denominato xslt_param.xml contenente le seguenti righe:
<?xml version="1.0"?>
<params xmlns="http://www.ibm.com.XSLtransformParameters">
<param name="noShipments" value="true"/>
<param name="headline">I clienti...</param>
</params>
.
.
.
256 XML Extender - Amministrazione e programmazione
Esempio 1: il seguente esempio converte un documento XML in un documento
HTML utilizzando il foglio di stile memorizzato nella tabella xslt_tab:
SELECT XSLTransformToClob(xmlobj, stylesheet, 0)
FROM xslt_tab
Esempio 2: questo esempio converte un documento XML in un documento HTML
utilizzando un file del foglio di stile
SELECT XSLTransformToClob( xmlobj,
c:\install_dxx\samples\extenders\db2xml\xslt\getstart.xsl’, 1)
FROM xslt_tab
Esempio 3: in questo esempio, l’output viene modificata da ulteriori parametri
memorizzati nella tabella xslt_tab. Il documento del parametro XSLT definisce il
namespace. I parametri devono essere convertiti nell’elemento <param>. Il valore
corrispondente può anche essere specificato in un attributo valore o nel contenuto
dell’elemento <param>.
SELECT XSLTransformToClob(
xmlobj,
’install_dxx\samples\extenders\db2xml\xslt\getstart.xsl’,
parameters,
1)
FROM xslt_tab
Dove install_dxx è la directory in cui è stato installato DB2 XML Extender.
Funzione XSLTransformToFile() definita dall’utente
Scopo:
Converte il documento XML in entrata con il foglio di stile e il documento del
parametro XSLT. Il documento XML convertito viene scritto in un file. Quando una
directory e un suffisso vengono passati come parametri, tale UDF crea un file con
il suffisso specificato nella directory indicata.
Sintassi:
�� XSLTransformToFile ( xmlobj , stylesheet ,
,
param validate , �
� filename )
,
dir
,
suffix ��
Parametri:
Tabella 88. Descrizioni di parametro XSLTransformDir()
Parametro Tipo di dati Descrizione
xmlobj CLOB Il documento XML
stylesheet CLOB
VARCHAR
Il foglio di stile
Il percorso e il nome del file
di input del foglio di stile
param CLOB
VARCHAR
Il documento del parametro
XSLT
Il percorso e il nome del file
di parametro XSLT
Capitolo 12. XSLT (extensible stylesheet language transformation) 257
Tabella 88. Descrizioni di parametro XSLTransformDir() (Continua)
Parametro Tipo di dati Descrizione
validate INTEGER Abilitazione (1) o
disabilitazione (0) convalida
di xmlobj
filename VARCHAR Il nome del file di output
dir VARCHAR La directory del file di output
suffix VARCHAR Il suffisso del file di output
Risultati:
XSLTransformToFile() restituisce VARCHAR per il nome file scritto.
Esempi:
Il seguente esempio crea una tabella, xslt_tab, in cui vengono inseriti il contenuto
dei file getstart.xml (il documento XML), getstart.xsl (il foglio di stile) e
xslt_param.xml (il documento del parametro XSLT).
CREATE TABLE xslt_tab(xmlobj CLOB(4k), stylesheet CLOB(4k), parameters CLOB(4k))
INSERT INTO xslt_tab(xmlobj, stylesheet, parameters)
VALUES( DB2XML.XMLCLOBFromFile(
install_dxx\samples\extenders\db2xml\xml\getstart.xml ),
DB2XML.XMLCLOBFromFile(install_dxx\samples\
extenders\db2xml\xslt\getstart.xsl ),
DB2XML.XMLCLOBFromFile(xslt_param.xml))
dove install_dxx è la directory in cui è stato installato DB2 XML Extender.
Creare un file denominato xslt_param.xml contenente le seguenti righe:
<?xml version="1.0"?>
<params xmlns="http://www.ibm.com.XSLtransformParameters">
<param name="noShipments" value="true"/>
<param name="headline">I clienti...</param>
</params>
.
.
.
Esempio 1: questo esempio converte il documento XML in un documento HTML e
scrive il documento creato nel filespecificato:
SELECT XSLTransformFile( xmlobj, stylesheet, 0
'install_dxx\samples\extenders\db2xml\html\getstart.html')
FROM xslt_tab
dove install_dxx è la directory in cui è stato installato DB2 XML Extender.
Esempio 2: questo esempio scrive un documento XML in un file, utilizzando un
file del foglio di stile. La convalida è abilitata, ma il risultato è lo stesso. Questa
funzione è necessaria per includere i valori predefiniti da uno schema XML nel
processo di conversione.
SELECT XSLTransformToFile(xmlobj,
’install_dxx\samples\extenders\db2xml\xslt\getstart.xsl’, 1,
’install_dxx\samples\extenders\db2xml\html\getstart.html’)
FROM xslt_tab
Dove install_dxx è la directory in cui è stato installato DB2 XML Extender.
Esempio 3: in questo esempio, l’output viene modificata da ulteriori parametri
memorizzati nella tabella xslt_tab. Il documento del parametro XSLT definisce il
258 XML Extender - Amministrazione e programmazione
namespace. I parametri devono essere convertiti nell’elemento <param>. Il valore
corrispondente può anche essere specificato in un attributo valore o nel contenuto
dell’elemento <param>.
SELECT XSLTransformToFile(
xmlobj,
’install_dxx\samples\extenders\db2xml\getstart.xsl’,
parameters, 1, ’install_dxx\samples\extenders\db2xml\getstart.html’)
FROM xslt_tab
Dove install_dxx è la directory in cui è stato installato DB2 XML Extender.
Esempio 4: questo esempio scrive il documento convertito in un file con un
suffisso .html suffix nella directory install_dxx\samples\extenders\db2xml\html
utilizzando il foglio di stile nella relativa colonna. Il nome file del documento
convertito è memorizzato in un’ulteriore colonna della tabella.
UPDATE TABLE xslt_tab ADD COLUMN filename VARCHAR(512)
UPDATE TABLE xslt_tab SET filename =
XSLTransformToFile(xmlobj,stylesheet, parameters, 1,
'install_dxx\samples\extenders\db2xml\html'
, ’html’)
FROM xslt_tab
Dove install_dxx è la directory in cui è stato installato DB2 XML Extender.
Capitolo 12. XSLT (extensible stylesheet language transformation) 259
260 XML Extender - Amministrazione e programmazione
Capitolo 13. Tabelle del supporto di gestione di XML Extender
Quando un database è abilitato, vengono create una tabella di repository DTD
(DTD_REF) e una tabella XML_USAGE. La tabella DTD_REF contiene informazioni
su tutti i DTD. La tabella XML_USAGE memorizza le informazioni comuni per
ogni colonna abilitata per XML.
Tabella di riferimento DTD
XML Extender può essere utilizzato anche come repository DTD di XML. Quando
un database è abilitato XML, viene creata una tabella di repository DTD, DTD_REF.
Ogni riga di questa tabella rappresenta un DTD con ulteriori informazioni sui
metadati. È possibile accedere a tale tabella e inserire i propri DTD. I DTD nella
tabella DTD_REF vengono utilizzati per convalidare i documenti XML e le
applicazioni di supporto per definire un file DAD. Tale tabella ha il nome schema
di DB2XML. Una tabella DTD_REF può contenere le colonne mostrate in
Tabella 89.
Tabella 89. Tabella DTD_REF
Nome colonna Tipo di dati Descrizione
DTDID VARCHAR(128) La chiave primaria (univoca e non NULL).
Viene utilizzata per identificare il DTD. Quando
si specifica il DTD nel file DAD, tale file deve
rispettare lo schema definito da DTD.
CONTENT XMLCLOB Il contenuto del DTD.
USAGE_COUNT INTEGER Il numero di colonne e di raccolte XML nel
database, che utilizzano il DTD per definire i
propri file DAD.
AUTHOR VARCHAR(128) L’autore del DTD. Queste informazioni sono
facoltative.
CREATOR VARCHAR(128) L’ID utente che esegue il primo inserimento.
Questa colonna è facoltativa.
UPDATOR VARCHAR(128) L’ID utente che esegue l’ultimo aggiornamento.
Questa colonna è facoltativa.
Un DTD può essere modificato dall’applicazione solo quando USAGE_COUNT è
zero.
Tabella di utilizzo XML (XML_USAGE)
La tabella XML_USAGE memorizza le informazioni comuni per ogni colonna
abilitata per XML. Il nome schema della tabella XML_USAGE è DB2XML e la
rispettiva chiave primaria è (nome_tabella, nome_col). Una tabella XML_USAGE
viene creata al momento in cui il database viene abilitato. Le colonne nella tabella
XML_USAGE vengono mostrate in Tabella 90 a pagina 262.
© Copyright IBM Corp. 1999 - 2006 261
Tabella 90. Tabella XML_USAGE
Nome colonna Descrizione
schema_tabella Per una colonna XML, il nome schema della
tabella utente che contiene una colonna
XML. Per una raccolta XML, il valore
DXX_COLL come nome schema predefinito.
nome_tabella Per una colonna XML, il nome della tabella
utente che contiene una colonna XML. Per
una raccolta XML, il valore
DXX_COLLECTION che identifica l’entità
come raccolta.
nome_col Il nome della colonna o raccolta XML. Fa
parte della chiave composta insieme al
nome_tabella.
DTDID Una stringa associata a un DTD inserito in
DTD_REF con un DTD specificato in un file
DAD; tale valore deve corrispondere al
valore dell’elemento DTDID in DAD. Questa
colonna è una chiave esterna.
DAD Il contenuto del file DAD associato alla
colonna o raccolta XML.
modalità_accesso Specifica quale modalità di accesso viene
utilizzata: 1 per la raccolta XML, 0 per la
colonna XML
vista_predefinita Memorizza il nome vista predefinito, se ne
esiste uno.
suffisso_trigger Non NULL. Per nomi trigger univoci.
convalida Ha il valore 1 per convalidare, 0 per ignorare
la convalida.
versione La versione trigger della colonna XML.
id_root L’ID_root della colonna XML.
qual_tab_lat Il qualificatore della tabella laterale.
Non aggiungere, modificare o eliminare voci dalla tabella XML_USAGE; essa è
stata progettata solo per un uso interno di XML Extender.
262 XML Extender - Amministrazione e programmazione
Capitolo 14. Risoluzione dei problemi
Risoluzione dei problemi relativi a XML Extender
Tutte le chiamate alle istruzioni SQL integrate nel programma e all’interfaccia della
riga comandi del database DB2, comprese quelle che richiamano le UDF di XML
Extender per il database DB2, generano codici che indicano se la chiamata
all’istruzione SQL integrata o alla CLI del database DB2 è stata eseguita
correttamente.
Il programma può richiamare informazioni aggiuntive che forniscono tali codici
che includono le informazioni e i messaggi di errore SQLSTATE. È possibile
utilizzare queste informazioni diagnostiche per isolare e correggere i problemi nel
programma.
A volte, la causa di un problema non può essere facilmente diagnosticata. In questi
casi, è necessario fornire informazioni all’IBM Software Support per isolare e
correggere il problema. XML Extender include una funzione di traccia che registra
ogni attività. Le informazioni di traccia possono essere un input per IBM Software
Support. È necessario utilizzare la funzione di traccia solo seguendo le istruzioni
del personale di IBM Software Support.
In questa sezione vengono descritti la funzione di traccia e i codici di errore e i
messaggi.
Riferimenti correlati:
v “Codici SQLSTATE e numeri di messaggi associati per XML Extender” a pagina
265
v “Avvio della traccia per XML Extender”
v “Arresto della traccia” a pagina 264
v “Messaggi di XML Extender” a pagina 270
Avvio della traccia per XML Extender
Scopo:
Registra l’attività del server XML Extender. Per avviare la traccia, applicare
l’opzione on a dxxtrc, insieme al profilo utente nome di una directory esistente che
contenga il file di traccia. Quando la traccia è stata abilitata, il file,
dxxINSTANCE.trc, viene inserito nella directory specificata. INSTANCE è il valore di
DB2INSTANCE. Ogni istanza DB2 ha il proprio file di log. Il file di traccia non ha
dimensioni limitate.
Sintassi:
Avvio della traccia:
�� dxxtrc on directory_traccia ��
Parametri:
© Copyright IBM Corp. 1999 - 2006 263
Tabella 91. Parametri di traccia
Parametro Descrizione
trace_directory Nome del percorso e della directory esistente
in cui si trova dxxINSTANCE.trc. Richiesto,
non predefinito.
Esempi:
Il seguente esempio dimostra l’avvio della traccia per un’istanza db2inst1. Il file di
traccia, dxxdb2inst1.trc, viene inserito nella directory /home/db2inst1/install_dxx/log.
dxxtrc on /home/db2inst1/install_dxx/log
Arresto della traccia
Scopo:
Disabilitare la traccia. Le informazioni di traccia non sono più registrate.
Consiglio: dal momento che la dimensione del file di log di traccia in esecuzione
non è limitata e può avere impatti sulle prestazioni, disattivare la traccia in un
ambiente di produzione.
Sintassi:
Arresto della traccia:
�� dxxtrc off ��
Esempi:
Questo esempio mostra che la funzione di traccia è disattivata.
dxxtrc off
Codici di ritorno delle UDF di XML Extender
Le istruzioni SQL integrate restituiscono dei codici nei campi SQLCODE,
SQLWARN e SQLSTATE della struttura SQLCA. Questa struttura è definita in un
file SQLCA INCLUDE.
Le chiamate alla CLI di DB2 restituiscono i valori di SQLCODE e SQLSTATE che è
possibile richiamare utilizzando la funzione SQLError.
Un valore di SQLCODE pari a 0 significa che l’istruzione è stata eseguita
correttamente (con possibili condizioni di avvertenza). Un valore positivo di
SQLCODE significa che l’istruzione è stata eseguita correttamente ma con una
avvertenza. Le istruzioni SQL integrate restituiscono anche informazioni
sull’avvertenza associata ai valori di SQLCODE 0 o positivo nel campo SQLWARN.
Un valore negativo di SQLCODE significa che si è verificato un errore.
DB2 associa un messaggio a ogni valore di SQLCODE. Se un’UDF di XML
Extender rileva una condizione di avvertenza o di errore, invia le informazioni
associate al DB2 per l’inclusione nel messaggio SQLCODE.
Le chiamate alle istruzioni SQL integrate e alla CLI del database DB2 che
richiamano le UDF di DB2 XML Extender possono restituire messaggi SQLCODE e
264 XML Extender - Amministrazione e programmazione
valori SQLSTATE univoci per tali UDF, ma il database DB2 restituisce questi valori
nello stesso modo in cui li restituisce per altre istruzioni SQL integrate o per altre
chiamate alla CLI. Pertanto, il modo in cui si accede a questi valori è lo stesso per
le istruzioni SQL integrate o per le chiamate alla CLI del database DB2 che non
avviano le UDF di XML Extender del database DB2.
Codici di ritorno delle procedure memorizzate di XML Extender
XML Extender fornisce dei codici di ritorno che consentono di risolvere i problemi
che si verificano per le procedure memorizzate. Quando si riceve un codice di
ritorno da una procedura memorizzata, controllare il file riportato di seguito,
costituito dal codice di ritorno e da un numero di messaggio di errore di XML
Extender con una costante simbolica.
install_dxx/include/dxxrc.h
Riferimenti correlati:
v “Codici SQLSTATE e numeri di messaggi associati per XML Extender”
Codici SQLSTATE e numeri di messaggi associati per XML Extender
Tabella 92. Codici SQLSTATE e numeri di messaggi associati
SQLSTATE Numero messaggio Descrizione
00000 DXXnnnnI Non si è verificato alcun errore.
01HX0 DXXD003W L’elemento o l’attributo specificato
nell’espressione del percorso non
esiste nel documento XML.
38X00 DXXC000E XML Extender non è riuscito ad
aprire il file specificato.
38X01 DXXA072E XML Extender ha tentato di
eseguire automaticamente il bind
del database prima di abilitarlo, ma
non ha trovato i file di bind.
DXXC001E XML Extender non è riuscito a
trovare il file specificato.
38X02 DXXC002E XML Extender non è riuscito a
leggere i dati del file specificato.
38X03 DXXC003E XML Extender non è riuscito a
scrivere i dati nel file specificato.
DXXC011E XML Extender non è riuscito a
scrivere i dati nel file di controllo
della traccia.
38X04 DXXC004E XML Extender non è riuscito a
utilizzare l’indicatore di posizione
specificato.
38X05 DXXC005E La dimensione del file è maggiore
della dimensione XMLVarchar e
XML Extender non è in grado di
importare tutti i dati dal file.
Capitolo 14. Risoluzione dei problemi 265
Tabella 92. Codici SQLSTATE e numeri di messaggi associati (Continua)
SQLSTATE Numero messaggio Descrizione
38X06 DXXC006E La del dimensione file è maggiore
della dimensione XMLCLOB e XML
Extender non è in grado di
importare tutti i dati dal file.
38X07 DXXC007E Il numero di byte nell’indicatore di
posizione LOB non corrisponde alla
dimensione del file.
38X08 DXXD001E Una funzione di estrazione scalare
ha utilizzato un percorso di
ubicazione che ricorre più volte.
Una funzione scalare può utilizzare
solo un percorso di ubicazione con
ricorrenza unica.
38X09 DXXD002E L’espressione del percorso presenta
errori di sintassi.
38X10 DXXG002E XML Extender non è riuscito ad
assegnare la memoria dal sistema
operativo.
38X11 DXXA009E Questa procedura memorizzata
viene utilizzata solo per una
colonna XML.
38X12 DXXA010E Durante l’abilitazione della colonna,
XML Extender non è riuscito a
trovare il DTD ID specificato nel file
DAD.
DXXQ060E XML Extender non è riuscito a
trovare SCHEMA ID durante
l’abilitazione della colonna.
SCHEMA ID corrisponde al valore
dell’attributo di ubicazione della tag
nonamespacelocation interna alla
tag schemabindings nel file DAD.
38X13 DXXQ072E XML Extender utilizza XML Parser
distribuito con XML Toolkit per
iSeries.
38X14 DXXD000E Si è tentato di memorizzare un
documento non valido in una
tabella. Convalida non riuscita.
38X15 DXXA056E L’elemento di validazione nel file
DAD (document access definition)
manca o non è valido.
DXXA057E L’attributo nome di una tabella
laterale nel file DAD (document
access definition) manca o non è
valido.
DXXA058E L’attributo nome di una colonna nel
file DAD (document access
definition) manca o non è valido.
DXXA059E L’attributo tipo di una colonna nel
file DAD (document access
definition) manca o non è valido.
266 XML Extender - Amministrazione e programmazione
Tabella 92. Codici SQLSTATE e numeri di messaggi associati (Continua)
SQLSTATE Numero messaggio Descrizione
DXXA060E L’attributo percorso di una colonna
nel file DAD (document access
definition) manca o non è valido.
DXXA061E L’attributo multi_occurrence di una
colonna nel file DAD (document
access definition) manca o non è
valido.
DXXQ000E Un elemento obbligatorio non è
presente nel file DAD (document
access definition).
DXXQ056E L’elemento o attributo specificato
non può essere associato ad una
colonna che è indicata come parte
di una chiave esterna. I valori dei
dati per le chiavi esterne sono
determinati dalle chiavi primarie;
l’elemento/attributo specificato nel
documento XML non deve essere
necessariamente associato ad una
tabella e colonna.
DXXQ057E Le tag schemabindings e ID DTD
non possono essere entrambe
presenti nel file DAD.
DXXQ058E Nel file DAD manca la tag
nonamespacelocation all’interno
della tag schemabindings.
DXXQ059E La tag doctype non può essere
presente all’interno della tag
XCollection nel DAD di validazione
schema.
DXXQ062E Questa condizione di errore è
solitamente causata da una specifica
multi_occurrence = YES mancante
per l’elemento element_node
principale dell’elemento o attributo
specificato.
DXXQ063E Il valore dell’attributo
multi_occurrence sull’elemento
element_node specificato nel file
DAD (document access definition)
manca o non è corretto. Il valore
deve essere ’yes’ o ’no’, non
sensibile al maiuscolo/minuscolo.
DXXQ064E Una colonna delle chiavi specificata
nella condizione join non era
associata ad alcun nodo di elementi
o attributi.
38X16 DXXG004E Ad una procedura memorizzata
XML è stato passato un valore null
per un parametro obbligatorio.
Capitolo 14. Risoluzione dei problemi 267
Tabella 92. Codici SQLSTATE e numeri di messaggi associati (Continua)
SQLSTATE Numero messaggio Descrizione
38X17 DXXQ001E L’istruzione SQL nel DAD
(document access definition) o
l’istruzione che viene sostituita non
è valida. È necessaria un’istruzione
SELECT per la creazione di
documenti XML.
38X18 DXXG001E XML Extender ha rilevato un errore
interno.
DXXG006E XML Extender ha rilevato un errore
interno durante l’utilizzo di CLI.
38X19 DXXQ002E La memoria o lo spazio su disco del
sistema si sta esaurendo. Non è
disponibile spazio sufficiente per
contenere i documenti XML
ottenuti.
38X20 DXXQ003W L’interrogazione SQL definita
dall’utente genera un numero di
documenti superiore al numero
massimo specificato. Viene restituito
solo il numero di documenti
specificato.
38X21 DXXQ004E La colonna specificata non è una
delle colonne comprese nei risultati
dell’interrogazione SQL.
38X22 DXXQ005E L’associazione dell’interrogazione
SQL a XML è errata.
38X23 DXXQ006E L’elemento attribute_node nel file
DAD (document access definition)
non presenta un attributo nome.
38X24 DXXQ007E L’elemento attribute_node nel file
DAD (document access definition)
non presenta un elemento colonna o
un RDB_node.
38X25 DXXQ008E L’elemento text_node nel file DAD
(document access definition) non
presenta un elemento colonna.
38X26 DXXQ009E Impossibile trovare la tabella dei
risultati specificata nel catalogo di
sistema.
38X27 DXXQ010E
DXXQ040E
E’ necessario che RDB_node di
attribute_node o di text_node
presenti una tabella.
DXXQ011E È necessario che RDB_node di
attribute_node o di text_node
presenti una colonna.
DXXQ017E Il documento XML generato da
XML Extender è troppo grande per
rientrare nella colonna della tabella
dei risultati.
DXXQ040E Il nome elemento specificato nel file
DAD non è corretto.
268 XML Extender - Amministrazione e programmazione
Tabella 92. Codici SQLSTATE e numeri di messaggi associati (Continua)
SQLSTATE Numero messaggio Descrizione
38X28 DXXQ012E XML Extender non è riuscito a
trovare l’elemento previsto durante
l’elaborazione della DAD.
DXXQ016E È necessario definire tutte le tabelle
nel RDB_node dell’elemento iniziale
del file DAD (document access
definition). Le tabelle dell’elemento
secondario devono corrispondere
alle tabelle definite nell’elemento
iniziale. Il nome tabella in questo
RDB_node non è ubicato
nell’elemento iniziale.
38X29 DXXQ013E La tabella o la colonna
dell’elemento deve presentare un
nome nel file DAD (document
access definition).
DXXQ015E La condizione dell’elemento
condizione nel file DAD (document
access definition) presenta un
formato non corretto.
DXXQ061E Il formato della rappresentazione in
stringa non è valido. Se la stringa è
un valore data, ora o data/ora, la
sintassi non è conforme al tipo di
dati.
38X30 DXXQ014E Un elemento element_node nel file
DAD (document access definition)
non presenta un attributo nome.
DXXQ018E Manca la clausola ORDER BY
nell’istruzione SQL in un file DAD
(document access definition) che
associa SQL a XML.
38X31 DXXQ019E L’elemento objids non presenta
alcun elemento colonna nel file
DAD (document access definition)
che associ SQL a XML.
38X33 DXXG005E Questo parametro non è supportato
in questo release. Verrà supportato
nel release successivo.
38X34 DXXG000E È stato specificato un nome file non
corretto.
38X36 DXXA073E Il bind del database non era stato
eseguito quando l’utente ha tentato
di abilitarlo.
38X37 DXXG007E La locale del sistema operativo del
server non corrisponde alla
codepage DB2.
38X38 DXXG008E Impossibile rilevare la locale del
sistema operativo del server nella
tabella delle code page.
Capitolo 14. Risoluzione dei problemi 269
Tabella 92. Codici SQLSTATE e numeri di messaggi associati (Continua)
SQLSTATE Numero messaggio Descrizione
38X41 DXXQ048E Il processore del foglio di stile ha
rilevato un errore interno. Il
documento XML oppure il foglio di
stile potrebbero non essere validi.
38X42 DXXQ049E Il file di output specificato esiste già
nella directory.
38X43 DXXQ050E La UDF non è riuscita a creare un
nome file univoco per il documento
di output nella directory specificata
in quanto non dispone dell’accesso
richiesto. I nomi file da generare
sono in uso oppure la directory non
esiste.
38X44 DXXQ051E Uno o più parametri di input o di
output non presentano valori validi.
38X45 DXXQ055E Si è verificato un errore ICU
durante un’operazione di
conversione.
Messaggi di XML Extender
DXXA000I Abilitazione della colonna
<nome_colonna. Attendere.
Spiegazione: Si tratta di un messaggio informativo.
Risposta dell’utente: Non è richiesta alcuna azione.
DXXA001S Si è verificato un errore imprevisto nel
build <ID build>, file <nome file>, riga
<numero riga>.
Spiegazione: Si è verificato un errore non previsto.
Risposta dell’utente: Se l’errore persiste, contattare
l’assistenza tecnica. Quando l’errore viene notificato,
includere l’intero testo del messaggio, il file di traccia e
la spiegazione su come riprodurre il problema.
DXXA002I Connessione al database <database> in
corso.
Spiegazione: Si tratta di un messaggio informativo.
Risposta dell’utente: Non è richiesta alcuna azione.
DXXA003E Impossibile connettersi al database
<database>.
Spiegazione: È possibile che il database specificato
non esista o sia danneggiato.
Risposta dell’utente:
1. Accertarsi che il database sia specificato
correttamente.
2. Verificare che il database esista e sia accessibile.
3. Stabilire se il database è danneggiato. In tal caso,
richiedere al responsabile del database di
ripristinarlo da un backup.
DXXA004E Impossibile abilitare il database
<database>.
Spiegazione: È possibile che il database sia già
abilitato o danneggiato.
Risposta dell’utente:
1. Stabilire se il database è già abilitato.
2. Stabilire se il database è danneggiato. In tal caso,
richiedere al responsabile del database di
ripristinarlo da un backup.
DXXA005I Abilitazione del database <database> in
corso. Attendere.
Spiegazione: Si tratta di un messaggio informativo.
Risposta dell’utente: Non è richiesta alcuna azione.
DXXA006I Il database <database> è stato abilitato
correttamente.
Spiegazione: Si tratta di un messaggio informativo.
Risposta dell’utente: Non è richiesta alcuna azione.
DXXA007E Impossibile disabilitare il database
<database>.
270 XML Extender - Amministrazione e programmazione
Spiegazione: Il database non può essere disabilitato
da XML Extender se contiene colonne o raccolte XML.
Risposta dell’utente: Eseguire il backup dei dati
importanti, disabilitare le colonne o le raccolte XML e
aggiornare o cancellare le tabelle in modo da eliminare
tutti i tipi di dati XML dal database.
DXXA008I Disabilitazione della colonna <nome
colonna> in corso. Attendere.
Spiegazione: Si tratta di un messaggio informativo.
Risposta dell’utente: Non è richiesta alcuna azione.
DXXA009E La tag Xcolumn non è specificata nel
file DAD.
Spiegazione: Questa procedura memorizzata viene
utilizzata solo per la colonna XML.
Risposta dell’utente: Accertarsi che la tag Xcolumn
sia specificata correttamente nel file DAD.
DXXA010E Impossibile trovare l’ID DTD <id dtd>.
Spiegazione: Durante l’abilitazione della colonna,
XML Extender non è riuscito a trovare il DTD ID
specificato nel file DAD.
Risposta dell’utente: Accertarsi che sia specificato il
valore corretto per il DTD ID nel file DAD.
DXXA011E L’inserimento nella tabella
DB2XML.XML_USAGE non ha avuto
esito positivo.
Spiegazione: Durante l’abilitazione della colonna,
XML Extender non è riuscito ad inserire un record nella
tabella DB2XML.XML_USAGE.
Risposta dell’utente: Accertarsi che la tabella
DB2XML.XML_USAGE esista e che non contenga già
un record con lo stesso nome.
DXXA012E Il tentativo di aggiornamento della
tabella DB2XML.DTD_REF non ha
avuto esito positivo.
Spiegazione: Durante l’abilitazione della colonna,
XML Extender non è riuscito ad aggiornare la tabella
DB2XML.DTD_REF.
Risposta dell’utente: Accertarsi che la tabella
DB2XML.DTD_REF esista. Verificare se la tabella è
danneggiata o se l’ID utente di gestione dispone
dell’autorizzazione appropriata per aggiornare la
tabella.
DXXA013E Il tentativo di modifica della tabella
<nome tabella> non ha avuto esito
positivo.
Spiegazione: Durante l’abilitazione della colonna,
XML Extender non è riuscito a modificare la tabella
specificata.
Risposta dell’utente: Controllare i privilegi necessari
per modificare la tabella.
DXXA014E La colonna ID root specificata: <id root>
non è una chiave primaria singola della
tabella <nome tabella>.
Spiegazione: L’ID root specificato non è una chiave o
non è una chiave singola della tabella nome tabella.
Risposta dell’utente: Accertarsi che l’ID root
specificato rappresenti la chiave primaria singola della
tabella.
DXXA015E La colonna DXXROOT_ID esiste già
nella tabella <nome tabella>.
Spiegazione: La colonna DXXROOT_ID esiste, ma non
è stata creata da XML Extender.
Risposta dell’utente: Specificare una colonna primaria
per l’opzione ID root durante l’abilitazione della
colonna, utilizzando un nome colonna differente.
DXXA016E La tabella di input <nome tabella> non
esiste.
Spiegazione: XML Extender non è riuscito a trovare la
tabella specificata nel catalogo di sistema.
Risposta dell’utente: Accertarsi che la tabella esista
nel database e che sia stata specificata correttamente.
DXXA017E La colonna di input <nome colonna> non
esiste nella tabella specificata <nome
tabella>.
Spiegazione: XML Extender non è riuscito a trovare la
colonna nel catalogo di sistema.
Risposta dell’utente: Accertarsi che una tabella utente
contenga la colonna.
DXXA018E La colonna specificata non è abilitata
per i dati XML.
Spiegazione: Durante la disabilitazione della colonna,
XML Extender non è riuscito a trovare la colonna nella
tabella DB2XML.XML_USAGE che indica che la
colonna non è abilitata. Se la colonna non è abilitata
per XML, non occorre disabilitarla.
Risposta dell’utente: Non è richiesta alcuna azione.
Capitolo 14. Risoluzione dei problemi 271
DXXA019E Un parametro di input richiesto per
abilitare la colonna è null.
Spiegazione: Un parametro di input per la procedura
memorizzata enable_column() è null.
Risposta dell’utente: Controllare tutti i parametri di
input per la procedura memorizzata enable_column().
DXXA020E Impossibile trovare le colonne nella
tabella <nome tabella>.
Spiegazione: Durante la creazione della vista
predefinita, XML Extender non è riuscito a trovare le
colonne nella tabella specificata.
Risposta dell’utente: Accertarsi che i nomi tabella e
colonna vengano specificati correttamente.
DXXA021E Impossibile creare la vista predefinita
<vista predefinita>.
Spiegazione: Durante l’abilitazione di una colonna,
XML Extender non è riuscito a creare la vista
specificata.
Risposta dell’utente: Accertarsi che il nome della vista
predefinita sia univoco. Se esiste già una vista con lo
stesso nome, specificare un nome univoco per la vista
predefinita.
DXXA022I La colonna <nome colonna> è stata
abilitata.
Spiegazione: Si tratta di un messaggio informativo.
Risposta dell’utente: Non è richiesta alcuna risposta.
DXXA023E Impossibile trovare il file DAD.
Spiegazione: Durante la disabilitazione di una
colonna, XML Extender non è riuscito a trovare il file
DAD.
Risposta dell’utente: Accertarsi che vengano
specificati i nomi database, tabella e colonna corretti.
DXXA024E XML Extender ha rilevato un errore
interno durante l’accesso alle tabelle di
catalogo del sistema.
Spiegazione: XML Extender non è riuscito ad accedere
alla tabella di catalogo del sistema.
Risposta dell’utente: Accertarsi che il database risulti
in uno stato stabile.
DXXA025E Impossibile cancellare la vista
predefinita <vista predefinita>.
Spiegazione: Durante la disabilitazione di una
colonna, XML Extender non è riuscito a cancellare la
vista predefinita.
Risposta dell’utente: Accertarsi che l’ID utente di
gestione per XML Extender disponga dei privilegi
necessari per cancellare la vista predefinita.
DXXA026E Impossibile cancellare la tabella laterale
<tabella laterale>.
Spiegazione: Durante la disabilitazione di una
colonna, XML Extender non è riuscito a cancellare la
tabella specificata.
Risposta dell’utente: Accertarsi che l’ID utente di
gestione per XML Extender disponga dei privilegi
necessari per cancellare la tabella laterale.
DXXA027E Non è stato possibile disabilitare la
colonna.
Spiegazione: XML Extender non è riuscito a
disabilitare una colonna in quanto un trigger interno
non è stato eseguito regolarmente. Cause possibili:
v Il sistema ha esaurito la memoria.
v Non esiste un trigger con questo nome.
Risposta dell’utente: Utilizzare la funzione di traccia
per creare un file di traccia ed eliminare il problema. Se
il problema persiste, contattare l’assistenza tecnica e
fornire il file di traccia.
DXXA028E Non è stato possibile disabilitare la
colonna.
Spiegazione: XML Extender non è riuscito a
disabilitare una colonna in quanto un trigger interno
non è stato eseguito regolarmente. Cause possibili:
v Il sistema ha esaurito la memoria.
v Non esiste un trigger con questo nome.
Risposta dell’utente: Utilizzare la funzione di traccia
per creare un file di traccia ed eliminare il problema. Se
il problema persiste, contattare l’assistenza tecnica e
fornire il file di traccia.
DXXA029E Non è stato possibile disabilitare la
colonna.
Spiegazione: XML Extender non è riuscito a
disabilitare una colonna in quanto un trigger interno
non è stato eseguito regolarmente. Cause possibili:
v Il sistema ha esaurito la memoria.
v Non esiste un trigger con questo nome.
Risposta dell’utente: Utilizzare la funzione di traccia
per creare un file di traccia ed eliminare il problema. Se
il problema persiste, contattare l’assistenza tecnica e
fornire il file di traccia.
272 XML Extender - Amministrazione e programmazione
DXXA030E Non è stato possibile disabilitare la
colonna.
Spiegazione: XML Extender non è riuscito a
disabilitare una colonna in quanto un trigger interno
non è stato eseguito regolarmente. Cause possibili:
v Il sistema ha esaurito la memoria.
v Non esiste un trigger con questo nome.
Risposta dell’utente: Utilizzare la funzione di traccia
per creare un file di traccia ed eliminare il problema. Se
il problema persiste, contattare l’assistenza tecnica e
fornire il file di traccia.
DXXA031E Impossibile reimpostare il valore della
colonna DXXROOT_ID nella tabella
applicativa su NULL.
Spiegazione: Durante la disabilitazione di una
colonna, XML Extender non è riuscito a impostare il
valore DXXROOT_ID su NULL nella tabella
applicativa.
Risposta dell’utente: Accertarsi che l’ID utente di
gestione per XML Extender disponga dei privilegi
necessari per modificare la tabella applicativa.
DXXA032E La riduzione del valore
USAGE_COUNT nella tabella
DB2XML.XML_USAGE non ha avuto
esito positivo.
Spiegazione: Durante la disabilitazione della colonna,
XML Extender non è riuscito a ridurre il valore della
colonna USAGE_COUNT.
Risposta dell’utente: Accertarsi che la tabella
DB2XML.XML_USAGE esista e che l’ID utente di
gestione per XML Extender disponga dei privilegi
necessari per aggiornarla.
DXXA033E Il tentativo di cancellazione di una riga
dalla tabella DB2XML.XML_USAGE
non ha avuto esito positivo.
Spiegazione: Durante la disabilitazione di una
colonna, XML Extender non è riuscito a cancellare la
riga corrispondente nella tabella
DB2XML.XML_USAGE.
Risposta dell’utente: Accertarsi che la tabella
DB2XML.XML_USAGE esista e che l’ID utente di
gestione per XML Extender disponga dei privilegi
necessari per aggiornarla.
DXXA034I XML Extender ha disabilitato la colonna
<nome colonna> con esito positivo.
Spiegazione: Si tratta di un messaggio informativo.
Risposta dell’utente: Non è richiesta alcuna azione.
DXXA035I XML Extender sta disabilitando il
database <database>. Attendere.
Spiegazione: Si tratta di un messaggio informativo.
Risposta dell’utente: Non è richiesta alcuna azione.
DXXA036I XML Extender ha disabilitato il database
<database> con esito positivo.
Spiegazione: Si tratta di un messaggio informativo.
Risposta dell’utente: Non è richiesta alcuna azione.
DXXA037E Il nome del tablespace specificato
supera i 18 caratteri.
Spiegazione: Il nome del tablespace non può superare
i 18 caratteri alfanumerici.
Risposta dell’utente: Specificare un nome inferiore a
18 caratteri.
DXXA038E Il nome vista predefinita specificato
supera i 18 caratteri.
Spiegazione: Il nome della vista predefinita non può
superare i 18 caratteri alfanumerici.
Risposta dell’utente: Specificare un nome inferiore a
18 caratteri.
DXXA039E Il nome ROOT_ID specificato supera i
18 caratteri.
Spiegazione: Il nome ROOT_ID non può superare i 18
caratteri alfanumerici.
Risposta dell’utente: Specificare un nome inferiore a
18 caratteri.
DXXA046E Impossibile creare la tabella laterale
<tabella laterale>.
Spiegazione: Durante l’abilitazione di una colonna,
XML Extender non è riuscito a creare la tabella laterale
specificata.
Risposta dell’utente: Accertarsi che l’ID utente di
gestione per XML Extender disponga dei privilegi
necessari per creare la tabella laterale.
DXXA047E Non è stato possibile abilitare la
colonna.
Spiegazione: XML Extender non è riuscito ad abilitare
una colonna in quanto un trigger interno non è stato
eseguito regolarmente. Cause possibili:
v Il file DAD ha una sintassi non corretta.
v Il sistema ha esaurito la memoria.
v Esiste un altro trigger con lo stesso nome.
Risposta dell’utente: Utilizzare la funzione di traccia
Capitolo 14. Risoluzione dei problemi 273
per creare un file di traccia ed eliminare il problema. Se
il problema persiste, contattare l’assistenza tecnica e
fornire il file di traccia.
DXXA048E Non è stato possibile abilitare la
colonna.
Spiegazione: XML Extender non è riuscito ad abilitare
una colonna in quanto un trigger interno non è stato
eseguito regolarmente. Cause possibili:
v Il file DAD ha una sintassi non corretta.
v Il sistema ha esaurito la memoria.
v Esiste un altro trigger con lo stesso nome.
Risposta dell’utente: Utilizzare la funzione di traccia
per creare un file di traccia ed eliminare il problema. Se
il problema persiste, contattare l’assistenza tecnica e
fornire il file di traccia.
DXXA049E Non è stato possibile abilitare la
colonna.
Spiegazione: XML Extender non è riuscito ad abilitare
una colonna in quanto un trigger interno non è stato
eseguito regolarmente. Cause possibili:
v Il file DAD ha una sintassi non corretta.
v Il sistema ha esaurito la memoria.
v Esiste un altro trigger con lo stesso nome.
Risposta dell’utente: Utilizzare la funzione di traccia
per creare un file di traccia ed eliminare il problema. Se
il problema persiste, contattare l’assistenza tecnica e
fornire il file di traccia.
DXXA050E Non è stato possibile abilitare la
colonna.
Spiegazione: XML Extender non è riuscito ad abilitare
una colonna in quanto un trigger interno non è stato
eseguito regolarmente. Cause possibili:
v Il file DAD ha una sintassi non corretta.
v Il sistema ha esaurito la memoria.
v Esiste un altro trigger con lo stesso nome.
Risposta dell’utente: Utilizzare la funzione di traccia
per creare un file di traccia ed eliminare il problema. Se
il problema persiste, contattare l’assistenza tecnica e
fornire il file di traccia.
DXXA051E Non è stato possibile disabilitare la
colonna.
Spiegazione: XML Extender non è riuscito a
disabilitare una colonna in quanto un trigger interno
non è stato eseguito regolarmente. Cause possibili:
v Il sistema ha esaurito la memoria.
v Non esiste un trigger con questo nome.
Risposta dell’utente: Utilizzare la funzione di traccia
per creare un file di traccia ed eliminare il problema. Se
il problema persiste, contattare l’assistenza tecnica e
fornire il file di traccia.
DXXA052E Non è stato possibile disabilitare la
colonna.
Spiegazione: XML Extender non è riuscito a
disabilitare una colonna in quanto un trigger interno
non è stato eseguito regolarmente. Cause possibili:
v Il file DAD ha una sintassi non corretta.
v Il sistema ha esaurito la memoria.
v Esiste un altro trigger con lo stesso nome.
Risposta dell’utente: Utilizzare la funzione di traccia
per creare un file di traccia ed eliminare il problema. Se
il problema persiste, contattare l’assistenza tecnica e
fornire il file di traccia.
DXXA053E Non è stato possibile abilitare la
colonna.
Spiegazione: XML Extender non è riuscito ad abilitare
una colonna in quanto un trigger interno non è stato
eseguito regolarmente. Cause possibili:
v Il file DAD ha una sintassi non corretta.
v Il sistema ha esaurito la memoria.
v Esiste un altro trigger con lo stesso nome.
Risposta dell’utente: Utilizzare la funzione di traccia
per creare un file di traccia ed eliminare il problema. Se
il problema persiste, contattare l’assistenza tecnica e
fornire il file di traccia.
DXXA054E Non è stato possibile abilitare la
colonna.
Spiegazione: XML Extender non è riuscito ad abilitare
una colonna in quanto un trigger interno non è stato
eseguito regolarmente. Cause possibili:
v Il file DAD ha una sintassi non corretta.
v Il sistema ha esaurito la memoria.
v Esiste un altro trigger con lo stesso nome.
Risposta dell’utente: Utilizzare la funzione di traccia
per creare un file di traccia ed eliminare il problema. Se
il problema persiste, contattare l’assistenza tecnica e
fornire il file di traccia.
DXXA056E Il valore di validazione <valore
validazione> nel file DAD non è corretto.
Spiegazione: L’elemento di validazione nel file DAD
(document access definition) manca o non è valido.
Risposta dell’utente: Accertarsi che l’elemento di
validazione sia specificato correttamente nel file DAD.
274 XML Extender - Amministrazione e programmazione
DXXA057E Un nome tabella laterale <nome tabella>
nel file DAD non è valido.
Spiegazione: L’attributo nome di una tabella laterale
nel file DAD (document access definition) manca o non
è valido.
Risposta dell’utente: Accertarsi che l’attributo nome
di una tabella laterale sia specificato correttamente nel
file DAD.
DXXA058E Un nome colonna <nome colonna> nel
file DAD non è valido.
Spiegazione: L’attributo nome di una colonna nel file
DAD (document access definition) manca o non è
valido.
Risposta dell’utente: Accertarsi che l’attributo nome
di una colonna sia specificato correttamente nel file
DAD.
DXXA059E Il tipo <tipo> della colonna <nome
colonna> nel file DAD non è valido.
Spiegazione: L’attributo tipo di una colonna nel file
DAD (document access definition) manca o non è
valido.
Risposta dell’utente: Accertarsi che l’attributo tipo di
una colonna sia specificato correttamente nel file DAD.
DXXA060E L’attributo percorso <percorso ubicazione>
di <nome colonna> nel file DAD non è
valido.
Spiegazione: L’attributo percorso di una colonna nel
file DAD (document access definition) manca o non è
valido.
Risposta dell’utente: Accertarsi che l’attributo
percorso di una colonna sia specificato correttamente
nel file DAD.
DXXA061E L’attributo multi_occurrence
<multi_occurrence> di <nome colonna> nel
file DAD non è valido.
Spiegazione: L’attributo multi_occurrence di una
colonna nel file DAD (document access definition)
manca o non è valido.
Risposta dell’utente: Accertarsi che l’attributo
multi_occurrence di una colonna sia specificato
correttamente nel file DAD.
DXXA062E Impossibile richiamare il numero di
colonna per <nome colonna> nella tabella
<nome tabella>.
Spiegazione: XML Extender non è riuscito a
richiamare il numero di colonna per nome colonna nella
tabella nome tabella dal catalogo di sistema.
Risposta dell’utente: Accertarsi che la tabella
applicativa sia definita correttamente.
DXXA063I Abilitazione della raccolta <nome
raccolta> in corso. Attendere.
Spiegazione: Si tratta di un messaggio informativo.
Risposta dell’utente: Non è richiesta alcuna azione.
DXXA064I Disabilitazione della raccolta <nome
raccolta> in corso. Attendere.
Spiegazione: Si tratta di un messaggio informativo.
Risposta dell’utente: Non è richiesta alcuna azione.
DXXA065E L’operazione di richiamo della
procedura memorizzata <nome procedura>
non ha avuto esito positivo.
Spiegazione: Esaminare la libreria condivisa db2xml e
verificare che l’autorizzazione sia corretta.
Risposta dell’utente: Accertarsi che il client disponga
dell’autorizzazione appropriata per eseguire la
procedura memorizzata.
DXXA066I XML Extender ha disabilitato la raccolta
<nome raccolta> con esito positivo.
Spiegazione: Si tratta di un messaggio informativo.
Risposta dell’utente: Non è richiesta alcuna risposta.
DXXA067I XML Extender ha abilitato la raccolta
<nome raccolta> con esito positivo.
Spiegazione: Si tratta di un messaggio informativo.
Risposta dell’utente: Non è richiesta alcuna risposta.
DXXA068I XML Extender ha attivato la funzione di
traccia con esito positivo.
Spiegazione: Si tratta di un messaggio informativo.
Risposta dell’utente: Non è richiesta alcuna risposta.
DXXA069I XML Extender ha disattivato la funzione
di traccia con esito positivo.
Spiegazione: Si tratta di un messaggio informativo.
Risposta dell’utente: Non è richiesta alcuna risposta.
DXXA070W Il database è già stato abilitato.
Spiegazione: Il comando enable database è stato
eseguito sul database abilitato.
Risposta dell’utente: Non è richiesta alcuna azione.
Capitolo 14. Risoluzione dei problemi 275
DXXA071W Il database è già stato disabilitato.
Spiegazione: Il comando disable database è stato
eseguito su un database disabilitato.
Risposta dell’utente: Non è richiesta alcuna azione.
DXXA072E XML Extender non ha trovato i file di
bind. Eseguire il bind del database
prima di abilitarlo.
Spiegazione: XML Extender ha tentato di eseguire
automaticamente il bind del database prima di
abilitarlo.
Risposta dell’utente: Eseguire il bind del database
prima di abilitarlo.
DXXA073E Non è stato eseguito il bind del
database. Eseguire il bind del database
prima di abilitarlo.
Spiegazione: Il bind del database non era stato
eseguito quando l’utente ha tentato di abilitarlo.
Risposta dell’utente: Eseguire il bind del database
prima di abilitarlo.
DXXA074E Tipo di parametro errato. La procedura
memorizzata prevede l’utilizzo del
parametro STRING.
Spiegazione: La procedura memorizzata prevede
l’utilizzo del parametro STRING.
Risposta dell’utente: Specificare STRING come tipo di
parametro di input.
DXXA075E Tipo di parametro errato. Il parametro di
input deve essere di tipo LONG.
Spiegazione: La procedura memorizzata prevede
l’utilizzo del parametro di input di tipo LONG.
Risposta dell’utente: Specificare LONG come tipo di
parametro di input.
DXXA076E ID di istanza di traccia XML Extender
non valido.
Spiegazione: Impossibile avviare una traccia con l’ID
di istanza fornito.
Risposta dell’utente: Accertarsi che l’ID di istanza sia
un ID utente iSeries valido.
DXXA077E La chiave di licenza non è valida.
Consultare la registrazione degli errori
del server per ulteriori informazioni.
Spiegazione: La licenza software è scaduta o non
esiste.
Risposta dell’utente: Contattare il fornitore del
software per ottenere una nuova licenza.
DXXC000E Impossibile aprire il file specificato.
Spiegazione: XML Extender non è riuscito ad aprire il
file specificato.
Risposta dell’utente: Accertarsi che l’ID utente
dell’applicazione disponga delle autorizzazioni di
scrittura e lettura sul file.
DXXC001E Il file specificato non è stato trovato.
Spiegazione: XML Extender non è riuscito a trovare il
file specificato.
Risposta dell’utente: Accertarsi che il file esista e che
il percorso sia stato specificato correttamente.
DXXC002E Impossibile leggere il file.
Spiegazione: XML Extender non è riuscito a leggere i
dati del file specificato.
Risposta dell’utente: Accertarsi che l’ID utente
dell’applicazione disponga dell’autorizzazione in lettura
sul file.
DXXC003E Impossibile scrivere nel file specificato.
Spiegazione: XML Extender non è riuscito a scrivere i
dati nel file specificato.
Risposta dell’utente: Accertarsi che l’ID utente
dell’applicazione disponga dell’autorizzazione in
scrittura sul file.
DXXC004E Impossibile utilizzare l’indicatore di
posizione LOB: rc=<rc indicatore>.
Spiegazione: XML Extender non è riuscito a utilizzare
l’indicatore di posizione specificato.
Risposta dell’utente: Accertarsi che l’indicatore di
posizione LOB sia stato impostato correttamente.
DXXC005E La dimensione del file di input è
maggiore della dimensione di
XMLVarchar.
Spiegazione: La dimensione file è maggiore della
dimensione XMLVarchar e XML Extender non è riuscito
a importare tutti i dati dal file.
Risposta dell’utente: Utilizzare il tipo di colonna
XMLCLOB.
DXXC006E Il file di input supera il limite LOB del
database DB2.
Spiegazione: La dimensione file è maggiore della
dimensione XMLCLOB e XML Extender non è riuscito
a importare tutti i dati dal file.
276 XML Extender - Amministrazione e programmazione
Risposta dell’utente: Scomporre il file in oggetti più
piccoli oppure utilizzare una raccolta XML.
DXXC007E Impossibile richiamare i dati dal file
nell’indicatore di posizione LOB.
Spiegazione: Il numero di byte nell’indicatore di
posizione LOB non corrisponde alla dimensione del
file.
Risposta dell’utente: Accertarsi che l’indicatore di
posizione LOB sia stato impostato correttamente.
DXXC008E Impossibile rimuovere il file <nome file>.
Spiegazione: Il file presenta una violazione di accesso
condiviso o è ancora aperto.
Risposta dell’utente: Chiudere il file o arrestare i
processi in corso relativi al file. È possibile che sia
necessario arrestare e riavviare il DB2.
DXXC009E Impossibile creare il file nella directory
<directory>.
Spiegazione: XML Extender non è riuscito a creare un
file nella directory directory.
Risposta dell’utente: Accertarsi che la directory esista,
che l’ID utente dell’applicazione disponga delle
autorizzazioni sulla directory e che il file system abbia
spazio sufficiente per il file.
DXXC010E Errore in fase di scrittura nel file <nome
file>.
Spiegazione: Si è verificato un errore durante la
scrittura nel file nome file.
Risposta dell’utente: Accertarsi che il file system
abbia spazio sufficiente per il file.
DXXC011E Impossibile scrivere nel file di controllo
traccia.
Spiegazione: XML Extender non è riuscito a scrivere i
dati nel file di controllo della traccia.
Risposta dell’utente: Accertarsi che l’ID utente
dell’applicazione disponga dell’autorizzazione in
scrittura sul file.
DXXC012E Impossibile creare il file temporaneo.
Spiegazione: Non è possibile creare il file nella
directory temporanea di sistema.
Risposta dell’utente: Accertarsi che l’ID utente
dell’applicazione disponga delle autorizzazioni sulla
directory temporanea di sistema e che il file system
abbia spazio sufficiente per il file.
DXXC013E I risultati delle UDF estratte superano il
limite di dimensione del tipo di ritorno
dell’UDF.
Spiegazione: I dati estratti da una UDF di estrazione
devono rientrare nei limiti di dimensione del tipo di
ritorno della UDF, come definito nel manuale IBM DB2
XML Extender Administration and Programming. Ad
esempio, i risultati di extractVarchar non devono
superare 4000 byte (incluso il NULL finale).
Risposta dell’utente: Utilizzare una UDF di estrazione
che abbia un limite maggiore per il tipo di ritorno: 254
byte per extractChar(), 4 KB per extractVarchar(), 2 GB
per extractClob().
DXXD000E Un documento XML non valido è stato
rifiutato.
Spiegazione: Si è tentato di memorizzare un
documento non valido in una tabella. La validazione
non ha avuto esito positivo.
Risposta dell’utente: Controllare il documento e la
relativa DTD utilizzando un editor in grado di
visualizzare i caratteri non validi che non risultano
visibili. Per correggere questo errore, disattivare la
funzione di validazione nel file DAD.
DXXD001E <percorso ubicazione> ricorre più volte.
Spiegazione: Una funzione di estrazione scalare ha
utilizzato un percorso di ubicazione che ricorre più
volte. Una funzione scalare può utilizzare solo un
percorso di ubicazione che non ha ricorrenze multiple.
Risposta dell’utente: Utilizzare una funzione di
tabella (e una ’s’ alla fine del nome della funzione
scalare).
DXXD002E Si è verificato un errore di sintassi alla
posizione <posizione> nel percorso di
ricerca.
Spiegazione: L’espressione del percorso presenta
errori di sintassi.
Risposta dell’utente: Correggere l’argomento del
percorso di ricerca dell’interrogazione. Consultare la
documentazione per informazioni sulla sintassi corretta.
DXXD003W Percorso non trovato. Viene restituito
null.
Spiegazione: L’elemento o l’attributo specificato
nell’espressione del percorso non esiste nel documento
XML.
Risposta dell’utente: Verificare che il percorso
specificato sia corretto.
Capitolo 14. Risoluzione dei problemi 277
DXXG000E Il nome file <nome file> non è valido.
Spiegazione: È stato specificato un nome file non
corretto.
Risposta dell’utente: Specificare un nome file corretto
e rieseguire l’operazione.
DXXG001E Si è verificato un errore imprevisto nel
build <ID build>, file <nome file>, riga
<numero riga>.
Spiegazione: XML Extender ha rilevato un errore
interno.
Risposta dell’utente: Contattare l’assistenza tecnica.
Quando l’errore viene notificato, includere tutti i
messaggi, il file di traccia e la spiegazione su come
riprodurre l’errore.
DXXG002E Il sistema ha esaurito la memoria.
Spiegazione: XML Extender non è riuscito ad
assegnare la memoria dal sistema operativo.
Risposta dell’utente: Chiudere alcune applicazioni e
rieseguire l’operazione. Se il problema persiste,
consultare la documentazione relativa al proprio
sistema operativo. Alcuni sistemi operativi richiedono
di riavviare il sistema.
DXXG004E Parametro null non valido.
Spiegazione: Ad una procedura memorizzata XML è
stato passato un valore null per un parametro
obbligatorio.
Risposta dell’utente: Controllare tutti i parametri
obbligatori nell’elenco degli argomenti per il richiamo
della procedura memorizzata.
DXXG005E Parametro non supportato.
Spiegazione: Il parametro non è supportato in questo
release, verrà supportato nel release successivo.
Risposta dell’utente: Impostare questo parametro su
NULL.
DXXG006E Errore interno CLISTATE=<stato_cli>,
RC=<cr_cli>, build <ID_build>, file
<nome_file>, riga <numero_riga>
CLIMSG=<msg_CLI>.
Spiegazione: XML Extender ha rilevato un errore
interno durante l’utilizzo di CLI.
Risposta dell’utente: Contattare l’assistenza tecnica. È
possibile che questo errore sia stato causato da
un’immissione non corretta. Quando l’errore viene
notificato, includere tutti i messaggi di output, il file di
traccia e la spiegazione su come riprodurre l’errore. Se
possibile, inviare le DAD, i documenti XML e le
definizioni di tabella utilizzate.
DXXG007E La locale <locale> è incongruente con la
codepage DB2 <code_page>.
Spiegazione: La locale del sistema operativo non
corrisponde alla codepage DB2.
Risposta dell’utente: Correggere la locale del sistema
operativo del server e riavviare DB2.
DXXG008E Locale <locale> non supportata.
Spiegazione: Impossibile rilevare la locale del sistema
operativo del server nella tabella delle code page.
Risposta dell’utente: Correggere la locale del sistema
operativo del server e riavviare DB2.
DXXG017E Il limite per costante XML Extender è
stato superato nel build ID build, file
nome file, riga numero riga.
Spiegazione: Il limite per la costante XML Extender
indicata è stato superato nella posizione del codice
specificata da build, file e numero riga.
Risposta dell’utente: Verificare se l’applicazione ha
superato uno dei valori della tabella dei limiti nel
manuale IBM DB2 XML Extender Administration and
Programming Guide. Se il limite non è stato superato,
contattare l’assistenza tecnica. Quando l’errore viene
notificato, includere tutti i messaggi di output, il file di
traccia e la spiegazione su come riprodurre l’errore, ad
esempio DAD di input, documenti XML e definizioni
di tabella.
DXXM001W Si è verificato un errore del database
DB2.
Spiegazione: DB2 ha rilevato l’errore specificato.
Risposta dell’utente: Per ulteriori informazioni,
consultare i messaggi di riferimento e la
documentazione relativa ai codici e ai messaggi DB2
per il proprio sistema operativo.
DXXQ000E <Elemento> non presente nel file DAD.
Spiegazione: Un elemento obbligatorio non è presente
nel file DAD (document access definition).
Risposta dell’utente: Aggiungere l’elemento mancante
al file DAD.
DXXQ001E Istruzione SQL non valida per la
creazione di XML.
Spiegazione: L’istruzione SQL nel DAD (document
access definition) o l’istruzione che viene sostituita non
è valida. È necessaria un’istruzione SELECT per la
creazione di documenti XML.
278 XML Extender - Amministrazione e programmazione
Risposta dell’utente: Correggere l’istruzione SQL.
DXXQ002E Impossibile generare lo spazio di
memoria per conservare i documenti
XML.
Spiegazione: La memoria o lo spazio su disco del
sistema si sta esaurendo. Non è disponibile spazio
sufficiente per contenere i documenti XML ottenuti.
Risposta dell’utente: Limitare il numero di documenti
da generare. Ridurre la dimensione di ciascun
documento eliminando i nodi di elemento o attributo
non necessari dal file DAD.
DXXQ003W Il risultato supera il limite massimo.
Spiegazione: L’interrogazione SQL definita dall’utente
genera un numero di documenti superiore al numero
massimo specificato. Viene restituito solo il numero di
documenti specificato.
Risposta dell’utente: Non è richiesta alcuna azione. Se
sono necessari tutti i documenti, specificare zero come
numero massimo di documenti.
DXXQ004E La colonna <nome colonna> non è
compresa nei risultati
dell’interrogazione.
Spiegazione: La colonna specificata non è una delle
colonne comprese nei risultati dell’interrogazione SQL.
Risposta dell’utente: Modificare il nome colonna
specificato nel file DAD in una delle colonne comprese
nei risultati dell’interrogazione SQL. Altrimenti,
modificare l’interrogazione SQL in modo da includere
la colonna specificata nei risultati.
DXXQ005E Associazione relazionale errata.
L’elemento <nome elemento> si trova ad
un livello più basso della relativa
colonna secondaria <nome colonna>.
Spiegazione: L’associazione dell’interrogazione SQL a
XML è errata.
Risposta dell’utente: Accertarsi che le colonne
comprese nei risultati dell’interrogazione SQL siano
disposte in un ordine decrescente nella gerarchia di
riferimento. Inoltre, verificare che vi sia una chiave
candidata a singola colonna per ogni livello. Se questa
chiave non è disponibile in una tabella, l’interrogazione
ne deve generare una per la tabella che utilizza
un’espressione e la funzione integrata DB2
generate_unique().
DXXQ006E Un elemento attribute_node non ha
nome.
Spiegazione: L’elemento attribute_node nel file DAD
(document access definition) non presenta un attributo
nome.
Risposta dell’utente: Accertarsi che per ogni
attribute_node sia stato specificato un nome nel file
DAD.
DXXQ007E Attribute_node <nome attributo> non
presenta elementi colonna o RDB_node.
Spiegazione: L’elemento attribute_node nel file DAD
(document access definition) non presenta un elemento
colonna o un RDB_node.
Risposta dell’utente: Accertarsi che per ogni
attribute_node sia stato specificato un elemento colonna
o RDB_node nel file DAD.
DXXQ008E Un elemento text_node non presenta
elementi colonna.
Spiegazione: L’elemento text_node nel file DAD
(document access definition) non presenta un elemento
colonna.
Risposta dell’utente: Accertarsi che per ogni
text_node sia stato specificato un elemento colonna nel
file DAD.
DXXQ009E La tabella dei risultati <nome tabella>
non esiste.
Spiegazione: Impossibile trovare la tabella dei risultati
specificata nel catalogo di sistema.
Risposta dell’utente: Creare una tabella dei risultati
prima di richiamare la procedura memorizzata.
DXXQ010E RDB_node di <nome nodo> non presenta
una tabella nel file DAD.
Spiegazione: E’ necessario che RDB_node di
attribute_node o di text_node presenti una tabella.
Risposta dell’utente: Specificare la tabella di
RDB_node per attribute_node o text_node nel file DAD.
DXXQ011E L’elemento RDB_node di <nome nodo>
non presenta una colonna nel file DAD.
Spiegazione: È necessario che RDB_node di
attribute_node o di text_node presenti una colonna.
Risposta dell’utente: Specificare la colonna di
RDB_node per attribute_node o text_node nel file DAD.
DXXQ012E Errori nella DAD.
Spiegazione: XML Extender non è riuscito a trovare
l’elemento previsto durante l’elaborazione della DAD.
Risposta dell’utente: Controllare che DAD sia un
documento XML valido e che contenga tutti gli
elementi richiesti dalla DTD DAD. Consultare la
Capitolo 14. Risoluzione dei problemi 279
documentazione XML Extender per la DTD DAD.
DXXQ013E L’elemento colonna o tabella non
presenta alcun nome nel file DAD.
Spiegazione: La tabella o la colonna dell’elemento
deve presentare un nome nel file DAD (document
access definition).
Risposta dell’utente: Specificare il nome dell’elemento
tabella o colonna nel file DAD.
DXXQ014E Un elemento element_node non ha
nome.
Spiegazione: Un elemento element_node nel file DAD
(document access definition) non presenta un attributo
nome.
Risposta dell’utente: Accertarsi che per ogni elemento
element_node sia stato specificato un nome nel file
DAD.
DXXQ015E Il formato della condizione non è
valido.
Spiegazione: La condizione dell’elemento condizione
nel file DAD (document access definition) presenta un
formato non corretto.
Risposta dell’utente: Accertarsi che il formato della
condizione sia valido.
DXXQ016E Il nome tabella in questo RDB_node
non è definito nell’elemento iniziale del
file DAD.
Spiegazione: È necessario definire tutte le tabelle nel
RDB_node dell’elemento iniziale del file DAD
(document access definition). Le tabelle dell’elemento
secondario devono corrispondere alle tabelle definite
nell’elemento iniziale. Il nome tabella in questo
RDB_node non è ubicato nell’elemento iniziale.
Risposta dell’utente: Accertarsi che la tabella del
nodo RDB venga definita nell’elemento iniziale del file
DAD.
DXXQ017E La colonna nella tabella dei risultati
<nome tabella> è troppo piccola.
Spiegazione: Il documento XML generato da XML
Extender è troppo grande per rientrare nella colonna
della tabella dei risultati.
Risposta dell’utente: Cancellare la tabella dei risultati.
Creare un’altra tabella dei risultati con una colonna più
grande. Rieseguire la procedura memorizzata.
DXXQ018E La clausola ORDER BY non è presente
nell’istruzione SQL.
Spiegazione: Manca la clausola ORDER BY
nell’istruzione SQL in un file DAD (document access
definition) che associa SQL a XML.
Risposta dell’utente: Modificare il file DAD.
Aggiungere una clausola ORDER BY che contenga le
colonne di identificazione entità.
DXXQ019E L’elemento objids non presenta alcun
elemento colonna nel file DAD.
Spiegazione: L’elemento objids non presenta alcun
elemento colonna nel file DAD (document access
definition) che associ SQL a XML.
Risposta dell’utente: Modificare il file DAD.
Aggiungere le colonne chiave come elementi secondari
dell’elemento objids.
DXXQ020I XML è stato generato con esito positivo.
Spiegazione: I documenti XML richiesti sono stati
generati correttamente dal database.
Risposta dell’utente: Non è richiesta alcuna azione.
DXXQ021E La tabella <nome tabella> non contiene la
colonna <nome colonna.
Spiegazione: La tabella non contiene la colonna
specificata nel database.
Risposta dell’utente: Specificare un altro nome
colonna nel file DAD o aggiungere la colonna
specificata nel database della tabella.
DXXQ022E La colonna <nome_colonna> di
<nome_tabella> deve avere il tipo
<nome_tipo>.
Spiegazione: Il tipo di colonna non è valido.
Risposta dell’utente: Correggere il tipo di colonna
nella DAD.
DXXQ023E La colonna <nome colonna> di <nome
tabella> non può superare la lunghezza
<lunghezza>.
Spiegazione: La lunghezza definita per la colonna
nella DAD supera il limite consentito.
Risposta dell’utente: Correggere la lunghezza della
colonna nella DAD.
280 XML Extender - Amministrazione e programmazione
DXXQ024E Impossibile creare la tabella <nome
tabella>.
Spiegazione: La tabella specificata non può essere
creata.
Risposta dell’utente: Accertarsi che l’ID utente che sta
creando la tabella disponga dell’autorizzazione
appropriata.
DXXQ025I Scomposizione XML eseguita
correttamente.
Spiegazione: Un documento XML è stato scomposto e
memorizzato in una raccolta con esito positivo.
Risposta dell’utente: Non è richiesta alcuna azione.
DXXQ026E I dati XML <nome xml> superano la
dimensione della colonna <nome
colonna>.
Spiegazione: La dimensione dei dati del documento
XML è maggiore di quella della colonna specificata.
Risposta dell’utente: Aumentare la lunghezza della
colonna utilizzando l’istruzione ALTER TABLE oppure
ridurre la dimensione dei dati editando il documento
XML.
DXXQ028E Impossibile trovare la raccolta <nome
raccolta> nella tabella XML_USAGE.
Spiegazione: Non è possibile trovare un record per la
raccolta nella tabella XML_USAGE.
Risposta dell’utente: Verificare che la raccolta sia stata
abilitata.
DXXQ029E Impossibile trovare il DAD nella tabella
XML_USAGE per la raccolta <nome
raccolta>.
Spiegazione: Non è possibile trovare un record DAD
per la raccolta nella tabella XML_USAGE.
Risposta dell’utente: Verificare che la raccolta sia stata
abilitata correttamente.
DXXQ030E Sintassi del valore XML_override errata.
Spiegazione: Il valore XML_override non è stato
specificato correttamente nella procedura memorizzata.
Risposta dell’utente: Accertarsi che la sintassi del
valore XML_override sia corretta.
DXXQ031E Il nome tabella non può superare la
lunghezza massima consentita dal DB2.
Spiegazione: Il nome tabella specificato dall’elemento
di condizione nella DAD è troppo lungo.
Risposta dell’utente: Modificare la lunghezza del
nome tabella nella DAD.
DXXQ032E Il nome colonna non può superare la
lunghezza massima consentita dal DB2.
Spiegazione: Il nome colonna specificato
dall’elemento di condizione nella DAD è troppo lungo.
Risposta dell’utente: Modificare la lunghezza del
nome colonna nella DAD.
DXXQ033E Identificativo <identificativo> non valido.
Spiegazione: La stringa non è un identificativo SQL
DB2 valido.
Risposta dell’utente: Correggere la stringa nel DAD
per renderla conforme alle regole definite per
l’identificativo SQL DB2.
DXXQ034E Condizione di unione nel RDB_node
iniziale della DAD non valida:
<condizione>
Spiegazione: L’elemento di condizione deve essere
una clausola WHERE valida costituita da condizioni di
unione valide collegate dalla congiunzione AND.
Risposta dell’utente: Per informazioni sulla sintassi
corretta delle condizioni di unione in una DAD,
consultare la documentazione XML Extender.
DXXQ035E Condizione di unione nel RDB_node
iniziale del DAD non valida:
<condizione>
Spiegazione: I nomi colonna nell’elemento di
condizione di RDB_node devono essere definiti con i
nomi tabella se DAD specifica più tabelle.
Risposta dell’utente: Per informazioni sulla sintassi
corretta delle condizioni di unione in una DAD,
consultare la documentazione XML Extender.
DXXQ036E Nome di schema specificato in una tag
della condizione DAD di lunghezza
maggiore di quella consentita.
Spiegazione: È stato rilevato un errore durante
l’analisi del testo in una tag della condizione interna al
file DAD. Il testo della condizione contiene un ID
specificato da un nome di schema troppo lungo.
Risposta dell’utente: Correggere il testo delle tag della
condizione nella DAD (document access definition).
DXXQ037E Impossibile generare <elemento> con
ricorrenze multiple.
Spiegazione: Il nodo dell’elemento e i relativi elementi
secondari non presentano alcuna associazione al
Capitolo 14. Risoluzione dei problemi 281
database, ma il relativo valore multi_occurrence
corrisponde a YES.
Risposta dell’utente: Correggere il DAD impostando
il valore multi_occurrence su NO oppure creare un
RDB_node in uno dei relativi elementi secondari.
DXXQ038E L’istruzione SQL è troppo lunga:
istruzione SQL.
Spiegazione: L’istruzione SQL specificata
nell’elemento <SQL_stmt> del DAD supera il numero
di byte consentito.
Risposta dell’utente: Ridurre la lunghezza
dell’istruzione SQL ad un valore minore o uguale a
32765 byte per Windows e UNIX, oppure 16380 byte
per OS/390 e iSeries.
DXXQ039E Sono state specificate troppe colonne
per una tabella nel file DAD.
Spiegazione: Un file DAD utilizzato per
scomposizione o composizione RDB può avere al
massimo 100 elementi text_node e attribute_node che
specificano le singole colonne nella stessa tabella.
Risposta dell’utente: Ridurre ad un massimo di 100 il
numero totale di elementi text_node e attribute_node
che fanno riferimento a singole colonne nella stessa
tabella.
DXXQ040E Il nome elemento <nome elemento> nel
file DAD non è valido.
Spiegazione: Il nome elemento specificato nel file
DAD non è corretto.
Risposta dell’utente: Accertarsi che il nome elemento
sia specificato correttamente nel file DAD. Fare
riferimento al DTD per il file DAD.
DXXQ041W Il documento XML è stato generato. Uno
o più percorsi di sostituzione specificati
non sono validi e vengono ignorati.
Spiegazione: Specificare soltanto un percorso di
sovrascrittura.
Risposta dell’utente: Accertarsi che il nome elemento
sia specificato correttamente nel file DAD. Fare
riferimento al DTD per il file DAD.
DXXQ043E Attributo <nome attributo> non trovato
dopo l’elemento <nome elemento>.
Spiegazione: L’attributo <nome attributo> non è
presente nell’elemento <nome elemento> o in uno dei
suoi elementi secondari.
Risposta dell’utente: Accertarsi che l’attributo sia
presente nel documento XML dove indicato nel DAD.
DXXQ044E L’elemento <nome elemento> non
presenta un elemento precedente
<elemento precedente>.
Spiegazione: In base al DAD, <elemento precednete> è
un elemento di livello superiore di <nome_elem>. Nel
documento XML, uno o più elementi <nome elemento>
non presentano tale elemento al livello superiore.
Risposta dell’utente: Accertarsi che la nidificazione
degli elementi nel documento XML rispetti le specifiche
del DAD corrispondente.
DXXQ045E L’albero secondario sotto l’elemento
<nome elemento> contiene più attributi
con nome <nome attributo>.
Spiegazione: Un albero secondario sotto <nome
elemento> nel documento XML contiene più istanze
dell’attributo <nome attributo>, che, in base alla DAD,
deve essere scomposto nella stessa riga. Gli elementi e
gli attributi da scomporre devono avere nomi univoci.
Risposta dell’utente: Accertarsi che l’elemento o
l’attributo nell’albero secondario abbiano nomi univoci.
DXXQ046W DTD ID non è stato trovato nella DAD.
Spiegazione: Nella DAD, VALIDATION è YES ma
l’elemento DTDID non è stato specificato. Non viene
eseguito alcun controllo di validazione.
Risposta dell’utente: Non è richiesta alcuna azione. Se
occorre eseguire la validazione, specificare l’elemento
DTDID nel file DAD.
DXXQ047E Errore nel programma di analisi
sintattica alla riga <mv> numero
riga</mv> colonna numero colonna:
messaggio
Spiegazione: Il programma di analisi sintattica non
può proseguire a causa dell’errore riportato.
Risposta dell’utente: Correggere l’errore nel
documento; se necessario consultare le specifiche XML.
DXXQ048E Errore interno - vedere il file di traccia.
Spiegazione: Il processore del foglio di stile ha
rilevato un errore interno. Il documento XML oppure il
foglio di stile potrebbero non essere validi.
Risposta dell’utente: Accertarsi che il documento
XML e il foglio di stile siano validi.
DXXQ049E Il file di output esiste già.
Spiegazione: Il file di output specificato esiste già
nella directory.
Risposta dell’utente: Modificare il percorso di output
o il nome file per il documento in modo che sia
282 XML Extender - Amministrazione e programmazione
univoco, oppure eliminare il file esistente.
DXXQ050E Impossibile creare un nome file
univoco.
Spiegazione: La UDF non è riuscita a creare un nome
file univoco per il documento di output nella directory
specificata in quanto non dispone dell’accesso richiesto,
i nomi file da generare sono in uso oppure la directory
non esiste.
Risposta dell’utente: Accertarsi che la UDF abbia
accesso alla directory specificata, utilizzare una
directory con nomi file disponibili.
DXXQ051E Nessun dato di input o di output.
Spiegazione: Uno o più parametri di input o di
output non presentano valori validi.
Risposta dell’utente: Verificare l’istruzione per
controllare se mancano parametri obbligatori.
DXXQ052E Si è verificato un errore durante
l’accesso alla tabella
DB2XML.XML_USAGE.
Spiegazione: Il database non è stato abilitato oppure
la tabella DB2XML.XML_USAGE è stata cancellata.
Risposta dell’utente: Accertarsi che il database sia
stato abilitato e la tabella DB2XML.XML_USAGE sia
accessibile.
DXXQ053E Un’istruzione SQL non è riuscita:
messaggio
Spiegazione: L’esecuzione di un’istruzione SQL
generata nell’elaborazione di XML Extender non è
riuscita.
Risposta dell’utente: Esaminare la traccia per ulteriori
dettagli. Se l’errore persiste, contattare l’assistenza
tecnica. Quando l’errore viene notificato, includere tutti
i messaggi, il file di traccia e la spiegazione su come
riprodurre l’errore.
DXXQ054E Parametro di input non valido: parametro
Spiegazione: Il parametro di input specificato per una
procedura memorizzata o una UDF non è valido.
Risposta dell’utente: Verificare la firma della
procedura memorizzata o della UDF ed accertarsi che il
parametro di input sia corretto.
DXXQ055E Errore ICU: errore
Spiegazione: Si è verificato un errore ICU durante
un’operazione di conversione.
Risposta dell’utente: Segnalare l’errore all’assistenza
clienti. Includere il file di traccia, il messaggio di errore
e le istruzioni per riprodurre l’errore.
DXXQ056E L’elemento o attributo nome xml non può
essere associato alla colonna indicata
come parte della chiave esterna (colonna
colonna nella tabella tabella).
Spiegazione: L’elemento o attributo specificato non
può essere associato ad una colonna che è indicata
come parte di una chiave esterna. I valori dei dati per
le chiavi esterne sono determinati dalle chiavi primarie;
l’elemento/attributo specificato nel documento XML
non deve essere necessariamente associato ad una
tabella e colonna.
Risposta dell’utente: Eliminare l’associazione
RDB_node per la colonna e tabella specificate nel DAD.
DXXQ057E Le tag schemabindings e dtdid non
possono essere entrambe presenti nel
file DAD.
Spiegazione: Le tag schemabindings e dtdid non
possono essere entrambe presenti nel file DAD.
Risposta dell’utente: Verificare che nel file DAD sia
presente solo una tra le tag schemabindings e dtdid.
DXXQ058E Nel file DAD manca la tag
nonamespacelocation all’interno della
tag schemabindings.
Spiegazione: Nel file DAD manca la tag
nonamespacelocation all’interno della tag
schemabindings.
Risposta dell’utente: Aggiungere la tag
nonamespacelocation alla tag schemabindings.
DXXQ059E La tag doctype non può essere presente
all’interno della tag XCollection nel
DAD di validazione schema.
Spiegazione: La tag doctype non può essere presente
all’interno della tag XCollection nel DAD di
validazione schema.
Risposta dell’utente: Eliminare la tag doctype
all’interno della tag XCollection per la validazione
schema.
DXXQ060E Impossibile trovare SCHEMA ID id
schema.
Spiegazione: XML Extender non è riuscito a trovare
SCHEMA ID durante l’abilitazione della colonna.
SCHEMA ID corrisponde al valore dell’attributo di
ubicazione della tag nonamespacelocation interna alla
tag schemabindings nel file DAD.
Risposta dell’utente: Accertarsi che sia specificato il
valore corretto per SCHEMA ID nel file DAD.
Capitolo 14. Risoluzione dei problemi 283
DXXQ061E Il formato della stringa non è valido.
Spiegazione: Il formato della rappresentazione in
stringa non è valido. Se la stringa è un valore data, ora
o data/ora, la sintassi non è conforme al tipo di dati.
Risposta dell’utente: Verificare che il formato del
valore data, ora o data/ora sia conforme al formato del
tipo di dati relativo.
DXXQ062E Non sono presenti altre righe della serie
di risultati di table per la creazione di un
valore XML per element.
Spiegazione: Questa condizione di errore è
solitamente causata da una specifica multi_occurrence =
YES mancante per l’elemento element_node principale
dell’elemento o attributo specificato.
Risposta dell’utente: Verificare nel DAD che il valore
multi_occurrence per l’elemento element_node
principale corrisponda alla molteplicità degli elementi
element_nodes secondari.
DXXQ063E L’attributo multi_occurrence su
elementname nel file DAD non è valido.
Spiegazione: Il valore dell’attributo multi_occurrence
sull’elemento element_node specificato nel file DAD
(document access definition) manca o non è corretto. Il
valore deve essere ’yes’ o ’no’, non sensibile al
maiuscolo/minuscolo.
Risposta dell’utente: Accertarsi che l’attributo
multi_occurrence sia specificato correttamente nel file
DAD.
DXXQ064E Colonna colonna non trovata nella
tabella esterna tabella.
Spiegazione: Una colonna delle chiavi specificata nella
condizione join non era associata ad alcun nodo di
elementi o attributi.
Risposta dell’utente: Verificare che la condizione join
specificata nel file DAD sia corretta e che tutte le
colonne delle chiavi siano associate a un nodo di
elementi o di attributi.
DXXQ065I Tutti i trigger relativi alle colonne
abilitate per XML sono state
correttamente generate.
Spiegazione: Si tratta di un messaggio informativo.
Risposta dell’utente: Non è richiesta alcuna azione.
DXXQ066E La chiave primaria per la tabella nome
tabella non esiste.
Spiegazione: XML Extender non ha determinato la
chiave primaria per la tabella nome tabella. Verificare che
la chiave primaria per la tabella non sia stata eliminata
una volta abilitata la colonna per XML.
Risposta dell’utente: Modificare la tabella in modo da
aggiungere la chiave primaria specificata come ID
ROOT ID quando la colonna è stata abilitata per XML.
DXXQ067E Tentativo di esecuzione di azione non
riuscito.
Spiegazione: Durante il tentativo di esecuzione di
azione, si è verificato un errore SQL.
Risposta dell’utente: Contattare l’assistenza tecnica.
Quando si riporta l’errore, verificare di includere il file
di traccia di XML Extender.
DXXQ068E Impossibile impostare SQLID corrente
su [userid]. SQLCODE = [sqlcode].
Spiegazione: Durante il tentativo di impostazione
dell’sqlid corrente su un ID di autorizzazione
secondario, si è verificato un errore SQL.
Risposta dell’utente: Verificare di aver specificato un
ID di autorizzazione secondaria valido che che si
disponga delle autorizzazioni corrette per tale ID.
DXXQ069E Impossibile trovare l’elemento o
l’attributo nome elemento xml associato
alla tabella nome tabella come chiave
esterna per la tabella nome tabella2.
Spiegazione: L’associazione, comprendente l’utilizzo
di multi-occurrence, come specificata dal file DAD non
consente l’utilizzo del valore nome elemento xml per
inserire il valore di una chiave esterna nome tabella2.
Risposta dell’utente: Verificare la condizione join che
interessa le due tabelle, il valore dell’attributo
multi_occurrence dell’elemento di livello superiore
associato a nome tabella e il relativo wrapper, la
presenza di altri elementi che siano elementi secondari
di un elemento principale di nome elemento xml in una
tabella diversa da nome tabella.
DXXQ070E Impossibile aprire il file di traccia file
traccia per l’output.
Spiegazione: Apertura del file di traccia non riuscita.
Risposta dell’utente: Verificare che il processo che
scrive il file di traccia abbia le autorizzazioni di
scrittura su un file system di lettura/scrittura.
DXXQ071E Il numero di colonne LOB associate
consentito per la composizione supera il
valore massimo limite lob.
Spiegazione: Il numero di colonne LOB associate
specificato in un file DAD di composizione supera il
valore massimo consentito. Ridurre il numero di
colonne LOB.
284 XML Extender - Amministrazione e programmazione
Risposta dell’utente: Verificare se le colonne LOB
specificate nel file DAD abbiano superato il numero
massimo. Se il limite non è stato superato, contattare
l’assistenza clienti. Quando l’errore viene notificato,
includere tutti i messaggi di output, il file di traccia e la
spiegazione su come riprodurre l’errore, ad esempio
DAD di input e definizioni di tabella.
DXXQ072E XML Extender per iSeries richiede XML
Toolkit for iSeries (prodid) con
l’installazione dell’opzione parseropt.
Spiegazione: XML Extender utilizza XML Parser
distribuito con XML Toolkit per iSeries.
Risposta dell’utente: Installare XML Toolkit per
iSeries con l’opzione richiesta.
DXXQ073E Il database non è abilitato.
Spiegazione: Il comando di gestione dxxadm è stato
eseguito su un database non abilitato.
Risposta dell’utente: Abilitare il database per XML
Extender prima di eseguire il comando di gestione di
XML Extender. La disabilitazione di un database che
non è stato abilitato per XML restituirà lo stesso errore.
Capitolo 14. Risoluzione dei problemi 285
286 XML Extender - Amministrazione e programmazione
Appendice A. Esempi
Questa appendice mostra gli oggetti di esempio utilizzati con gli esempi in questo
manuale.
v “Esempio DTD XML”
v “Esempio di documento XML: getstart.xml”
v “File DAD (document access definition)” a pagina 289
– “File DAD di esempio: colonna XML” a pagina 290
– “File DAD di esempio: raccolta XML, associazione SQL” a pagina 290
– “File DAD di esempio: associazione RDB_node” a pagina 292
Esempio DTD XML
Il seguente DTD viene utilizzato per il documento getstart.xml a cui si fa
riferimento in questo manuale.
Esempio di documento XML: getstart.xml
Il seguente documento XML, getstart.xml, è il documento XML che viene
utilizzato negli esempi in questo manuale. Esso contiene le tag XML che formano
un ordine di acquisto.
<!xml encoding="US-ASCII"?>
<!ELEMENT Order (Customer, Part+)>
<!ATTLIST Order key CDATA #REQUIRED>
<!ELEMENT Customer (Name, Email)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Email (#PCDATA)>
<!ELEMENT Part (key, Quantity, ExtendedPrice, Tax, Shipment+)>
<!ELEMENT key (#PCDATA)>
<!ELEMENT Quantity (#PCDATA)>
<!ELEMENT ExtendedPrice (#PCDATA)>
<!ELEMENT Tax (#PCDATA)>
<!ATTLIST Part color CDATA #REQUIRED>
<!ELEMENT Shipment (ShipDate, ShipMode)>
<!ELEMENT ShipDate (#PCDATA)>
<!ELEMENT ShipMode (#PCDATA)>
Figura 14. DTD XML di esempio: getstart.dtd
© Copyright IBM Corp. 1999 - 2006 287
Esempio di foglio di stile: getstart.xsl
Il seguente foglio di stile XML, getstart.xsl, è il foglio di stile incluso nella
directory samples di DB2.
<?xml version="1.0"?>
<!DOCTYPE Order SYSTEM "install_dxx/samples/extenders/db2xml/dtd/getstart.dtd">
<Order key="1">
<Customer>
<Name>American Motors</Name>
<Email>[email protected]</Email>
</Customer>
<Part color="black ">
<key>68</key>
<Quantity>36</Quantity>
<ExtendedPrice>34850.16</ExtendedPrice>
<Tax>6.000000e-02</Tax>
<Shipment>
<ShipDate>1998-08-19</ShipDate>
<ShipMode>BOAT </ShipMode>
</Shipment>
<Shipment>
<ShipDate>1998-08-19</ShipDate>
<ShipMode>AIR </ShipMode>
</Shipment>
</Part>
<Part color="red ">
<key>128</key>
<Quantity>28</Quantity>
<ExtendedPrice>38000.00</ExtendedPrice>
<Tax>7.000000e-02</Tax>
<Shipment>
<ShipDate>1998-12-30</ShipDate>
<ShipMode>TRUCK </ShipMode>
</Shipment>
</Part>
</Order>
Figura 15. Documento XML di esempio: getstart.xml
288 XML Extender - Amministrazione e programmazione
File DAD (document access definition)
Le seguenti sezioni contengono i file DAD (document access definition) che
associano i dati XML alle tabelle relazionali dei database DB2, utilizzando le
modalità di accesso alle colonne o alle raccolte XML.
v “File DAD di esempio: colonna XML” a pagina 290
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head/>
<body>
<ol style="list-style:decimal outside">
<xsl:for-each select="Order">
<li><b>Orderkey : </b> <xsl:value-of select="@key"/><br/>
<xsl:for-each select="Customer">
<b>Customer</b><br/>
<xsl:for-each select="Name | Email">
<xsl:value-of select="name()"/><xsl:text> : </xsl:text><xsl:value-of select="."/>
<xsl:text>, </xsl:text>
</xsl:for-each>
</xsl:for-each>
<br/><br/>
<ol type="A">
<xsl:for-each select="Part">
<li><b>Parts</b><br/>
Color : <xsl:value-of select="@color"/><xsl:text>, </xsl:text>
<xsl:for-each select="key | Quantity | ExtendedPrice | Tax">
<xsl:value-of select="name()"/><xsl:text> : </xsl:text><xsl:value-of select="."/>
<xsl:text>, </xsl:text>
</xsl:for-each>
<br/><br/>
<ol type="a">
<xsl:for-each select="Shipment">
<li><b>Shipment</b><br/>
<xsl:for-each select="ShipDate | ShipMode">
<xsl:value-of select="name()"/><xsl:text> : </xsl:text><xsl:value-of select="."/>
<xsl:text>, </xsl:text>
</xsl:for-each>
</li>
</xsl:for-each>
</ol>
<br/>
</li>
</xsl:for-each>
</ol>
</li>
</xsl:for-each>
</ol>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Figura 16. Foglio di stile di esempio: getstart.xsl
Appendice A. Esempi 289
v “File DAD di esempio: raccolta XML, associazione SQL” mostra un file DAD per
una raccolta XML mediante un’associazione SQL.
v “File DAD di esempio: associazione RDB_node” a pagina 292 mostra un file
DAD per una raccolta XML che utilizza l’associazione RDB_node.
File DAD di esempio: colonna XML
Questo file DAD contiene l’associazione per una colonna XML e definisce la
tabella, le tabelle laterali e le colonne che devono contenere i dati XML.
File DAD di esempio: raccolta XML, associazione SQL
Questo file DAD contiene una istruzione SQL che specifica le tabelle del database
DB2, le colonne e le condizioni che devono contenere i dati XML.
<?xml version="1.0"?>
<!DOCTYPE Order SYSTEM "install_dxx/samples/extenders/db2xml/dtd/dad.dtd">
<DAD>
<dtdid> "install_dxx/samples/extenders/db2xml/dtd/getstart.dtd"
</dtdid>
<validation>YES</validation>
<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>
</DAD>
Figura 17. File DAD di esempio per una colonna XML: getstart_xcolumn.dad
290 XML Extender - Amministrazione e programmazione
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "install_dxx/samples/extenders/db2xml/dtd/dad.dtd">
<DAD>
<validation>NO</validation>
<Xcollection>
<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
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>
<prolog>?xml version="1.0"?</prolog>
<doctype>!DOCTYPE Order SYSTEM
"install_dxx/samples/extenders/db2xml/dtd/getstart.dtd
"</doctype>
Figura 18. File DAD di esempio per una raccolta XML che utilizza l’associazione SQL
order_sql.dad (Parte 1 di 2)
Appendice A. Esempi 291
File DAD di esempio: associazione RDB_node
Questo file DAD utilizza gli elementi <RDB_node> per definire le tabelle del
database DB2, le colonne e le condizioni che devono contenere i dati XML.
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "SQLLIB/samples/extenders/db2xml/dtd/dad.dtd">
<DAD>
<dtdid>E:\dtd\lineItem.dtd</dtdid>
<validation>YES</validation>
<Xcollection>
<prolog>?xml version="1.0"?</prolog>
<doctype>!DOCTYPE Order SYSTEM
"SQLLIB/samples/extenders/db2xml/dtd/getstart.dtd"</doctype>
<root_node>
<element_node name="Order">
<RDB_node>
<table name="order_tab"/>
<table name="part_tab"/>
<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>
<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_occurrence="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>
</element_node>
</element_node>
</root_node>
</Xcollection>
</DAD>
Figura 18. File DAD di esempio per una raccolta XML che utilizza l’associazione SQL
order_sql.dad (Parte 2 di 2)
292 XML Extender - Amministrazione e programmazione
<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>
<attribute_node name="Key">
<RDB_node>
<table name="order_tab"/>
<column name="order_key"/>
</RDB_node>
</attribute_node>
<element_node name="Customer">
<element_node name="Name">
<text_node>
<RDB_node>
<table name="order_tab"/>
<column name="customer_name"/>
</RDB_node>
</text_node>
</element_node>
<element_node name="Email">
<text_node>
<RDB_node>
<table name="order_tab"/>
<column name="customer_email"/>
</RDB_node>
</text_node>
</element_node>
</element_node>
<element_node name="Part">
<attribute_node name="Key">
<RDB_node>
<table name="part_tab"/>
<column name="part_key"/>
</RDB_node>
</attribute_node>
<element_node name="ExtendedPrice">
<text_node>
<RDB_node>
<table name="part_tab"/>
<column name="price"/>
<condition>price > 2500.00</condition>
</RDB_node>
</text_node>
</element_node>
<element_node name="Tax">
<text_node>
<RDB_node>
<table name="part_tab"/>
<column name="tax"/>
</RDB_node>
</text_node>
</element_node>
<element_node name="Quantity">
<text_node>
<RDB_node>
<table name="part_tab"/>
<column name="qty"/>
</RDB_node>
</text_node>
</element_node>
<element_node name="Shipment" multi_occurrence="YES">
<element_node name="ShipDate">
<text_node>
<RDB_node>
<table name="ship_tab"/>
Appendice A. Esempi 293
<column name="date"/>
<condition>date > ’1966-01-01’</condition>
</RDB_node>
</text_node>
</element_node>
<element_node name="ShipMode">
<text_node>
<RDB_node>
<table name="ship_tab"/>
<column name="mode"/>
</RDB_node>
</text_node>
</element_node>
<element_node name="Comment">
<text_node>
<RDB_node>
<table name="ship_tab"/>
<column name="comment"/>
</RDB_node>
</text_node>
</element_node>
</element_node> <!-- end of element Shipment-->
</element_node> <!-- end of element Part -->
</element_node> <!-- end of element Order -->
</root_node>
</Xcollection>
</DAD>
294 XML Extender - Amministrazione e programmazione
Appendice B. Considerazioni sulla codepage
I documenti XML e gli altri file correlati devono essere codificati correttamente per
ogni client o server che accede ai file. XML Extender fa delle considerazioni
quando elabora un file, pertanto è necessario comprendere il modo in cui gestisce
le conversioni di codepage. Le considerazioni primarie sono:
v Verificare che la codepage corrente del client che richiama un documento XML
dal database DB2 corrisponda alla codifica del documento.
v Verificare che quando il documento viene elaborato da un parser XML, la
dichiarazione di codifica del documento XML sia coerente con la codifica
corrente del documento.
Le sezioni seguenti descrivono i problemi legati a queste considerazioni, il modo in
cui prepararsi a possibili problemi e il modo in cui XML Extender e il database
DB2 supportano le codepage quando i documenti vengono inviati dal client al
server e poi al database.
Terminologia per le codepage XML
I seguenti termini sono utilizzati nelle sezioni relative alla codepage XML:
codifica documento
La codepage do un documento XML.
dichiarazione di codifica del documento
Il nome della codepage specificata nella dichiarazione XML. Ad esempio, la
seguente dichiarazione di codifica specifica ibm-1047:
<?xml version="1.0" encoding="ibm-1047"?>
documento coerente
Un documento in cui la codepage corrisponde alla dichiarazione di
codifica.
documento incoerente
Un documento in cui la codepage non corrisponde alla dichiarazione di
codifica.
Variabile di registro (di ambiente) DB2CODEPAGE
Specifica la codepage dei dati presentati a DB2 da un’applicazione client
del database. DB2 richiama la codepage del client dalla locale del sistema
operativo del client, a meno che questa variabile non sia impostata. Per
DB2, questo valore sovrascrive la locale del sistema operativo del client.
codepage client
La codepage dell’applicazione. Se è impostata la variabile DB2CODEPAGE,
la codepage del client è il valore di DB2CODEPAGE. In caso contrario, la
codepage del client è data dalla locale del sistema operativo del client.
codepage server o codepage della locale del sistema operativo del server
La locale del sistema operativo su cui è installato il database DB2.
codepage database
La codifica dei dati memorizzati determinata in fase di creazione del
database. Se non esplicitamente specificata con la clausola USING
CODESET, questo valore è la locale del sistema operativo del server.
© Copyright IBM Corp. 1999 - 2006 295
Considerazioni sulla codepage di DB2 e XML Extender
Quando DB2 invia o riceve un documento XML, non viene controllata la
dichiarazione di codifica. Piuttosto, viene controllata la codepage del client per
verificare che corrisponda alla codepage del database. Se sono differenti, DB2
converte i dati nel documento XML in modo che corrisponda alla codepage:
v del database, quando si importa il documento o un frammento del documento in
una tabella del database
v del database, quando si decompone un documento in una o più tabelle del
database
v del client, quando si esporta il documento dal database e si presenta al client
v del server, quando si elabora un file con una UDF che restituisce i dati in un file
sul file system del server.
Considerazioni per l’importazione di un documento XML
Quando un documento XML viene importato nel database, questo viene di solito
importato come documento XML da memorizzare in una colonna XML o per la
decomposizione in una raccolta XML, in cui il contenuto di elementi e attributi
viene salvato come dati DB2. Quando un documento viene importato, DB2
converte la codifica del documento in quella del database. DB2 assume che il
documento abbia la codepage specificata nella colonna “Codepage di origine” della
tabella riportata di seguito. Tabella 93 riporta le conversioni eseguite da DB2
durante l’importazione di un documento XML.
Tabella 93. Utilizzo di UDF e procedure memorizzate quando il file XML viene importato nel
database
Attività Codepage di
origine per la
conversione
Codepage di
destinazione
per la
conversione
Commenti
Inserimento di un file
DTD nella tabella
DTD_REF
Codepage del
client
Codepage del
database
Abilitazione di una
colonna o di una
raccolta mediante
procedure memorizzate
o mediante i comandi di
gestione che importano i
file DAD
Codepage del
client (la
codepage
utilizzata per
collegare
DXXADMIN
durante
l’installazione),
Codepage del
database
Mediante UDF:
v XMLVarchar
FromFile()
v XMLCLOB FromFile()
v Content(): richiama da
XMLFILE a un CLOB
Codepage del
server
Codepage del
database
La codepage del database viene
convertita nella codepage del
client quando i dati vengono
presentati al client
Utilizzo di procedure
memorizzate per la
decomposizione
Codepage del
client
Codepage del
database
v Si assume che il documento
da decomporre sia nella
codepage del client. I dati
provenienti dalla vengono
memorizzati nelle tabelle nella
codepage del database
296 XML Extender - Amministrazione e programmazione
Considerazioni per l’esportazione di un documento XML
Quando un documento XML viene esportato dal database, questo viene esportato
in base a una richiesta del client per presentare uno dei seguenti oggetti:
v Un documento XML da una colonna XML
v I risultati dell’interrogazione dei documenti XML in una colonna XML
v Un documento XML composto da una raccolta XML
Quando un documento viene esportato, DB2 converte la codifica del documento in
quella del client o del server, a seconda di dove è stata originata la richiesta e di
dove sono stati elaborati i dati. Tabella 94 riporta le conversioni eseguite da DB2
durante l’esportazione di un documento XML.
Tabella 94. Utilizzo di UDF e procedure memorizzate quando il file XML viene esportato dal
database
Attività DB2 converte... Commenti
Mediante UDF:
v XMLFileFromVarchar()
v XMLFileFromCLOB()
v Content(): retrieve da
XMLVARCHAR su un file
di server esterno
Dalla codepage del database
alla codepage del server
Utilizzo delle procedure
memorizzate per comporre e
memorizzare documenti XML
in una tabella di risultati da
cui possano essere interrogati
ed esportati.
Dalla codepage del database
alla codepage del client
quando la serie di risultati
viene presentata al client
v Quando si compongono
dei documenti, XML
Extender copia la
dichiarazione di codifica
specificata dalla tag nel file
DAD sul documento
appena creato. Tale codifica
deve corrispondere alla
codepage del client.
Considerazioni sulla dichiarazione di codifica per XML Extender
La dichiarazione di codifica specifica la codepage del documento XML e viene
visualizzata nell’istruzione di dichiarazione XML. Quando si utilizza XML
Extender, è importante verificare che la codifica del documento corrisponda a
quella del client o del server, a seconda di dove è ubicato il file.
Dichiarazioni di codifica valide
È possibile utilizzare qualsiasi dichiarazione di codifica in documenti XML,
seguendo qualche regola. In questa sezione, sono definite tali regole insieme alle
dichiarazioni di codifica supportate.
Le codifica consigliate per i dati XML sono UTF-8 e UTF-16, in base alla specifica
XML. Se si utilizzano queste codifiche, l’applicazione potrà essere utilizzata tra più
società.
Per tutti i sistemi operativi, sono supportate le seguenti codifiche. Nel seguente
elenco è riportato il significato di ogni colonna:
v Codifica specifica la stringa di codifica da utilizzare nelle dichiarazioni XML.
v Categoria mostra il sistema operativo su cui DB2 supporta la codepage
specificata.
Appendice B. Considerazioni sulla codepage 297
v Codepage mostra la codepage definita da IBM associata alla codifica specificata.
Tabella 95. Dichiarazioni di codifica supportate da XML Extender (elenco parziale)
Categoria Codifica Codepage
Unicode UTF-8 1208
UTF-16 1200
ASCII iso-8859-1 819
ibm-1252 1252
iso-8859-2 912
iso-8859-5 915
iso-8859-6 1089
iso-8859-7 813
iso-8859-8 916
iso-8859-9 920
MBCS gb2312 1386
ibm-932, shift_jis78 932
Shift_JIS 943
IBM-eucCN 1383
ibm-1388 1388
IBM-eucJP, EUC-JP 954, 33722
ibm-930 930
ibm-939 939
ibm-1390 1390
ibm-1399 1399
ibm-5026 5026
ibm-5035 5035
euc-tw, IBM-eucTW 964
ibm-937 937
euc-kr, IBM-eucKR 970
big5 950
La stringa di codifica deve essere compatibile con la codepage della destinazione
del documento. Se un documento viene restituito da un server a un client, allora la
stringa di codifica deve essere compatibile con la codepage del client. Fare
riferimento a “Codifiche e dichiarazioni di codifica coerenti” per informazioni sulle
conseguenze di codifiche non compatibili.
Codifiche e dichiarazioni di codifica coerenti
Quando un documento XML viene elaborato o scambiato con un altro sistema, è
importante che la dichiarazione di codifica corrisponda alla codifica corrente del
documento. La verifica che la codifica di un documento sia coerente con quella del
client è importante poiché gli strumenti XML, come i parser, generano un errore
per una entità che include una dichiarazione di codifica differente da quella
riportata nella dichiarazione.
298 XML Extender - Amministrazione e programmazione
Figura 19 mostra che i client hanno codepage coerenti con la codifica del
documento e con la codifica dichiarata.
Codepage differenti portano alle seguenti situazioni:
v Si verifica una conversione in cui i dati vengono persi, in particolare se la
codepage di origine è Unicode e quella di destinazione non è Unicode. Unicode
contiene una serie di caratteri completa. Se un file viene convertito da UTF-8 in
una codepage che non supporta tutti i caratteri utilizzati nel documento, parte
dei dati potrebbe essere persa durante la conversione.
v La codifica dichiarata del documento XML potrebbe non essere più coerente con
la codifica reale del documento se il documento viene richiamato da un client
con una codepage differente da quella dichiarata del documento.
Figura 20 a pagina 300 descrive un ambiente in cui le codepage dei client non sono
coerenti.
Figura 19. Client con codepage corrispondenti
Appendice B. Considerazioni sulla codepage 299
Il client riceve il documento in EUC, ma il documento ha una dichiarazione di
codifica UTF-8.
Dichiarazione di una codifica
Il valore predefinito della dichiarazione di codifica è UTF-8 e l’assenza di una
dichiarazione di questo tipo implica che il documento sia in UTF-8.
Per dichiarare un valore di codifica:
Nella dichiarazione del documento XML, specificare la dichiarazione di codifica
con il nome della codepage del client. Ad esempio:
<?xml version="1.0" encoding="UTF-8" ?>
Esempi di conversione
XML Extender elabora i documenti XML durante:
v La memorizzazione e il richiamo di dati di colonne XML utilizzando il metodo
di accesso e memorizzazione delle colonne XML
v La composizione e la decomposizione dei documenti XML
I documenti subiscono una conversione di codepage quando vengono inviati da un
client o da un server a un database. La mancanza di coerenza o il danneggiamento
di documentiXML si verificano principalmente durante le conversioni dalle
codepage del client, del server e del database. Quando si sceglie la dichiarazione di
codifica del documento, così come quando si pianifica l’importazione o
l’esportazione da parte di client e server dei documenti dal database, considerare le
conversioni descritte nelle tabelle precedenti e gli scenari riportati di seguito.
Figura 20. Client con codepage non corrispondenti
300 XML Extender - Amministrazione e programmazione
I seguenti scenari descrivono i casi più comuni di conversione che si possono
verificare:
Scenario 1: questo scenario rappresenta una configurazione con codifiche coerenti,
nessuna conversione di DB2 e un documento importato dal server. La
dichiarazione di codifica del documento è UTF-8, quella del server è UTF-8 e
quella del database è UTF-8. DB2 non deve convertire il documento in quanto la
codepage del server e quella del database sono uguali. La codifica e la
dichiarazione sono coerenti.
1. Il documento viene importato nel database DB2 utilizzando l’UDF
XMLClobfromFile.
2. Il documento viene estratto sul server.
Scenario 2: questo scenario rappresenta una configurazione con codifiche coerenti,
una conversione di DB2 e un documento importato dal server ed esportato sul
client. La codifica del documento e la dichiarazione è SJIS, le codepage del client e
del server sono SJIS e le codepage del database sono UTF-8.
1. Il documento viene importato nel database DB2 utilizzando l’UDF
XMLClobfromfile dal server. DB2 converte il documento da SJIS e lo
memorizza in UTF-8. La dichiarazione di codifica e la codifica non sono
coerenti nel database.
2. Un client che utilizza SJIS richiede il documento per una presentazione su un
browser Web. DB2 converte il documento in SJIS, ovvero la codepage del client.
A questo punto, la codifica del documento e l a dichiarazione di codifica sono
coerenti sul client.
Scenario 3: questo scenario rappresenta una configurazione con codifiche non
coerenti, una conversione di DB2 e un documento importato dal server ed
esportato sul client. La dichiarazione di codifica del documento è SJIS per il
documento in entrata. La codepage del server è SJISibm-1047 e quelle del client e
del database sono UTF-8.
1. Il documento viene importato nel database the utilizzando un’UDF di
memorizzazione. DB2 converte il documento in UTF-8 da SJIS. La codifica e la
dichiarazione non sono coerenti.
2. Un client con una codepage UTF-8 richiede il documento per una presentazione
su un browser Web. DB2 non lo converte in quanto il client e il database hanno
la stessa codepage. La codifica del documento e la dichiarazione non sono
coerenti in quanto la dichiarazione è SJIS e la codifica è UTF-8. Il documento
non può essere elaborato da un parser XML o da un altro strumento di
elaborazione XML.
Scenario 4: questo scenario rappresenta una configurazione con perdita di dati,
una conversione di DB2 e un documento importato da un server in UTF-8. La
dichiarazione di codifica del documento è UTF-8, il server è UTF-8 e il database è
SJIS.
Il documento viene importato nel database DB2 utilizzando l’UDF
XMLClobfromFile. DB2 converte la codifica in SJIS. Quando il documento viene
importato, il documento memorizzato nel database potrebbe essere danneggiato in
quanto i caratteri rappresentati in UTF-8 potrebbero non avere una
rappresentazione in SJIS.
Scenario 5: questo scenario è una configurazione con una limitazione di Windows
NT. Su Windows NT, le locali del sistema operativo non possono essere impostate
Appendice B. Considerazioni sulla codepage 301
su UTF-8, tuttavia DB2 consente al client di impostare la codepage su UTF-8
utilizzando db2set DB2CODEPAGE=1208. In questo scenario, il client e il server si
trovano sullo stesso sistema. Il client è UTF-8, ma il server non può essere
impostato su UTF-8; la sua codepage è 1252. Il documento viene codificato in 1252
e la dichiarazione di codifica è ibm-1252. La codepage del database è UTF-8.
1. Il documento viene importato dal server mediante un’UDF di memorizzazione
e viene convertito da 1252 a 1208.
2. Il documento viene quindi esportato da DB2 mediante l’UDF Content() che
restituisce un file XML. DB2 converte il documento da UTF-8 a 1252, anche se il
client si aspetta 1208 poiché il client si trova sullo stesso sistema del server, che
è impostato su 1208.
Suggerimenti per evitare documenti XML non coerenti
Nelle sezioni precedenti è stato descritto come un documento XML può avere una
codifica non coerente, ovvero nel momento in cui la dichiarazione di codifica è in
conflitto con la codifica del documento. Codifiche non coerenti possono portare
alla perdita dei dati e a documenti XML non utilizzabili.
Utilizzare uno dei seguenti suggerimenti per verificare che la codifica del
documento XML sia coerente con la codepage del client, prima di passare il
documento a un processore XML co me un parser:
v Quando si esporta un documento da un database mediante le UDF di XML
Extender, provare una delle seguenti tecniche (assumendo che XML Extender
abbia esportato il file, nella codepage del server, sul file system del server):
– Convertire il documento nella codepage della codifica dichiarata
– Sovrascrivere la codifica dichiarata, se lo strumento è dotato di una funzione
del genere
– Modificare manualmente la dichiarazione di codifica del documento esportato
nella codifica reale del documento (ovvero, la codepage del server)v Quando si esporta un documento da un database mediante le procedure
memorizzate di XML Extender, provare una delle seguenti tecniche (assumendo
che il client interroghi la tabella dei risultati, in cui è memorizzato il documento
composto):
– Convertire il documento nella codepage della codifica dichiarata
– Sovrascrivere la codifica dichiarata, se lo strumento è dotato di una funzione
del genere
– Prima di interrogare la tabella dei risultati, lasciare che il client imposti la
variabile d’ambiente DB2CODEPAGE per convertire la codepage del client in
una codepage compatibile con la dichiarazione di codifica del documento
XML.
– Modificare manualmente la dichiarazione di codifica del documento esportato
nella codifica reale del documento (ovvero, la codepage del client)
Limitazione quando si utilizza Unicode e un client Windows NT: su Windows
NT, la locale del sistema operativo non può essere impostata su UTF-8. Utilizzare
la seguente procedura quando si importano o si esportano i documenti:
v Quando si importano i file e le DTD codificate in UTF-8, impostare la codepage
del client su UTF-8, mediante:
db2set DB2CODEPAGE=1208
Utilizzare questa tecnica quando:
302 XML Extender - Amministrazione e programmazione
– Si inserisce una DTD nella tabella DB2XML.DTD_REF
– Si abilita una colonna o una raccolta
– Si decompongono procedure memorizzatev Quando si utilizzano le UDF Content() o XMLFromFile per importare i
documenti XML, questi devono essere codificati nella codepage della locale del
sistema operativo del server, che non può essere UTF-8.
v Quando si esporta un file XML dal database, impostare la codepage del client
con il seguente comando, in modo che DB2 codifichi i dati risultati in UTF-8:
db2set DB2CODEPAGE=1208
Utilizzare questa tecnica quando:
– Si interroga la tabella dei risultati in seguito alla composizione
– Si estraggono i dati da una colonna XML mediante le UDF di estrazionev Quando si utilizzano le UDF Content() o XMLxxxfromFile per esportare i
documenti XML su file presenti sul file system del server, i documenti risultanti
saranno codificati nella codepage della locale del sistema operativo del server,
che non può essere UTF-8.
Appendice B. Considerazioni sulla codepage 303
304 XML Extender - Amministrazione e programmazione
Appendice C. Limiti di XML Extender
In questa sezione sono descritti i limiti per:
v Oggetti XML Extender
v Valori restituiti da UDF
v Parametri delle procedure memorizzate
v Colonne delle tabelle di supporto gestione
v Composizione e decomposizione
v Le seguenti variabili d’ambiente:
– DB2DXX_MIN_TMPFILE_SIZE
– DB2_DXX_PATHS_ALLOWED_READ
– DB2_DXX_PATHS_ALLOWED_WRITE
– DB2DXXTEMP
La seguente tabella descrive i limiti per gli oggetti XML Extender.
Tabella 96. Limiti per oggetti XML Extender
Oggetto Limite
Numero massimo di righe in una tabella in
una raccolta XML di decomposizione
10240 righe da ogni documento XML
decomposto
Numero massimo di byte in un percorso di
file XML specificato come valore di
parametro
512 byte
Lunghezza dell’elemento sql_stmt in un file
DAD per la composizione SQL
Su sistemi Windows e UNIX:
32.765 byte.
Sistemi OS/390 e iSeries:
16.380 byte.
Numero massimo di colonne per una tabella
nel file DAD per la decomposizione
RDB_node
500 colonne (per una tabella)
sono specificate da text_node
e attribute_node
in un file DAD.
Numero massimo di colonne in una tabella
associata in una raccolta Xcollection DAD
Ogni tabella associata a una Xcollection nel
file DAD può avere un massimo di 500
colonne associate a nodi di testo o di
attributi. Se si associa a più di 500 colonne in
una tabella, DB2 emette il messaggio
DXXQ039E, “Numero eccessivo di colonne
specificate per una tabella nel file DAD.”
La seguente tabella descrive i valori dei limiti restituiti dalle funzioni definite
dall’utente di XML Extender.
Tabella 97. Limiti per i valori UDF
Valori restituiti dell’UDF Limite
Numero massimo di byte restituiti da un
UDF extractCHAR
254 byte
Numero massimo di byte restituiti da un
UDF extractCLOB
2 gigabyte
© Copyright IBM Corp. 1999 - 2006 305
Tabella 97. Limiti per i valori UDF (Continua)
Valori restituiti dell’UDF Limite
Numero massimo di byte restituiti da un
UDF extractVARCHAR
4 kilobyte
La seguente tabella descrive i limiti per i parametri delle procedure memorizzate
di XML Extender.
Tabella 98. Limiti per i parametri delle procedure memorizzate
Parametri procedura memorizzata Limite
Dimensione massima di un documento XML
CLOB1
1 MB
Dimensione massima di un DAD (Document
Access Definition) CLOB1
100 KB
Dimensione massima di collectionName 30 byte
Dimensione massima di dbName 8 byte
Dimensione massima di tbName2 128 byte
Dimensione massima di colName 30 byte
Dimensione massima di tablespace 18 byte
Dimensione massima di defaultView 128 byte
Dimensione massima di rootID 128 byte
Dimensione massima di resultTabName 128 byte
Dimensione massima di resultColumn 128 byte
Dimensione massima di validColumn 128 byte
Dimensione massima di varchar 32672 byte
Note:
1. Questa dimensione può essere modificata per dxxGenXMLClob e dxxRetrieveXMLCLOB.
2. Se il valore del parametro tbName è qualificato da un nome schema, l’intero nome
(compreso il carattere separatore) non deve essere più lungo di 128 byte.
La seguente tabella descrive i limiti per la tabellaDB2XML.DTD_REF.
Tabella 99. Limiti di XML Extender
Colonne della tabella DB2XML.DTD_REF Limite
Dimensione della colonna AUTHOR 128 byte
Dimensione della colonna CREATOR 128 byte
Dimensione della colonna UPDATOR 128 byte
Dimensione della colonna DTDID 128 byte
Dimensione della colonna CONTENT 100 KB
I nomi possono subire un’espansione quando il database DB2 li converte dalla
codepage del client alla codepage del database. Un nome può rientrare nel limite
della dimensione sul client, ma può superare il limite quando la procedura
memorizzata richiama il nome convertito.
306 XML Extender - Amministrazione e programmazione
La seguente tabella descrive i limiti per la composizione e la decomposizione.
Tabella 100. Limiti per la composizione e la decomposizione di XML Extender
Oggetto Limite
Numero massimo di righe inserite in una
tabella in una raccolta XML di
decomposizione
10240 righe da ogni documento XML
decomposto
Lunghezza massima dell’attributo name in
elements_node o attribute_node all’interno di
un DAD
63 byte
Numero massimo di byte nel percorso
XMLFile specificato come valore del
parametro
512 byte
Numero massimo di colonne in una chiave 16 colonne
Variabile d’ambiente DB2DXX_MIN_TMPFILE_SIZE
XML Extender inserisce documenti di grosse dimensioni in file temporanei per
evitare di utilizzare troppa memoria durante l’elaborazione. Su sistemi con molta
memoria fisica, è possibile evitare di spostare i documenti in file temporanei
riducendo l’attività di input/output. La variabile d’ambiente
DB2DXX_MIN_TMPFILE_SIZE indica a XML Extender di utilizzare buffer di
memoria piuttosto che file temporanei per l’elaborazione di documenti più piccoli
del valore specificato. La variabile è applicabile solo sul server, non su un client. Se
più nodi fisici fanno parte di una partizione multinodo, è possibile impostare la
variabile in maniera differente per ciascun nodo, riflettendo precisamente la
quantità di memoria installata su ciascun sistema. Se non si imposta questa
variabile, i documenti che superano 128 KB vengono inseriti automaticamente in
file temporanei mentre i documenti con dimensione inferiore a 128 KB vengono
elaborati nella memoria.
Variabili d’ambiente DB2_DXX_PATHS_ALLOWED_READ
eDB2_DXX_PATHS_ALLOWED_WRITE
Queste variabili DB2 limitano l’accesso in lettura e scrittura delle UDF di XML
Extender al file system. È necessario impostare le variabili di registro DB2 prima di
utilizzare le UDF di XML Extender che leggono o scrivono sul file system del
server. Tali variabili sono descritte nella seguente tabella:
Tabella 101. Variabili DB2 da impostare prima di utilizzare le UDF XML Extender per
leggere o scrivere sul file system
Variabile Valori
DB2_DXX_PATHS_ALLOWED_READ
Specifica la posizione sul file system del
server che le UDF di XML Extender possono
leggere. Quando il registro non è impostato
(ovvero contiene un valore null), le UDF
XML Extender non potranno leggere il file
system. Il valore ANY significa che le UDF
possono leggere da qualsiasi posizione del
file system.
Valore predefinito = null
Valori: ANY o un percorso valido
Appendice C. Limiti di XML Extender 307
Tabella 101. Variabili DB2 da impostare prima di utilizzare le UDF XML Extender per
leggere o scrivere sul file system (Continua)
Variabile Valori
DB2_DXX_PATHS_ALLOWED_WRITE
Specifica la posizione sul file system del
server su cui le UDF di XML Extender
possono scrivere. Quando il registro non è
impostato (ovvero contiene un valore null),
le UDF XML Extender non potranno scrivere
sul file system. Il valore ANY significa che le
UDF possono scrivere su qualsiasi posizione
del file system.
Valore predefinito = null
Valori: ANY o un percorso valido
Prima di poter iniziare a lavorare con DB2 XML Extender, è necessario impostare il
percorso in cui verranno memorizzati i file temporanei. La variabile d’ambiente
DB2DXXTEMP controlla la posizione dei file temporanei di XML Extender. Se la
variabile non è impostata, il valore della variabile di sistema TMP determina il
percorso. Per impostare il valore di DB2DXXTEMP su Windows XP:
1. Collegarsi con l’ID utente utilizzato con DB2.
2. Fare clic su Start—>Pannello di controllo.
3. Fare doppio clic sull’icona Sistema.
4. Passare alla pagina Avanzate.
5. Fare clic su Variabili d’ambiente.
6. Fare clic su Nuovo nella sezione Variabili di sistema. Immettere DB2DXXTEMP
per il nome della variabile ed immettere un valore, come ad esempio C:\temp.
7. Fare clic su OK, chiudere tutte le finestre e riavviare il sistema.
308 XML Extender - Amministrazione e programmazione
Glossario di XML Extender
percorso della posizione assoluto. Il percorso completo di un oggetto. Il percorso assoluto inizia al livello più alto,
detto elemento ″root″, identificato dal carattere barra (/) o barra inversa (\).
metodi di accesso e memorizzazione. Associa i documenti XML a un database DB2 mediante due metodi di accesso
e memorizzazione principali: le colonne XML e le raccolte XML. Vedere anche colonna XML e raccolta XML.
funzione di accesso. Una funzione fornita dall’utente che converte il tipo di dati del testo memorizzati in una
colonna in un tipo che possa essere elaborato da Net Search Extender.
amministrazione. L’attività di preparazione dei documenti di testo per la ricerca, la gestione degli indici e il
richiamo delle informazioni sullo stato.
tabelle di supporto di gestione. Le tabelle utilizzate da un extender del database DB2 per elaborare le richieste
utente su oggetti XML. Alcune tabelle di supporto di gestione identificano le tabelle utente e le colonne abilitate per
XML Extender. Altre tabelle del supporto di gestione contengono informazioni sugli attributi relative agli oggetti nelle
colonne abilitate. Sinonimi con la tabella di metadati.
analisi. Per calcolare i valori numerici per le caratteristiche di un’immagine e per aggiungere i valori a un catalogo
QBIC.
API. Consultare application programming interface.
API (application programming interface).
1. Un’interfaccia funzionale fornita dal sistema operativo o da un programma su licenza ordinabile separatamente.
Un’API consente a un programma dell’applicazione scritto in un linguaggio di livello superiore di utilizzare
funzioni o dati specifici del sistema operativo o dei programmi su licenza.
2. Gli extender del database DB2 forniscono API per la richiesta di UDF (user-defined function), di operazioni di
gestione, di operazioni di visualizzazione e di rilevazione modifiche alle scene video. DB2 Net Search Extender
fornisce le API per servizi di recupero informazioni, operazioni di gestione e UDF di richiesta. In DB2, una
funzione all’interno dell’interfaccia. Ad esempio, l’API di acquisizione messaggi di errore.
attributo. Consultare attributo XML.
nodo_attributo. Una rappresentazione di un attributo di un elemento.
BLOB (binary large object). Una stringa binaria la cui lunghezza può essere fino a 2 GB. Gli oggetti immagini,
audio e video sono memorizzati in un database DB2 come BLOB.
ricerca booleana. Una ricerca in cui uno o più termini sono combinati utilizzando gli operatori Booleani.
esplorazione. Per visualizzare il testo visualizzato sul monitor di un computer.
browser. Una funzione di Net Search Extender che consente di visualizzare un testo su un monitor del computer.
Vedere Browser Web.
indicizzazione B-tree. Lo schema indica nativo fornito dal motore database DB2. Crea delle voci di indice nella
struttura B-tree. Supporta i tipi di database DB2.
funzione di casting. Una funzione utilizzata per convertire istanze di un tipo di dati (di origine) in istanze di un
tipo di dati (di destinazione) differente. In generale, una funzione di casting ha lo stesso nome del tipo di dati di
destinazione. Essa ha un singolo argomento il cui tipo è il tipo di dati di origine; il tipo di ritorno è il tipo di dati di
destinazione.
CCSID. Coded Character Set Identifier.
CLOB (character large object). Una stringa di caratteri single-byte, in cui la stringa può occupare fino a 2 GB. I
CLOB hanno una codepage associata. Gli oggetti di testo che contengono caratteri single-byte sono memorizzati in un
database DB2 come CLOB.
© Copyright IBM Corp. 1999 - 2006 309
CLOB. Character large object.
code page. Un’assegnazione di caratteri grafici e di significati della funzione di controllo per tutti i punti di codice.
Ad esempio, l’assegnazione di caratteri e significati a 256 punti di codice per un codice di 8-bit.
dati della colonna. I dati memorizzati in una colonna del database DB2. Il tipo di dati può essere uno qualsiasi di
quelli supportati da DB2.
composizione. Per creare documenti XML dai dati relazionali in una raccolta XML.
condizione. Una specifica dei criteri per la selezione dei dati XML o il modo in cui unire le tabelle di raccolte XML.
DAD. Vedere Document access definition.
scambio di dati. La condivisione di dati tra le applicazioni. XML supporta lo scambio di dati senza necessità di
percorrere prima il processo di conversione dati da un formato proprietario.
origine dati. Un gestore dati relazionale o non relazionale remoto in grado di supportare l’accesso ai dati tramite un
driver ODBC che supporta le API ODBC.
flusso di dati. Informazioni restituite da una funzione API, compreso il testo (almeno un paragrafo) contenente il
termine ricercato e le informazioni per evidenziare il termine trovato in tale testo.
tipo di dati. Un attributo di colonne e valori letterali.
partizione del database. Una parte del database che consiste nei relativi dati utente, indici, file di configurazione e
registrazioni di transazione. Talvolta chiamato nodo o nodo database.
server di partizioni database. Gestisce una partizione del database. Tale server è composto da un gestore database e
dalla raccolta di dati e risorse di sistema che gestisce. Generalmente un server di partizioni database viene assegnato
a ogni sistema.
DBCLOB. Double-byte character large object.
DBCS. Double-byte character support.
decomposizione. Separa i documenti XML di una raccolta di tabelle relazionali in una raccolta XML.
funzione di casting predefinita. Esegue il casting del tipo base SQL in UDT.
vista predefinita. Una rappresentazione di dati in cui sono uniti una tabella XML e tutte le tabelle laterali associate.
disabilitazione. Per ripristinare un database o una colonna alla condizione precedente rispetto all’abilitazione per
XML Extender, rimuovendo gli elementi creati durante tale processo di abilitazione.
tipo distinto. Vedere user-defined type.
documento. Vedere documento di testo.
DAD (Document Access Definition). Un documento XML utilizzato per definire lo schema di indicizzazione per
uno schema di associazione o una colonna XML di una raccolta XML. Può essere utilizzato per abilitare una raccolta
XML o una colonna di XML Extender,
DTD (Document type definition). Una serie di dichiarazioni per attributi ed elementi XML. Il DTD definisce quali
elementi vengono utilizzati nel documento XML, in quale ordine possono essere utilizzati e quali elementi
contengono altri elementi. È possibile associare un DTD a un file DAD (document access definition) per convalidare i
documenti XML.
DBCLOB (double-byte character large object). Una stringa di caratteri double-byte o una combinazione di caratteri
single e double-byte, in cui la stringa può occupare fino a 2 GB. I DBCLOB hanno una codepage associata. Gli oggetti
di testo che contengono caratteri double-byte sono memorizzati in un database DB2 come DBCLOB.
DTD. Vedere Document type definition.
310 XML Extender - Amministrazione e programmazione
tabella di riferimento DTD (tabella DTD_REF). Una tabella che contiene DTD utilizzati per convalidare i
documenti XML. Gli utenti possono inserire i propri DTD nella tabella DTD_REF. Tale tabella viene creata quando un
database viene abilitato per XML.
tabella DTD_REF. Tabella di riferimento DTD.
repository DTD. Una tabella database DB2, denominata DTD_REF, in cui ogni riga della tabella rappresenta un
DTD con ulteriori informazioni sui metadati.
EDI. Electronic Data Interchange.
EDI (Electronic Data Interchange). Uno standard per electronic data interchange per applicazioni B2B
(business-to-business).
elemento. Vedere elemento XML.
nodo_elemento. Una rappresentazione di un elemento. Un nodo_elemento può essere l’elemento root o l’elemento
secondario.
SQL incorporato. Le istruzioni SQL codificate all’interno di un programma applicativo. Vedere SQL statico.
abilitazione. Per preparare un database o una colonna per l’utilizzo da parte di XML Extender.
carattere escape. Un carattere che indica che il carattere successivo non deve essere interpretato come carattere di
masking.
XSL (Extensible Stylesheet Language). Un linguaggio utilizzato per esprimere i fogli di stile. XSL consiste in due
parti: un linguaggio per la conversione di documenti XML e un vocabolario XML per specificare la semantica di
formattazione.
XSLT (Extensible Stylesheet Language Transformation). XSLT è un programma di utilità con cui si applicano i fogli
di stile XSL ai documenti XML, convertendo i documenti XML di origine in HTML, testo o altri tipi di documenti
XML.
file esterno. Un file presente in un file system esterno a DB2.
variabile di riferimento file. Una variabile di programmazione, utile per spostare un LOB in e da un file su una
stazione di lavoro client.
chiave esterna. Una chiave che fa parte della definizione di un vincolo referenziale e che consiste in una o più
colonne di una tabella dipendente.
GB (gigabyte). Un bilione di (10⁹) byte. Quando si fa riferimento alla capacità di memoria , 1 073 741 824 byte.
variabile host. Una variabile in un programma dell’applicazione a cui è possibile fare riferimento nelle istruzioni
SQL incorporate. Le variabili host sono il meccanismo primario per la trasmissione di dati tra aree di lavoro di un
programma dell’applicazione e di un database.
JDBC (Java Database Connectivity). Un’API (application programming interface) con le stesse caratteristiche di
ODBC (Open Database Connectivity) ma progettata in modo specifico per l’utilizzo da parte di applicazioni database
Java. Inoltre, per database che non dispone di un driver JDBC, JDBC include un JDBC al bridge ODBC, che è un
meccanismo per la conversione di JDBC in ODBC; JDBC presenta l’API JDBC alle applicazioni del database java e la
converte in ODBC. JDBC è stato sviluppato da Sun Microsystems, Inc.e da diversi partner e fornitori.
JDBC. Java Database Connectivity.
unione. Un’operazione relazionale che consente il richiamo di dati da una o più tabelle basate sui valori di colonna
corrispondenti.
vista join. Una vista del database DB2 creata dall’istruzione ″CREATE VIEW″ che unisce una o più tabelle.
KB (kilobyte). Mille (10³) byte. Quando si fa riferimento alla capacità di memoria, 1024 byte.
LOB (large object). Una sequenza di byte, in cui la lunghezza può arrivare fino a 2 GB. Un LOB può essere di tre
tipi: BLOB (binary large object), CLOB (character large object) o DBCLOB (double-byte character large object).
Glossario di XML Extender 311
LOB. Large object.
indicatore di posizione LOB. Un valore di dimensioni ridotte (4-byte) memorizzato in una variabile host, che può
essere utilizzato in un programma per fare riferimento a un LOB di dimensioni maggiori in un database DB2.
Utilizzando un indicatore di posizione LOB, un utente può gestire il LOB come se fosse memorizzato in una normale
variabile host e senza necessità di trasferire il LOB tra l’applicazione sul sistema client e il server di database.
percorso. Il percorso è una sequenza di tag XML che identifica un attributo o un elemento XML. Il percorso
identifica la struttura del documento XML, indicando il contesto per l’attributo o elemento. Una singola barra (/) del
percorso indica che il contesto è l’intero documento. Il percorso viene utilizzato nelle UDF di estrazione per
identificare gli attributi e gli elementi da estrarre. Il percorso viene utilizzato anche nel file DAD per specificare
l’associazione tra un elemento o attributo XML e una colonna database DB2 durante la definizione dello schema di
indicizzazione per la colonna XML.
indicatore di posizione. Un puntatore che è possibile utilizzare per individuare un oggetto. In DB2, l’indicatore di
posizione LOB (large object block) è il tipo di dati che individua i LOB.
nodo logico. Un nodo su un processore quando più nodi sono assegnati a tale processore.
schema di associazione. Una definizione delle modalità di rappresentazione dati XML in un database relazionale.
Lo schema di associazione è specificato nel DAD. XML Extender fornisce due tipi di schemi di associazione:
associazione SQL e associazione del nodo di database relazionale (RDB_node).
MB (megabyte). Un milione di (10⁶) byte. Quando si fa riferimento alla capacità di memoria , 1 048 576 byte.
tabella di metadati. Vedere tabella del supporto di gestione.
ricorrenze multiple. Un’indicazione della possibile ricorrenza multipla di un elemento in un documento. Le
ricorrenze multiple vengono specificate nel DAD.
oggetto. Nella programmazione orientata all’oggetto, un’astrazione che consiste in dati e operazioni associate a tali
dati.
ODBC. Open Database Connectivity.
Open Database Connectivity. Un’API (application programming interface) standard per l’accesso ai dati su sistemi
di gestione di database relazionali e non. Utilizzando tale API, le applicazioni database possono accedere ai dati
memorizzati nei sistemi di gestione database su diversi computer anche se ogni sistema di gestione database utilizza
un formato differente di memorizzazione dati e di interfaccia di programmazione. ODBC si basa sulla specifica CLI
(call level interface) di X/Open SQL Access Group ed è stato sviluppato da DEC (Digital Equipment Corporation),
Lotus, Microsoft e Sybase. È in contrasto con Java Database Connectivity.
funzione di carico. Un nome funzione per cui esistono più istanze della funzione.
espressione di percorso. Vedere percorso.
predicato. Un elemento di una condizione di ricerca che esprime o implica un’operazione di confronto.
chiave primaria. Una chiave univoca che fa parte della definizione di una tabella. Una chiave primaria è la chiave
parent predefinita di una definizione di vincolo referenziale.
procedura. Vedere procedura memorizzata.
RDB_node. Nodo del database relazionale.
associazione RDB_node. La posizione del contenuto di un elemento XML o il valore di un attributo XML, definiti
da RDB_node. XML Extender utilizza questa associazione per determinare se memorizzare o richiamare i dati XML.
nodo del database relazionale (RDB_node). Un nodo che contiene una o più definizioni di elemento per le tabelle,
le colonne opzionali e le condizioni opzionali. Le tabelle e le colonne vengono utilizzate per definire la modalità di
memorizzazione dei dati XML nel database. La condizione specifica i criteri per la selezione dei dati XML o la
modalità di unione delle tabelle di raccolte XML.
serie di risultati. Una serie di righe restituite da una procedura memorizzata.
312 XML Extender - Amministrazione e programmazione
tabella di risultati. Una tabella che contiene le righe come risultato di una query SQL o dell’esecuzione di una
procedura memorizzata.
elemento root. L’elemento principale di un documento XML.
ID root. Un identificativo univoco che associa tutte le tabelle laterali alla tabella dell’applicazione.
SBCS. Single-byte character support.
funzione scalare. Un’operazione SQL che produce un singolo valore da un altro valore ed è espressa come nome
funzione, seguito da un elenco di argomenti racchiusi tra parentesi.
schema. Una raccolta di oggetti database quali tabelle, viste, indici o trigger. Essa fornisce una classificazione logica
degli oggetti database.
argomento di ricerca. Le condizioni specificate durante una ricerca, che consistono in uno o diversi termini di
ricerca e nei relativi parametri.
ricerca sezione. Fornisce la ricerca di un testo in una sezione che può essere definita dall’applicazione. Per
supportare la ricerca di testo strutturale, è possibile definire una sezione in base al percorso abbreviato di XPath.
tabella laterale. Ulteriori tabelle create da XML Extender per migliorare le prestazioni durante la ricerca di elementi
o attributi in una colonna XML.
percorso della posizione semplice. Una sequenza di nomi del tipo di elemento collegati da una barra singola (/).
associazione SQL. Una definizione della relazione del contenuto di un elemento XML o del valore di un attributo
XML con i dati relazionali, utilizzando una o più istruzioni SQL e il modello dati XSLT. XML Extender utilizza la
definizione per determinare se memorizzare o richiamare i dati XML. L’associazione SQL viene definita con
l’elemento SQL_stmt in DAD.
SQL statico. Istruzioni SQL incorporate in un programma e preparate durante il processo di preparazione del
programma e prima dell’esecuzione del programma. Dopo la preparazione, un’istruzione SQL statica non cambia,
sebbene possano cambiare i valori delle variabili host specificate dall’istruzione.
procedura memorizzata. Un blocco di costrutti procedurali e istruzioni SQL incorporate memorizzate in un database
e che è possibile chiamare in base al nome. Le procedure memorizzate consentono a un programma dell’applicazione
di essere eseguito in due parti. Una parte viene eseguita sul client e l’altra sul server. Ciò consente a una chiamata di
produrre diversi accessi al database.
indice di testo strutturale. Per indicizzare le chiavi di testo basate sulla struttura ad albero del documento XML,
utilizzando IBM DB2 Net Search Extender.
interrogazione secondaria. Un’istruzione SELECT completa utilizzata all’interno di una condizione di ricerca di
un’istruzione SQL.
tablespace. Un’astrazione di una raccolta di contenitori in cui sono memorizzati gli oggetti database. Un tablespace
fornisce un livello di riferimenti indiretti tra un database e le tabelle memorizzate al suo interno. Un tablespace:
v Ha spazio sulle periferiche di memoria dei supporti assegnate ad esso.
v Contiene tabelle create al suo interno. tali tabelle utilizzeranno spazio nei contenitori che appartengono al
tablespace. I dati, l’indice, il campo long e le parti LOB di una tabella possono essere memorizzati nello stesso
tablespace o possono essere suddivisi in tablespace separati.
terabyte. Un trilione (1012) di byte. Da dieci a dodici elevazioni a potenza di un byte. Quando si fa riferimento alla
capacità di memoria , 1 099 511 627 776 byte.
text_node. Una rappresentazione del testo CDATA di un elemento.
top element_node. Una rappresentazione dell’elemento root del documento XML in DAD.
traccia. L’azione di memorizzazione informazioni in un file può essere utilizzata in un secondo momento per
rilevare la causa di un errore.
Glossario di XML Extender 313
trigger. La definizione di una serie di azioni da eseguire in caso di modifica di una tabella. I trigger possono essere
utilizzati per eseguire azioni come la convalida di dati di input, la creazione automatica di un valore per una riga
appena inserita, la lettura da altre tabelle per scopi di riferimenti incrociati o la scrittura in altre tabelle per scopi di
controllo. I trigger vengono spesso utilizzati per il controllo integrità o per rafforzare le regole aziendali.
UDF. Vedere user-defined function.
UDT. Vedere user-defined type.
URL (uniform resource locator). Un indirizzo che specifica un server HTTP e, facoltativamente, una directory e un
nome file, ad esempio: http://www.ibm.com/software /data/db2/extenders.
UNION. Un’operazione SQL che combina i risultati di due istruzioni Select. UNION viene utilizzato spesso per
unire elenchi di valori ottenuti da diverse tabelle.
URL. Uniform resource locator.
UDT (user-defined distinct type). Un tipo di dati creati da un utente di DB2, in contrasto con un tipo di dati
fornito dal database DB2, come ad esempio LONG VARCHAR.
UDF (user-defined function). Una funzione definita da un utente in DB2. Una volta definita, la funzione può essere
utilizzata nelle query SQL e negli oggetti video. Ad esempio, è possibile creare delle UDF per acquisire il formato di
compressione di un video o per restituire l’intervallo di campionamento di un file audio. La suddetta funzione
fornisce una modalità di definizione della funzionalità di oggetti di un tipo specifico.
UDF (user-defined function). Una funzione SQL creata da un utente di DB2, in contrasto con una funzione SQL
fornita da DB2. Net Search Extender fornisce funzioni di ricerca, tra cui CONTAINS, nel formato di UDF.
UDT (user-defined type). Un tipo di dati definito da un utente in DB2. Gli UDT vengono utilizzati per differenziare
un LOB da un altro. Ad esempio, è possibile creare un UDT per oggetti di immagini e altri per oggetti audio.
Sebbene vengano memorizzati come BLOB, gli oggetti di immagini e audio vengono considerati come tipi distinti dai
BLOB e differenti tra di loro.
UDF (user-defined function). Una funzione definita nel sistema di gestione del database e a cui si può fare
riferimento nelle interrogazioni SQL. Può essere una delle seguenti funzioni:
v Una funzione esterna, in cui il corpo della funzione è scritto in un linguaggio di programmazione i cui argomenti
sono valori scalari e viene prodotto un risultato scalare per ogni richiamo.
v Una funzione di origine, implementata da un’altra funzione incorporata o UDF, già nota a DBMS. Tale funzione
può essere una funzione scalare o una funzione di colonna (di aggregazione) e restituisce un singolo valore da una
serie di valori (ad esempio, MAX o AVG).
UDT (user-defined type). Un tipo di dati non nativo nel gestore database, creato da un utente. Vedere tipo distinto.
tabella utente. Una tabella creata per l’applicazione e utilizzata da essa.
convalida. Il processo di utilizzo di un DTD per garantire che il documento XML sia valido e per consentire ricerche
strutturate su dati XML. Il DTD è memorizzato nel repository di DTD.
documento valido. Un documento XML che dispone di un DTD associato. Per essere valido, il documento XML non
può violare le regole sintattiche specificate nel relativo DTD.
video. Appartenente alla parte di informazioni registrate che è possibile visualizzare.
video clip. Una sezione di materiale filmato o videoregistrato.
indice video. Un file utilizzato da Video Extender per individuare una specifica istantanea o fotogramma in un video
clip.
browser Web. Un programma client che avvia le richieste a un server Web e memorizza le informazioni restituite
dal server.
documento in formato corretto. Un documento che corrisponde al documento contrassegnato di produzione,
rispetta tutti i criteri di forma corretta indicati nella specifica w3.org e ognuna delle entità analizzate a cui si fa
riferimento direttamente o indirettamente nel documento è un documento in formato corretto.
314 XML Extender - Amministrazione e programmazione
carattere jolly. Vedere carattere di masking.
XML. eXtensible Markup Language.
attributo XML. Qualsiasi attributo specificato da ATTLIST nell’elemento XML nello schema DTD o XML. XML
Extender utilizza il percorso per identificare un attributo.
raccolta XML. Una raccolta di tabelle di relazione che presenta i dati per comporre i documenti XML o da
decomporre dai documenti XML.
colonna XML. Una colonna nella tabella dell’applicazione che è stata abilitata per XML Extender.
elemento XML. Qualsiasi tag XML o ELEMENT come viene specificata nello schema XML o DTD XML. XML
Extender utilizza il percorso per identificare un elemento.
oggetto XML. Equivalente a un documento XML.
XPath. (XML Path Language) Un linguaggio per indirizzare le parti di un documento XML. XML Path Language è
progettato per essere utilizzato da XSLT. Ogni percorso può essere espresso utilizzando la sintassi definita per XPath.
tabella XML. Una tabella dell’applicazione che include una o più colonne di XML Extender.
tag XML. Qualsiasi tag di linguaggio con markup XML valida, principalmente l’elemento XML. L’elemento e la tag
dei termini vengono utilizzate in modo interscambiabile.
UDF XML. UN’UDF (user-defined function) del database DB2 fornita da XML Extender.
UDT XML. UN UDT (user-defined type) del database DB2 fornito da XML Extender.
XPath. Un linguaggio per indirizzare le parti di un documento XML.
modello di dati XPath. La struttura ad albero utilizzata per modellare ed esplorare un documento XML utilizzando
i nodi.
XSL. Extensible Stylesheet Language.
XSLT. Extensible Stylesheet Language Transformation.
Glossario di XML Extender 315
316 XML Extender - Amministrazione e programmazione
Informazioni particolari
È possibile che negli altri paesi l’IBM non offra i prodotti, le funzioni o i servizi
illustrati in questo documento. Consultare il rappresentante IBM locale per
informazioni sui prodotti o sui servizi disponibili nel proprio paese. Ogni
riferimento relativo a prodotti, programmi o servizi IBM non implica che solo quei
prodotti, programmi o servizi IBM possono essere utilizzati. In sostituzione a quelli
forniti dall’IBM, è possibile usare prodotti, programmi o servizi funzionalmente
equivalenti che non comportino violazione dei diritti di proprietà intellettuale o di
altri diritti dell’IBM. È comunque responsabilità dell’utente valutare e verificare la
possibilità di utilizzare altri prodotti, programmi o servizi non IBM.
L’IBM può avere brevetti o domande di brevetti in corso relativi a quanto trattato
nella presente pubblicazione. La fornitura di questa pubblicazione non implica la
concessione di alcuna licenza su di essi. Chi desiderasse ricevere informazioni
relative alle licenze può rivolgersi per iscritto a:
IBM Director of Licensing
IBM Corporation
Schoenaicher Str. 220
D-7030 Boeblingen
Deutschland
Per richieste di licenze relative ad informazioni double-byte (DBCS), contattare il
Dipartimento di Proprietà Intellettuale IBM nel proprio paese o inviare richieste
per iscritto a:
IBM World Trade Asia Corporation
Licensing
2-31 Roppongi 3-chome, Minato-ku
Tokyo 106, Japan
Il seguente paragrafo non è valido per il Regno Unito o per tutti i paesi le cui
leggi nazionali siano in contrasto con le disposizioni in esso contenute:
L’INTERNATIONAL BUSINESS MACHINES CORPORATION FORNISCE
QUESTA PUBBLICAZIONE “NELLO STATO IN CUI SI TROVA” SENZA
ALCUNA GARANZIA, ESPLICITA O IMPLICITA, IVI INCLUSE EVENTUALI
GARANZIE DI COMMERCIABILITÀ ED IDONEITÀ AD UNO SCOPO
PARTICOLARE. Alcuni stati non consentono la rinuncia a garanzie esplicite o
implicite in determinate transazioni, quindi, la presente dichiarazione potrebbe non
essere a voi applicabile.
Questa pubblicazione potrebbe contenere imprecisioni tecniche o errori tipografici.
Le informazioni incluse in questo documento vengono modificate su base
periodica; tali modifiche verranno incorporate nelle nuove edizioni della
pubblicazione. L’IBM si riserva il diritto di apportare miglioramenti e/o modifiche
al prodotto o al programma descritto nel manuale in qualsiasi momento e senza
preavviso.
Tutti i riferimenti a siti Web non dell’IBM sono forniti unicamente a scopo di
consultazione. I materiali contenuti in tali siti Web non fanno parte di questo
prodotto IBM e l’utente si assume ogni rischio relativo al loro utilizzo.
© Copyright IBM Corp. 1999 - 2006 317
L’IBM può utilizzare o divulgare le informazioni ricevute dagli utenti secondo le
modalità ritenute appropriate, senza alcun obbligo nei loro confronti.
Coloro che detengono la licenza su questo programma e desiderano avere
informazioni allo scopo di consentire: (i) uno scambio di informazioni tra
programmi indipendenti e altri (compreso questo) e (ii) l’uso reciproco di tali
informazioni, dovrebbero rivolgersi a:
IBM Canada Limited
Office of the Lab Director
8200 Warden Avenue
Markham, Ontario
L6G 1C7
CANADA
Queste informazioni possono essere rese disponibili, secondo condizioni
contrattuali appropriate, compreso, in alcuni casi, il pagamento in addebito.
Il programma concesso in licenza descritto nel presente documento e tutto il
materiale concesso in licenza disponibile sono forniti da IBM in base alle clausole
dell’Accordo per Clienti IBM, IBM IPLA (International Program License
Agreement) o qualsiasi altro accordo equivalente tra le parti.
Qualsiasi informazione relativa alle prestazioni è stata verificata in un ambiente
controllato. Di conseguenza l’utilizzo del prodotto in ambienti operativi diversi
può comportare risultati sensibilmente diversi. Alcune rilevazioni possono essere
state effettuate su sistemi a livello di sviluppo e non si garantisce in alcun modo,
dunque, che siano uguali alle rilevazioni eseguite sui vari sistemi disponibili.
Inoltre, è possibile che ad alcune di queste rilevazioni si sia pervenuti tramite
estrapolazione. I risultati reali potrebbero variare. È necessario che gli utenti
confrontino i dati in base agli ambienti utilizzati.
Le informazioni relative a prodotti non IBM sono state ottenute dai fornitori di tali
prodotti. L’IBM non ha verificato tali prodotti e non può garantire l’accuratezza
delle prestazioni. Eventuali commenti relativi alle prestazioni dei prodotti non IBM
devono essere indirizzati ai fornitori di tali prodotti.
Le dichiarazioni relative a futuri intenti o obiettivi IBM sono soggette a modifiche
senza preavviso.
Questa pubblicazione contiene esempi di dati e prospetti usati quotidianamente
nelle operazioni aziendali. Pertanto può contenere nomi di persone, società, marchi
e prodotti. Tutti i nomi contenuti nel manuale sono fittizi e ogni riferimento a nomi
ed indirizzi reali è puramente casuale.
LICENZA RELATIVA AI DIRITTI D’AUTORE:
Queste informazioni contengono programmi applicativi di esempio in lingua
originale che illustrano le tecniche di programmazione su diverse piatteforme
operative. È possibile copiare, modificare e distribuire questi programmi di
esempio sotto qualsiasi forma senza alcun pagamento alla IBM allo scopo di
sviluppare, utilizzare, commercializzare o distribuire i programmi applicativi in
conformità alle API (application programming interface) a seconda della
piattaforma operativa per cui tali esempi di programmi sono stati scritti. Questi
esempi non sono stati testati approfonditamente tenendo conto di tutte le
condizioni possibili. La IBM, quindi, non può garantire o assicurare l’affidabilità, la
praticità o il funzionamento di questi programmi.
318 XML Extender - Amministrazione e programmazione
Ogni copia o ogni parte di questi programmi campione o di qualsiasi lavoro
derivato, deve includere la seguente informativa relativa ai diritti d’autore:
© (nome della vostra società) (anno). Parti di questo codice derivano dalla IBM Corp.
Programmi di esempio. © Copyright IBM Corp. _immettere l’anno o gli anni_. Tutti i
diritti riservati.
Marchi
I nomi di società, prodotti o servizi identificati nei documenti della
documentazione di DB2 Versione 9 possono essere marchi o servizi della
International Business Machines Corporation o di altre società. Le informazioni sui
marchi della IBM Corporation negli Stati Uniti e/o negli altri paesi sono situate in
http://www.ibm.com/legal/copytrade.shtml.
I seguenti termini sono marchi di altre società e sono stati utilizzati in minimo un
documento della libreria DB2:
Microsoft, Windows, Windows NT e il logo Windows sono marchi della Microsoft
Corporation negli Stati Uniti e/o negli altri paesi.
Intel, Itanium, Pentium e Xeon sono marchi della Intel Corporation negli Stati Uniti
e/o negli altri paesi.
Java e tutti i marchi a base Java sono marchi della Sun Microsystems, Inc. negli
Stati Uniti e/o altri paesi.
UNIX è un marchio registrato della The Open Group negli Stati Uniti e/o altri
paesi.
Linux è un marchio della Linus Torvalds negli Stati Uniti e/o negli altri paesi.
Nomi di altri prodotti, società e servizi possono essere marchi di altre società.
Informazioni particolari 319
320 XML Extender - Amministrazione e programmazione
Indice analitico
Aaccess and storage method
choosing an 36
planning 36
XML collections 167
XML columns 167
access methodchoosing an 36
introduction 5
planning an 36
XML collections 89
XML column 74
addingnodes 66
administrationdxxadm command 125
support tablesDTD_REF 261
XML_USAGE 261
tools 36
administration stored proceduresdxxDisableCollection() 190
dxxDisableColumn() 189
dxxDisableDB() 187
dxxEnableCollection() 189
dxxEnableColumn() 187
dxxEnableDB() 186
administration wizardEnable a Column window 53
logging in 36
specifying address 36
specifying JDBC driver 36
specifying user ID and password 36
administrative support tablesDTD_REF 261
XML_USAGE 261
associazione RDB_nodechiave composta per la
decomposizione 48
condizioni 47
determinazione per le raccolte
XML 44
requisiti 47
requisiti di decomposizione 48
specifica del tipo di colonna per
decomposizione 48
associazione SQLclausola FROM 46
clausola ORDER BY 46
clausola SELECT 45
clausola WHERE 46
determinazione per le raccolte
XML 43
requisiti 45
Schema di associazione SQL 45
attribute_node 41, 50, 106, 167
attributo orderByper la decomposizione 48
per più ricorrenze 48
raccolte XML 48
BB-tree indexing 75
bindingstored procedures 183
Ccasting function
retrieval 78, 139
storage 76, 136
update 82, 155
CCSID (coded character set identifier)declare in USS 90, 94, 295
chiave compostaper la decomposizione 48
raccolte XML 48
chiave primaria per la
decomposizione 48
clausola FROM 46
clausola ORDER BY 46
clausola SELECT 45
clausola WHERE 46
client code page 295
code pagesclient 295
configuring locale settings 295
consistent encoding in USS 295
consistent encodings and
declarations 295
conversionscenarios 295
data loss 295
database 295
DB2 assumptions 295
DB2CODEPAGE registry
variable 295
declaring an encoding 295
document encoding consistency 295
encoding declaration 295
exporting documents 295
importing documents 295
legal encoding declarations 295
line endings 295
preventing inconsistent
documents 295
server 295
supported encoding declarations 295
terminology 295
UDFs and stored procedures 295
Windows NT UTF-8 limitation 295
XML Extender assumptions 295
colonne XMLdeterminazione UDT della
colonna 38
elementi e attributi da ricercare 39
file DAD, pianificazione per 39
il DAD per 39
pianificazione 38
quando utilizzarlo 38
scenari 38
column typesdecomposition 106
command optionsdisable_collection 131
disable_column 129
disable_db 127
enable_collection 130
enable_column 128
enable_db 126
complexType element 117
composing XML documents 17
composite keysfor decomposition 106
XML collections 106
compositiondxxGenXML() 90
dxxRetrieveXML() 90
overriding the DAD file 175
stored proceduresdxxGenXML() 17, 191, 197
dxxmqGen() 232
dxxmqRetrieve() 236
dxxRetrieveXML() 194, 200
XML collection 90
conditionsRDB_node mapping 106
SQL mapping 101, 104
condizioniassociazione RDB_node 47
associazione SQL 43, 46
facoltativo 47
condizioni joinassociazione RDB_node 47
associazione SQL 46
consistent documents 295
Content() functionfor retrieval 78
retrieval functions using 139
XMLFile to a CLOB 139
convalidaimpatto di prestazioni 40
convalida dei dati XMLconsiderazioni 40
decisione 40
requisiti DTD 40
conversionscode pages 295
creatingnodes 66
XML tables 52
DDAD
definizioni nodoRDB_node 47
DAD (Document Access Definition)file
attribute_node 167
bind step for USS encodings 295
CCSIDs in USS 90, 94, 295
© Copyright IBM Corp. 1999 - 2006 321
DAD (Document Access Definition)
(Continua)file (Continua)
creating for XML collections 62
declaring the encoding 295
DTD for the 171
editing for XML collections 62
element_node 106, 167
examples 287
for XML columns 165, 167
introduction 5
node definitions 167
overriding 175
RDB_node 106
root element_node 106
root_node 167
samples 287
size limit 167, 305
text_node 167
data loss, inconsistent encodings 295
databaserelazionale 42
databasescode page 295
enabling for XML 51
relational 101
dati della colonnaUDT disponibili 38
DB2CODEPAGEregistry variable 295
DB2XML 261
DTD_REF table schema 261
schema for stored procedures 89
schema for UDFs and UDTs 136
XML_USAGE table schema 261
decomposing an XML collectioncollection table limit 305
composite key 106
DB2 table sizes 94
dxxInsertXML() 94
dxxShredXML() 94
of XML collections 94
specifying the column type for 106
specifying the orderBy attribute 106
specifying the primary key for 106
stored proceduresdxxInsertXML() 203
dxxmqInsert() 246
dxxmqInsertAll 250
dxxmqInsertAllCLOB() 251
dxxmqInsertCLOB() 248
dxxmqShred() 241
dxxmqShredAll() 242
dxxShredXML() 202
using RDB_node mapping 66
decomposizionechiave composta 48
dimensioni tabelle DB2 50
specifica del tipo di colonna per 48
specifica dell’attributo orderBy 48
specifica della chiave primaria per 48
deletingnodes 66
XML collections 98
dimensioni tabelle, per la
decomposizione 50
disable_collection command 131
disable_column command 129
disable_db command 127
disablingadministration command 125
databases for XML, stored
procedure 187
disable_collection command 131
disable_column command 129
disable_db command 127
stored procedure 187, 189, 190
XML collections 114
stored procedure 190
XML columnsstored procedure 189
document encoding declaration 295
document structure, maintaining 74
document type definition 52
DTDavailability 4
for getting started lessons 17
for the DAD 171
planning 17
publication 4
repositoryDTD_REF 5, 261
storing in 52
using multiple 50
utilizzo di più 40
DTD_REF table 52
column limits 305
inserting a DTD 52
schema 261
DTDID 261
DVALIDATE 161
DXX_SEQNO for multiple occurrence 57
dxxadm commanddisable_collection command 131
disable_column command 129
disable_db command 127
enable_collection command 130
enable_column command 128
enable_db command 126
introduction to 125
syntax 125
dxxDisableCollection() stored
procedure 190
dxxDisableColumn() stored
procedure 189
dxxDisableDB() stored procedure 187
dxxEnableCollection() stored
procedure 189
dxxEnableColumn() stored
procedure 187
dxxEnableDB() stored procedure 186
dxxGenXML() 17
dxxGenXML() stored procedure 90, 191,
197
dxxInsertXML() stored procedure 94,
203
dxxmqGen() stored procedure 232
dxxmqInsert() stored procedure 246
dxxmqInsertAll() stored procedure 250
dxxmqInsertAllCLOB() stored
procedure 251
dxxmqInsertCLOB() stored
procedure 248
dxxmqRetrieve() stored procedure 236
dxxmqShred() stored procedure 241
dxxRetrieveXML() stored procedure 90,
194, 200
DXXROOT_ID 75
dxxShredXML() stored procedure 94,
202
dxxtrc command 263, 264
dynamically overriding the DAD file,
composition 175
Eelement_node 41, 48, 106, 167
Enable a Column window 53
enable_collection keyword 130
enable_column keyword 128
enable_db keywordcreating XML_USAGE table 261
option 126
enablingXML collections 112
encodingCCSID declarations in USS 90, 94,
295
XML documents 295
environment variablesCLASSPATH 36
existing DB2 data 89
Extensible Markup Language (XML)in XML documents 3
extractChar() function 148
extractChars() function 148
extractCLOB() function 151
extractCLOBs() function 151
extractDate() function 152
extractDates() function 152
extractDouble() function 146
extractDoubles() function 146
extracting functionsdescription 135
extractChar() 148
extractChars() 148
extractCLOB() 151
extractCLOBs() 151
extractDate() 152
extractDates() 152
extractDouble() 146
extractDoubles() 146
extractReal() 147
extractReals() 147
extractSmallint() 145
extractSmallints() 145
extractTime() 153
extractTimes() 153
extractTimestamp() 154
extractTimestamps() 154
extractVarchar() 149
extractVarchars() 149
introduction to 143
table of 78
extractReal() function 147
extractReals() function 147
extractSmallint() function 145
extractSmallints() function 145
extractTime() function 153
extractTimes() function 153
extractTimestamp() function 154
322 XML Extender - Amministrazione e programmazione
extractTimestamps() function 154
extractVarchar() function 149
extractVarchars() function 149
Ffile DAD
attribute_node 41
definizioni nodoattribute_node 41
element_node 41
root_node 41
text_node 41
element_node 41, 47
element_node root 47
limite dimensione 39, 40
per colonne XML 39, 40
pianificazione per il 39, 40
colonna XML 39
raccolte XML 39
RDB_node 47
root_node 41
text_node 41
FROM clauseSQL mapping 104
function pathadding DB2XML schema 136
functionscasting 76, 78, 82
Content(): from XMLFILE to
CLOB 139
extractChar() 148
extractChars() 148
extractCLOB() 151
extractCLOBs() 151
extractDate() 152
extractDates() 152
extractDouble() 146
extractDoubles() 146
extracting 143
extractReal() 147
extractReals() 147
extractSmallint() 145
extractSmallints() 145
extractTime() 153
extractTimes() 153
extractTimestamp() 154
extractTimestamps() 154
extractVarchar() 149
extractVarchars() 149
generate_unique 135
limitations when invoking from
JDBC 87
limits 305
MQReadAllXML 212
MQReadAllXMLCLOB 215
MQReadXML 210
MQReadXMLCLOB 214
MQReceiveAllXML 219
MQReceiveXML 217
MQReceiveXMLCLOB 223
MQSENDXML 225
MQSENDXMLFILE 226
MQSendXMLFILECLOB 228
MQSeries 208
retrievaldescription 135
functions (Continua)retrieval (Continua)
from external storage to memory
pointer 139
from internal storage to external
server file 139
introduction 139
XML data 78
storage 76, 135, 136
update 82, 135, 155
XML columns 135
XMLCLOBFromFile() 136
XMLFile to a CLOB 139
XMLFileFromCLOB() 136, 137
XMLFileFromVarchar() 136, 138
XMLVarcharFromFile() 136, 139
Hhighlighting conventions vii
Iimporting
DTD 52
include filesfor stored procedures 183
inconsistentdocument 295
indexing 75
side tables 58, 75
structural-text 75
XML columns 75
XML documents 75
Information Center, including this book
in vii
installingthe 35
JJava database connectivity (JDBC)
limitations when invoking UDFs 87
JDBC (Java database connectivity)limitations when invoking UDFs 87
JDBC address, for wizard 36
JDBC driver, for wizard 36
join conditionsRDB_node mapping 106
SQL mapping 104
Llimits
stored procedure parameters 90, 261
XML Extender 305
lineendings, code page
considerations 295
localessettings 295
location pathintroduction 110
syntax 111
XPath 5
location path (Continua)XSL 5
loggingin, for wizard 36
Mmaintaining
document structure 74
mapping schemedetermining RDB_node mapping 101
determining SQL mapping 101
figure of DAD file 36
for XML collections 36
for XML columns 36
FROM clause 104
introduction 89
ORDER BY clause 104
RDB_node mapping
requirements 106
SELECT clause 104
SQL mapping requirements 104
SQL mapping scheme 101
SQL_stmt 101
WHERE clause 104
messagesXML 270
metodo di accesso e memorizzazionecolonne XML 40, 41
raccolte XML 40, 41
migratingXML Extender to Version 8 35
migrazioneXML Extender alla Versione 8 35
MQPublishXML function 208
MQRcvAllXML function 221
MQRcvXMLCLOB function 224
MQReadAllXML function 212
MQReadAllXMLCLOB function 215
MQReadXML function 210
MQReadXMLCLOB function 214
MQReceiveAllXML function 219
MQReceiveXML function 217
MQReceiveXMLCLOB function 223
MQSENDXML function 225
MQSENDXMLFILE function 226
MQSendXMLFILECLOB function 228
MQSeriesfunctions 208
multiple DTDsXML columns 50
multiple occurrenceaffecting table size 94
deleting elements and attributes 98
DXX_SEQNO 57
one column per side table 57
order of elements and attributes 94
orderBy attribute 106
preserving the order of elements and
attributes 98
recomposing documents with 106
searching elements and attributes 84
updating collections 98
updating elements and attributes 82,
98, 155
updating XML documents 82, 155
multiple-occurrence attribute 17
Indice analitico 323
Nnodes
adding 66
attribute_node 167
creating 66
DAD file configuration 17, 59, 62, 66
deleting 66
element_node 167
RDB_node 106
removing 66
root_node 167
text_node 167
nodiattribute_node 41
element_node 41
RDB_node 47
root_node 41
text_node 41
nonamespacelocation 50
Ooperating systems
supported by DB2 3
Operations Navigatorstarting the trace 263
stopping the trace 264
ORDER BY clauseSQL mapping 104
orderBy attributefor decomposition 106
for multiple occurrence 106
XML collections 106
overloaded functionContent() 139
overrideTypeNo override 175
SQL override 175
XML override 175
overridingDAD file 175
Pparameter markers in functions 87
performanceindexing side tables 75
searching XML documents 75
stopping the trace 264
pianificazionecome ricercare i dati della colonna
XML 39
convalida di più DTD 40
determinazione UDT della
colonna 38
di colonne XML 38
per colonne XML 39
per il DAD 39, 40
per raccolte XML 40
schema di associazione 42
schema di associazione di raccolte
XML 42
selezione della convalida di dati
XML 40
più DTDraccolte XML 40
planningaccess methods 36
DAD 167
DTD 17
indexing XML columns 75
mapping schemes 101
mapping XML document and
database 17
side tables 57
storage methods 36
validating with multiple DTDs 50
XML collections 167
XML collections mapping
scheme 101
primary keysdecomposition 106
side tables 75
problem determination 263
processing instructions 109, 167
Rraccolte XML
associazione di schemi 43
associazione RDB_node 44
associazione SQL 43
determinazione di uno schema di
associazione per 42
file DAD, pianificazione per 39
quando utilizzarlo 38
scenari 38
schema di associazione 42
RDB_node mappingrequirements 106
registry variablesDB2CODEPAGE 295
removingnodes 66
repository, DTD 52
retrieval functionsContent() 139
description of 135
from external storage to memory
pointer 139
from internal storage to external
server file 139
introduction to 139
XMLFile to a CLOB 139
retrieving dataattribute values 78
return codesstored procedures 265
UDF 264
ricorrenze multipleattributo orderBy 48
determinazione della dimensione
tabelle 50
ricomposizione di documenti con 48
ROOT IDindexing considerations 75
specifying 53
root_node 41, 167
Ssamples
creatingXML 17
document access definition (DAD)
files 287
getstart.xml sample XML
document 287
schema di associazioneclausola FROM 46
clausola ORDER BY 46
clausola SELECT 45
clausola WHERE 46
determinazione dell’associazione
RDB_node 44
determinazione dell’associazione
SQL 43
figura del file DAD 37
per colonne XML 37
per raccolte XML 37
requisiti 45
requisiti di associazione
RDB_node 47, 48
requisiti di associazione SQL 45
Schema di associazione SQL 45
SQL_stmt 42
schema namesfor stored procedures 89
schemabindings 50
schemasattributes 118
DB2XML 51, 136
declaring data types in 118
declaring elements in 118
DTD_REF table 52, 261
validating using 50
XML_USAGE table 261
searchingXML documents
by structure 84
using DB2 Text Extender 84
SELECT clause 104
server code page 295
side tablesindexing 58, 75
planning 57
searching 84
specifying ROOT ID 53
updating 82
size limitsstored procedures 90, 261
XML Extender 305
software requirementsXML Extender 35
SQL mapping 59
creating a DAD file 17
determining for XML collections 101
requirements 104
SQL override 175
SQL_stmtclausola FROM 46
clausola ORDER_BY 46
clausola SELECT 45
clausola WHERE 46
FROM clause 104
ORDER_BY clause 104
SELECT clause 104
324 XML Extender - Amministrazione e programmazione
SQL_stmt (Continua)WHERE clause 104
startingXML Extender 35
storagefunctions
description 135
introduction 136
storage UDF table 76
XMLCLOBFromFile() 136
XMLFileFromCLOB() 136, 137
XMLFileFromVarchar() 136, 138
XMLVarcharFromFile() 136, 139
methodschoosing 36
introduction 5
planning 36
XML collections 89
XML column 74
storage UDFs 76, 82
stored proceduresadministration
dxxDisableCollection() 190
dxxDisableColumn() 189
dxxDisableDB() 187
dxxEnableCollection() 189
dxxEnableColumn() 187
dxxEnableDB() 186
XML Extender, list 186
binding 183
callingXML Extender 183
CLOBs 184
code page considerations 295
compositiondxxGenXML() 191, 197
dxxmqGen() 232
dxxmqRetrieve() 236
dxxRetrieveXML() 194, 200
XML Extenders 191
decompositiondxxInsertXML() 203
dxxmqInsert() 246
dxxmqInsertAll 250
dxxmqInsertAllCLOB() 251
dxxmqInsertCLOB() 248
dxxmqShred() 241
dxxmqShredAll() 242
dxxShredXML() 202
XML Extenders 202
dxxDisableCollection() 190
dxxDisableColumn() 189
dxxDisableDB() 187
dxxEnableCollection() 189
dxxEnableColumn() 187
dxxEnableDB() 186
dxxGenXML() 17, 90, 191, 197
dxxInsertXML() 94, 203
dxxmqGen() 232
dxxmqInsert() 246
dxxmqInsertAll() 250
dxxmqInsertAllCLOB() 251
dxxmqInsertCLOB() 248
dxxmqRetrieve() 236
dxxmqShred() 241
dxxRetrieveXML() 90, 194, 200
dxxShredXML() 94, 202
stored procedures (Continua)include files 183
initializingDXXGPREP 183
return codes 265
XML Extender 183
storing the DTD 52
storing XML data 76
structureDTD 17
hierarchical 17
mapping 17
relational tables 17
XML document 17
stylesheets 109, 167
SVALIDATE 161
syntaxdisable_collection command 131
disable_column command 129
disable_db command 127
dxxadm 125
enable_collection command 130
enable_column command 128
enable_db command 126
extractChar() function 148
extractChars() function 148
extractCLOB() function 151
extractCLOBs() function 151
extractDate() function 152
extractDates() function 152
extractDouble() function 146
extractDoubles() function 146
extractInteger() function 144
extractIntegers() function 144
extractReal() function 147
extractReals() function 147
extractSmallint() function 145
extractSmallints() function 145
extractTime() function 153
extractTimes() function 153
extractTimestamp() function 154
extractTimestamps() function 154
extractVarchar() function 149
extractVarchars() function 149
location path 111
Update() function 155
XMLCLOBFromFile() function 136
XMLFile to a CLOB Content()
function 139
XMLFileFromCLOB() function 136,
137
XMLFileFromVarchar() function 136,
138
XMLVarcharFromFile() function 139
Ttables 94
text_node 41, 50, 106, 167
tipo di colonna, per decomposizione 48
tracesstarting 263
stopping 264
transfer of documents between client and
server, considerations 295
transforming XML to HTMLXSLTransformToCLOB 256
transforming XML to HTML (Continua)XSLTransformToFile 257
troubleshootingstored procedure return codes 265
strategies 263
UDF return codes 264
UUDFs (user-defined functions)
code page considerations 295
DVALIDATE() 161
extractChar() 148
extractChars() 148
extractCLOB() 151
extractCLOBs() 151
extractDate() 152
extractDates() 152
extractDouble() 146
extractDoubles() 146
extracting functions 143
extractReal() 147
extractReals() 147
extractSmallint() 145
extractSmallints() 145
extractTime() 153
extractTimes() 153
extractTimestamp() 154
extractTimestamps() 154
extractVarchar() 149
extractVarchars() 149
for XML columns 135
from external storage to memory
pointer 139
from internal storage to external
server file 139
retrieval functions 139
return codes 264
searching with 84
storage 82
SVALIDATE() 161
Update() 82, 155
XMLCLOBFromFile() 136
XMLFile to a CLOB 139
XMLFileFromCLOB() 136, 137
XMLFileFromVarchar() 136, 138
XMLVarcharFromFile() 136, 139
UDTtabella riassuntiva di 38
XMLCLOB 38
XMLFILE 38
XMLVARCHAR 38
Update() functiondocument replacement behavior 155
introduction 155
XML 82, 135
updatesside tables 82
XML collection 98
XML column dataattributes 82
description 82
entire document 82
multiple occurrence 155
specific elements 82
XML document replacement by
Update() UDF 155
Indice analitico 325
user-defined functions (UDFs)for XML columns 135
searching with 84
Update() 82, 155
user-defined types (UDTs)for XML columns 73
XML 133
XMLCLOB 73
XMLFILE 73
XMLVARCHAR 73
user IDsAdministration wizard 36
Vvalidating
using schemas 50
XML DTDs 52
WWHERE clause
requirements for SQL mapping 104
WindowsUTF-8 limitation, code pages
Windows NT 295
XXML
data, storing 76
override 175
repository 36
tables, creating 52
XML collectionscomposition 90
creating the DAD (command line) 62
decomposing using RDB_node
mapping 66
decomposition 94
definition 5
determining a mapping scheme 101
disabling 114
DTD for validation 52
editing the DAD (command line) 62
enabling 112
introduction 89
mapping schemes 101
RDB_node mapping 101
SQL mapping 101
storage and access methods 5, 89
validation 52
XML columnscreating a DAD file for 165
defining and enabling 75
definition 5
enabling 53
figure of side tables 57
indexing 75
introduction 74
location path 110
maintaining document structure 74
retrieving dataattribute values 78
element contents 78
entire document 78
XML columns (Continua)retrieving XML data 78
sample DAD file 287
storage and access methods 5, 74
UDFs 135
updating XML dataattributes 82
entire document 82
specific elements 82
with side tables 75
XML documentsB-tree indexing 75
code page assumptions 295
code page consistency 295
code page conversion, exporting 295
code page conversion, importing 295
composing 17, 90
decomposition 94
deleting 86
encoding declarations 295
indexing 75
introduction 3
legal encoding declarations 295
mapping to tables 17
searchingdirect query on side tables 84
document structure 84
from a joined view 84
multiple occurrence 84
structural text 84
with extracting UDFs 84
stored in DB2 3
supported encoding declarations 295
XML DTD repositorydescription 5
DTD Reference Table (DTD_REF) 5
XML Extenderavailable operating systems 3
functions 135
introduction 3
stored procedures 183
XML Path Language 5
XML schemasadvantages 117
example 119
validating 161
XML Toolkit for OS/390 and z/OS 6
XML_USAGE table 261
XMLClobFromFile() function 136
XMLFile to a CLOB function 139
XMLFileFromCLOB() function 136, 137
XMLFileFromVarchar() function 136, 138
XMLVarcharFromFile() function 136, 139
XPath 5
XSLT 43, 101
using 17
XSLTransformTOClob() 256
XSLTransformToFile 257
326 XML Extender - Amministrazione e programmazione
Come ottenere ulteriori informazioni dalla IBM
Per contattare la IBM nel proprio paese o nella propria regione, selezionare IBM
Directory of Worldwide Contacts in http://www.ibm.com/planetwide
Per ulteriori informazioni sui prodotti DB2, andare all’indirizzo
http://www.ibm.com/software/data/db2/.
© Copyright IBM Corp. 1999 - 2006 327
328 XML Extender - Amministrazione e programmazione
���
Printed in Denmark by IBM Danmark A/S
SC13-3579-00
Spine information:
IBM
DB
2 DB
2 Ve
rsio
ne 9
XML
Exte
nder
- A
mm
inis
trazi
one
e pr
ogra
mm
azio
ne
��
�