1 generating xml from relational tables using oracle by selim mimaroglu supervisor: betty oneil
TRANSCRIPT
![Page 1: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/1.jpg)
11
Generating XML from Generating XML from Relational TablesRelational Tablesusing ORACLEusing ORACLE
by by
Selim MimarogluSelim Mimaroglu
Supervisor: Betty O’NeilSupervisor: Betty O’Neil
![Page 2: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/2.jpg)
22
INTRODUCTIONINTRODUCTION DatabaseDatabase: A usually large collection of data, organized : A usually large collection of data, organized
specially for rapid search and retrievalspecially for rapid search and retrieval Database Management SystemDatabase Management System: Collection of programs : Collection of programs
that enables you to store, modify and extract information that enables you to store, modify and extract information from a database.from a database.
Database Schema: Database Schema: A database schema describes the A database schema describes the structure of tables and views in the database.structure of tables and views in the database.
XML: XML: Extensible Markup Language is a W3C-endoersed Extensible Markup Language is a W3C-endoersed
standard for document markup. It doesn’t have a fixed standard for document markup. It doesn’t have a fixed set of tags and elements. set of tags and elements.
XML SchemaXML Schema: An XML schema describes the structure : An XML schema describes the structure of an XML documentof an XML document..
![Page 3: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/3.jpg)
33
Platform and TechnologyPlatform and Technology
Sun Solaris Operating System 5.8Sun Solaris Operating System 5.8 Sun Enterprise 250 ServerSun Enterprise 250 Server
Oracle 9.2iOracle 9.2i JAVAJAVA JDBC JDBC (with some Oracle Specific Extensions)(with some Oracle Specific Extensions)
JSP JSP (Java Server Pages)(Java Server Pages)
Tomcat 5.0.12 Tomcat 5.0.12 (this is beta version)(this is beta version)
![Page 4: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/4.jpg)
44
What’s our task?What’s our task?
Our task is to generate XML from Our task is to generate XML from relational tablesrelational tables
Input: ITIS (Integrated Taxonomic Input: ITIS (Integrated Taxonomic Information System) Database, XML Information System) Database, XML SchemaSchema
Output: Taxonomic Units in XML formatOutput: Taxonomic Units in XML format
![Page 5: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/5.jpg)
55
ITIS DatabaseITIS Database
Full database is available at: Full database is available at: http://www.itis.usda.gov/ftp_download.htmlhttp://www.itis.usda.gov/ftp_download.html
They use InformixThey use Informix Includes nonstandard SQLIncludes nonstandard SQL Putting this data in Oracle requires some Putting this data in Oracle requires some
work work
![Page 6: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/6.jpg)
66
Output from Canadian ITISOutput from Canadian ITIS
![Page 7: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/7.jpg)
77
Output from Canadian ITIS Output from Canadian ITIS contcont
![Page 8: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/8.jpg)
88
Our OutputOur Output
![Page 9: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/9.jpg)
99
Our Output Our Output contcont
![Page 10: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/10.jpg)
1010
Our Output Our Output cont2cont2
![Page 11: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/11.jpg)
1111
ComparisonComparison
Canadian ITIS doesn’t present full data in Canadian ITIS doesn’t present full data in XML form. We don’t know why?XML form. We don’t know why?
They obey the XML Schema we have.They obey the XML Schema we have. They got synonym relationship wrong.They got synonym relationship wrong. You can consider our XML output as an You can consider our XML output as an
improvement improvement
![Page 12: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/12.jpg)
1212
How?How?
There are two methods for creating XML There are two methods for creating XML from relational tables using Oracle XMLDBfrom relational tables using Oracle XMLDB
Method #1Method #1 Method #2Method #2
![Page 13: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/13.jpg)
1313
Don’tDon’t
We avoided making any software which We avoided making any software which gets the data from DBMS and converts it gets the data from DBMS and converts it to XML format. Oracle has XML DB to XML format. Oracle has XML DB Engine built in it.Engine built in it.
We avoided data duplication. We used the We avoided data duplication. We used the database we got from ITIS.database we got from ITIS.
![Page 14: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/14.jpg)
1414
Method #1: OverviewMethod #1: Overview
i.i. Create Object TypesCreate Object Types
ii.ii. Create Nested TablesCreate Nested Tables
iii.iii. Generate XML from the whole structureGenerate XML from the whole structure
![Page 15: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/15.jpg)
1515
Method #1: a portion from XML Method #1: a portion from XML SchemaSchema
Below is a portion from the XML SchemaBelow is a portion from the XML Schema<xs:element name="comment" minOccurs="0" maxOccurs="unbounded"><xs:element name="comment" minOccurs="0" maxOccurs="unbounded"> <xs:complexType><xs:complexType> <xs:sequence><xs:sequence> <xs:element name="commentator" type="xs:string" minOccurs="0"/><xs:element name="commentator" type="xs:string" minOccurs="0"/> <xs:element name="detail" type="xs:string"/><xs:element name="detail" type="xs:string"/> <xs:element name="commenttimestamp" type="xs:string" <xs:element name="commenttimestamp" type="xs:string"
minOccurs="0"/>minOccurs="0"/> <xs:element name="commentupdatedate" type="xs:string" <xs:element name="commentupdatedate" type="xs:string"
minOccurs="0"/>minOccurs="0"/> <xs:element name="commentlinkupdatedate" type="xs:string" <xs:element name="commentlinkupdatedate" type="xs:string"
minOccurs="0"/>minOccurs="0"/> </xs:sequence></xs:sequence> </xs:complexType></xs:complexType></xs:element></xs:element>
![Page 16: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/16.jpg)
1616
Method #1: corresponding Object Method #1: corresponding Object Type in OracleType in Oracle
Corresponding Object Type in Oracle would be:Corresponding Object Type in Oracle would be:
create type itcomment as object (create type itcomment as object ( commentator varchar2(100),commentator varchar2(100), detail char(2000),detail char(2000), commenttimestamp timestamp,commenttimestamp timestamp, commentupdatedate date,commentupdatedate date, commentlinkupdatedate date)commentlinkupdatedate date)
create type itcomment_ntabtyp as table of itcommentcreate type itcomment_ntabtyp as table of itcommentThis matches maxOccurs=“unbounded” in the XML This matches maxOccurs=“unbounded” in the XML
SchemaSchema
![Page 17: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/17.jpg)
1717
Method #1: nested tables look like Method #1: nested tables look like
![Page 18: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/18.jpg)
1818
Method #1: XML output (portion)Method #1: XML output (portion)
..
..
<itcomment><itcomment><commentator>NODC</commentator><commentator>NODC</commentator><detail>Part</detail><detail>Part</detail><commenttimestamp>13-JUN-96 02.51.08.000000 <commenttimestamp>13-JUN-96 02.51.08.000000 PM</commenttimestamp>PM</commenttimestamp><commentupdatedate>1996-06-17</commentupdatedate><commentupdatedate>1996-06-17</commentupdatedate><commentlinkupdatedate>1996-07-29</commentlinkupdatedate><commentlinkupdatedate>1996-07-29</commentlinkupdatedate>
</itcomment></itcomment>....
![Page 19: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/19.jpg)
1919
Method #1: view treeMethod #1: view tree
![Page 20: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/20.jpg)
2020
Method #1: SummaryMethod #1: Summary
![Page 21: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/21.jpg)
2121
Problems of Method #1Problems of Method #1
Redundant Object Relational LayerRedundant Object Relational Layer Can’t use keywords for naming the Can’t use keywords for naming the
elements. For example I had to create elements. For example I had to create itcomment itcomment Object Type instead of Object Type instead of commentcomment..
![Page 22: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/22.jpg)
2222
Method #2: OverviewMethod #2: Overview
In this approach, bypass Object Relational In this approach, bypass Object Relational RepresentationRepresentation
Create XML from Relational Tables Create XML from Relational Tables directlydirectly
Two levels onlyTwo levels only XMLType ViewXMLType View Only one SQL query in view definition Only one SQL query in view definition
which creates everything we needwhich creates everything we need
![Page 23: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/23.jpg)
2323
Method #2: XML generationMethod #2: XML generationCREATE or REPLACE VIEW txn of XMLTYPE with object idCREATE or REPLACE VIEW txn of XMLTYPE with object id (extract(sys_nc_rowinfo$, '/taxon/tsn/text()').getnumberval())(extract(sys_nc_rowinfo$, '/taxon/tsn/text()').getnumberval()) AS SELECT xmlelement("taxon",AS SELECT xmlelement("taxon", xmlforest(xmlforest( t.tsn as "tsn",t.tsn as "tsn", --trim(t.unit_name1) || ' ' || trim(t.unit_name2) as "concatenatedname",--trim(t.unit_name1) || ' ' || trim(t.unit_name2) as "concatenatedname", (SELECT con_name(t.tsn) from dual) as "concatenatedname",(SELECT con_name(t.tsn) from dual) as "concatenatedname", (SELECT xmlforest(av.taxon_author as "taxonauthor",(SELECT xmlforest(av.taxon_author as "taxonauthor", to_char(av.update_date, 'YYYY-MM-DD')to_char(av.update_date, 'YYYY-MM-DD') "authorupdatedate")"authorupdatedate") FROM xml_authorview avFROM xml_authorview av WHERE t.tsn = av.tsn) "author",WHERE t.tsn = av.tsn) "author", 'http://www.cs.umb.edu/v_tsn='||t.tsn||'p_format=xml' as "url",'http://www.cs.umb.edu/v_tsn='||t.tsn||'p_format=xml' as "url", (select rank_name(t.rank_id) from dual) as "rank",(select rank_name(t.rank_id) from dual) as "rank", (select(select trim(k.kingdom_nametrim(k.kingdom_name))......
)from taxonomic_units t where t.tsn=1100 ;)from taxonomic_units t where t.tsn=1100 ;
![Page 24: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/24.jpg)
2424
Method #2: view treeMethod #2: view tree
![Page 25: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/25.jpg)
2525
SQLX FunctionsSQLX Functions
SQLX standard, an emerging SQL standard for XML.
XMLElement() XMLForest() XMLConcat() XMLAgg() Because these are emerging standards the
syntax and semantics of these functions are subject to change in the future in order to conform to the standard.
![Page 26: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/26.jpg)
2626
Using SQLX Functions
XMLElement() Function: It takes an element name, an optional collection of attributes for the element, and zero or more arguments that make up the element’s content and returns an instance of type XMLType.
XMLForest() Function: It produces a forest of XML elements from the given list of arguments
![Page 27: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/27.jpg)
2727
Using SQLX Functions Using SQLX Functions contcont
XMLAgg() Function: It is an aggregate function that produces a forest of XML elements from a collection of XML elements.
XMLConcat() Function: It concatenates all the arguments passed in to create a XML fragment.
![Page 28: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/28.jpg)
2828
We don’t own the data!We don’t own the data!
It’s pure relationalIt’s pure relational It makes differenceIt makes difference If our database were in Object relational If our database were in Object relational
form, we would have used Method #1form, we would have used Method #1 Not a good idea, to change the paradigm.Not a good idea, to change the paradigm.
![Page 29: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/29.jpg)
2929
We generate XML on flyWe generate XML on fly
Dynamic viewDynamic view We don’t generate XML for the whole We don’t generate XML for the whole
database and get a portion of itdatabase and get a portion of it We generate what we need onlyWe generate what we need only
![Page 30: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/30.jpg)
3030
How does Oracle store XMLHow does Oracle store XML
In underlying object type columns. This is the default storage mechanism.
In a single underlying LOB column. Here the storage choice is specified in the STORE AS clause of the CREATE TABLE statement:CREATE TABLE po_tab OF xmltype
STORE AS CLOB
![Page 31: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/31.jpg)
3131
Relation Between XMLSchema and Relation Between XMLSchema and SQL Object-Relational TypesSQL Object-Relational Types
When an XML schema is registered, Oracle XML DB creates the appropriate SQL object types that enable structured storage of XML documents that conform to this XML schema. All SQL object types are created based on the current registered XML schema, by default.
It’s possible to do this manually, that’s what we did in Method #1
![Page 32: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/32.jpg)
3232
XML DeliveryXML Delivery
![Page 33: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/33.jpg)
3333
XML Delivery XML Delivery contcont
![Page 34: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/34.jpg)
3434
XML Delivery XML Delivery cont2cont2
Java Server Page get request from the Java Server Page get request from the user, passes it to Java Beanuser, passes it to Java Bean
Java Bean connects Oracle using JDBC, Java Bean connects Oracle using JDBC, gets information, passes it to JSPgets information, passes it to JSP
Used some nonstandard features of Used some nonstandard features of Oracle JDBC Oracle JDBC
![Page 35: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/35.jpg)
3535
XML Delivery PerformanceXML Delivery Performance XML output is (very) fast in the database: 0.032 XML output is (very) fast in the database: 0.032
seconds averageseconds average Use “thin” instead of “oci” driverUse “thin” instead of “oci” driver Use Connection PoolUse Connection Pool Use OracleStatement instead of Use OracleStatement instead of
OraclePreparedStatementOraclePreparedStatement Turn of auto-commit feautureTurn of auto-commit feauture Define column typeDefine column type Better performance maybe possible with Java Better performance maybe possible with Java
Stored Procedures in Oracle. We will try and find Stored Procedures in Oracle. We will try and find outout
![Page 36: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/36.jpg)
3636
ConclusionConclusion
Although we have implementation both Methods; Although we have implementation both Methods; #1 and #2, we chose to use Method #2: Using #1 and #2, we chose to use Method #2: Using XMLType View.XMLType View.
It’s fast and easyIt’s fast and easy Using O-R approach makes sense when you Using O-R approach makes sense when you
have your data in O-R formhave your data in O-R form Mostly I found Oracle documentation useful. At Mostly I found Oracle documentation useful. At
some places it was fuzzy and hard to some places it was fuzzy and hard to understand. This is recent feature addition to understand. This is recent feature addition to Oracle. We see brand new docs. Oracle. We see brand new docs.
![Page 37: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/37.jpg)
3737
Questions?Questions?
![Page 38: 1 Generating XML from Relational Tables using ORACLE by Selim Mimaroglu Supervisor: Betty ONeil](https://reader036.vdocuments.site/reader036/viewer/2022062404/5519b2f95503466f578b4690/html5/thumbnails/38.jpg)
3838
ThanksThanks
Send comments, suggestions to Send comments, suggestions to [email protected]@cs.umb.edu
You can find this presentation at You can find this presentation at http://www.cs.umb.edu/~smimarog/talks/xmlTalk.ppthttp://www.cs.umb.edu/~smimarog/talks/xmlTalk.ppt