oracle xml db and xquery chris gianfrancesco aruna apuri oleg rekutin jason wilson
Post on 21-Dec-2015
218 views
TRANSCRIPT
![Page 1: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/1.jpg)
Oracle XML DB and XQuery
Chris GianfrancescoAruna ApuriOleg RekutinJason Wilson
![Page 2: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/2.jpg)
Introduction
XML Type abstraction Storage
Shredded or LOB Publishing
XML Views of relational tables SQL / XML functions and constructs
XMLQuery, XMLTable, and more... XML Updates
XQuery evaluation and processing
![Page 3: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/3.jpg)
XML Type
XML Type abstractionPhysical Storage
XML Type Views
Relational DataCLOB Shredded
Hybrid Binary XML
XQuery XPath XSLT SQL / XML
![Page 4: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/4.jpg)
XML View
Create virtual XML version of object-relational data
Allows XQuery to access relational data Uses XML Publishing ora:view()
![Page 5: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/5.jpg)
SQL/XML Functions SQL/XML querying function and construct
XMLQuery, XMLTable SQL/XML functions for creating XML from
SQLXMLElement(), XMLConcat(), XMLAttributes(),
XMLForest()
![Page 6: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/6.jpg)
More XML Functions
Other XML functionsXMLColAttVal(), XMLSequence(),
ExtractValue(), Extract(), XMLTransform() To support XML updates
UpdateXML(), DeleteXML(), InsertChildXML(), InsertXMLBefore(), AppendChildXML()
![Page 7: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/7.jpg)
XQuery Hybrid Evaluation
Transform XMLTable into XMLQuery Static analysis and type checking If possible, compiles into native SQL data
structures If not possible, XMLQuery is left as is for
processing by XMLQuery processor
![Page 8: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/8.jpg)
XQuery Hybrid Evaluation
SQL query containing XMLQuery/XMLTable
SQL query containingXMLQuery
SQL structures withXML operators
XQuery evaluated natively
SQL structures containingXMLQuery
Co-processor evaluatesXMLQuery expressions
Transform XMLTable to XMLQuery
Native compilation of XMLQuery
![Page 9: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/9.jpg)
Input & Data Representation
All data in one row, one XMLType column
XMLType<employees><employee>
<name>John Doe</name><job>Adjuster</job>
</employee><employee>
<name>Michael Smith</name><job>Investigator</job>
</employee><employee>
<name>Sam Adams</name><job>Engineer</job>
</employee></employees>
![Page 10: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/10.jpg)
Input & Data Representation
Each data row in separate DB row,column of XMLType
VARCHAR
VARCHAR
VARCHAR
row
row
row
<employees><employee>
<name>John Doe</name><job>Adjuster</job>
</employee><employee>
<name>Michael Smith</name><job>Investigator</job>
</employee><employee>
<name>Sam Adams</name><job>Engineer</job>
</employee></employees>
XMLType
XMLType
XMLType
![Page 11: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/11.jpg)
Input & Data Representation
Each data row in separate DB row,contents in separate columns
VARCHAR
<employees><employee>
<name>John Doe</name><job>Adjuster</job>
</employee><employee>
<name>Michael Smith</name><job>Investigator</job>
</employee><employee>
<name>Sam Adams</name><job>Engineer</job>
</employee></employees>
VARCHAR
VARCHARVARCHAR
row
row
row
VARCHARVARCHAR
![Page 12: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/12.jpg)
Input Tools
Straight XML in SQL INSERT VALUES(
XMLType(‘<xml>goes here</xml>’)) JDBC using special XMLType (also C) SQL*Loader w/ direct path load mode XML-SQL Utility (XSU)
Maps XML to columnsRigid default mappingNo support for attributes
![Page 13: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/13.jpg)
Storage in Database
XMLType CLOBFile preserved as complete text (whitespace,
comments, etc) [textual fidelity]Can still be validated against a schemaData internally is not “typed”Slow queryingFastest storage and retrieval
![Page 14: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/14.jpg)
Storage in Database
XMLType ViewCreate a virtual XML document on top of relational
tablesFast querying, manipulation using pure SQLDeeply nested views are slowUpdating/inserting requires triggersLose strict order guarantee, no textual fidelitySupports multiple XML schemas on top of one
relational schema
![Page 15: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/15.jpg)
Storage in Database
Native XML type (Structured Storage)Preserves textual fidelityShreds into SQL tablesComplete validation, full SQL supportNo triggers to update tables (built-in rewriting)Some overheadCannot change schema w/o reloading all dataRequires a schema
![Page 16: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/16.jpg)
Structured Storage Detail
Annotate XML schema to control nested collections storage, as:CLOBArray of serialized SQL objectsNested table of serialized SQL objectsArray of XMLType
![Page 17: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/17.jpg)
Working with XML Schema
Registering schema
begin dbms_xmlschema.registerSchema( ‘http://namespace', xdbURIType('schema.xsd').getClob(), TRUE,TRUE,FALSE,TRUE);
end;
Creating table w/ schema
CREATE TABLE TableName of XMLTypeXMLSCHEMA "http://namespace"
![Page 18: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/18.jpg)
XQuery Support in Oracle
XMLDB integrated database engine SQL / XML standard support Optimized queries – rewrite to relational
Standalone Java query engine 100% Java Integrated into Oracle App Server -XDS Interoperates with XSLT/XPath
![Page 19: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/19.jpg)
XQuery database support Production in Oracle Database 10gr2 Supports XMLQuery and XMLTable construct Native compilation into SQL /XML structures Returns XMLType(Content) Can query over relational, O-R, XMLType data fn:doc - Maps to XDB Repository on server SQLPlus provides xquery command to execute
XQuery XSL-T will also get compiled to XQuery
![Page 20: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/20.jpg)
Architecture
XQuery XSL-T Parser
Compiler
XQuery Type check
XQUERY
SQL MetadataXMLSchemaRepository
XML Indexes, Text Indexes
XQuery F&O
Rewrite to SQLX
SQLX rewrite
Relational Optimizer
Execution engine
Normalization
XQueryX
Compiled XQuery Tree
Statically Type checked
TreeNormalized Tree (casts, treat )
SQL/XML Operand Tree
SQL Operand Tree
Execution Structures
SQL
![Page 21: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/21.jpg)
XQuery Java implementation XQuery or XQueryX input Extensible function implementation Compiles into rowsource like structures Optimization – push XQuery to XMLDB XQJ API driver – for accessing mid tier/backend Shared data model with XSL/XPath Shared F&O – pre-defined & external
Standard implementation interfacesWrite Java Function once use it in
XQuery/XSLT
![Page 22: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/22.jpg)
Processing XQueryOracle XQuery Compilation Engine Parser convert XQuery into
XQueryX
XQueryX is an XML representation of XQuery (another W3C candidate recommendation)
XML parser construct a DOM tree from XQueryX
Work on the DOM afterward
Corresponding components are extended for XQuery too
![Page 23: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/23.jpg)
Sample XQuery
For each author in the bibliography, list the author's name and the titles of all books by that author, grouped inside a "result" element."
<results>FOR $a IN distinct(document("http://www.bn.com")//author) RETURN <result> $a, FOR $b IN document("http://www.bn.com")/bib/book[author = $a] RETURN $b/title </result></results>
![Page 24: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/24.jpg)
WHAT IS XQueryX
Is an XML representation of an XQuery.
Created by mapping the productions of the XQuery abstract syntax directly into XML productions.
The result is not particularly convenient for humans to read and write.
Easy for programs to parse, and because XQueryX is represented in XML, standard XML tools can be used to create, interpret, or modify queries
![Page 25: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/25.jpg)
Environments in which XQueryX useful
Parser Reuse. In heterogeneous data environments, a variety of systems may be used to execute a query. One parser can generate XQueryX for all of these systems.
Queries on Queries. Because XQueryX is represented in XML, queries can be queried and can be transformed into new queries.
For instance, a query can be performed against a set of XQueryX queries to determine which queries use FLWOR expressions to range over a set of invoices.
Generating Queries. In some XML-oriented programming environments, it may be more convenient to build a query in its XQueryX representation than in the corresponding XQuery representation, since XML tools can be used to do so.
Embedding Queries in XML. XQueryX can be embedded directly in an XML document
![Page 26: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/26.jpg)
Why XQuery static type checking?
XQuery static type checking is very
useful when the input XML structure is known during compile time.
The feature itself enables early error recovery.
![Page 27: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/27.jpg)
XQuery Static Type-Checking in Oracle XML DB Oracle XML DB performs static (that is, compile-time)
type-checking of XQuery expressions. It also performs dynamic (runtime) type-checking.
Example Static Type-Checking of XQuery Expression The XML view produced on the fly by Oracle XQuery
function ora:view has ROW as its top-level element, but this example incorrectly lacks that ROW wrapper element. This omission raises a compile-time error. Forgetting that ora:view wraps relational data in this way is an easy mistake to make, and one that could be difficult to diagnose without static type-checking.
![Page 28: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/28.jpg)
Static Type-Checking of XQuery
Expressions: ora:view This produces a static-type-check error, because "ROW" is missing.
SELECT XMLQuery('for $i in ora:view("REGIONS"), $j in ora:view("COUNTRIES")
where $i/REGION_ID = $j/REGION_ID and $i/REGION_NAME = "Asia"
return $j' RETURNING CONTENT) AS asian_countries FROM DUAL;SELECT XMLQuery('for $i in ora:view("REGIONS"), $j in
ora:view("COUNTRIES")*ERROR at line 1:ORA-19276: XP0005 - XPath step specifies an invalid
element/attribute name:(REGION_ID)
![Page 29: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/29.jpg)
Correct code
SELECT XMLQuery('for $i in ora:view("REGIONS"), $j in ora:view("COUNTRIES")
where $i/ROW/REGION_ID = $j/ROW/REGION_ID
and $i/ROW/REGION_NAME = "Asia"
return $j'
RETURNING CONTENT) AS asian_countries
FROM DUAL;
![Page 30: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/30.jpg)
Result Sequence
<ROW><DEPARTMENT_ID>10</DEPARTMENT_ID><DEPARTMENT_NAME>Administration</DEPARTMENT_NAME><MANAGER_ID>200</MANAGER_ID><LOCATION_ID>1700</LOCATION_ID></ROW>
<ROW><DEPARTMENT_ID>20</
DEPARTMENT_ID><DEPARTMENT_NAME>Marketing</DEPARTMENT_NAME><MANAGER_ID>201</MANAGER_ID><LOCATION_ID>1800</LOCATION_ID></ROW>
<ROW><DEPARTMENT_ID>30</
DEPARTMENT_ID><DEPARTMENT_NAME>Purchasing</DEPARTMENT_NAME><MANAGER_ID>114</MANAGER_ID><LOCATION_ID>1700</LOCATION_ID></ROW>
<ROW><DEPARTMENT_ID>40</DEPARTMENT_ID><DEPARTMENT_NAME>Human
Resources</DEPARTMENT_NAME><MANAGER_ID>203</MANAGER_ID><LOCATION_ID>2400</LOCATION_ID></ROW>
![Page 31: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/31.jpg)
XQuery Processing
Choices: co-processor or native compilation? Co-processor:
“off-the-shelf” XQuery processoropaque to DBMS
Native compilation:XQuery processing added to database engineDBMS-specific processor
![Page 32: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/32.jpg)
Co-processor Advantages
Easy to implement and install Modularity of XQuery processor Standard XQuery processor between
applications Third-party development Flexibility
![Page 33: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/33.jpg)
Co-processor Limitations
Storage OptimizationAdvanced Oracle XML DB features being
wasted (e.g. indexed XML) Query Optimization
Cannot use already-established Oracle query engine optimizations
No support for SQL/XML query optimization
![Page 34: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/34.jpg)
Oracle's Native Processing XQueries are compiled into sub-blocks and
execution structures usable by existing DB engine
“tightly integrate XQuery and SQL/XML support within the database kernel”
Focuses on utilizing existing optimization techniques (algebra optimizations)
XQuery interpreter for unsupported operations
![Page 35: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/35.jpg)
Native Processor Architecture
![Page 36: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/36.jpg)
Advantages of Oracle's Approach
Fully utilizes mature optimization techniques Integration of SQL and XQueries
Much stronger support for SQL/XML mixed query optimizations
No need for development of a separate set of optimizations
“performance that is orders of magnitude faster than the co-processor approach”
![Page 37: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/37.jpg)
Conclusion
XMLType Variety of ways for data to be stored XQuery parsing and static type checking XQuery native processing and co-
processor
![Page 38: Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson](https://reader035.vdocuments.mx/reader035/viewer/2022062516/56649d645503460f94a46f74/html5/thumbnails/38.jpg)
References Zhen Hua Liu, Maralidhar Krishnaprasad, Vikas Aora. Native XQuery
Processing in Oracle XMLDB. SIGMOD2005. Ravi Murthy, Zhen Hua Liu, Muralidhar Krishnaprasad, et al. Towards An
Enterprise XML Architecture. SIGMOD2005. Mark Scardina. XML Storage Models: One Size Does Not Fit All.
http://www.oracle.com/technology/oramag/webcolumns/2003/techarticles/scardina_xmldb.html
XML Query (XQuery) Support in Oracle Database 10g Release 2. Oracle White Paper. May 2005.
XML and Datenbanken. http://www.dbis.ethz.ch/education/ws0506/xml_db_ws2005
http://www.dbspecialists.com http://www.w3.org/TR/2003/WD-xqueryx-20031219/#N1016C http://www.w3schools.com/xquery/xquery_example.asp