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]

XPath израз иксоришћен над XML датотеком

Синтакса и семантика (XPath 1.0)

Најважнија врста израза у XPath-у је путања лоцирања. Путања лоцирања се састоји од низа корака лоцирања. Сваки корак лоцирања има три компоненте:

Вредност XPath израза се израчунава у односу на контекстни чвор. Спецификатор осе као што је 'дете' или 'потомак' наводи правац обиласка ван контекстног чвора. Чвор тест и предикат се користе да издвоје све чворове које наведе спецификатор осе: на пример, чвор тест 'А' захтева да сви чворови који се обиђу имају ознаку 'А'. Предикат се може искористи да наведе да изабрани чворови имају неке особине, које су наведене од стране самих XPath израза.

XPath синтакса долази у два стила: Скраћена синтакса, која је компактнија и омогућава да се XPath изрази пишу и читају са лакоћом користећи интуитивне и, у многим случајевима, познате карактере и конструкте. Потпуна синтакса је опсежнија, али омогућава навођење више опција, и дескриптивија је ако се пажљиво чита.

Скраћена синтакса

Компактна нотација омогућава многе уобичајне изразе и скраћенице у простијим случајевима. За дат XML који садржи

<A>
  <B>
    <C/>
  </B>
</A>

најпростији XPath израз је облика

и он бира све елементе C који су деца свих елемената B који су деца елемента А који формира најобухватнји елемент XML документа. XPath синтакса је осмишљена да опонаша URI и униксолику синтаксу путање датотека.

Сложенији изрази се могу направити наводећи неку осу различиту од подразумеване 'дете' осе, чвор тест различит од обичног имена или предиката који могу бити записани у угластим заградама после сваког корака. На пример, израз

бира прво дете ('*[1]'), независно од имена, сваког елемента B који је и сам дете или даљи потомак ('//') елемента A који је дете текућег садржајног чвора (израз не почиње са '/'). Треба приметити да предикат [1] тешње одређује него / оператор. Да би се изабрао први чвор ког одређује израз A//B/*, треба написати (A//B/*)[1]. Још треба приметити да, индекси у XPath предикатима (технички, 'удаљености положаја' XPath скупова чворова), почињу од 1, а не од 0, као што је уобичајно у језицима као ћто су C или Јава.

Потпуна Синтакса

Написани потпуном синтаксом, два горенаведена примерa би изгледала овако

Овде је у сваком кораку израза експлицитно наведена оса (нпр. 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:* ће пронаћи све елементе, не узимајући у обзир локално име, у том именском простору.

Други формати чвор тестова:

comment()
проналази XML чвор коментара, на пример <!-- Komentar -->
text()
проналази чвор текстуалног типа, на пример hello world у <k>hello<m> world</m></k>
processing-instruction()
проналази XML наредбу обраде као што је <?php echo $a; ?>. У овом случају, processing-instruction('php') би одговарало.
node()
проналази било који чвор из скупа свих чворова.

Предикати

Предикати, записивани као изрази у коцкастим заградама, могу се користити за рестрикцију скупа чворова ради одабира оних за које је одрећени услов испуњен. На пример 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]

Функције за рад са скуповима чворова

position()
враћа број који представља позицију овог чвора у низу чворова који се тренутно обрађују (на пример, чворови одабрани са инструкцијом xsl:for-each instruction у XSLT).
count(node-set)
враћа број чворова у скупу чворова прослеђеном као аргумент.

String functions

string(object?)
конвертује било који од четири XPath типа података у стринг према предефинисаним правилима. Ако је вредност аргумента чвор-скуп, функција враћа стринг-вредност првог чвора у редоследу документа, игноришући даље чворове.
concat(string, string, string*)
спаја два или више стрингова
starts-with(s1, s2)
враћа true ако s1 започиње са s2
contains(s1, s2)
враћа true ако s1 садржи s2
substring(string, start, length?)
пример: substring("ABCDEF",2,3) враћа "BCD".
substring-before(s1, s2)
пример: substring-before("1999/04/01","/") враћа 1999
substring-after(s1, s2)
пример: substring-after("1999/04/01","/") враћа 04/01
string-length(string?)
враћа број карактера у стрингу
normalize-space(string?)
белине са крајева бивају уклоњене и сваки низ белина се замењује једним карактером

Буловске функције

not(boolean)
негира било који буловски израз.
true()
има вредност true.
false()
има вредност false.

Бројевне функције

sum(node-set)
конвертује све string вредности чворова нађених са XPath

аргументом у бројевима, посштујући правила конверзије за дати систем, и онда враћа

суму ових елемената.

Примери употребе

Изрази се могу креирати унутар предиката коришђењем оператора: =, !=, <=, <, >= и : >. Буловски изрази се

могу комбиновати са заградама () и буловским операторима

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 ) децу

елементе.

Синтакса и семантика(XPath 2.0)

Главни чланак: XPath 2.0

Примери

<?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 израз

/wikimedia/projects/project/@name

бира name атрибуте за све пројекте, и

/wikimedia//editions

бира све едиције за све пројекте, и

/wikimedia/projects/project/editions/edition[@language="English"]/text()

селектује адресе свих Енглеских Wikimedia пројеката(текст свих edition елемената где је language атрибут једнак English). И наредни

/wikimedia/projects/project[@name="Wikipedia"]/editions/edition/text()

бира адресе свих Wikipedia (текст свих edition елемената који постоје под project елементом са name атрибутом Wikipedia)

Имплементација

Алатке командне линије
ActionScript
C/C++
Delphi
Free Pascal
Имплементације за погон база података
Јава


JavaScript
.NET Framework
Perl
PHP
Пајтон
Ruby
Scheme
SQL
Tcl

Коришћење у шема језицима

XPath се доста користи за изражавање ограничења у шема језицима за XML.

Види још

Референце

  1. ^ а б „XML and Semantic Web W3C Standards Timeline” (PDF). 4. 2. 2012. Архивирано из оригинала (PDF) 24. 04. 2013. г. Приступљено 03. 06. 2015. 
  2. ^ Bergeron, Randy (31. 10. 2000). „XPath—Retrieving Nodes from an XML Document”. SQL Server Magazine. Архивирано из оригинала 26. 07. 2010. г. Приступљено 03. 06. 2015. 
  3. ^ Geneves, Pierre (2012). „Course: The XPath Language” (PDF). 
  4. ^ XPath 2.0 подржава атомичке типове, дефинисане као уграђене типове у XML Schema, и може да увезе кориснички дефинисане типове из схеме.
  5. ^ XPath 3.0 W3C препорука
  6. ^ „W3C Документацију”. Архивирано из оригинала 09. 12. 2012. г. Приступљено 03. 06. 2015. 
  7. ^ „Pathan”. Архивирано из оригинала 08. 04. 2015. г. Приступљено 03. 06. 2015. 
  8. ^ „XQilla”. Архивирано из оригинала 18. 05. 2015. г. Приступљено 03. 06. 2015. 
  9. ^ QuiXPath
  10. ^ jQuery XPath наставак
  11. ^ XPath 2.0 имплементација у Javaskcript
  12. ^ The XML C parser and toolkit of Gnome
  13. ^ MySQL :: MySQL 5.1 Reference Manual :: 12.11 XML Functions
  14. ^ Online docs atpostgresql.org
  15. ^ „tdom package”. Архивирано из оригинала 03. 06. 2015. г. Приступљено 03. 06. 2015. 

Спољашње везе