XPath
Abychom mohli pracovat s jednotlivými prvky XML dokumentu či je vyhledávat, potřebujeme jazyk, který nám umožní se v XML struktuře dokumentu pohybovat a odkazovat se na požadované prvky. Tímto prostředkem je jazyk XPath, který definuje operátory a funkce pro uvedené účely. Pomocí XPath konstrukce můžeme odkazovat libovolný prvek XML dokumentu a to buď v podobě absolutní či relativní cesty. Základní prvky jazyka XPath shrnuje tabulka:
Výraz XPath |
Příklad |
Popis |
/ |
/pacient/vysetreni/datum_vysetreni |
Odkaz na kořenový uzel, za lomítkem následuje název kořenového elementu. Lomítkem taktéž oddělujeme dětské elementy od rodičovských. Uvedený příklad odkazuje na všechny datumy vyšetření, které odpovídají uvedené cestě.
|
// |
//datum_vysetreni |
odkaz na element v libovolné hierarchické úrovni, příklad odkazuje na všechny datumy vyšetření bez ohledu na absolutní cestu.
|
@ |
/pacient/@id |
Odkaz na atribut, příklad odkazuje na atribut id kořenového elementu pacient.
|
.. |
//datum_vysetreni/../vysledek |
Odkaz na rodičovský element. Uvedený příklad nejprve nalezne libovolně umístěný element datum_vysetreni, následně se odkáže na rodiče a z něj na jeho další dětský element vysledek. Jde tedy o ukázku odkazu na sourozence.
|
* |
//vysetreni/* |
Odkaz na všechny dětské elementy
|
@* |
/pacient/@* |
Odkaz na všechny atributy
|
S uvedenými výrazy bychom vystačili, pokud by se každý element či atribut objevoval v XML dokumentu pouze jednou. Reálně se však elementy (kromě kořenového) mnohokrát opakují, náš příklad může obsahovat stovky vyšetření a jejich výsledky, kdy názvy elementů budou stejné, měnit se bude pouze obsah elementů. V této situaci použijeme k bližšímu určení elementu tzv. predikáty XPath jazyka. Jde vlastně o filtrační podmínku, kterou uvedeme ve výrazu uzavřenou v hranatých závorkách. V predikátech můžeme využívat jednak hodnoty elementů a atributů, jednak pořadí elementu v dokumentu. K dispozici je také řada funkcí, které můžeme v predikátech využít. Příklady predikátů v XPath výrazech uvádí tabulka.
Výraz XPath |
Popis |
//pacient[@id="245"] |
Odkaz na element pacient, jehož id atribut má hodnotu 245 |
//vysetreni[1] |
První element pacient v XML dokumentu |
//vysetreni[last()] |
Poslední element pacient v XML dokumentu |
//pacient[1]/vysetreni[last()] |
Poslední vyšetření prvního pacienta |
//vysetreni[vysledek>20]/datum_vysetreni |
Odkaz na datum vyšetření, jehož výsledek byl větší než 20. |
//vysetreni[year-from-date(datum_vysetreni) = 2014] |
Všechna vyšetření, která byla provedena v roce 2014 |