+ All Categories
Home > Documents > PRG036 – Technologie XML

PRG036 – Technologie XML

Date post: 31-Dec-2015
Category:
Upload: shafira-franco
View: 17 times
Download: 0 times
Share this document with a friend
Description:
PRG036 – Technologie XML. Přednáší: Irena Mlýnková ( [email protected] ) Martin Nečaský ( [email protected] ) LS 2010. Stránka přednášky: http://www.ksi.mff.cuni.cz/~mlynkova/ prg036 /. Osnova předmětu. Úvod do principů formátu XML, přehled XML technologií, jazyk DTD - PowerPoint PPT Presentation
81
1 PRG036 – Technologie XML Přednáší: Irena Mlýnková (mlynkova @ksi.mff. cuni . cz ) Martin Nečaský (necasky @ksi.mff. cuni . cz ) LS 2010 Stránka přednášky: http://www.ksi.mff.cuni.cz/~mlynkova/ prg036 /
Transcript
Page 2: PRG036  – Technologie XML

2

Osnova předmětu

Úvod do principů formátu XML, přehled XML technologií, jazyk DTD Datové modely XML, rozhraní DOM a SAX Úvod do jazyka XPath Úvod do jazyka XSLT XPath 2.0, XSLT 2.0 Úvod do jazyka XML Schema Pokročilé rysy jazyka XML Schema Přehled standardních XML formátů Úvod do jazyka XQuery Pokročilé rysy jazyka XQuery, XQuery Update Úvod do XML databází, nativní XML databáze, číslovací schémata,

structural join Relační databáze s XML rozšířením, SQL/XML

Page 3: PRG036  – Technologie XML

3

Dotazovací jazyky nad XML daty

Cíle: dotazování, pohledy, transformace, případně aktualizace XML dat Od r. 1998 XML-QL, XQL, … Vývoj v konsorciu W3C se ustálil/pokračuje v jazycích

XSLT 1.0, XSLT 2.0, XPath 1.0, XPath 2.0, XQuery 1.0 XSLT je jazyk pro transformace, využívá XPath, zápis

transformací hodně využívá XML XQuery vhodnější pro dotazování – uživatelsky

orientováná syntaxe Pz.: XPath 2.0 XQuery

Page 4: PRG036  – Technologie XML

4

Co je XPath?

XPath je základní jazyk pro dotazování nad XML dokumenty Výběr částí XML dokumentů

Základní myšlenka se podobá navigaci v systému souborů

Notace XPath není vyjádřena v XML Na XPath je založen XSLT, XPointer, XQuery

Page 5: PRG036  – Technologie XML

5

Model XML dat v XPath<?xml version="1.0"?><!DOCTYPE objednavka SYSTEM "objednavka.dtd"><objednavka datum="10/10/2008" stav="expedovana"> <zakaznik cislo="C992">Martin Nečaský</zakaznik> <polozky> <polozka kod="48282811"> <mnozstvi>5</mnozstvi> <cena>22</cena> </polozka> <polozka kod=“929118813"> <mnozstvi>1</mnozstvi> <cena>91934</cena>

<barva>modra</barva> </polozka> </polozky></objednavka>

Page 6: PRG036  – Technologie XML

6

<?xml version="1.0"?><!DOCTYPE objednavka SYSTEM "objednavka.dtd"><objednavka datum="10/10/2008" stav="expedovana"> <zakaznik cislo="C992">Martin Nečaský</zakaznik> <polozky> <polozka kod="48282811"> <mnozstvi>5</mnozstvi> <cena>22</cena> </polozka> <polozka kod=“929118813"> <mnozstvi>1</mnozstvi> <cena>91934</cena>

<barva>modra</barva> </polozka> </polozky></objednavka>

Model XML dat v XPath

document

Page 7: PRG036  – Technologie XML

7

<?xml version="1.0"?><!DOCTYPE objednavka SYSTEM "objednavka.dtd"><objednavka datum="10/10/2008" stav="expedovana"> <zakaznik cislo="C992">Martin Nečaský</zakaznik> <polozky> <polozka kod="48282811"> <mnozstvi>5</mnozstvi> <cena>22</cena> </polozka> <polozka kod=“929118813"> <mnozstvi>1</mnozstvi> <cena>91934</cena>

<barva>modra</barva> </polozka> </polozky></objednavka>

Model XML dat v XPath

document

Page 8: PRG036  – Technologie XML

8

<?xml version="1.0"?><!DOCTYPE objednavka SYSTEM "objednavka.dtd"><objednavka datum="10/10/2008" stav="expedovana"> <zakaznik cislo="C992">Martin Nečaský</zakaznik> <polozky> <polozka kod="48282811"> <mnozstvi>5</mnozstvi> <cena>22</cena> </polozka> <polozka kod=“929118813"> <mnozstvi>1</mnozstvi> <cena>91934</cena>

<barva>modra</barva> </polozka> </polozky></objednavka>

Model XML dat v XPath

document

Page 9: PRG036  – Technologie XML

9

<?xml version="1.0"?><!DOCTYPE objednavka SYSTEM "objednavka.dtd"><objednavka datum="10/10/2008" stav="expedovana"> <zakaznik cislo="C992">Martin Nečaský</zakaznik> <polozky> <polozka kod="48282811"> <mnozstvi>5</mnozstvi> <cena>22</cena> </polozka> <polozka kod=“929118813"> <mnozstvi>1</mnozstvi> <cena>91934</cena>

<barva>modra</barva> </polozka> </polozky></objednavka>

Model XML dat v XPath

objednavka

document

Page 10: PRG036  – Technologie XML

10

<?xml version="1.0"?><!DOCTYPE objednavka SYSTEM "objednavka.dtd"><objednavka datum="10/10/2008" stav="expedovana"> <zakaznik cislo="C992">Martin Nečaský</zakaznik> <polozky> <polozka kod="48282811"> <mnozstvi>5</mnozstvi> <cena>22</cena> </polozka> <polozka kod=“929118813"> <mnozstvi>1</mnozstvi> <cena>91934</cena>

<barva>modra</barva> </polozka> </polozky></objednavka>

Model XML dat v XPath

objednavka

document

datum"10/10/2008"

stav"expedovana"

Page 11: PRG036  – Technologie XML

11

<?xml version="1.0"?><!DOCTYPE objednavka SYSTEM "objednavka.dtd"><objednavka datum="10/10/2008" stav="expedovana"> <zakaznik cislo="C992">Martin Nečaský</zakaznik> <polozky> <polozka kod="48282811"> <mnozstvi>5</mnozstvi> <cena>22</cena> </polozka> <polozka kod=“929118813"> <mnozstvi>1</mnozstvi> <cena>91934</cena>

<barva>modra</barva> </polozka> </polozky></objednavka>

Model XML dat v XPath

objednavka

document

datum"10/10/2008"

stav"expedovana"

zakaznik

cislo"C992"

text()"Martin Nečaský"

Page 12: PRG036  – Technologie XML

Model XML dat v XPath

objednavka

document

datum"10/10/2008"

stav"expedovana"

zakaznik

cislo"C992"

text()

"Martin Nečaský"

polozky

polozka

kod"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod"929118813"

mnozstvi cena

text() text()

"1" "91934"

barva

text()

"modra"

Page 13: PRG036  – Technologie XML

13

Model XML dat v XPath

Typy uzlů v modelu kořenový uzel uzly elementů textové uzly atributové uzly uzly pro komentáře uzly proveditelných instrukcí uzly jmenných prostorů

Co tam není: sekce CDATA, odkazy na entity a DTD

Page 14: PRG036  – Technologie XML

14

Model XML dat v XPath

Specifika Atributy nejsou zařazeny do seznamu dětí a potomků

daného uzlu Atributy ze jmenného prostoru xmlns jsou chápány jako

speciální uzly Kořenový uzel nereprezentuje kořenový element ale celý

XML dokument Kořenový element je reprezentován jako dítě

kořenového uzlu

Page 15: PRG036  – Technologie XML

15

Výrazy v XPath Výrazem v jazyce XPath je cesta Cesta se skládá z kroků

Absolutní cesta: /Krok1/Krok2/…/KrokN

Relativní cesta: Krok1/Krok2/…/KrokN

Page 16: PRG036  – Technologie XML

Výrazy v XPath - Příklady

objednavka

document

datum

stav"expedovana"

zakaznik

cislo"C992"

text()

"Martin Nečaský"

polozky

polozka

kod"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod"929118813"

mnozstvi cena

text() text()

"1" "91934"

barva

text()

"modra"

/

Page 17: PRG036  – Technologie XML

Výrazy v XPath - Příklady

objednavka

document

datum

stav"expedovana"

zakaznik

cislo"C992"

text()

"Martin Nečaský"

polozky

polozka

kod"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod"929118813"

mnozstvi cena

text() text()

"1" "91934"

barva

text()

"modra"

/objednavka

Page 18: PRG036  – Technologie XML

Výrazy v XPath - Příklady

objednavka

document

datum

stav"expedovana"

zakaznik

cislo"C992"

text()

"Martin Nečaský"

polozky

polozka

kod"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod"929118813"

mnozstvi cena

text() text()

"1" "91934"

barva

text()

"modra"

/objednavka/polozky/polozka

Page 19: PRG036  – Technologie XML

Výrazy v XPath - Příklady

objednavka

document

datum

stav"expedovana"

zakaznik

cislo"C992"

text()

"Martin Nečaský"

polozky

polozka

kod"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod"929118813"

mnozstvi cena

text() text()

"1" "91934"

barva

text()

"modra"

/objednavka/polozky/polozka/@kod

Page 20: PRG036  – Technologie XML

Výrazy v XPath - Příklady

objednavka

document

datum

stav"expedovana"

zakaznik

cislo"C992"

text()

"Martin Nečaský"

polozky

polozka

kod"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod"929118813"

mnozstvi cena

text() text()

"1" "91934"

barva

text()

"modra"

/objednavka/polozky/polozka/cena/text()

Page 21: PRG036  – Technologie XML

Výrazy v XPath - Příklady

objednavka

document

datum

stav"expedovana"

zakaznik

cislo"C992"

text()

"Martin Nečaský"

polozky

polozka

kod"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod"929118813"

mnozstvi cena

text() text()

"1" "91934"

barva

text()

"modra"

/objednavka/polozky/polozka/barva

Page 22: PRG036  – Technologie XML

Výrazy v XPath - Příklady

objednavka

document

datum

stav"expedovana"

zakaznik

cislo"C992"

text()

"Martin Nečaský"

polozky

polozka

kod"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod"929118813"

mnozstvi cena

text() text()

"1" "91934"

barva

text()

"modra"

/objednavka/zakaznik/jmeno

Page 23: PRG036  – Technologie XML

Výrazy v XPath - Příklady

objednavka

document

datum

stav"expedovana"

zakaznik

cislo"C992"

text()

"Martin Nečaský"

polozky

polozka

kod"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod"929118813"

mnozstvi cena

text() text()

"1" "91934"

barva

text()

"modra"

/objednavka/seznam-polozek/polozka

Page 24: PRG036  – Technologie XML

24

Výrazy v XPath - Příklady

Relativní cesta sama o sobě nemůže být vyhodnocena Nemá to žádný smysl, protože nevíme odkud

máme začít Vstupem musí být kromě samotné cesty také

jeden a více uzlů v XML dokumentu, ze kterých máme vyhodnocení začít

tzv. Kontextová množina

cena/text()

Page 25: PRG036  – Technologie XML

Výrazy v XPath - Příklady

objednavka

document

datum"10/10/2008"

stav"expedovana"

zakaznik

cislo"C992"

text()"Martin Nečaský"

polozky

polozka

kod"48282811"

mnozstvi cena

text() text()"5" "22"

polozka

kod"929118813"

mnozstvi barva

text() text()"1" "modra"

cena/text()

Page 26: PRG036  – Technologie XML

Výrazy v XPath - Příklady

objednavka

document

datum"10/10/2008"

stav"expedovana"

zakaznik

cislo"C992"

text()"Martin Nečaský"

polozky

polozka

kod"48282811"

mnozstvi cena

text() text()"5" "22"

polozka

kod"929118813"

mnozstvi barva

text() text()"1" "modra"

cena/text()

Page 27: PRG036  – Technologie XML

Výrazy v XPath - Příklady

objednavka

document

datum"10/10/2008"

stav"expedovana"

zakaznik

cislo"C992"

text()"Martin Nečaský"

polozky

polozka

kod"48282811"

mnozstvi cena

text() text()"5" "22"

polozka

kod"929118813"

mnozstvi barva

text() text()"1" "modra"

cena/text()

Page 28: PRG036  – Technologie XML

Výrazy v XPath - Příklady

objednavka

document

datum"10/10/2008"

stav"expedovana"

zakaznik

cislo"C992"

text()"Martin Nečaský"

polozky

polozka

kod"48282811"

mnozstvi cena

text() text()"5" "22"

polozka

kod"929118813"

mnozstvi barva

text() text()"1" "modra"

cena/text()

Page 29: PRG036  – Technologie XML

29

Vyhodnocení XPath výrazu

Nechť P je XPath cesta, kde S je její první krok a P’ je zbytek cesty

Nechť C značí kontextovou množinu uzlů pro vyhodnocení P Pokud je P absolutní, pak C obsahuje pouze a jen kořenový uzel

dokumentu Pokud je P relativní, musí být C specifikována explicitně

Pokud je P prázdná, pak výsledkem vyhodnocení je C Prázdná = 0 kroků

Jinak je P vyhodnocena vzhledem k C následovně: C’ = {} Pro každý uzel u z C vyhodnoť S a výsledek přidej do C’ Vyhodnoť P’ vzhledem k C’

Page 30: PRG036  – Technologie XML

30

Vyhodnocení XPath výrazu

Pozor, návratová hodnota cesty je množina uzlů Množina je neuspořádaná Tedy ani výsledek nelze očekávat uspořádaný

(např. v pořadí, ve kterém se vyskytují uzly v XML dokumentu, viz. dále)

Page 31: PRG036  – Technologie XML

31

XPath cesty formálně

XPath krok je formálně následující výraz

Osa, test uzlu a seznam predikáty Osa a predikáty jsou nepovinné Zatím jsme viděli pouze použití test-uzlu

Seznam predikátů byl prázdný Osa byla defaultní

osa::test-uzlu predikát1 ... predikátN

Page 32: PRG036  – Technologie XML

32

XPath osy

Osa specifikuje, v jaké relaci mají být uzly vybrané v tomto kroku vzhledem k uzlu u z kontextové množiny

Vybrané uzly jsou děti (přímí potomci) uzlu u Defaultní osa

osa::test-uzlu predikát1 ... predikátN

child

/objednavka/zakaznik /child::objednavka/child::zakaznik

Page 33: PRG036  – Technologie XML

33

XPath osa self Vybraný uzel je samotný uzel u

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

Page 34: PRG036  – Technologie XML

34

XPath osa parent Je vybrán rodič uzlu u

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

Page 35: PRG036  – Technologie XML

35

XPath osa ancestor Jsou vybrány všichni předci uzlu u

Tj. uzly ležící na cestě od u ke kořenovému uzlu

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

Page 36: PRG036  – Technologie XML

36

XPath osa ancestor-or-self

Jsou vybrány všichni předci uzlu u včetně uzlu u

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

Page 37: PRG036  – Technologie XML

37

XPath osa child

Jsou vybráni přímí potomci (děti) uzlu u

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

Page 38: PRG036  – Technologie XML

38

XPath osa descendant

Jsou vybráni potomci uzlu u

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

Page 39: PRG036  – Technologie XML

39

XPath osa descendant

Jsou vybráni potomci uzlu u

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

Page 40: PRG036  – Technologie XML

40

XPath osa descendant-or-self

Jsou vybráni potomci a samotný uzel u

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

Page 41: PRG036  – Technologie XML

41

Průchod stromu do hloubky

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1"

0

1

2

4

5

6

7

8

9

10

11

12

13

143

"modra"

Page 42: PRG036  – Technologie XML

42

XPath osa preceding-sibling Jsou vybráni sourozenci uzlu u, které mu předcházejí v

průchodu do hloubky

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1"

0

1

2

4

5

6

7

8

9

10

11

12

13

143

"modra"

Page 43: PRG036  – Technologie XML

43

XPath osa preceding Jsou vybráni všechny uzly, které předcházejí uzlu u v

průchodu do hloubky (kromě předků)

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1"

0

1

2

4

5

6

7

8

9

10

11

12

13

143

"modra"

Page 44: PRG036  – Technologie XML

44

XPath osa following-sibling Jsou vybráni sourozenci uzlu u, které ho následují v

průchodu do hloubky

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1"

0

1

2

4

5

6

7

8

9

10

11

12

13

143

"modra"

Page 45: PRG036  – Technologie XML

45

XPath osa following Jsou vybráni všechny uzly, které následují uzel u v

průchodu do hloubky (kromě potomků)

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

kod

"929118813"

mnozstvi barva

text() text()

"1"

0

1

2

4

5

6

7

8

9

10

11

12

13

143

"modra"

polozka

Page 46: PRG036  – Technologie XML

46

XPath osa attribute Vybere atributy uzlu u

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

Page 47: PRG036  – Technologie XML

47

XPath osa namespace

Vybere atributy ze jmenného prostoru xmlns uzlu u

Page 48: PRG036  – Technologie XML

XPath - osyancestor

descendant

followingpreceding

following-siblingpreceding-sibling

child

attribute

namespace

selfparent

Page 49: PRG036  – Technologie XML

49

XPath test uzlu

Testuje uzly vybrané osou Typ uzlu a případně název

osa::test-uzlu predikát1 ... predikátN

Page 50: PRG036  – Technologie XML

50

XPath test uzlu

Testem projde jakýkoliv uzel vybraný osou

osa::node() predikát1 ... predikátN

Page 51: PRG036  – Technologie XML

51

XPath test uzlu

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

descendant::node()

Page 52: PRG036  – Technologie XML

52

XPath test uzlu

Testem projde textový uzel vybraný osou

osa::text() predikát1 ... predikátN

Page 53: PRG036  – Technologie XML

53

XPath test uzlu

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

descendant::text()

Page 54: PRG036  – Technologie XML

54

XPath test uzlu

Testem projde jakýkoliv uzel vybraný osou, který má jméno jméno má každý element a atribut

• Ale pozor: neexistuje osa, která najednou vybere elementy i atributy

osa::* predikát1 ... predikátN

Page 55: PRG036  – Technologie XML

55

XPath test uzlu

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

descendant::*

Page 56: PRG036  – Technologie XML

56

XPath test uzlu osa::comment() osa::processing-instruction() osa::processing-instruction(“php”)

Page 57: PRG036  – Technologie XML

57

XPath osy a testy uzlů - zkratky

Pro nejpoužívanější osy a testy uzlů jsou zavedeny zkratky

//zakaznik vybere všechny elementy zakaznik v XML dokumentu

P/zakaznik P/child::zakaznikP/@kod P/attribute::kodP/../zakaznik P/parent::*/zakaznikP//zakaznik P/descendant-or-self::node()/zakaznik

Page 58: PRG036  – Technologie XML

58

XPath predikáty

Predikát umožňuje specifikovat pokročilejší podmínky na uzly, které byly vybrány osou a prošly testem uzlu

Pro kontextový uzel u jsou nalezeny všechny uzly ležící na dané ose z uzlu u, na výstup jdou ale pouze ty, které splňují test-uzlu a všechny predikáty

osa::test-uzlu predikát1 ... predikátN

predikát ::= ‘[‘ podmínka ‘]‘podmínka ::= ‘not(‘ podmínka ‘)‘ | podmínka ‘and‘ podmínka | podmínka ‘or‘ podmínka

Page 59: PRG036  – Technologie XML

59

Testování existence uzlu

Podmínkou může být relativní XPath cesta P Pro daný uzel u se vyhodnotí true, pokud

množina uzlů zacílená cestou P z u je neprázdná

Page 60: PRG036  – Technologie XML

60

Testování existence uzlu

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

//polozka[@kod]

Page 61: PRG036  – Technologie XML

61

Testování existence uzlu

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

//polozka[cena]

Page 62: PRG036  – Technologie XML

62

Testování existence uzlu

objednavka

document

stav polozky

polozka polozka

objednavky

...objednavka

polozky

polozka polozka

//polozka[../../@stav]

Page 63: PRG036  – Technologie XML

63

Testování existence uzlu

objednavka

document

stav polozky

polozka polozka

objednavky

...objednavka

polozky

polozka polozka

//polozka[ancestor::objednavka/@stav]

Page 64: PRG036  – Technologie XML

64

Testování existence uzlu

objednavka

document

stav polozky

polozka polozka

objednavky

...objednavka

polozky

polozka polozka

//objednavka[@stav]//polozka

Page 65: PRG036  – Technologie XML

65

Testování hodnoty

Podmínkou může být porovnání dvou operandů Operandy jsou XPath výrazy

Cesta, hodnota ... Operátor je

= != < > <= >= &eq; &ne; &lt; &gt; &le; &ge;

Page 66: PRG036  – Technologie XML

66

Testování hodnoty

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

//polozka[barva = "modra"]

Page 67: PRG036  – Technologie XML

67

Testování hodnoty

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

//polozka[cena > 30]

Page 68: PRG036  – Technologie XML

68

Testování hodnoty

objednavka

document

stav polozky

polozka polozka

objednavky

...objednavka

polozky

polozka polozka

"expedovana"

//objednavka[@stav = "expedovana"]//polozka

Page 69: PRG036  – Technologie XML

69

Testování hodnoty

Operátory = != ... Operandy jsou množiny hodnot/uzlů Vyhodnotí se jako true pokud existuje hodnota/uzel v

levém a hodnota/uzel v pravém operandu, pro něž je operátor true

Operátory &eq; &neq; ... Operandy nesmějí být množiny

Pokud je operandem uzel/množina uzlů, je/jsou převeden(y) na textovou hodnotu atomizace

Page 70: PRG036  – Technologie XML

70

Testování hodnoty

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

barva

text()

"zluta"

//polozka[barva = "modra"]

Page 71: PRG036  – Technologie XML

71

Testování hodnoty

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

barva

text()

"zluta"

//polozka[barva != "modra"]

Page 72: PRG036  – Technologie XML

72

Testování hodnoty

CHYBA!

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

barva

text()

"zluta"

//polozka[barva &eq; "modra"]

Page 73: PRG036  – Technologie XML

73

Vestavěné funkce

Testování pozice každý uzel v kontextové množině má přiřazenu

pozici (určena pozicí v dokumentu a směrem osy)

position() Vrací pozici uzlu v kontextové množině

last() Vrací počet uzlů v kontextové množině

Page 74: PRG036  – Technologie XML

74

Vestavěné funkce

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

barva

text()

"zluta"

//polozky/polozka[position() = 1]

Page 75: PRG036  – Technologie XML

75

Vestavěné funkce

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

barva

text()

"zluta"

//polozky/polozka[position() = last()]

Page 76: PRG036  – Technologie XML

76

Vestavěné funkce

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

barva

text()

"zluta"

//polozky/polozka[1]

Page 77: PRG036  – Technologie XML

77

Vestavěné funkce

objednavka

document

datum

"10/10/2008" stav

"expedovana"

zakaznik

cislo

"C992"

text()

"Martin Nečaský"

polozky

polozka

kod

"48282811"

mnozstvi cena

text() text()

"5" "22"

polozka

kod

"929118813"

mnozstvi barva

text() text()

"1" "modra"

barva

text()

"zluta"

//polozky/polozka[last()]

Page 78: PRG036  – Technologie XML

78

Vrací počet uzlů vrácených XPath výrazem expression

Vestavěné funkce

count(expression)

Page 79: PRG036  – Technologie XML

79

objednavka

document

stav polozky

polozka polozka

objednavky

...objednavka

polozky

polozka polozka

"expedovana"

polozka

Vestavěné funkce

//polozky[count(polozka) > 2]

Page 80: PRG036  – Technologie XML

80

id(value) Vrátí element s value jako id

concat, starts-with, contains, substring-after, substring-before, substring(value), ...

sum, floor, ceiling, ...

Vestavěné funkce

Page 81: PRG036  – Technologie XML

81

Konec


Recommended