`MobileTogether uporablja XPath kot jezik za formule in izraze.`
Ak poznáte, ako písať vzorce v tabuľke Excel, môžete sa ľahko naučiť, ako písať XPath vzorce alebo výrazy v MobileTogether. Potrebujete pochopiť len niekoľko základných konceptov. Konštruktér XPath v MobileTogether uľahčuje vytváranie XPath výrazov, rovnako ako konštruktér vzorcov v Excel vám pomáha pri písaní vzorcov v tabuľkách.
"X" v XPath pochádza z jeho koreňov v XML, jazyku eXtensible Markup Language, a "Path" pochádza z faktu, že používate formát podobný ceste na identifikáciu jednotlivých častí vašich dát. Každý zdroj dát, ktorý používate v MobileTogether, je reprezentovaný ako malá stromová štruktúra na pravej strane okna MobileTogether Designer pod položkou "Page Sources". Každá stromová štruktúra začína koreňom, ktorý má názov, napríklad $XML1 alebo $DB1, a potom pod týmto koreňom sú jednotlivé časti dát – nazývané prvky. Tieto prvky sú logicky usporiadané, takže ich je najlepšie reprezentovať ako stromy, v ktorých môžete každý prvok sklopiť a rozložiť, aby ste videli, čo sa nachádza pod ním. A to najlepšie na MobileTogether je: nezáleží na tom, či sú základné dáta z databázy, XML dokumentu, webovej služby alebo iného zdroja dát – všetky sú prezentované rovnakým spôsobom a môžu byť prístupné rovnakým spôsobom.
XPath vam omogoča, da se premikate po teh drevesnih strukturah, da povežete vaše podatkovne elemente z elementi uporabniškega vmesnika na zaslonih vaših mobilnih naprav. To je zelo podobno načinu, kako se premikate po drevesni strukturi imenikov v vašem operacijskem sistemu na trdem disku računalnika. Ne glede na to, ali ste navajeni sistema Windows, Linux ali MacOS, lahko datoteke na vašem trdem disku vedno dostopate prek poti, kot je:
C:\Users\Spock\Documents\ScienceRecords (Windows)
/Users/Kirk/Documents/BeautifulAlienWomen (Linux/Mac)
Povedzme, že sa pozrime na príklad XPath výrazu, a to porovnaním:
$DB1/salesdata/region/month/gadgetsKot vidite, ideja je popolnoma enaka. Uporabljate XPath za navigacijo skozi strukture podatkov, tako kot uporabljate poti za navigacijo skozi vaš sistem datotek na trdem disku računalnika. XPath uporablja znak "/" (navadna ključnica) za ločevanje posameznih elementov na poti, tako kot to storita Linux in MacOS za ločevanje map.
Zaujímave je, že táto analógia k adresárovým cestám platí aj pre dve veľmi bežné skratky v XPath: rovnako ako jediná bodka "." odkazuje na aktuálny adresár v súborovom systéme, v XPath "." odkazuje na aktuálny prvok, a podobne dvojitá bodka ".." ktorá odkazuje na rodičovský adresár v súborovom systéme, odkazuje na rodičovský prvok v XPath.
Ak je váš zdroj dát XML dokumentom, alebo XML dáta, ktoré sú vrátené webovou službou, potom dáta obsiahnuté v tejto stromovej štruktúre prichádzajú v dvoch rôznych formách: prvkoch a atribútoch. Prvky sú základné dátové položky v XML a môžu byť vnorené, takže prvok môže mať potomkov v stromovej štruktúre. Atribúty, naopak, sú jednoduché hodnoty, ktoré sú pripojené k prvkom. V stromoch pod "Page Sources" uvidíte, že atribúty sú zobrazené so znakom "=" (rovná sa) pred ich názvom. Je to preto, že v XML dokumente sú atribúty zapísané napríklad ako: color="green".
Ko želite referencirati atribute v izrazu XPath, morate pred njihovo ime vnesti znak @ (znak za "pri")
$XML1/salesdata/region/@nameV nasprotnem primeru lahko enako storite z elementi in atributi; torej lahko oba uporabite v izračunih ali pa njihove vrednosti prikažete v grafu, in lahko ju dodelite tudi elementom uporabniškega vmesnika v načrtu MobileTogether.
Niekedy nestačí len určiť cestu k prvku vo vašich dátach. Často chcete vybrať niektoré dáta, ktoré spĺňajú určité kritériá, aby ste ich napríklad zobrazili v grafe alebo prezentovali používateľovi v tabuľke.
Ak ste už niekedy pracovali s relačnými databázami, toto je ekvivalent bežnej klauzuly WHERE v SQL príkaže. Umožňuje vám vybrať dáta z vašej databázy, ktoré spĺňajú určité kritériá
Ekvivalentni koncept v XPath se imenuje "predikati". XPath predikat vam omogoča, da določite kriterije izbire, ki bodo izbrali samo določene elemente, ki ustrezajo določenim kriterijem. Predikati se vnašajo kot logični test, obdani z oklepajema [], na primer:
$XML1/salesdata/region[@name=”East”]/MonthPreklad tohto tvrdenia je nasledovný: V zdroji dát $XML1 prejdite k prvku "salesdata", potom prejdite k jeho podprvku "region" a vyberte len tie regióny, kde je hodnota atribútu rovná "East", a následne vyberte ich príslušné podprvky "Month".
Na začiatku sme uviedli, že XPath je plnohodnotný jazyk pre výrazy. To znamená, že vám umožňuje nielen vyberať určité časti dát, ale tiež vám umožňuje vykonávať všetky bežné matematické operácie s týmito dátami a vypočítavať nové hodnoty. Podobne ako vzorce v programe Excel umožňujú vypočítať nové hodnoty z vašich existujúcich dát, môžete s XPath výrazmi v MobileTogether robiť presne to isté.
Predpostavimo, že želite ustvariti mobilno rešitev za izdajanje računov in želite v svojem mobilnem obrazcu prikazati skupni znesek za posamezen element:
$DB1/sales/invoice/item/quantity * $DB1/sales/invoice/item/price
Predpostavíme, že vaša štruktúra dát má oddelené prvky pre množstvo a cenu (ktoré môžu používateľ upravovať), potom môžete jednoducho vypočítať celkovú sumu pre danú položku pomocou vyššie uvedeného násobenia a symbolu * (hviezdička).
Ena od zelo zanimivih lastnosti XPath je, da lahko prihranite veliko tipkanja, če izvedete množenje neposredno znotraj izraza XPath, pri čemer uporabite oklepaje, ko pridete do ustrezne točke v poti. Tako skrajšana različica je enaka zgornjemu izrazu:
$DB1/sales/invoice/item/(quantity * price)Podobne, môžete použiť + (plus) a - (mínus) ako matematické operátory. Avšak, pre delenie musíte použiť iný symbol. Pretože už používame / (lomka) na oddelenie jednotlivých prvkov v ceste, nemôžeme použiť rovnaký znak pre delenie. Preto je operátor pre delenie v XPath slovom div pre delenie reálnych čísel a idiv pre celočíselné delenie (t. j. ak chcete, aby výsledok bol celé číslo, a nie reálne číslo).
Tudi, dobra praksa – in včasih nujna – je dodajati praznine okoli operatorjev, da se zagotovi, da jih ne zamenjamo z delom imena elementa ali atributa. To velja zlasti za operator "-" (minus).
Pomembna razlika med XPath in potmi do imenikov je ta, da medtem ko izraz poti do imenika običajno določa samo eno določeno datoteko ali imenik, lahko izraz XPath dejansko sklicuje več kot en sam podatkovni vozlišče (tj. element ali atribut). Pravzaprav vsak izraz XPath vedno vrne zaporedje vozlišč kot rezultat.
To je najlepšie pochopiť, ak si uvedomíte, že väčšina databáz obsahuje riadky dát, ktoré majú podobnú štruktúru, rovnako ako väčšina XML dokumentov, ktoré v svojej podstate obsahujú sériu prvkov, ktoré majú rovnaký názov a zdieľajú podobnú štruktúru. XPath bol vytvorený, aby umožnil vývojárovi ľahko pracovať s takýmito dátovými súbormi – preto je schopnosť adresovať celú množinu uzlov naraz obrovskou výhodou, čo uvidíme v nasledujúcich kapitolách.
Hkrát, niekedy môže byť potrebné explicitne definovať sekvencie v XPath výraze, a to tak, že vypíšete hodnoty v nasledujúcom formáte:
(1, 2, 3, 4, 5)
Sekvence so urejene, zato je zgornja sekvenca bistveno različna od sekvence (3, 5, 2, 4, 1). Sekvence lahko vsebujejo vozlišča iz vaših podatkov, pa tudi konstante številčne vrednosti ali konstante nizovne vrednosti.
Například, možná posloupnost řetězců by mohla vypadat takto:
("a", "b", "c", "d", "e")Končno, vendar ne najmanj pomembno, lahko s pomočjo operatorja obsega določite urejene zaporedje številčnih vrednosti za:
(1 to 5)
Toto je ekvivalent sekvencie (1, 2, 3, 4, 5) – ako vidíte, tento operátor rozsahu sa dá použiť na rýchlu tvorbu sekvencií číselných hodnôt, ktoré by bolo príliš komplikované vypisovať ručne, keďže čísla rastú.
Če ste v preteklosti delali z drugimi programskimi jeziki, boste spoznali, da je zanka `for` pogosto uporabljeno orodje, ki obstaja v večini sodobnih jezikih v različnih oblikah, in je tudi pomemben del jezika izražanja XPath.
V najjednoduchšej podobe umožňuje výraz `for` v XPath iterovať cez sekvenciu hodnôt alebo uzlov pomocou dočasnej premennej, ktorá je definovaná priamo v rámci výrazu `for`. Napríklad, výraz:
for $i in (1 to 10) return 2 * $i
generuje numerični niz (2, 4, 6, 8, 10, 12, 14, 16, 18, 20) iteriranjem nad prvotnim nizom (od 1 do 10) s pomočjo spremenljivke $i, nato pa izračuna 2 * $i za vsako točko podatkov v nizu.
Zdaj, ko vemo, da lahko kateri koli XPath izraz vrne zaporedje vozlišč, lahko uporabimo tudi izraz "for" za iteriranje nad temi vozlišči in izvedemo nekatere matematične operacije. Na primer, za iteriranje nad vsemi postavkami na računu in izračun zneska za vsako postavko, lahko uporabimo ta izraz:
for $x in $DB1/sales/invoice/item return $x/price * $x/quantity
V tomto prípade bude premenná $x našou premennou cyklu, ktorá bude prechádzať cez každý prvok položky, a tento výraz vráti sekvenciu, ktorá obsahuje sumy pre každý riadok v našej faktúre. Predpokajme, že máme v našich zdrojových dátach faktúry nasledujúce dve položky:
<item><quantity>5</quantity>
<price>12.50</price>
</item><item><quantity>3</quantity>
<price>27.85</price>
</item>Potem prejšnji XPath izraz vrne zaporedje (62,5 83,55), ki predstavljata ustrezni zneski za vsako posamezno postavko na računu.
Funkcie v XPath fungujú presne ako funkcie v vzorci v programe Excel alebo vo väčšine iných programovacích jazykoch: funkciu voláte pomocou jej názvu a prenášate množinu parametrov funkcie v zátvorkách (). Napríklad, aby ste sčítali postupnosť (3, 9, 14), napísali by ste:
sum( (3, 9, 14) )To by nám dalo výsledok 26. Upozorňujeme, že v tomto prípade vonkajšie zátvorky sú súčasťou volania funkcie `sum()`, zatiaľ čo vnútorné zátvorky sú súčasťou sekvencie, ktorú posielame do funkcie ako jeden parameter.
Podobne, teraz môžeme vypočítať celkovú sumu faktúry z predchádzajúceho príkladu tak, že sčítame všetky položky:
sum( for $x in $DB1/sales/invoice/item
return $x/price * $x/quantity )
To lahko zelo koristno, na primer, za ustvarjanje interaktivnih obrazcev znotraj mobilne rešitve, kjer lahko prikažete vrednosti podatkov za skupne vsote, ki se bodo dinamično spreminjale, ko uporabnik vnaša podatke v obrazec.
XPath obsahuje veľké množstvo vstavaných funkcií pre numerické hodnoty (napr. round, abs, floor, atď.), manipuláciu s reťazcami (napr. concat, lower-case, contains, replace), časové intervaly, dátumy a časy, ako aj agregačné operácie na sekvenciách (napr. count, sum, avg, min, max). Konštruktér XPath v MobileTogether uľahčuje písanie XPath výrazov pomocou týchto funkcií, pretože obsahuje prehľadnú zbierku všetkých dostupných funkcií s krátkym popisom a informáciami o požadovaných parametroch. Funkcie sú zobrazené v logických skupinách, takže je ľahké nájsť funkciu, ktorú potrebujete pre váš konkrétny prípad použitia.
V programskih jezikih – in tudi v jezikih za izražanja – je pogosto potrebno določiti drugačen način za izračun določenega rezultata, odvisno od tega, ali je izpolnjen določen kriterij ali ne. Tukaj pride v igro stavek "if", ki omogoča določitev alternativnih rezultatov na podlagi testnega kriterija, ki ga vi določite.
V XPath, izjava "if" má nasledný tvar:
if ( test-expression ) then expression else expression
kjer je `test-expression` logični XPath izraz, ki vrne vrednost `true` ali `false`.
Například, môžeme použiť takúto funkciu v MobileTogether, aby sme nastavili farbu textu štítku alebo textového poľa na základe číselnej hodnoty obsiahnutej v dátach. Predpokajme, že máme prvok z nášho zdroja dát, ktorý je spojený s textovým poľom. Môžeme vybrať toto textové pole a prejsť na kartu vlastností, kde môžeme vybrať vlastnosť "Farba textu". Namiesto toho, aby sme definovali farbu pomocou výberu farieb, môžeme kliknúť na ikonu XPath v nástrojovej lište a rozhodnúť sa, že definujeme farbu textu tohto vstupného poľa pomocou XPath výrazu:
if ( $MT_ControlValue >= 0 ) then "green" else "red"
Tu používame jednu z vstavaných premenných MobileTogether na odkazovanie sa na aktuálny ovládací prvok a testujeme, či je jeho hodnota väčšia alebo rovnaká ako nula.
V závislosti na výsledku tohto testu bude výsledok buď "zelený" alebo "červený", a farba textu sa bude dynamicky meniť v závislosti od vstupu používateľa.
Podobne, existuje mnoho ďalších vstavaných premenných, ktoré začínajú na `$MT_`, a umožňujú vám prijímať rozhodnutia na základe veľkosti obrazovky zariadenia, operačného systému, jazyka a mnohých ďalších faktorov. Všetky tieto vstavané globálne premenné môžete zobraziť v dialógovom okne Globálne premenné v ponuke Projekt v programe MobileTogether Designer.
Do tohto bodu sme sa primárne venovali XPathu z historických dôvodov, pretože ide o známejší jazyk na báze XML a používa sa už 15 rokov. Okrem XPathu však MobileTogether podporuje aj výkonnejší jazyk XQuery. XQuery je skutočnou nadmnožinou XPath, čo znamená, že každý platný výraz XPath je zároveň aj platný výraz XQuery. XQuery však pridáva niekoľko ďalších výkonných prvkov, ktoré vám umožňujú robiť oveľa viac a umožňujú vám manipulovať alebo vytvárať celé XML dokumenty v reálnom čase.
Najdôležitejší výraz v XQuery je takzvaný FLWOR výraz. FLWOR je akronym, ktorý znamená "For-Let-Where-Order-Return" a bežne sa vyslovuje ako "flower". Je funkčne ekvivalentný príkazu SQL SELECT, ktorý má podobné klauzuly, ako napríklad FROM, WHERE, ORDER BY, atď. Výraz FLWOR nám umožňuje efektívnejšie a silnejšie dotazovať XML a dátové zdroje než pomocou jednoduchých XPath výrazov, a predstavuje základ XQuery.
Už sme sa stretli s časťou "for" v tomto výraze v našej predchádzajúcej diskusii o XPath, takže táto časť výrazu FLWOR bude známa. Podobne sme už videli klauzulu "return" v rovnakom výraze "for". Avšak, XQuery výrazne rozširuje flexibilitu klauzuly "return" tým, že vám umožňuje vytvárať celé XML stromy od začiatku pomocou konštruktorov. V podstate, ako predtým, klauzula "return" sa vyhodnocuje pre každú položku v cykle "for", ale namiesto toho, aby len produkovala jednu hodnotu v sekvencii, teraz môžete vytvoriť celý XML podstrom, ako uvidíme v niektorých z nasledujúcich príkladov.
Účelom klauzuly `let` v expresii FLWOR je definovať ďalšie premenné, ktoré môžeme neskôr použiť na vytvorenie výsledku. Tieto premenné môžu pochádzať z rovnakého zdroja dát alebo dokonca z iného zdroja dát, ale napríklad môžeme použiť premennú z cyklu na výber určitých prvkov z iného zdroja.
Například, ak jedna zdroj dát obsahuje informácie o oddeleniach v organizácii, a ďalší zdroj dát obsahuje informácie o zamestnancoch, toto môže byť začiatok výrazu FLWOR, ktorý vyberá zamestnancov z určitej skupiny oddelení:
for $d in $DEPARTMENTS/depts/deptno
let $e := $EMPLOYEES/emps/emp[deptno = $d]
…
Klauzula "where" omogoča filtriranje podatkov na podlagi določenih kriterijev – podobno kot smo že prej uporabljali predikate v čistih XPath izrazih. Na primer, lahko jo uporabimo za filtriranje oddelkov glede na število zaposlenih, ki jih imajo:
for $d in $DEPARTMENTS/depts/deptno
let $e := $EMPLOYEES/emps/emp[deptno = $d]
where count($e) >= 10
…
Nakoniec, klauzula `ORDER BY` nám umožňuje zoradiť výsledky podľa akýchkoľvek požadovaných kritérií, čo je obzvlášť užitočné pri vytváraní nových XML dokumentov.
Zdaj sestavimo celoten izraz FLWOR, pri čemer uporabimo prejšnje omenjeni dve viri podatkov, ki vsebujejo informacije o oddelkih in zaposlenih. Na primer, lahko ustvarimo novo tabelo podatkov, ki bi jo prikazali v mobilni aplikaciji, in ta bi prikazovala agregirane informacije o številu zaposlenih in povprečni plači za oddelke, ki imajo več kot 10 zaposlenih:
for $d in $DEPARTMENTS/depts/deptno
let $e := $EMPLOYEES/emps/emp[deptno = $d]
where count($e) >= 10
order by avg($e/salary) descending
return<big-dept> { $d,<headcount>{count($e)}</headcount>,
<avgsal>{avg($e/salary)}</avgsal>
}
</big-dept>V inom príklade, využívajúc naše predchádzajúce údaje o mobilných faktúrach s položkami, môžeme teraz rozšíriť túto funkcionalitu a prechádzať viacerými faktúrami po určitom dátume, aby sme vypočítali ich celkové sumy a následne vytvoriť tabuľku zoradených výsledkov, ktorú môžeme zobraziť tak, aby najväčšia suma faktúry bola zobrazená prvá a najmenšia suma faktúry bola zobrazená naposledy
for $inv in $DB1/sales/invoice
let $total := sum (for $x in item return $x/price * $x/quantity)
where $inv/date >= "2014-01-01"
order by $total descending
return <invtotal>{ $total }</invtotal>
Kot vidite, prilagodljivost in zmogljivost teh XQuery izrazov je veliko večja, kot smo lahko doslej dosegli le z uporabo XPath. Vendar pa večja moč prinaša tudi večjo kompleksnost, zato bo morda precej časa, preden boste obvladali vse elemente XQuery.
Hkrát, vstavaný nástroj na vytváranie a vyhodnocovanie XPath a XQuery v MobileTogether vám môže výrazne pomôcť pri vytváraní správnych výrazov a ich testovaní s vašimi dátami. V kombinácii s výkonným simulátorom, ktorý vám umožňuje spúšťať vaše mobilné aplikácie priamo v MobileTogether Designer, môžete jednoducho testovať a odlaďovať výber dát pomocou XPath a XQuery a vytvárať výkonné mobilné aplikácie oveľa rýchlejšie, ako s akýmkoľvek iným prístupom.
V tomto dokumentu uvádzame základné informácie o najdôležitejších konceptoch XPath a XQuery, ktoré vám pomôžu začať pracovať s údajmi v MobileTogether. Dotkli sme sa základných konceptov XPath výrazov a niektorých pokročilejších funkcií XQuery, ktoré by vám mali umožniť vytvárať výkonné výbery údajov vo vašom mobilnom pracovnom postupe, vytvárať presné grafy vašich údajov a prispôsobovať používateľské rozhranie vášho mobilného riešenia v reakcii na konkrétne položky údajov, podľa potreby.
Vendar ta dokument je le začetno točko in ne poskuša biti celoten priročnik ali razložiti vse vidike teh jezikov. Več lahko izveste v našem celovitem, brezplačnem spletnem tečaju XPath, ki je primeren tako za začetnike kot za napredne uporabnike.
MobileTogether podpira celoten jezik XPath 3.0 in XQuery 3.0. Prednost uporabe mednarodnega standarda, kot sta XPath in XQuery, je ta, da je veliko razvijalcev že prej spoznalo XPath, ko so delali z XML, XSLT ali XML shemami. Zato je možnost ponovne uporabe tega znanja v MobileTogether velika prednost zanje. Nadgradnja znanja iz XPath 1.0 ali 2.0 na 3.0 je preprost proces.
XPath in XQuery so standardy, ktoré vyvinula organizácia W3C, a nie proprietárne jazyky vytvorené jednou spoločnosťou. Preto sa naučenie týchto štandardov bude užitočné aj v iných oblastiach.
Za celotno specifikacijo XPath 3.0 in XQuery 3.0, prosimo, glejte naslednje tehnične dokumente:
Nazadnje, a vendarle pomembno, uporaba XPath in XQuery v MobileTogether omogoča, da lahko enostavno uporabite XMLSpy za prototipiranje, razvoj in odpravljanje napak pri bolj zapletenih izrazih XPath in XQuery, če želite doseči še več. XMLSpy ponuja celoten evaluator XPath in debugger XQuery, vključno s profilnikom za optimizacijo zmogljivosti.
Za več informacij o XPath 3.0 in XQuery 3.0, obiščite spletne izobraževalne materiale in dokumentacijo podjetja Altova. Prav tako nudimo referenco XPath, ki razlaga vse operatorje in funkcije XPath ter ponuja primere, kako jih uporabiti. Končno, ne oklevajte in zastavite vprašanja, povezana z XPath in XQuery, na forumu za podporo MobileTogether na https://support.mobiletogether.com/