22.08.2013 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!