Oracle XML DB and XQuery

38
Oracle XML DB and XQuery Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson

description

Oracle XML DB and XQuery. Chris Gianfrancesco Aruna Apuri Oleg Rekutin Jason Wilson. 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 - PowerPoint PPT Presentation

Transcript of Oracle XML DB and XQuery

Page 1: Oracle XML DB and XQuery

Oracle XML DB and XQueryChris GianfrancescoAruna ApuriOleg RekutinJason Wilson

Page 2: Oracle XML DB and XQuery

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ArchitectureXQuery 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

Tree Normalized Tree (casts, treat )

SQL/XML Operand Tree

SQL Operand Tree

Execution Structures

SQL

Page 21: Oracle XML DB and XQuery

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Native Processor Architecture

Page 36: Oracle XML DB and XQuery

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

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

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