XPath cs

Úvod
Curriculum Vitae
XML
XPath
Stylové jazyky
Nástroje pro zpracování XML
Prezentátor

Counter

Standard XPath definuje jazyk umožňující hlavně adresování částí XML dokumentů. Je využíván mj. ve standardech XSLT a XPointer. XPath používá zhuštěnou syntaxi a nevyužívá syntaxe XML. XML syntaxe, která je tak prosazována v mnoha jiných standardech rodiny XML, je pro časté použití a pro použití v hodnotě atributů XML málo kompaktní.

XPath modeluje XML dokument jako stromovou strukturu, kde jednotlivé uzly jsou různých typů, jako např. elementy, atributy nebo text.

Základní syntaktickou konstrukcí v XPath je výraz, jehož vyhodnocením vzniká objekt. Základními typy objektů jsou množina uzlů, logická hodnota, číslo a řetězec. XPath lze použít k získávání uzlů s určitými vlastnostmi a k testování, zda určité uzly mají nějakou vlastnost.

Vyhodnocování výrazu probíhá v určitém kontextu. Kontext sestává z kontextového uzlu, pozice a velikosti kontextu, množiny navázaných proměnných, knihovny funkcí a množiny platných deklarací jmenných prostorů. Kontext je určován standardem, jenž XPath využívá (např. XSLT).

Knihovna funkcí zobrazuje názvy funkcí do funkcí. Vazby proměnných přiřazují jménům proměnných objekty. Deklarace jmenných prostorů zobrazují prefixy jmenných prostorů do URI.

Nejpoužívanějším typem výrazu je tzv. „Location Path“ dále LP. Jejím vyhodnocením získáváme množinu uzlů. LP jsou dvou typů, a to relativní a absolutní. Relativní vychází z aktuálního kontextu, absolutní pak z kořenového elementu. LP sestává z jednoho nebo více kroků určujících další uzly. Jednotlivé kroky jsou odděleny znakem /. Výsledek dílčích kroků se stává aktuálním kontextem pro krok následující. Kroky jsou určeny osou, testem uzlu a případnými predikáty. Osa určuje vztah v rámci stromu mezi aktuálním kontextovým uzlem a uzly vybíranými. Test uzlu určuje typ uzlu a jeho jméno. Predikáty kladou omezení na vybírané uzly.

LP můžeme použít např. následovně:

  1. Vyberte v HTML třetí (omezení) paragraf (test uzlu) obsahující slovo tučný (omezení) a nacházející se ve čtvrté podkapitole (omezení) druhé úrovně (test uzlu) - //h2[4]/following-sibling::p[contains(text(),'tučný')][3].
  2. Vyberte nejbližšího předka (osa) obsahujícího atribut encoding (omezení) - ancestor::*[@encoding][1]
  3. Vyberte v HTML každý druhý (predikát) nadpis (test uzlu) úrovně 2 (omezení) - //h2[position() mod 2 = 0]/text(.)

Jak jsme zmínili, tak vyhodnocením výrazu XPath můžou být i logické hodnoty, čísla a řetězce. Tyto typy objektů jsou podle standardem definovaných pravidel mezi sebou převoditelné. Z těchto typů nemůžeme získat typ množina-uzlů. Množiny uzlů, ale můžeme zkonvertovat na libovolný z těchto třech typů. Konverze, a to implicitní i explicitní, se uplatňují například při vyhodnocování dotazů na pravdivost určitých tvrzení. Pro vyhodnocování logických výrazů uvádíme následující příklady:

  1. Zjistěte, zda se v dokumentu vyskytuje alespoň jeden nadpis druhé nebo třetí úrovně - boolean(//h3|//h2) .
  2. Zjistěte zda je v dokumentu alespoň pět nadpisů druhé úrovně - count(//h2)>4
  3. Vyberte v HTML názvy nadpisů úrovně 2 (omezení) - //h2/text(.)