Presentation is loading. Please wait.

Presentation is loading. Please wait.

® IBM Software Group © IBM Corporation QUY Thai Duy – ITFac DLU Lesson 15: pureXML – SQL/XML & XQuery.

Similar presentations


Presentation on theme: "® IBM Software Group © IBM Corporation QUY Thai Duy – ITFac DLU Lesson 15: pureXML – SQL/XML & XQuery."— Presentation transcript:

1 ® IBM Software Group © IBM Corporation QUY Thai Duy – ITFac DLU Lesson 15: pureXML – SQL/XML & XQuery

2 IBM Software Group Agenda  Overview  Inserting XML data  XPath  XQuery  Querying XML data using SQL/XML  Querying XML data using XQuery  Update & Delete operations with XML  XML Indexes  Other XML support

3 IBM Software Group  DB2: The big picture

4 IBM Software Group What is pureXML?  Two main characteristics:  XML is stored in parsed-hierarchical format in the database  DB2 has a native XML interface to the engine  The storage format = the processing format  For details, refer to:  Speech #2 (Part 2) of the DB2 on Campus Lecture Series: “The role of DB2 in Web 2.0 and in the information on demand world”

5 IBM Software Group Table definitions with XML columns create table items ( id int primary key not null, brandname varchar(30), itemname varchar(30), sku int, srp decimal(7,2), comments xml ); create table clients( id int primary key not null, name varchar(50), status varchar(10), contact xml );

6 IBM Software Group Insert & Import of XML data INSERT INTO clients VALUES (77, 'John Smith', 'Gold', ' 111 Main St.,Dallas, TX, ') ; IMPORT from "C:\DB2workshop\Quicklabs\quicklab14a\clients.del"of del xml from "C:\DB2workshop\Quicklabs\quicklab14a" INSERT INTO CLIENTS (ID, NAME, STATUS, CONTACT); IMPORT from "C:\DB2workshop\Quicklabs\quicklab14a\items.del" of del xml from "C:\DB2workshop\Quicklabs\quicklab14a" INSERT INTO ITEMS (ID, BRANDNAME, ITEMNAME, SKU, SRP, COMMENTS);

7 IBM Software Group XPath John Doe Peter Pan

8 IBM Software Group XPath: Simple XPath Expressions  Use fully qualified paths to specify elements/attributes  is used to specify an attribute  use “text()” to specify the text node under an element John Doe Peter Pan John Doe Peter Pan XPathResult 902 /dept/employee/name Peter Pan John Doe /dept/employee/name/text()Peter Pan John Doe

9 IBM Software Group Xpath:Wildcards  * matches any tag name  // is the “descendent-or-self” wildcard John Doe Peter Pan John Doe Peter Pan XPathResult /dept/employee/*/text() John Doe Peter Pan //name/text() Peter Pan John Doe /dept//phone Peter Pan John Doe

10 IBM Software Group XPath: Predicates  Predicates are enclosed in square brackets […]  Can have multiple predicates in one XPath  Positional predicates: [n] selects the n-th child John Doe Peter Pan John Doe Peter Pan XPathResult Peter Pan >“300”]/name John Doe //employee[office=“344” OR

11 IBM Software Group XPath: The Parent Axis  Current context: “.”  Parent context: “..” John Doe Peter Pan John Doe Peter Pan XPathResult Peter Pan /dept/employee/office[.>“300”] 344 /dept/employee[office > “300”]/office 344 /dept/employee[name=“John /dept/employee/name[.=“John

12 IBM Software Group What is XQuery?

13 IBM Software Group XQuery  XQuery supports path expressions to navigate XML hierarchical structure  XQuery supports both typed and untyped data  XQuery lacks null values because XML documents omit missing or unknown data  XQuery returns sequences of XML data

14 IBM Software Group FLWOR and PATH expressions  Like SELECT-FROM-WHERE expression in SQL an XQuery FLWORexpression may contain several clauses that begin with certain keywords.  for  let  where  order  Return  A Path expression in XQuery consists of a series of “steps” separated by slash characters

15 IBM Software Group XQuery: The FLWOR Expression  FOR: iterates through a sequence, bind variable to items  LET: binds a variable to a sequence  WHERE: eliminates items of the iteration  ORDER: reorders items of the iteration  RETURN: constructs query results create table dept(deptID char(8),deptdoc xml); xquery for $d in db2-fn:xmlcolumn(‘DEPT.DEPTDOC')/dept let $emp := $d//employee/name where > 95 order by return $emp} John Doe Peter Pan John Doe Peter Pan

16 IBM Software Group Two Worlds

17 IBM Software Group What you can and can’t do with SQL  Plain SQL statements enable you to retrieve full XML documents but:  You cannot specify XML-based query predicates  You cannot retrieve partial XML documents  You cannot join, aggregate or order by fragments of XML documents using plain SQL

18 IBM Software Group SQL/XML queries  SQL/XML is designed to bridge between the SQL and XML worlds.  Part of the SQL standard includes specifications for embedding XQuery or Xpath expressions within SQL statements  XPATH is a language for navigating XML documents to find elements or attributes  XQuery includes support for XPATH

19 IBM Software Group New SQL/XML Functions in SQL 2006  XMLPARSE  parses character/BLOB data, produces XML value  XMLSERIALIZE  converts an XML value into character/BLOB data  XMLVALIDATE  validates XML value against an XML schema and type-annotates the XML value  XMLEXISTS  determines if an XQuery returns a results (i.e. a sequence of one or more items)  XMLQUERY  executes an XQuery and returns the result sequence  XMLTABLE  executes an XQuery, returns the result sequence as a relational table (if possible)  XMLCAST  cast to or from an XML type

20 IBM Software Group xmlexists function  Restricts results based on an XML element value  Syntax required prior to DB2 9.5:  New syntax allowed with DB2 9.5: select name from clients where xmlexists('$c/Client/Address[zip="95116"]' passing CLIENTS.CONTACT as "c") select name from clients where xmlexists('$CONTACT/Client/Address[zip="95116"]')

21 IBM Software Group Case sensitivity - Caution!  SQL is not case sensitive  XPath and XQuery are case sensitive!  DB2 objects (tables/columns) need to be put in upper case.  Example: select name from clients where xmlexists('$contact/Client/Address[zip="95116"]') select name from clients where xmlexists('$CONTACT/Client/Address[zip="95116"]')

22 IBM Software Group xmlquery function  Retrieve one or more element values from our XML document select xmlquery('$CONTACT/Client/ ') from clients where status = 'Gold'

23 IBM Software Group Retrieving XML data using “for” and “return” clauses of XQuery SELECT name, xmlquery ('for $e in $CONTACT/Client/ [1] return $e') FROM clients WHERE status = 'Gold'

24 IBM Software Group Retrieving and transforming XML into HTML SELECT xmlquery('for $e in $CONTACT/Client/ [1]/text() return {$e} ') FROM clients WHERE status = 'Gold'

25 IBM Software Group xmltable function: From XML to Relational select t.comment#,i.itemname,t.customerID,Message from items i, xmltable('$COMMENTS/Comments/Comment' columns Comment# integer path 'CommentID', CustomerID integer path 'CustomerID', Message varchar(100) path 'Message') as t

26 IBM Software Group xmlelement function: From Relational to XML select xmlelement (name "item",itemname), xmlelement (name "id", id), xmlelement (name "brand",brandname), xmlelement (name "sku",sku) from items where srp < 100

27 IBM Software Group Review: XMLTABLE vs XMLELEMENT

28 IBM Software Group Two Worlds

29 IBM Software Group Simple XQuery to return customer contact data  db2-fn:xmlcolumn is a function with a parameter that identifies the table name and column name of an XML column. xquery db2-fn:xmlcolumn('CLIENTS.CONTACT')

30 IBM Software Group FLWOR expression to retrieve client fax data xquery for $y in db2- fn:xmlcolumn('CLIENTS.CONTACT')/Client/fax return $y

31 IBM Software Group Path expression with additional filtering predicate xquery db2-fn:xmlcolumn('CLIENTS.CONTACT')/Client/Address[zip="95116"]

32 IBM Software Group Querying DB2 XML data and returning results as HTML Xquery { for $y in db2- fn:xmlcolumn('CLIENTS.CONTACT')/Client/Address order by $y/zip return {$y} }

33 IBM Software Group Sample HTML 9407 Los Gatos lvd. Los Gatos ca El Camino Real Mountain View CA …

34 IBM Software Group Embedded SQL within XQuery  db2-fn:sqlquery  A function which executes an SQL query and returns only the selected data  The SQL Query passed to db2-fn:sqlquery must return X xquery for $y in db2-fn:sqlquery('select comments from items where srp > 100')/Comments/Comment where $y/ResponseRequested='Yes' return ( {$y//ProductID} {$y//CustomerID} {$y//Message} )

35 IBM Software Group Joins with SQL/XML  create table dept (unitID char(8), deptdoc xml)  create table unit (unitID char(8) primary key not null,  name char(20),  manager varchar(20), ...  ) select u.unitID from dept d, unit u where XMLEXISTS ('$e//employee[name = $m] ' passing d.deptdoc as "e", u.manager as "m") select u.unitID from dept d, unit u where u.manager = XMLCAST(XMLQUERY('$e//employee/name' passing d.deptdoc as "e") as char(20))

36 IBM Software Group Joins with SQL/XML & Xquery  create table dept (unitID char(8), deptdoc xml)  create table project(projectDoc xml) With SQL/XML: select XMLQUERY ('$d/dept/employee' passing d.deptdoc as "d") from dept d, project p where XMLEXISTS passing d.deptdoc as "e", p.projectDoc as "p") Equivalent with Xquery: XQUERY for $dept in db2-fn:xmlcolumn("DEPT.DEPTDOC")/dept for $proj in db2-fn:xmlcolumn("PROJECT.PROJECTDOC")/project where = $proj/deptID return $dept/employee

37 IBM Software Group Update and Delete Operations  U pdate and Delete XML Data can be done in one of two ways:  SQL UPDATE and DELETE Statements  Using the XQuery TRANSFORM expression

38 IBM Software Group Update example using SQL Update UPDATE clients SET contact=(xmlparse(document ‘ 5401 Julio ave. San Jose CA ')) where id = 3227

39 IBM Software Group Update example using XQuery TRANSFORM UPDATE customers SET contactinfo = xmlquery( 'declare default element namespace transform copy $newinfo := $c modify do insert my2 .gm.com as last into $newinfo/customerinfo return $newinfo' passing CONTACTINFO as "c") WHERE id = 100

40 IBM Software Group XML Indexing Examples  create unique index idx1 on customer(info)  generate key using  xmlpattern  as sql double;  create index idx2 on customer(info)  generate key using  xmlpattern '/customerinfo/name'  as sql varchar(40);  create index idx3 on customer(info)  generate key using  xmlpattern '//name'  as sql varchar(40); Matt Foreman 1596 Baseline Toronto Ontario M3Z-5H Peter Smith create table customer( info XML);

41 IBM Software Group XML Indexing Examples create index idx4 on customer(info) generate key using xmlpattern '//text()' as sql varchar(40); Matt Foreman 1596 Baseline Toronto Ontario M3Z-5H Peter Smith create table customer( info XML);

42 IBM Software Group Other XML support  Based-table inlining and compression of small XML documents  Can transform XML documents using XSLT functions  XML Validation:  XML Schema support using XML Schema repositories  XMLVALIDATE function during an INSERT  BEFORE Trigger  “IS VALIDATED” predicate on a CHECK constraint  Compatible XML Schema evolution using the UPDATE XMLSCHEMA command  pureXML supported for UNICODE or non-UNICODE dbs with DB2 9.5  Annotated XML Schema Decomposition

43 IBM Software Group What’s Next?


Download ppt "® IBM Software Group © IBM Corporation QUY Thai Duy – ITFac DLU Lesson 15: pureXML – SQL/XML & XQuery."

Similar presentations


Ads by Google