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á (mlynkova@ksi.mff.cuni.cz)mlynkova@ksi.mff.cuni.cz Martin Nečaský (necasky@ksi.mff.cuni.cz)necasky@ksi.mff.cuni.cz LS 2010 Stránka přednášky: http://www.ksi.mff.cuni.cz/~mlynkova/ 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. 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

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ý 5 22 1 91934 modra

6 6 Martin Nečaský 5 22 1 91934 modra Model XML dat v XPath document

7 7 Martin Nečaský 5 22 1 91934 modra Model XML dat v XPath document

8 8 Martin Nečaský 5 22 1 91934 modra Model XML dat v XPath document

9 9 Martin Nečaský 5 22 1 91934 modra Model XML dat v XPath objednavka document

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

11 11 Martin Nečaský 5 22 1 91934 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813" 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813" 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813" 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813" 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813" mnozstvicena text() "1""1""91934" barva text() "modra" /objednavka/polozky/polozka/@kod

20 Výrazy v XPath - Příklady objednavka document datum stav "expedovana" zakaznik cislo "C992" text() "Martin Nečaský" polozky polozka kod "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813" 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813" 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813" 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813" 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813" 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813" 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813" 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813" 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " mnozstvibarva text() "1""1" 0 1 2 4 5 6 7 8 9 10 11 12 13 14 3 "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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " mnozstvibarva text() "1""1" 0 1 2 4 5 6 7 8 9 10 11 12 13 14 3 "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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " mnozstvibarva text() "1""1" 0 1 2 4 5 6 7 8 9 10 11 12 13 14 3 "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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " mnozstvibarva text() "1""1" 0 1 2 4 5 6 7 8 9 10 11 12 13 14 3 "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 "48282811" mnozstvicena text() "5""5""22" kod "929118813 " mnozstvibarva text() "1""1" 0 1 2 4 5 6 7 8 9 10 11 12 13 14 3 "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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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/@kod  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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " mnozstvibarva text() "1""1" "modra" //polozka[@kod]

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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " mnozstvibarva text() "1""1" "modra" //polozka[cena]

62 62 Testování existence uzlu objednavka document stavpolozky polozka objednavky... objednavka polozky polozka //polozka[../../@stav]

63 63 Testování existence uzlu objednavka document stavpolozky polozka objednavky... objednavka polozky polozka //polozka[ancestor::objednavka/@stav]

64 64 Testování existence uzlu objednavka document stavpolozky polozka objednavky... objednavka polozky polozka //objednavka[@stav]//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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " mnozstvibarva text() "1""1" "modra" //polozka[cena > 30]

68 68 Testování hodnoty objednavka document stavpolozky polozka objednavky... objednavka polozky polozka "expedovana" //objednavka[@stav = "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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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 "48282811" mnozstvicena text() "5""5""22" polozka kod "929118813 " 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