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