SQL/XML For Developers: Lewis Cunningham Senior Solutions Architect Enterprisedb
SQL/XML For Developers: Lewis Cunningham Senior Solutions Architect Enterprisedb
SQL/XML For Developers: Lewis Cunningham Senior Solutions Architect Enterprisedb
Lewis Cunningham
Senior Solutions Architect
EnterpriseDB
[email protected]
1
Postgres Rocks!
2
Agenda
What is XML?
What is SQL/XML?
<?XML?>
What is XML?
4
Semi-Structured
Hierarchical
Not relational
Not freeform
Markup “Language”
Tags Identify Data
<NAME>Lewis</NAME>
Elements
Root Element
Child Elements
Namespaces
What is XML?
6
Valid XML
Conforms to a specific specification (DTD, XSD, RNG)
A valid document will always be a well formed document
What is XML?
7
Element/Tag
Simple Example Childnode1
Child to
rootnode
<rootnode>
<childnode1>Some Data</childnode1> Childnode1 is
Sibling to
<childnode2>Some more childnode2
<additional>data</additional></childnode2>
<emptytag />
Closing
</rootnode> Empty
Tag
Tag
What is XML?
8
Namespaces
</abc:childnode2>
<emptytag /> Default
Usage
</rootnode>
What is XML?
10
Describing XML
DTD
XSD
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="product" type="ProductType"/>
<xsd:complexType name="ProductType">
<xsd:sequence>
<xsd:element name="number" type="xsd:integer"/>
<xsd:element name="size" type="SizeType"/>
</xsd:sequence>
<xsd:attribute name="effDate" type="xsd:date"/>
</xsd:complexType>
<xsd:simpleType name="SizeType">
<xsd:restriction base="xsd:integer"> <xsd:minInclusive value="2"/>
RELAX NG
<element name="patron"
xmnln="http://relaxng.org/ns/structure/1.0">
<interleave>
<element name="name"><text/></element>
<element name="id-num"><text/></element>
<zeroOrMore>
<element name="book">
<choice>
<attribute name="isbn"/>
<attribute name="title"/>
</choice>
</element>
</zeroOrMore>
</interleave>
</element>
RELAX NG (Compact) Example
17
element patron {
element name { text } &
element id-num { text } &
element book {
(attribute isbn { text } |
attribute title { text } )
}*
}
What is the XML data type?
18
Text based
Non-validating
What is the XML data type?
19
XML Document
<onlyoneroot>
data goes here
</onlyoneroot>
SQL/
XML
What is SQL/XML?
22
SQL/X Functions
XMLParse
XMLSerialize
XMLElement
XMLForest
XMLAgg
XMLAttributes
XML Comment
XMLConcat
Xpath
What is SQL/XML?
25
Sample data
Sample table
INSERT INTO EMP(
LAST_NAME, EMP_ID, FIRST_NAME, DEPT_ID, SALARY)
VALUES
('Blow', 1, 'Joe', 1, 10000),
('Head', 2, 'Helmut', 1, 12000),
('Jack', 3, 'Noe', 1, 12000),
('Hard', 4, 'Blow', 2, 20000),
('First', 5, 'Hugo', 2, 21000),
('Spaem',6, 'Kingoof', 2, 20000),
('Ventura', 7, 'Ace', 3, 35000),
('Nickleby', 8, 'Nick', 3, 400000),
('Budd', 9, 'Billy', 4, 99000),
('Cleaver', 10, 'Wally', 4, 100000) ;
What is SQL/XML? - XML Parse
27
vXMLVar :=
XMLParse(CONTENT ‘<root>data</root>’);
vXMLVar :=
XMLParse(DOCUMENT ‘<root>data</root>’);
What is SQL/XML? - XMLSerialize
28
vString := XMLSerialize(
DOCUMENT v_xml AS TEXT);
vString := XMLSerialize(
CONTENT v_xml AS TEXT);
What is SQL/XML? - XMLElement
29
<main>Blow</main>
<main>Head</main>
<main>Jack</main>
<main>Hard</main>
<main>First</main>
What is SQL/XML? – XMLElement Cont’d
30
<main>Blow</main> | <main>Joe</main>
<main>Head</main> | <main>Helmut</main>
<main>Jack</main> | <main>Noe</main>
<main>Hard</main> | <main>Blow</main>
What is SQL/XML? - XMLForest
31
<last_name>Blow</last_name><first_name>Joe</f
irst_name>
<last_name>Head</last_name><first_name>Helmut
</first_name>
What is SQL/XML? – XMLForest Cont’d
32
SELECT XMLAgg(
XMLForest(last_name, first_name) )
FROM emp;
<last_name>Blow</last_name>
<first_name>Joe</first_name>
<last_name>Head</last_name>
<first_name>Helmut</first_name>
<last_name>Jack</last_name>
<first_name>Noe</first_name>…
What is SQL/XML? – XMLAgg Cont'd
34
<main rownum="1"/>
<main rownum="2"/>
<main rownum="3"/>
<main rownum="4"/>
What is SQL/XML? – XMLAttributes Cont’d
36
<main rownum="1">
<last_name>Blow</last_name>
<first_name>Joe</first_name>
</main>
<main rownum="2">
<last_name>Head</last_name>
<first_name>Helmut</first_name>
</main>
What is SQL/XML? – Concatenating Columns
38
<main>
<fullname dept_id="1">
Blow,Joe</fullname>
<salary>10000</salary>
</main>
What is SQL/XML? - XMLComment
40
<lastname>Blow</lastname> |
<firstname>Joe</firstname>
<lastname>Head</lastname> |
<firstname>Helmut</firstname>
What is SQL/XML? – XMLConcat Cont'd
42
SELECT XMLConcat(
XMLElement(name lastname, last_name),
XMLElement(name firstname, first_name) )
FROM emp;
<lastname>Blow</lastname><firstname>Joe</firs
tname>
<lastname>Head</lastname><firstname>Helmut</f
irstname>
What is SQL/XML? – XMLConcat Cont'd
43
<main><lastname>Blow</lastname><firstname>Joe
</firstname></main>
<main><lastname>Head</lastname><firstname>Hel
mut</firstname></main>
<main><lastname>Jack</lastname><firstname>Noe
</firstname></main>
<main><lastname>Hard</lastname><firstname>Blo
w</firstname></main>
What is SQL/XML? - XPath
46
xpath
-----------
{Joe}
{Helmut}
{Noe}
{Blow}
{Hugo}
What is SQL/XML? – Xpath Cont'd
48
textcol
---------
Joe
Helmut
Noe
Blow
Hugo
What is SQL/XML? – XML from a Query
49
<emp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<last_name>Blow</last_name>
<emp_id>1</emp_id>
<first_name>Joe</first_name>
<dept_id>1</dept_id>
<salary>10000</salary>
</emp>
What should(n’t) I do with XML?
51
XML
What should(n’t) I do with XML?
52
Lewis Cunningham
Senior Solutions Architect
EnterpriseDB
[email protected]
56