XML and DB2

43
XML and DB2 XML and DB2 By Josephine Cheng, Jane By Josephine Cheng, Jane Xu Xu IBM Santa Teresa IBM Santa Teresa Laboratory Laboratory Slides edited from the original slides of Yunyu Song

Transcript of XML and DB2

Page 1: XML and DB2

XML and DB2XML and DB2By Josephine Cheng, Jane XuBy Josephine Cheng, Jane Xu

IBM Santa Teresa LaboratoryIBM Santa Teresa Laboratory

Slides edited from the original slides of Yunyu Song

Page 2: XML and DB2

OutlineOutline

Net.DataNet.Data

XML ExtenderXML Extender

Create XML document from DB2Create XML document from DB2

Transform XML document to DB2Transform XML document to DB2

Searching XML documentsSearching XML documents

ConclusionConclusion

Page 3: XML and DB2

Net.Data VINet.Data VI

A scripting language to create web A scripting language to create web applications which can access data from applications which can access data from any ODBC compliant databases (e.g. any ODBC compliant databases (e.g. DB2, Oracle, DRDA, ODBC, flat files and DB2, Oracle, DRDA, ODBC, flat files and web registry data)web registry data)

Can generate XML documents from SQL Can generate XML documents from SQL queries.queries.

Its successor product is WebSphere Its successor product is WebSphere Application server. Application server.

Page 4: XML and DB2

Generating XML documents from Generating XML documents from existing DB2 dataexisting DB2 data

Net.Data Macro to generate XML Data

Page 5: XML and DB2

Generating XML documents from Generating XML documents from existing DB2 dataexisting DB2 data

Resultset of XML data generated by Net.Data

Page 6: XML and DB2

OutlineOutline

Net.DataNet.Data

XML ExtenderXML Extender

Create XML document from DB2Create XML document from DB2

Transform XML document to DB2Transform XML document to DB2

Searching XML documentsSearching XML documents

ConclusionConclusion

Page 7: XML and DB2

XML ExtenderXML Extender

Repository for XML documents and their Repository for XML documents and their DTDs.DTDs.

Data management functionalities (integrity, Data management functionalities (integrity, security, recoverability and management).security, recoverability and management).

User has the option to store the entire User has the option to store the entire document as an column or decomposed document as an column or decomposed into multiple tables and columns.into multiple tables and columns.

Users can retrieve the entire document or Users can retrieve the entire document or extract XML elements and attributes extract XML elements and attributes dynamically in an SQL query.dynamically in an SQL query.

Page 8: XML and DB2

XML CollectionXML Collection

SQL Collection MappingSQL Collection MappingIt only works when you can collect all relevant data with a single SELECT statement, It only works when you can collect all relevant data with a single SELECT statement, which is placed in the DAD. If multiple tables are involved you should use primary-which is placed in the DAD. If multiple tables are involved you should use primary-foreign key relationships. foreign key relationships.

RDB_Node Collection MappingRDB_Node Collection MappingIt allows node definitions for multiple tables. All involved tables must have primary It allows node definitions for multiple tables. All involved tables must have primary keys. This approach does not require SQL in the DAD. It does allow imports as well keys. This approach does not require SQL in the DAD. It does allow imports as well as exports.as exports.

Page 9: XML and DB2

XML CollectionXML Collection

Page 10: XML and DB2

XML CollectionXML Collection

Page 11: XML and DB2

XML ColumnXML Column

Store entire XML document in a column of Store entire XML document in a column of XML typeXML type

Allows to query XML contentAllows to query XML content Associate and store DTD in DB2 for one or Associate and store DTD in DB2 for one or

more documentmore document Map element and attribute to DB2 table (side Map element and attribute to DB2 table (side

table)table) Used when your XML storage is mainly Used when your XML storage is mainly

archival or for reference, and document archival or for reference, and document content is updated infrequentlycontent is updated infrequently

Page 12: XML and DB2

XML ColumnXML Column

Page 13: XML and DB2

XML ColumnXML Column

Page 14: XML and DB2

DAD FileDAD File

Define which DB2 tables hold the data Define which DB2 tables hold the data The The mapping methodmapping method: SQL Collection, RDB : SQL Collection, RDB

Node Collection, or XML ColumnNode Collection, or XML Column Whether to validate XML documents with a DTD Whether to validate XML documents with a DTD

before storing or translating the contents before storing or translating the contents Which DTD to use for validation and translation Which DTD to use for validation and translation

Page 15: XML and DB2

Sample DAD (Sample DAD (SQL CollectionSQL Collection))

Page 16: XML and DB2

Sample DAD (Sample DAD (RDB Node CollectionRDB Node Collection))

Page 17: XML and DB2

Sample DAD (XMLColumn)Sample DAD (XMLColumn)

Page 18: XML and DB2

XML in DB2XML in DB2

Page 19: XML and DB2

OutlineOutline

Net.DataNet.Data

XML ExtenderXML Extender

Create XML document from DB2Create XML document from DB2

Transform XML document to DB2Transform XML document to DB2

Searching XML documentsSearching XML documents

ConclusionConclusion

Page 20: XML and DB2

Create XML from DB2Create XML from DB2

Generate XML fragments (SQL Collection)Generate XML fragments (SQL Collection)

Generate whole XML documents (RDB Generate whole XML documents (RDB

Node Collection)Node Collection)

Page 21: XML and DB2

Generate XML fragments (Generate XML fragments (SQL SQL

CollectionCollection))

REC2XMLREC2XML Return XML fragmentsReturn XML fragments

XMLELEMENTXMLELEMENT Return Single elementsReturn Single elements

XMLATTRIBUTESXMLATTRIBUTES Group elements as XML Group elements as XML attributes attributes

XMLAGGXMLAGG Aggregate elements in a Aggregate elements in a hierarchy hierarchy

Page 22: XML and DB2

Examples IExamples I

SELECT XML2CLOB( XMLELEMENT(NAME "Department", SELECT XML2CLOB( XMLELEMENT(NAME "Department", XMLATTRIBUTES(e.workdept AS "name"), XMLATTRIBUTES(e.workdept AS "name"), XMLAGG(XMLELEMENT(NAME "emp", e.lastname) ORDER BY XMLAGG(XMLELEMENT(NAME "emp", e.lastname) ORDER BY e.lastname) )) AS "dept_list" FROM employee e WHERE e.lastname) )) AS "dept_list" FROM employee e WHERE e.workdept IN ('C01','E21') GROUP BY workdepte.workdept IN ('C01','E21') GROUP BY workdept

This query produces the following output. This query produces the following output. dept_list dept_list <Department name = "C01"> <Department name = "C01">

<emp>KWAN</emp> <emp>KWAN</emp> <emp>NICHOLLS</emp> <emp>NICHOLLS</emp> <emp>QUINTANA</emp> <emp>QUINTANA</emp>

</Department> </Department> <Department name = "E21"> <Department name = "E21">

<emp>GOUNOT</emp> <emp>GOUNOT</emp> <emp>LEE</emp> <emp>LEE</emp> <emp>MEHTA</emp><emp>MEHTA</emp> <emp>SPENSER</emp> <emp>SPENSER</emp>

</Department> </Department>

Page 23: XML and DB2

Example IIExample II

REC2XMLREC2XML Fuction Fuction

select rec2xml(1.0, 'COLATTVAL','MyRow',DEPTNO, DEPTNAME, select rec2xml(1.0, 'COLATTVAL','MyRow',DEPTNO, DEPTNAME, MGRNO) AS MYROWS FROM DEPARTMENTMGRNO) AS MYROWS FROM DEPARTMENT MYROWS MYROWS

-------------------------------------------------------------------- --------------------------------------------------------------------

<MyRow> <MyRow>

<column name="DEPTNO">A00</column> <column name="DEPTNO">A00</column>

<column name="DEPTNAME">SPIFFY COMPUTER SERVICE <column name="DEPTNAME">SPIFFY COMPUTER SERVICE DIV.</column>DIV.</column>

<column name="MGRNO">000010</column> <column name="MGRNO">000010</column>

</MyRow> </MyRow>

<MyRow><MyRow>

<column name="DEPTNO">B01</column> <column name="DEPTNO">B01</column>

<column name="DEPTNAME">PLANNING</column> <column name="DEPTNAME">PLANNING</column>

<column name="MGRNO">000020</column><column name="MGRNO">000020</column>

</MyRow> </MyRow>

Page 24: XML and DB2

Compose XML documentsCompose XML documents((RDB NodeRDB Node))

dxxGenXMLdxxGenXML generates an XML document according to the given generates an XML document according to the given DAD and places the result in a table you specify DAD and places the result in a table you specify

used when document update occasionallyused when document update occasionally

dxxGenXMLClobdxxGenXMLClob identical with identical with dxxGenXMLdxxGenXMLexcept that it returns the XML directly as a Character except that it returns the XML directly as a Character Large Object (CLOB)Large Object (CLOB)

dxxRetrieveXMLdxxRetrieveXML Used when composing or decomposing XML Used when composing or decomposing XML documents frequentlydocuments frequently

Using the Using the dxxEnableCollectiondxxEnableCollection stored procedure to stored procedure to create a named collection and stores the DAD within create a named collection and stores the DAD within the databasethe database

Then refer to it by name using Then refer to it by name using dxxRetrieveXMLdxxRetrieveXML and and dxxRetrieveXMLClobdxxRetrieveXMLClob

Page 25: XML and DB2

ExamplesExamples

dxxGenXML(CLOB(100K) DAD, /* input */ dxxGenXML(CLOB(100K) DAD, /* input */

char(resultTabName) resultTabName, /* input */char(resultTabName) resultTabName, /* input */

integer overrideType /* input */integer overrideType /* input */

varchar(1024) override, /* input */ varchar(1024) override, /* input */

integer maxRows, /* input */ integer maxRows, /* input */

integer numRows, /* output */ integer numRows, /* output */

long returnCode, /* output */ long returnCode, /* output */

varchar(1024) returnMsg) /* output */ varchar(1024) returnMsg) /* output */

dxxRetrieveXML(char(collectionName) collectionName, /* input */ dxxRetrieveXML(char(collectionName) collectionName, /* input */

char(resultTabName) resultTabName, /* input */ char(resultTabName) resultTabName, /* input */

integer overrideType, /* input */ integer overrideType, /* input */

varchar_value override, /* input */ varchar_value override, /* input */

integer maxRows, /* input */ integer maxRows, /* input */

integer numRows, /* output */ integer numRows, /* output */

long returnCode, /* output */ long returnCode, /* output */

varchar(1024) returnMsg) /* output */ varchar(1024) returnMsg) /* output */

Page 26: XML and DB2

OutlineOutline

Net.DataNet.Data

XML ExtenderXML Extender

Create XML document from DB2Create XML document from DB2

Transform XML document to DB2Transform XML document to DB2

Searching XML documentsSearching XML documents

ConclusionConclusion

Page 27: XML and DB2

Transform XML into DB2Transform XML into DB2

XML RDB_Node CollectionXML RDB_Node Collection

XML columnXML column

Page 28: XML and DB2

RDB_Node collectionRDB_Node collection In this case it is the reverse of generating XML from an RDB Node In this case it is the reverse of generating XML from an RDB Node

Collection. Collection. The end result of this is pure relational data, in tables, and ready to be The end result of this is pure relational data, in tables, and ready to be accessed with the usual database tools. You can do Queries, indexes, accessed with the usual database tools. You can do Queries, indexes, views, optimizations etc. views, optimizations etc.

dxxShredXMLdxxShredXML

Takes the DAD as a parameter, similar to Takes the DAD as a parameter, similar to dxxGenXMLdxxGenXML

Used for applications that do occasional updates Used for applications that do occasional updates dxxInsertXMLdxxInsertXML

Uses a DAD already stored, similar to Uses a DAD already stored, similar to dxxRetrieveXMLdxxRetrieveXML

Used for applications that make regular updatesUsed for applications that make regular updates

Takes an enabled XML collection as input parameterTakes an enabled XML collection as input parameter

Page 29: XML and DB2

UDTs provided by XML extenderUDTs provided by XML extender((XML ColumnXML Column))

XMLCLOBXMLCLOB XML content stored as a character XML content stored as a character larger object (CLOB) in DB2larger object (CLOB) in DB2

XMLVARCHARXMLVARCHAR XML content stored as VARCHAR in XML content stored as VARCHAR in DB2DB2

XMLDBCLOBXMLDBCLOB XML document stored as double XML document stored as double byte CLOB in DB2byte CLOB in DB2

XMLFILEXMLFILE XML document in a file on a local XML document in a file on a local file systemfile system

Page 30: XML and DB2

Store XML as XML Column in Store XML as XML Column in DB2DB2

1.1. Ensure that the database is XML-enabled Ensure that the database is XML-enabled

2.2. Optional: Locate or create a DTD for your documents and store it Optional: Locate or create a DTD for your documents and store it in in DB2XML.DTD_REFDB2XML.DTD_REF. .

3.3. Create the table to store the XML documents and add the XML Create the table to store the XML documents and add the XML column. Also create any side tables. column. Also create any side tables.

4.4. Create a DAD to map the XML to the relational DB structures. Create a DAD to map the XML to the relational DB structures.

5.5. Enable the XML column, specifying the DAD. Enable the XML column, specifying the DAD.

6.6. Create indexes for the side-tables. Create indexes for the side-tables.

7.7. Insert some XML documents and start performing queries. Insert some XML documents and start performing queries.

Page 31: XML and DB2

Key Features of XML Column I Key Features of XML Column I

The XML extender supports a subset of The XML extender supports a subset of XPathXPath, providing , providing

a way to locate specific data within an XML document. a way to locate specific data within an XML document.

Combined with the provided Combined with the provided extracttypeextracttype functions functions

((extractIntegerextractInteger, , extractTimestampextractTimestamp, , extractVarCharextractVarChar, etc.) , etc.)

you can retrieve values as database types. you can retrieve values as database types.

Page 32: XML and DB2

Example IExample I

Page 33: XML and DB2

Example IIExample II

Page 34: XML and DB2

Key features of XML Column IIKey features of XML Column II

You can select to copy specific element and attribute You can select to copy specific element and attribute

values to values to a a side tableside table. Doing that lets you search and . Doing that lets you search and

manipulate the values directly via SQL just like any other manipulate the values directly via SQL just like any other

column data, linking to the stored XML to pick up related column data, linking to the stored XML to pick up related

values. values.

You can create side table indexes, to improve search You can create side table indexes, to improve search

time. time.

Page 35: XML and DB2

Use side table for fast searchUse side table for fast search

Page 36: XML and DB2

Key features of XML Column IIIKey features of XML Column III

XPathXPath based element or attribute update based element or attribute update

UPDATE sales_tab SET order = Update(order, UPDATE sales_tab SET order = Update(order, '/Order/Customer/Name', 'Customer X') WHERE '/Order/Customer/Name', 'Customer X') WHERE sales_person = 'Salesperson Y' sales_person = 'Salesperson Y'

Using the Update function, you can correctly alters both the stored Using the Update function, you can correctly alters both the stored XML document and any relevant side tables. XML document and any relevant side tables.

Page 37: XML and DB2

OutlineOutline

Net.DataNet.Data

XML ExtenderXML Extender

Create XML document from DB2Create XML document from DB2

Transform XML document to DB2Transform XML document to DB2

Searching XML documentsSearching XML documents

ConclusionConclusion

Page 38: XML and DB2

Searching XML docs (Searching XML docs (XML ColumnXML Column))

ExampleExample

of of

XMLXML

ColumnColumn

Page 39: XML and DB2

Using side tables.Using side tables.

Can make a view of the joint.Can make a view of the joint.

Searching XML documents Searching XML documents (Column)(Column)

Page 40: XML and DB2

Example of query against attribute.Example of query against attribute.

The UDF is expensive. Alternatives:The UDF is expensive. Alternatives: Use DAD to define CUSTOMER as another Use DAD to define CUSTOMER as another index in index in

the side tablethe side table.. Enable XML column to use Enable XML column to use text indexingtext indexing (e.g. section (e.g. section

search with search with db2tx.containsdb2tx.contains).).

Searching XML documents Searching XML documents (Column)(Column)

Page 41: XML and DB2

Search can be done directly against the Search can be done directly against the SQL based tables, or using procedures SQL based tables, or using procedures dxxGenXML()dxxGenXML() and and dxxRetrieveXML()dxxRetrieveXML()..

The DAD is used to specify whether to The DAD is used to specify whether to retrieve the entire document or a fragment.retrieve the entire document or a fragment.

The DAD is also used to specify the The DAD is also used to specify the search criteria which can be based either search criteria which can be based either on tables or SQL query.on tables or SQL query.

Searching XML documents Searching XML documents (Collect)(Collect)

Page 42: XML and DB2

OutlineOutline

Net.DataNet.Data

XML ExtenderXML Extender

Create XML document from DB2Create XML document from DB2

Transform XML document to DB2Transform XML document to DB2

Searching XML documentsSearching XML documents

ConclusionConclusion

Page 43: XML and DB2

Conclusion: XML in DB2Conclusion: XML in DB2

RequirementRequirement SolutionsSolutions

generate XML document from generate XML document from relational data (DB2 tables)relational data (DB2 tables)

Use simple functions (Use simple functions (REC2XML XMLELEMENT etc.)REC2XML XMLELEMENT etc.)

Use a "SQL Collection" to map a query to an XML document Use a "SQL Collection" to map a query to an XML document structure structure

Use an "RDB Node Collection" to map a number of tables to an Use an "RDB Node Collection" to map a number of tables to an XML document structure (this also allows XML import) XML document structure (this also allows XML import)

Use Net.Data Macro to generate XML DataUse Net.Data Macro to generate XML Data

Ignore DB2's capability and use Visual Basic or VB ScriptIgnore DB2's capability and use Visual Basic or VB Script

Transform XML to relational dataTransform XML to relational data Use “RDB_node collection” to store XML in DB2 tablesUse “RDB_node collection” to store XML in DB2 tables

Store XML documents in DB2Store XML documents in DB2

Database for later referenceDatabase for later reference

Use Use an "XML Column" to store entire XML documents.They can an "XML Column" to store entire XML documents.They can still be indexed and queried via DB2 functionsstill be indexed and queried via DB2 functions