XPath, XML Path Language, је упитни језик за одабир чворова из XML документа. Накнадно, XPath може да се користи да израчунава вредности(на пример ниски, бројева, или булеанских вредности) из садржаја XML документа. XPath је дефинисан од стране WWW конзорцијума.[1]
Веб стандарди |
---|
Стандарди |
|
Организације |
|
XPath језик се заснива на представљању XML документа као стабла, и пружа могућност кретања по стаблу, одабирајући чворове разним критеријумима.[2][3] Коликвијално (али не и у званичним спецификацијама), један XPath израз се назива једним „Xpath-ом“.
У почетку мотивисан жељом да се нађе заједничка синтакса и модел понашања између Xpointerа и XSLT-a, подскупови Xpath упитног језика се користе у другим W3C спецификацијама као што су W3C XML Schema, XForms и скуп тагова за интернационализаицју (Internationalization Tag Set (ITS)).
XPath су усвојиле разне алатке и библиотеке за обраду XML-а, од којих многе нуде CSS селекторе, још један W3C стандард, као простију алтернативу за XPath.
Тренутно постоје три верзије XPath-а у употреби. Последња верзија језика (од 10.4.2014) је 3.0, али XPath 1.0 је најраспорстрањенија верзија.[1]
for
израз који је скраћена верзија „FLWOR“ израза из XQuery-а. Могуће је описати језик наводећи делове XQuery-а које он изоставља: главни примери су упитни пролог, конструктори елемената и атрибута, остатак „FLWOR“ синтаксе, и typeswitch
израз.Најважнија врста израза у XPath-у је путања лоцирања. Путања лоцирања се састоји од низа корака лоцирања. Сваки корак лоцирања има три компоненте:
Вредност XPath израза се израчунава у односу на контекстни чвор. Спецификатор осе као што је 'дете' или 'потомак' наводи правац обиласка ван контекстног чвора. Чвор тест и предикат се користе да издвоје све чворове које наведе спецификатор осе: на пример, чвор тест 'А' захтева да сви чворови који се обиђу имају ознаку 'А'. Предикат се може искористи да наведе да изабрани чворови имају неке особине, које су наведене од стране самих XPath израза.
XPath синтакса долази у два стила: Скраћена синтакса, која је компактнија и омогућава да се XPath изрази пишу и читају са лакоћом користећи интуитивне и, у многим случајевима, познате карактере и конструкте. Потпуна синтакса је опсежнија, али омогућава навођење више опција, и дескриптивија је ако се пажљиво чита.
Компактна нотација омогућава многе уобичајне изразе и скраћенице у простијим случајевима. За дат XML који садржи
<A>
<B>
<C/>
</B>
</A>
најпростији XPath израз је облика
/A/B/C
и он бира све елементе C који су деца свих елемената B који су деца елемента А који формира најобухватнји елемент XML документа. XPath синтакса је осмишљена да опонаша URI и униксолику синтаксу путање датотека.
Сложенији изрази се могу направити наводећи неку осу различиту од подразумеване 'дете' осе, чвор тест различит од обичног имена или предиката који могу бити записани у угластим заградама после сваког корака. На пример, израз
A//B/*[1]
бира прво дете ('*[1]
'), независно од имена, сваког елемента B који је и сам дете или даљи потомак ('//
') елемента A који је дете текућег садржајног чвора (израз не почиње са '/
'). Треба приметити да предикат [1]
тешње одређује него /
оператор. Да би се изабрао први чвор ког одређује израз A//B/*
, треба написати (A//B/*)[1]
. Још треба приметити да, индекси у XPath предикатима (технички, 'удаљености положаја' XPath скупова чворова), почињу од 1, а не од 0, као што је уобичајно у језицима као ћто су C или Јава.
Написани потпуном синтаксом, два горенаведена примерa би изгледала овако
/child::A/child::B/child::C
child::A/descendant-or-self::node()/child::B/child::*[position()=1]
Овде је у сваком кораку израза експлицитно наведена оса (нпр. child
или descendant-or-self
), праћена са ::
, а затим са чвор тестом, као што је A
или node()
, из горенаведених примера.
Осни спецификатори указују на правац навигације у оквиру стабла репрезентације XML документа. Осни спецификатори су:
Пуна Синтакса | Скраћена Синтакса | Белешке |
---|---|---|
ancestor |
||
ancestor-or-self |
||
attribute
|
@
|
@abc је скраћеница од attribute::abc
|
child |
xyz је скраћеница од child::xyz
| |
descendant |
||
descendant-or-self
|
//
|
// је скраћеница од /descendant-or-self::node()/
|
following |
||
following-sibling |
||
namespace |
||
parent
|
..
|
.. је скраћеница од parent::node()
|
preceding |
||
preceding-sibling |
||
self
|
.
|
. је скраћеница од self::node()
|
Пример коришћења attribute спецификатора у скраћеном синтаксном облику, //a/@href
одабира атрибут који се зове href
у елементу a
било где у стаблу репрезентације документа.
Израз . (скраћени запис од self::node()) је најкоришћенији у оквиру предиката и реферише на тренутно изабрани чвор.
На пример, h3[.='Pozdravna poruka']
одабира елемент h3
у тренутном контексту, чија текст садржина је Pozdravna poruka
.
Чвор тестови могу да се састоје од имена одређених чворова или општије, од израза. У случају XML документа, чији је префикс именског простора gs
дефинисан, //gs:enquiry
ће пронаћи све enquiry
елементе у том именском простору, и //gs:*
ће пронаћи све елементе, не узимајући у обзир локално име, у том именском простору.
Други формати чвор тестова:
<!-- Komentar -->
hello world
у <k>hello<m> world</m></k>
<?php echo $a; ?>
. У овом случају, processing-instruction('php')
би одговарало.Предикати, записивани као изрази у коцкастим заградама, могу се користити за рестрикцију скупа чворова ради одабира оних за које је одрећени услов испуњен. На пример a[@href='help.php']
ће одабрати оне елементе a
(међу децом контекстног чвора) који имају href
атрибут чија је вредност help.php
.
Не постоји ограничење броја предиката по кораку, и они не морају бити ограничени до последњег корака ()у XPath(). Предикати могу бити угњеждени до било које дубине. Путање наведене у предикатима почињу од контекста текућег корака( на пример од непосредно претходног теста чвора) и не мењају тај контекст. Сви предикати морају бити задовољени да би дошло до ()поклапања().
Када је вредност предиката нумеричка, она се тумачи као тест на позицији чвора. Тако p[1]
одабира прво дете које је p
елемент, док p[last()]
одабира последње.
У другим случајевима, вредност предиката је аутоматски претворена у boolean. Када се изврши провера предиката у скупу чворова, резултат је истинит уколико је скуп одговарајућих чворова непразан. Тако p[@x]
одабира оне p
елементе који имају атрибут именован са x
.
Сложенији пример: израз a[/html/@lang='en'][@href='help.php'][1]/@target
одабира вредности target
атрибута првог a
елемента међу свом децом контекстног чвора који има сопствени href
атрибут постављен на help.php
, омогућујући да елемент највишег нивоа html
такође има и lang
атрибут постављен на en
. Референца на атрибут елемента највишег нивоа у првом предикату не утиче нити на контекст других предиката нити на сам корак лоцирања.
Редослед предиката је битан уколико предикати тестирају позицију чвора. Сваки предикат издваја скуп чворова изабраних у кораку лоцирања. Стога ће a[1][@href='help.php']
пронаћи подударање једино у првом a
детету контекстног чвора које задовољава услов @href='help.php'
, док a[@href='help.php'][1]
пронолази прво a
дете које задовољава овај услов.
XPath 1.0 дефинише четири типа података: чвор-скупови, стрингови, бројеви и логички тип.
Постојећи оператори су:
Библиотека функција обухвата:
Неке од најкоришћенијих функција су описане испод. За потпун опис погледати[6]
true
ако s1
започиње са s2
true
ако s1
садржи s2
substring("ABCDEF",2,3)
враћа "BCD"
.substring-before("1999/04/01","/")
враћа 1999
substring-after("1999/04/01","/")
враћа 04/01
аргументом у бројевима, посштујући правила конверзије за дати систем, и онда враћа
суму ових елемената.
Изрази се могу креирати унутар предиката коришђењем оператора: =, !=,
<=, <, >=
и : >
. Буловски изрази се
могу комбиновати са заградама ()
и буловским операторима
and
и or
kao i sa not()
функцијом описаном
изнад. За нумеричка израчунавања се користе *, +, -,
div
и mod
. Стрингови се могу
састојати од било којих Unicode карактера.
//item[@price > 2*@discount]
бира ставке чији атрибут цена је већи од
двоструке нумеричке вредности попуста.
Читав скуп чворова се може комбиновати ('unioned')
коришђењем вертикалног 'bar' karaktera |. Скуп чворова који испуњава један или више
услова се могу наћи коришђењем унутар предиката са 'or
'.
v[x or y] | w[z]
ће вратити један скуп чворова који се састоји од свих
v
елемената који имају x
или y
децу
елементе, као и све w
елементе који имају z
) децу
елементе.
<?xml version="1.0" encoding="utf-8"?>
<wikimedia>
<projects>
<project name="Wikipedia" launch="2001-01-05">
<editions>
<edition language="English">en.wikipedia.org</edition>
<edition language="German">de.wikipedia.org</edition>
<edition language="French">fr.wikipedia.org</edition>
<edition language="Polish">pl.wikipedia.org</edition>
<edition language="Spanish">es.wikipedia.org</edition>
</editions>
</project>
<project name="Wiktionary" launch="2002-12-12">
<editions>
<edition language="English">en.wiktionary.org</edition>
<edition language="French">fr.wiktionary.org</edition>
<edition language="Vietnamese">vi.wiktionary.org</edition>
<edition language="Turkish">tr.wiktionary.org</edition>
<edition language="Spanish">es.wiktionary.org</edition>
</editions>
</project>
</projects>
</wikimedia>
XPath израз
бира name атрибуте за све пројекте, и
бира све едиције за све пројекте, и
селектује адресе свих Енглеских Wikimedia пројеката(текст свих edition елемената где је language атрибут једнак English). И наредни
бира адресе свих Wikipedia (текст свих edition елемената који постоје под project елементом са name атрибутом Wikipedia)
XPath се доста користи за изражавање ограничења у шема језицима за XML.
Производи и стандарди |
| ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Организације |
| ||||||||||||
Софтвер |
| ||||||||||||
Конференције |
|