Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

1 PRG036 – Technologie XML Přednáší: Irena Mlýnková Martin Nečaský

Podobné prezentace


Prezentace na téma: "1 PRG036 – Technologie XML Přednáší: Irena Mlýnková Martin Nečaský"— Transkript prezentace:

1 1 PRG036 – Technologie XML Přednáší: Irena Mlýnková Martin Nečaský LS 2010 Stránka přednášky: prg036 /

2 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

3 3 Dotazovací jazyky nad XML daty  Cíle: dotazování, pohledy, transformace, případně aktualizace XML dat Od r 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

4 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

5 5 Model XML dat v XPath Martin Nečaský modra

6 6 Martin Nečaský modra Model XML dat v XPath document

7 7 Martin Nečaský modra Model XML dat v XPath document

8 8 Martin Nečaský modra Model XML dat v XPath document

9 9 Martin Nečaský modra Model XML dat v XPath objednavka document

10 10 Martin Nečaský modra Model XML dat v XPath objednavka document datum "10/10/2008" stav "expedovana"

11 11 Martin Nečaský modra Model XML dat v XPath objednavka document datum "10/10/2008" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský"

12 Model XML dat v XPath objednavka document datum "10/10/2008" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvicena text() "1""1""91934" barva text() "modra"

13 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

14 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

15 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

16 Výrazy v XPath - Příklady objednavka document datum stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvicena text() "1""1""91934" barva text() "modra" /

17 Výrazy v XPath - Příklady objednavka document datum stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvicena text() "1""1""91934" barva text() "modra" /objednavka

18 Výrazy v XPath - Příklady objednavka document datum stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvicena text() "1""1""91934" barva text() "modra" /objednavka/polozky/polozka

19 Výrazy v XPath - Příklady objednavka document datum stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvicena text() "1""1""91934" barva text() "modra"

20 Výrazy v XPath - Příklady objednavka document datum stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvicena text() "1""1""91934" barva text() "modra" /objednavka/polozky/polozka/cena/text()

21 Výrazy v XPath - Příklady objednavka document datum stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvicena text() "1""1""91934" barva text() "modra" /objednavka/polozky/polozka/barva

22 Výrazy v XPath - Příklady objednavka document datum stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvicena text() "1""1""91934" barva text() "modra" /objednavka/zakaznik/jmeno

23 Výrazy v XPath - Příklady objednavka document datum stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvicena text() "1""1""91934" barva text() "modra" /objednavka/seznam-polozek/polozka

24 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()

25 Výrazy v XPath - Příklady objednavka document datum "10/10/2008" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" cena/text()

26 Výrazy v XPath - Příklady objednavka document datum "10/10/2008" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" cena/text()

27 Výrazy v XPath - Příklady objednavka document datum "10/10/2008" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" cena/text()

28 Výrazy v XPath - Příklady objednavka document datum "10/10/2008" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" cena/text()

29 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’

30 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)

31 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

32 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

33 33 XPath osa self Vybraný uzel je samotný uzel u objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra"

34 34 XPath osa parent Je vybrán rodič uzlu u objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra"

35 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/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra"

36 36 XPath osa ancestor-or-self Jsou vybrány všichni předci uzlu u včetně uzlu u objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra"

37 37 XPath osa child Jsou vybráni přímí potomci (děti) uzlu u objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra"

38 38 XPath osa descendant Jsou vybráni potomci uzlu u objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra"

39 39 XPath osa descendant Jsou vybráni potomci uzlu u objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra"

40 40 XPath osa descendant-or-self Jsou vybráni potomci a samotný uzel u objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra"

41 41 Průchod stromu do hloubky objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra"

42 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/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra"

43 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/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra"

44 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/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra"

45 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/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" kod " " mnozstvibarva text() "1""1" "modra" polozka

46 46 XPath osa attribute Vybere atributy uzlu u objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra"

47 47 XPath osa namespace Vybere atributy ze jmenného prostoru xmlns uzlu u

48 XPath - osy ancestor descendant following preceding following-siblingpreceding-sibling child attribute namespace self parent

49 49 XPath test uzlu Testuje uzly vybrané osou Typ uzlu a případně název osa::test-uzlu predikát1... predikátN

50 50 XPath test uzlu Testem projde jakýkoliv uzel vybraný osou osa::node() predikát1... predikátN

51 51 XPath test uzlu objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" descendant::node()

52 52 XPath test uzlu Testem projde textový uzel vybraný osou osa::text() predikát1... predikátN

53 53 XPath test uzlu objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" descendant::text()

54 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

55 55 XPath test uzlu objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" descendant::*

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

57 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::zakaznik  P/attribute::kod P/../zakaznik  P/parent::*/zakaznik P//zakaznik  P/descendant-or-self::node()/zakaznik

58 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

59 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á

60 60 Testování existence uzlu objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra"

61 61 Testování existence uzlu objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" //polozka[cena]

62 62 Testování existence uzlu objednavka document stavpolozky polozka objednavky... objednavka polozky polozka

63 63 Testování existence uzlu objednavka document stavpolozky polozka objednavky... objednavka polozky polozka

64 64 Testování existence uzlu objednavka document stavpolozky polozka objednavky... objednavka polozky polozka

65 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; ≠ < > ≤ ≥

66 66 Testování hodnoty objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" //polozka[barva = "modra"]

67 67 Testování hodnoty objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" //polozka[cena > 30]

68 68 Testování hodnoty objednavka document stavpolozky polozka objednavky... objednavka polozky polozka "expedovana" = "expedovana"]//polozka

69 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

70 70 Testování hodnoty objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" barva text() "zluta" //polozka[barva = "modra"]

71 71 Testování hodnoty objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" barva text() "zluta" //polozka[barva != "modra"]

72 72 Testování hodnoty CHYBA! objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" barva text() "zluta" //polozka[barva &eq; "modra"]

73 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ě

74 74 Vestavěné funkce objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" barva text() "zluta" //polozky/polozka[position() = 1]

75 75 Vestavěné funkce objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" barva text() "zluta" //polozky/polozka[position() = last()]

76 76 Vestavěné funkce objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" barva text() "zluta" //polozky/polozka[1]

77 77 Vestavěné funkce objednavka document datum "10/10/200 8" stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod " " mnozstvicena text() "5""5""22" polozka kod " " mnozstvibarva text() "1""1" "modra" barva text() "zluta" //polozky/polozka[last()]

78 78 Vrací počet uzlů vrácených XPath výrazem expression Vestavěné funkce count(expression)

79 79 objednavka document stav polozky polozka objednavky... objednavka polozky polozka "expedovana" polozka Vestavěné funkce //polozky[count(polozka) > 2]

80 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

81 81 Konec


Stáhnout ppt "1 PRG036 – Technologie XML Přednáší: Irena Mlýnková Martin Nečaský"

Podobné prezentace


Reklamy Google