XML on RDBMS XML/XPATH XML/XPATH XML/XPATH XML/XPATH
XML on RDBMS XML/XPATH XML/XPATH XML/XPATH XML/XPATH
XML on RDBMS XML/XPATH XML/XPATH XML/XPATH XML/XPATH
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Advanced Databases<br />
Topic 2: query processing aspects<br />
Relati<strong>on</strong>al support for <str<strong>on</strong>g>XML</str<strong>on</strong>g>-data<br />
<str<strong>on</strong>g>XML</str<strong>on</strong>g>/<strong>XPATH</strong><br />
Retro: Databases<br />
<str<strong>on</strong>g>XML</str<strong>on</strong>g>/<strong>XPATH</strong><br />
Retro: Databases<br />
1<br />
3<br />
5<br />
Outline<br />
<str<strong>on</strong>g>XML</str<strong>on</strong>g> <strong>on</strong> <strong>RDBMS</strong><br />
• <strong>XPATH</strong>, hoe zat dat ook al weer?<br />
• karakterisering van <strong>XPATH</strong> axes<br />
• relati<strong>on</strong>ele implementatie<br />
Voorbeeldqueries<br />
<str<strong>on</strong>g>XML</str<strong>on</strong>g>/<strong>XPATH</strong><br />
Students/Student/CrsTaken[@Semester = "S1996"]<br />
//Student/CrsTaken[@Semester = "S1996"]<br />
//Student[ends−with(@StudId, 987) and CrsTaken/@CrsCode = "MAT123"]<br />
//CrsTaken[@Semester = "S1996"]/parent::Student/parent::Students<br />
<str<strong>on</strong>g>XML</str<strong>on</strong>g>/<strong>XPATH</strong><br />
Relati<strong>on</strong>ele Databases<br />
• logische structuren: tabellen, (foreign) keys<br />
• manipulatie-navigatie: declaratief, joins<br />
• fysieke <strong>on</strong>dersteuning: indexering (B-trees), query<br />
optimisati<strong>on</strong><br />
<str<strong>on</strong>g>XML</str<strong>on</strong>g>-<strong>XPATH</strong><br />
• logische structuren: trees<br />
• manipulatie-navigatie: <strong>XPATH</strong>/XQUERY, via axes<br />
• fysieke <strong>on</strong>dersteuning: Ja, laten we het daar eens<br />
over hebben<br />
2<br />
4<br />
6<br />
1
<str<strong>on</strong>g>XML</str<strong>on</strong>g>/<strong>XPATH</strong><br />
Van geneste representatie<br />
naar boomrepresentatie<br />
a is root<br />
height(a) = 3<br />
level(a) = 0; level(e) = 3<br />
<str<strong>on</strong>g>XML</str<strong>on</strong>g>/<strong>XPATH</strong><br />
Nog meer axes<br />
Focus op vier “major” axes<br />
descendant, ancestor, following, preceding<br />
<str<strong>on</strong>g>XML</str<strong>on</strong>g>/<strong>XPATH</strong><br />
Pre-order en post-order<br />
• child (default)<br />
• ancestor<br />
• following<br />
• following-sibling<br />
• self<br />
7<br />
9<br />
11<br />
Drie axes vanuit f<br />
1. parent<br />
2. preceding<br />
3. descendant<br />
Kernvraag<br />
<str<strong>on</strong>g>XML</str<strong>on</strong>g>/<strong>XPATH</strong><br />
<str<strong>on</strong>g>XML</str<strong>on</strong>g>/<strong>XPATH</strong><br />
1. We willen <str<strong>on</strong>g>XML</str<strong>on</strong>g>-data afbeelden naar relati<strong>on</strong>ele structuren<br />
2. We willen <strong>XPATH</strong>-axes efficiënt <strong>on</strong>dersteunen met behulp<br />
van generieke faciliteiten van het <strong>RDBMS</strong> (index, optimisati<strong>on</strong>)<br />
Een antwoord (Grust e.a.)<br />
1. Annoteer de elementen met pre-order- en<br />
post-ordergegevens<br />
2. Druk de axes uit in deze gegevens<br />
<str<strong>on</strong>g>XML</str<strong>on</strong>g>/<strong>XPATH</strong><br />
8<br />
10<br />
12<br />
2
<str<strong>on</strong>g>XML</str<strong>on</strong>g>/<strong>XPATH</strong><br />
Karakterisering axes<br />
• w is a descendant of v<br />
pre(v) < pre(w) and post(w) < post(v)<br />
in diagram: rechts<strong>on</strong>der<br />
• w is preceding v<br />
in diagram: links<strong>on</strong>der<br />
• w is ancestor of v<br />
in diagram: linksboven<br />
• w is following v<br />
in diagram: rechtsboven<br />
<str<strong>on</strong>g>XML</str<strong>on</strong>g>/<strong>XPATH</strong><br />
SQL query voor<br />
descendant-or-self::n /preceding-sibling::text()<br />
SELECT DISTINCT v2.*<br />
FROM C<strong>on</strong>text c, Accel v1, Accel v2<br />
WHERE c.pre