Title: Oracle XML DB and XQuery
1Oracle XML DB and XQuery
- Chris Gianfrancesco
- Aruna Apuri
- Oleg Rekutin
- Jason Wilson
2Introduction
- 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
3XML Type
XQuery
XPath
XSLT
SQL / XML
XML Type abstraction
Physical Storage
XML Type Views
Relational Data
CLOB
Shredded
Hybrid
Binary XML
4XML View
- Create virtual XML version of object-relational
data - Allows XQuery to access relational data
- Uses XML Publishing
- oraview()
5SQL/XML Functions
- SQL/XML querying function and construct
- XMLQuery, XMLTable
- SQL/XML functions for creating XML from SQL
- XMLElement(), XMLConcat(), XMLAttributes(),
XMLForest()
6More XML Functions
- Other XML functions
- XMLColAttVal(), XMLSequence(), ExtractValue(),
Extract(), XMLTransform() - To support XML updates
- UpdateXML(), DeleteXML(), InsertChildXML(),
InsertXMLBefore(), AppendChildXML()
7XQuery 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
8XQuery Hybrid Evaluation
SQL query containing XMLQuery/XMLTable
Transform XMLTable to XMLQuery
SQL query containing XMLQuery
Native compilation of XMLQuery
SQL structures with XML operators
SQL structures containing XMLQuery
XQuery evaluated natively
Co-processor evaluates XMLQuery expressions
9Input Data Representation
- All data in one row, one XMLType column
10Input Data Representation
- Each data row in separate DB row,column of
XMLType
11Input Data Representation
- Each data row in separate DB row,contents in
separate columns
12Input Tools
- Straight XML in SQL
- INSERT VALUES( XMLType(ltxmlgtgoes herelt/xmlgt))
- JDBC using special XMLType (also C)
- SQLLoader w/ direct path load mode
- XML-SQL Utility (XSU)
- Maps XML to columns
- Rigid default mapping
- No support for attributes
13Storage in Database
- XMLType CLOB
- File preserved as complete text (whitespace,
comments, etc) textual fidelity - Can still be validated against a schema
- Data internally is not typed
- Slow querying
- Fastest storage and retrieval
14Storage in Database
- XMLType View
- Create a virtual XML document on top of
relational tables - Fast querying, manipulation using pure SQL
- Deeply nested views are slow
- Updating/inserting requires triggers
- Lose strict order guarantee, no textual fidelity
- Supports multiple XML schemas on top of one
relational schema
15Storage in Database
- Native XML type (Structured Storage)
- Preserves textual fidelity
- Shreds into SQL tables
- Complete validation, full SQL support
- No triggers to update tables (built-in rewriting)
- Some overhead
- Cannot change schema w/o reloading all data
- Requires a schema
16Structured Storage Detail
- Annotate XML schema to control nested collections
storage, as - CLOB
- Array of serialized SQL objects
- Nested table of serialized SQL objects
- Array of XMLType
17Working with XML Schema
- Registering schema
- begin dbms_xmlschema.registerSchema(
http//namespace', xdbURIType('schema.xsd').getCl
ob(), TRUE,TRUE,FALSE,TRUE) - end
- Creating table w/ schema
- CREATE TABLE TableName of XMLType
- XMLSCHEMA "http//namespace"
18XQuery 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
19XQuery 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
- fndoc - Maps to XDB Repository on server
- SQLPlus provides xquery command to execute XQuery
- XSL-T will also get compiled to XQuery
20Architecture
XQUERY
Normalization
XQuery XSL-T Parser
Statically Type checked Tree
XQueryX
Normalized Tree (casts, treat )
Compiler
Rewrite to SQLX
Compiled XQuery Tree
SQL/XML Operand Tree
S Q L
XQuery Type check
SQLX rewrite
SQL Operand Tree
XML Indexes, Text Indexes
SQL Metadata XMLSchema Repository
Relational Optimizer
Execution Structures
Execution engine
XQuery FO
21XQuery 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 FO pre-defined external
- Standard implementation interfaces
- Write Java Function once use it in
XQuery/XSLT
22Processing 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
23Sample 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."
ltresultsgt FOR a IN distinct(document("http//www.
bn.com")//author) RETURN ltresultgt
a, FOR b IN document("http//www.bn.com"
)/bib/bookauthor a RETURN b/title
lt/resultgt lt/resultsgt
24WHAT 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
25Environments 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
26Why 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.
27XQuery 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 oraview 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 oraview
wraps relational data in this way is an easy
mistake to make, and one that could be difficult
to diagnose without static type-checking.
28Static Type-Checking of XQuery Expressions
oraview
- This produces a static-type-check error, because
"ROW" is missing. - SELECT XMLQuery('for i in oraview("REGIONS"),
j in oraview("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 oraview("REGIONS"),
j in oraview("COUNTRIES") -
- ERROR at line 1
- ORA-19276 XP0005 - XPath step specifies an
invalid element/attribute name - (REGION_ID)
29Correct code
- SELECT XMLQuery('for i in oraview("REGIONS"),
j in oraview("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
30Result Sequence
- ltROWgtltDEPARTMENT_IDgt10lt/DEPARTMENT_IDgtltDEPARTMENT_
NAMEgtAdministrationlt/DEPARTMENT_NAMEgtltMANAGER_IDgt2
00lt/MANAGER_IDgtltLOCATION_IDgt1700lt/LOCATION_IDgtlt/RO
Wgt -
- ltROWgtltDEPARTMENT_IDgt20lt/DEPARTMENT_IDgtltDEPARTMENT_
NAMEgtMarketinglt/DEPARTMENT_NAMEgtltMANAGER_IDgt201lt/M
ANAGER_IDgtltLOCATION_IDgt1800lt/LOCATION_IDgtlt/ROWgt -
- ltROWgtltDEPARTMENT_IDgt30lt/DEPARTMENT_IDgtltDEPARTMENT_
NAMEgtPurchasinglt/DEPARTMENT_NAMEgtltMANAGER_IDgt114lt/
MANAGER_IDgtltLOCATION_IDgt1700lt/LOCATION_IDgtlt/ROWgt -
- ltROWgtltDEPARTMENT_IDgt40lt/DEPARTMENT_IDgtltDEPARTMENT_
NAMEgtHuman Resourceslt/DEPARTMENT_NAMEgtltMANAGER_IDgt
203lt/MANAGER_IDgtltLOCATION_IDgt2400lt/LOCATION_IDgtlt/R
OWgt
31XQuery Processing
- Choices co-processor or native compilation?
- Co-processor
- off-the-shelf XQuery processor
- opaque to DBMS
- Native compilation
- XQuery processing added to database engine
- DBMS-specific processor
32Co-processor Advantages
- Easy to implement and install
- Modularity of XQuery processor
- Standard XQuery processor between applications
- Third-party development
- Flexibility
33Co-processor Limitations
- Storage Optimization
- Advanced 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
34Oracle'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
35Native Processor Architecture
36Advantages 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
37Conclusion
- XMLType
- Variety of ways for data to be stored
- XQuery parsing and static type checking
- XQuery native processing and co-processor
38References
- 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/oram
ag/webcolumns/2003/techarticles/scardina_xmldb.htm
l - XML Query (XQuery) Support in Oracle Database 10g
Release 2. Oracle White Paper. May 2005. - XML and Datenbanken. http//www.dbis.ethz.ch/educa
tion/ws0506/xml_db_ws2005 - http//www.dbspecialists.com
- http//www.w3.org/TR/2003/WD-xqueryx-20031219/N10
16C - http//www.w3schools.com/xquery/xquery_example.asp