XLink
Jak název napovídá, XLink je nástrojem pro linkování v rámci XML dokumentů za pomoci hyperlinků. Každý uzel v dokumentu může být hyperlinkem. Odkazy mohou být i mimo XML soubor. Stejně jako další nástroje je XLink W3C recommendation.
Problémem může být, že žádný z prohlížečů nepodporuje XLink v XML souborech, ale v SVG ano.
Syntaxe
XLink známe z přednášky o HTML, neboť tento zápis <a href=http://google.com>Vyhledavač</a> je hyperlinkem v souladu s Xlink syntaxí. V XML je toto rozšířeno – jak je uvedeno výše, odkazem v XML může být cokoliv.
<odkaz xlink:type=simple xlink:show=new xlink:href=http://g.com>G</odkaz>
Jak je z příkladu vidět, používáme namespaces pro xlink. Atributy xlink:type, xlink:show a xlink:href upřesňují cíl odkazu a typ odkazu.
Významově pak:
- xlink:actuate – kdy je odkaz nahrán
- onLoad – při otevření dokumentu
- onRequest – při kliknutí
- none – nelze otevřít
- xlink:type – typ hyperlinku
- simple – normální href odkaz
- extended – výběr jednoho z následujících rozšířeným hyperlinků
- locator - adresuje vzdálený zdroj
- arc - procházení v určité úrovni odkazovaného zdroje
- resource - nahrazuje lokální zdroj pro link
- title - označení pro link
- none
- xlink:show – jak se má výsledek odkazu zobrazit
- embed
- new – nové okno
- replace – nahradit současné okno
- other
- none
- xlink:href – adresa odkazu
XPointer
Tento prostředek umožňuje hyperlinkům adresovat specifickou část XML dokumentu. XPointer využívá XLink zápis. Opět, XPointer je W3C recommendation.
Využití XPointer je závislé na používání id u uzlů.
xlink:href=https://xmlko.cz/komunikace.xml#525
Plný zápis by potom mohl být:
<zprava xlink:type="simple" xlink:href="https:/xmlko.cz/komunikace.xml#525">
XPath
Tento jazyk slouží k adresování uzlů v rámci XSL. Zároveň je možné jej použít pro navigaci v XML souboru. Umožňuje vybrat konkrétní uzel v dokumentu na základě jeho pozice v hierarchii a dle pořadí. Pro zjišťování dalších informací lze využít přes 200 funkcí, které jsou v XPath dostupné. Slouží ke zpracování textových řetězců, číselných hodnot, logických hodnot, času a datumu, umožňují manipulaci s uzly a další. XPath je W3C recommendation, současná (2017) verze je 3.0 z 8.4.2014.
Pojmosloví
V XPath je definováno celkem 7 různých druhů uzlů:
- Element
- Atribut
- Text
- Namespace
- Instrukce
- Komentář
- Uzel dokumentu
Při analýze následujícího kódu lze identifikovat základní složky XML:
<komunikace>
<zprava id=525> (hlavní uzel + atribut)
<komu>Jan Vomáčka</komu> (element)
<od>Michal Podplamatý</od>
<predmet>Ahoj</predmet>
<text>Co děláš?</text>
</zprava>
</komunikace>
Nejmenší jednotkou z hlediska XPath jsou atomické hodnoty – což jsou konkrétní textové řetězce uložení v XML. V předchozí zprávě jsou následující atomic values:
- 525
- Jan Vomáčka
- Michal Podplamatý
- Ahoj
- Co děláš?
Vztahy uzlů
Hierarchická struktura používaná v XML je zde popsána stejnými vztahy.
Rodič -> potomek (Parent -> Children)
Z předchozího příkladu je tedy element zprava rodičem elementů komu, od, predmet a text.
Sourozenci (Siblings)
Sourozenci jsou na stejné pozici v hierarchii XML, zde jsou sourozenci elementy komu, od, predmet a text.
Předkové (Ancestors)
Jsou elementy s vyšším stupněm hierarchie, v uvedeném příkladu je element zprava předkem pro značky komu, od, predmet a text.
Descendants (Následníci)
Všechny značky s nižším stupněm hierarchie. Pro element zprava jsou to všichni potomci a jejich potomci atd.
Výběr uzlů
Aby bylo možné pracovat s vybranými uzly, je nutné je při transformacích správně vybrat. Možnosti adresace jsou následující:
- Jméno uzlu – výběr všech uzlů s uvedeným jménem
- / - výběr hlavního uzlu (root element)
- // výběr všech uzlů s uvedeným jménem nezávisle na pozici daného elementu v XML
- . – výběr aktuálního uzlu
- .. – výběr rodiče aktuálního uzlu
- @ - výběr atributu
- * - výběr všech elementů na vybrané úrovni hierarchie
- @* - výběr všech atributů na vybrané úrovni hierarchie
Praktické ukázky pro uvedené příklady:
- Zprava – vybere všechny zprávy
- /komu – vybere element dle absolutní adresy
- zprava/komu – výběr značky komu jako potomka elementu zprava
- //komu – vybere všechny elementy s názvem komu kdekoliv v dokumentu
- zprava//komu – vyhledání všech uzlů komu mezi následníky elementu zprava
- //@id – vybere všechny výskyty atributu id
Predikáty
- Pro nalezení jediného elementu využíváme predikáty.
- /komunikace/zprava[1] – vybere první zprávu
- /komunikace/zprava[last()] – vybere poslední zprávu
- /komunikace/zprava[last()-1] – vybere předposlední zprávu
- /komunikace/zprava[position()<3] – vybere první dvě zprávy
- //zprava[@id=525] – vybere všechny zprávy s id 525
- /komunikace/zprava/* - vybere všechny elementy, které jsou potomky elementu zprava
- //* - výběr všech elementů v dokumentu
Osy
Výběr je možno provádět dle os v hierrchii.
- Ancestor – výběr všech rodičů včetně jejich rodičů
- Ancestor-or-self - výběr všech rodičů včetně jejich rodičů včetně aktuálního uzlu
- Attribute – výběr atributů aktuálního elementu
- Child – výběr potomků aktuálního uzlu
- Descendant - výběr všech potomků včetně jejich potomků
- Descendant-or-self - výběr všech potomků včetně jejich potomků včetně aktuálního uzlu
- Following – všechny následující elementy v souboru
- Following-sibling – výběr všech sourozenců aktuálního uzlu
- Namespace – výběr všech namespaces aktuálního uzlu
- Parent – výběr rodiče aktuálního uzlu
- Preceding – výběr všech uzlů předcházejících aktuálnímu uzlu mimo ancestors a atributů
- Preceding-sibling – výběr všech sourozenců předcházejících aktuálnímu uzlu
- Self – vybere aktuální uzel
Absolutní a relativní cesta
Vše se řídí rozhodnutím, zda cesta k vybíranému uzlu je započata znakem / - tedy root elementem.
Absolutní cesta
/komunikace/zprava/komu
Relativní cesta
zprava/komu
U relativní cesty je nutné brát v úvahu aktuální pozici, kde se nacházíme v rámci XSL.
Operátory
Pro přesný dotaz a výpočty a porovnání lze využít několika matematických a logických operátorů:
- | - umožní současný výběr několika uzlů - //komu | //od
- + - sčítání
- - - odčítání
- * - násobení
- div – dělení
- = - rovná se
- != - nerovná se
- < - menší než
- > - větší než
- <= - menší nebo rovno
- >= - větší nebo rovno
- or – nebo
- and – a zároveň
- mod – dělení bezezbytku