XPath - XPath
![]() | Tento článek má několik problémů. Prosím pomozte zlepšit to nebo diskutovat o těchto otázkách na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
Paradigma | Dotazovací jazyk |
---|---|
Vývojář | W3C |
Poprvé se objevil | 1998 |
Stabilní uvolnění | 3.1 / 21. března 2017 |
Ovlivněno | |
XSLT, XPointer | |
Ovlivněno | |
Schéma XML, XForms |
XPath (Jazyk XML cesty) je dotazovací jazyk pro výběr uzly z XML dokument. Kromě toho lze XPath použít k výpočtu hodnot (např. struny, čísla nebo Booleovský hodnoty) z obsahu dokumentu XML. XPath byl definován World Wide Web Consortium (W3C).[1]. XPath lze snadno napsat a ověřit na SelectorsHub.[2]
Přehled
Jazyk XPath je založen na a stromová reprezentace dokumentu XML a poskytuje možnost navigace po stromu výběrem uzlů podle různých kritérií.[3][4] V populárním použití (i když ne v oficiální specifikaci) se výraz XPath často označuje jednoduše jako „XPath“.
Původně motivován touhou poskytnout společný model syntaxe a chování mezi XPointer a XSLT, podmnožiny XPath dotazovací jazyk se používají v jiných W3C specifikace jako Schéma XML, XForms a Sada značek pro internacionalizaci (ITS).
XPath byl přijat řadou knihoven a nástrojů pro zpracování XML, z nichž mnohé také nabízejí Selektory CSS, další standard W3C, jako jednodušší alternativa k XPath.
Verze
Používá se několik verzí XPath. XPath 1.0 byl publikován v roce 1999, XPath 2.0 v roce 2007 (s druhým vydáním v roce 2010), XPath 3.0 v roce 2014 a XPath 3.1 v roce 2017. XPath 1.0 je však stále verze, která je nejvíce dostupná.[1]
- XPath 1.0 se stal doporučením 16. listopadu 1999 a je široce implementován a používán, ať už samostatně (volán prostřednictvím API z jazyků jako Jáva, C#, Krajta nebo JavaScript ), nebo vložené v jazycích, jako je XSLT, XProc, Schéma XML nebo XForms.
- XPath 2.0 se stalo doporučením 23. ledna 2007, druhé vydání bylo zveřejněno 14. prosince 2010. Existuje řada implementací, ale nejsou tak široce používány jako XPath 1.0. Specifikace jazyka XPath 2.0 je mnohem větší než XPath 1.0 a mění některé základní koncepce jazyka, jako je typový systém.
- Nejvýznamnější změnou je, že XPath 2.0 je postaven kolem Datový model XQuery a XPath (XDM), který má mnohem bohatší typ systému.[5] Každá hodnota je nyní posloupností (jedna atomická hodnota nebo uzel se považuje za posloupnost délky jedna). Sady uzlů XPath 1.0 jsou nahrazeny sekvencemi uzlů, které mohou být v libovolném pořadí.
- Pro podporu bohatších typů sad nabízí XPath 2.0 velmi rozšířenou sadu funkcí a operátorů.
- XPath 2.0 je ve skutečnosti podmnožinou XQuery 1.0. Sdílejí stejný datový model (XDM ). Nabízí
pro
výraz, který je výřezem verze „KVĚT "výrazy v XQuery. Jazyk je možné popsat uvedením částí XQuery, které vynechává: hlavními příklady jsou prolog dotazu, konstruktory prvků a atributů, zbytek syntaxe" FLWOR "atypový spínač
výraz.
- XPath 3.0 se stalo doporučením dne 8. dubna 2014.[6] Nejvýznamnější novou funkcí je podpora funkcí jako prvotřídních hodnot. Podrobnosti o novinkách XPath 3.0 najdete v části.[7] XPath 3.0 je podmnožinou XQuery 3.0 a většina aktuálních implementací (duben 2014) existuje jako součást enginu XQuery 3.0.
- XPath 3.1 se stal Doporučení dne 21. března 2017. Tato verze přidává nové datové typy: mapy a pole, převážně na podporu podpory pro JSON.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/8/87/XPath_example.svg/300px-XPath_example.svg.png)
Syntaxe a sémantika (XPath 1.0)
Nejdůležitějším druhem výrazu v XPath je a cesta k umístění. Cesta k umístění se skládá ze sekvence kroky umístění. Každý krok umístění má tři komponenty:
Výraz XPath je vyhodnocen s ohledem na a kontextový uzel. Specifikátor osy, například „podřízený“ nebo „potomek“, určuje směr navigace z kontextového uzlu. Test uzlů a predikát se používají k filtrování uzlů určených specifikátorem osy: Například test uzlů 'A' vyžaduje, aby všechny uzly navigované do musely mít označení 'A'. Predikát lze použít k určení, že vybrané uzly mají určité vlastnosti, které jsou určeny samotnými výrazy XPath.
Syntaxe XPath má dvě příchutě: zkrácená syntaxe, je kompaktnější a umožňuje XPaths snadno psát a číst pomocí intuitivních a v mnoha případech známých znaků a konstrukcí. The úplná syntaxe je podrobnější, ale umožňuje specifikovat více možností a je popisnější, pokud je čteno pečlivě.
Zkrácená syntaxe
Kompaktní notace umožňuje mnoho výchozích hodnot a zkratek pro běžné případy. Daný zdrojový XML obsahující alespoň
<A> <B> <C/> </B></A>
nejjednodušší XPath má podobu jako
/ A / B / C
který vybere C prvky, které jsou podřízenými prvky B, které jsou podřízenými prvku A, který tvoří nejvzdálenější prvek dokumentu XML. Syntaxe XPath je navržena tak, aby napodobovala URI (Jednotný identifikátor zdroje ) a Cesta k souboru ve stylu Unixu syntax.
Složitější výrazy lze zkonstruovat zadáním jiné osy než výchozí „podřízené“ osy, jiného testu uzlu než jednoduchého názvu nebo predikátů, které lze po každém kroku zapsat do hranatých závorek. Například výraz
A // B / * [1]
vybere první dítě ('*[1]
'), ať je jeho název jakýkoli, každého prvku B, který je sám o sobě dítětem nebo jiným, hlubším potomkem ('//
') prvku A, který je potomkem aktuálního kontextového uzlu (výraz nezačíná na'/
'). Všimněte si, že predikát [1]
se váže pevněji než /
operátor. Vyberte první uzel vybraný výrazem A // B / *
, psát si (A // B / *) [1]
. Všimněte si také, že hodnoty indexu v predikátech XPath (technicky „blízké polohy“ sad uzlů XPath) začínají od 1, ne 0 jako běžné v jazycích jako C a Java.
Rozšířená syntaxe
V plné, nezkrácené syntaxi by byly napsány dva výše uvedené příklady
/ dítě :: A / dítě :: B / dítě :: C.
child :: A / descendant-or-self :: node () / child :: B / child :: * [position () = 1]
Tady, v každém kroku XPath, osa (např. dítě
nebo potomek nebo já
) je výslovně specifikován, následovaný ::
a pak test uzlu, jako A
nebo uzel()
ve výše uvedených příkladech.
Specifikátory os
Specifikátory os označují směr navigace v rámci stromové reprezentace dokumentu XML. K dispozici jsou osy:
Plná syntaxe | Zkrácená syntaxe | Poznámky |
---|---|---|
předek | ||
předek nebo já | ||
atribut | @ | @abc je zkratka pro atribut :: abc |
dítě | xyz je zkratka pro dítě :: xyz | |
potomek | ||
potomek nebo já | // | // je zkratka pro / descendant-or-self :: node () / |
Následující | ||
následující sourozenec | ||
jmenný prostor | ||
rodič | .. | .. je zkratka pro parent :: node () |
předchozí | ||
předcházející sourozenec | ||
já | . | . je zkratka pro self :: node () |
Jako příklad použití atribut osa ve zkrácené syntaxi, // a / @ href
vybere volaný atribut href
v A
prvky kdekoli ve stromu dokumentu. Výraz . (zkratka pro self :: node ()) se v predikátu nejčastěji používá k označení aktuálně vybraného uzlu. Například h3 [. = 'Viz také']
vybere prvek s názvem h3
v aktuálním kontextu, jehož textový obsah je Viz také
.
Testy uzlů
Testy uzlů se mohou skládat ze specifických názvů uzlů nebo obecnějších výrazů. V případě dokumentu XML, ve kterém je předpona oboru názvů gs
byl definován, // gs: dotaz
najde všechny poptávka
prvky v tomto jmenném prostoru a // gs: *
najde všechny prvky, bez ohledu na místní název, v tomto jmenném prostoru.
Jiné formáty pro testování uzlů jsou:
- komentář()
- najde uzel komentáře XML, např.
<!-- Comment -->
- text()
- najde uzel typu textu, např. the
Ahoj světe
v<k>hello<m> world</m></k>
- instrukce ke zpracování ()
- najde XML pokyny ke zpracování jako
<?php echo $a; ?>
. V tomto případě,instrukce ke zpracování ('php')
by odpovídalo. - uzel()
- najde vůbec jakýkoli uzel.
Predikáty
Predikáty, psané jako výrazy v hranatých závorkách, lze použít filtr množina uzlů podle nějaké podmínky. Například, A
vrací sadu uzlů (všechny A
prvky, které jsou potomky kontextového uzlu) a a [@ href = 'help.php']
ponechává pouze ty prvky, které mají href
atribut s hodnotou help.php
.
Počet predikátů v kroku není nijak omezen a nemusí být omezen na poslední krok v XPath. Mohou být také vnořeny do jakékoli hloubky. Cesty uvedené v predikátech začínají v kontextu aktuálního kroku (tj. Bezprostředně předcházejícího testu uzlu) a tento kontext nemění. Aby došlo ke shodě, musí být splněny všechny predikáty.
Když je hodnota predikátu číselná, je to syntaktický cukr pro srovnání s pozicí uzlu v sadě uzlů (jak je dáno funkcí pozice()
). Tak p [1]
je zkratka pro p [pozice () = 1]
a vybere první p
element dítě, zatímco p [poslední ()]
je zkratka pro p [pozice () = poslední ()]
a vybere poslední p
podřízený kontextový uzel.
V ostatních případech se hodnota predikátu automaticky převede na logickou hodnotu. Když se predikát vyhodnotí na sadu uzlů, je výsledek pravdivý, když je sada uzlů neprázdný[vyjasnit ]. Tím pádem p [@x]
vybírá ty p
prvky, které mají pojmenovaný atribut X
.
Složitější příklad: výraz a [/ html / @ lang = 'en'] [@ href = 'help.php'] [1] / @ cíl
vybere hodnotu cílová
atribut první A
prvek mezi potomky kontextového uzlu, který má svůj href
atribut nastaven na help.php
, za předpokladu, že dokument je html
prvek nejvyšší úrovně má také a jazyk
atribut nastaven na en
. Odkaz na atribut prvku nejvyšší úrovně v prvním predikátu neovlivní ani kontext jiných predikátů, ani kontext samotného kroku umístění.
Pořadí predikátů je významné, pokud predikáty otestují polohu uzlu. Každý predikát bere sadu uzlů vrací (potenciálně) menší sadu uzlů. Tak a [1] [@ href = 'help.php']
najde shodu pouze v případě, že je první A
podřízený uzel kontextu splňuje podmínku @ href = 'help.php'
, zatímco a [@ href = 'help.php'] [1]
najde první A
dítě, které splňuje tuto podmínku.
Funkce a operátory
XPath 1.0 definuje čtyři datové typy: sady uzlů (sady uzlů bez vnitřního pořadí), řetězce, čísla a logické hodnoty.
K dispozici jsou operátoři:
- Operátory "/", "//" a "[...]" používané ve výrazech cest, jak je popsáno výše.
- Spojovací operátor "|", který tvoří spojení dvou sad uzlů.
- Logické operátory „a“ a „nebo“ a funkce „ne ()“
- Aritmetické operátory „+“, „-“, „*“, „div“ (dělení) a „mod“
- Porovnávací operátory "=", "! =", "<", ">", "<=", "> ="
Knihovna funkcí obsahuje:
- Funkce pro manipulaci s řetězci: concat (), substring (), contains (), substring-before (), substring-after (), translate (), normalize-space (), string-length ()
- Funkce pro manipulaci s čísly: součet (), kulatý (), podlaha (), strop ()
- Funkce pro získání vlastností uzlů: name (), local-name (), namespace-uri ()
- Funkce pro získání informací o kontextu zpracování: pozice (), poslední ()
- Funkce převodu typu: string (), number (), boolean ()
Níže jsou uvedeny některé z běžně užitečných funkcí.[8]
Funkce sady uzlů
- pozice()
- vrací číslo představující pozici tohoto uzlu v posloupnosti aktuálně zpracovávaných uzlů (například uzly vybrané instrukcí xsl: for-each v XSLT).
- počet(sada uzlů)
- vrací počet uzlů v sadě uzlů dodaných jako argument.
Řetězcové funkce
- tětiva(objekt?)
- převede libovolný ze čtyř datových typů XPath na řetězec podle předdefinovaných pravidel. Pokud je hodnotou argumentu sada uzlů, vrátí funkce hodnotu řetězce prvního uzlu v pořadí dokumentů a ignoruje další uzly.
- concat (tětiva, tětiva, tětiva*)
- zřetězuje dva nebo více řetězců
- začíná s(s1, s2)
- se vrací
skutečný
-lis1
začíná ss2
- obsahuje (s1, s2)
- se vrací
skutečný
-lis1
obsahujes2
- podřetězec (tětiva, Start, délka?)
- příklad:
podřetězec ("ABCDEF", 2,3)
se vrací„BCD“
. - předřetězec (s1, s2)
- příklad:
podřetězec před ("1999/04/01", "/")
se vrací1999
- podřetězce po (s1, s2)
- příklad:
substring-after ("1999/04/01", "/")
se vrací04/01
- délka řetězce (řetězec?)
- vrací počet znaků v řetězci
- normalizovat-prostor (tětiva?)
- všechny přední a zadní mezery je odstraněn a všechny sekvence prázdných znaků jsou nahrazeny jednou mezerou. To je velmi užitečné, když mohl být původní XML pěkný otisk formátován, což by mohlo způsobit, že další zpracování řetězce bude nespolehlivé.
Booleovské funkce
- ne(booleovský)
- neguje jakýkoli booleovský výraz.
- skutečný()
- hodnotí na skutečný.
- Nepravdivé()
- hodnotí na Nepravdivé.
Číselné funkce
- součet(sada uzlů)
- převede řetězcové hodnoty všech uzlů nalezených argumentem XPath na čísla podle vestavěných pravidel odlévání a poté vrátí součet těchto čísel.
Příklady použití
Výrazy lze vytvářet v predikátech pomocí operátorů: =, !=, <=, <, >=
a >
. Logické výrazy lze kombinovat s hranatými závorkami ()
a logické operátory a
a nebo
stejně jako ne()
funkce popsaná výše. Lze použít numerické výpočty *, +, -, div
a mod
. Řetězce se mohou skládat z libovolných Unicode postavy.
// položka [@ cena> 2 * @ sleva]
vybere položky, jejichž atribut ceny je větší než dvojnásobek číselné hodnoty jejich atributu slevy.
Lze kombinovat celé sady uzlů ('sjednocen' ) pomocí znaku svislého pruhu |. Sady uzlů, které splňují jednu nebo více podmínek, lze najít kombinací podmínek uvnitř predikátu s 'nebo
'.
v [x nebo y] | w [z]
vrátí jednu sadu uzlů skládající se ze všech proti
prvky, které mají X
nebo y
dětské prvky, stejně jako všechny w
prvky, které mají z
podřízené prvky, které byly nalezeny v aktuálním kontextu.
Syntaxe a sémantika (XPath 2.0)
Syntaxe a sémantika (XPath 3)
Příklady
Vzhledem k ukázkovému dokumentu XML
<?xml version="1.0" encoding="utf-8"?><Wikimedia> <projects> jméno =„Wikipedia“ spuštění ="2001-01-05"> <editions> jazyk ="Angličtina">en.wikipedia.org</edition> jazyk ="Němec">de.wikipedia.org</edition> jazyk ="Francouzština">fr.wikipedia.org</edition> jazyk ="Polština">pl.wikipedia.org</edition> jazyk ="Španělština">es.wikipedia.org</edition> </editions> </project> jméno =„Wikislovník“ spuštění ="2002-12-12"> <editions> jazyk ="Angličtina">en.wiktionary.org</edition> jazyk ="Francouzština">fr.wiktionary.org</edition> jazyk ="Vietnamština">vi.wiktionary.org</edition> jazyk ="Turečtina">tr.wiktionary.org</edition> jazyk ="Španělština">es.wiktionary.org</edition> </editions> </project> </projects></Wikimedia>
Výraz XPath
/ Wikimedia / projects / project / @ name
vybere atributy názvu pro všechny projekty a
/ Wikimedia // edice
vybere všechna vydání všech projektů a
/ Wikimedia / projects / project / editions / edition [@ language = 'English'] / text ()
vybírá adresy všech anglických projektů Wikimedia (text všech edice prvky kde Jazyk atribut se rovná Angličtina). A následující
/ Wikimedia / projects / project [@ name = 'Wikipedia'] / edice / vydání / text ()
vybere adresy všech Wikipedií (text všech edice prvky, které existují pod projekt prvek s atributem názvu Wikipedia).
Implementace
Nástroje příkazového řádku
- XMLStarlet snadno použitelný nástroj pro testování / provádění příkazů XPath za běhu.
- xmllint (libxml2)
- Server RaptorXML od společnosti Altova podporuje XPath 1.0, 2.0 a 3.0
- Xidel
ZÁKLADNÍ
- Procesor XML Pavuk pro QM / BASIC[9]
C / C ++
Free Pascal
- Jednotka XPath je součástí výchozích knihoven
Implementace pro databázové stroje
Jáva
- Saxon XSLT podporuje XPath 1.0, XPath 2.0 a XPath 3.0 (stejně jako XSLT 2.0, XQuery 3.0 a XPath 3.0)
- BaseX (také podporuje XPath 2.0 a XQuery)
- VTD-XML
- Sedna XML databáze XML i DB: proprietární.
- QuiXPath A streamování otevřený zdroj implementace společností Innovimax
- Xalan
- Dom4j
The Jáva balík javax.xml.xpath
je součástí standardního vydání Java od verze Java 5 [10] přes Java API pro zpracování XML. Technicky jde o XPath API spíše než implementace XPath a umožňuje programátorovi vybrat konkrétní implementaci, která odpovídá rozhraní.
JavaScript
- plugin jQuery XPath na základě Open-source implementace XPath 2.0 v JavaScriptu
- FontoXPath Otevřená implementace XPath 3.1 v JavaScriptu. Aktuálně ve vývoji.
.NET Framework
- V oborech názvů System.Xml a System.Xml.XPath[11]
- Sedna XML databáze
Perl
- XML :: LibXML (libxml2)
PHP
- Sedna XML databáze
- DOMXPath přes libxml rozšíření
Krajta
- The ElementTree XML API ve standardní knihovně Pythonu obsahuje omezená podpora pro výrazy XPath
- libxml2
- Amara
- Sedna XML databáze
- lxml
- Škrábaný[12]
Rubín
Systém
- Sedna XML databáze
SQL
- MySQL podporuje podmnožinu XPath od verze 5.1.5 a dále[14]
- PostgreSQL podporuje XPath a XSLT od verze 8.4[15]
Tcl
- The balíček tdom poskytuje „velmi úplnou, kompatibilní a rychlou implementaci XPath v jazyce C“
Použít v jazycích schématu
XPath se stále více používá k vyjádření omezení v jazycích schémat pro XML.
- (Nyní ISO standard ) jazyk schématu Schematron propagoval přístup.
- Streamovací podmnožina XPath se používá ve schématu W3C XML 1.0 pro vyjádření jedinečnosti a klíčových omezení. V XSD 1.1 je použití XPath rozšířeno na podporu přiřazení podmíněného typu na základě hodnot atributů a na umožnění vyhodnocení libovolných booleovských tvrzení oproti obsahu prvků.
- XForms používá XPath k vazbě typů na hodnoty.
- Tento přístup dokonce našel použití v aplikacích jiných než XML, jako je například analyzátor zdrojového kódu pro Javu PMD: Java se převede na a DOM -jako rozebrat strom, pak jsou nad stromem definována pravidla XPath.
Viz také
Reference
- ^ A b „Časová osa standardů XML a sémantického webu W3C“ (PDF). 2012-02-04.
- ^ "inteligentní editor pro XPath". 2020-07-29.
- ^ Bergeron, Randy (31. října 2000). „XPath - načítání uzlů z dokumentu XML“. Časopis SQL Server. Archivovány od originál 26. července 2010. Citováno 24. února 2011.
- ^ Pierre Geneves (Říjen 2012). „Course: The XPath Language“ (PDF).
- ^ XPath 2.0 podporuje atomové typy, definované jako vestavěné typy v Schéma XML, a může také importovat uživatelem definované typy ze schématu.
- ^ Doporučení XPath 3.0 W3C
- ^ Co je nového v 3.0 (XSLT / XPath / XQuery) (plus XML Schema 1.1) Michael Kay, Saxonica
- ^ Úplný popis viz dokument doporučení W3C
- ^ Crowell, William (2016). „Procesor Pavuk XML“ (PDF). www.pavuk.com.
- ^ https://docs.oracle.com/javase/7/docs/api/javax/xml/xpath/package-summary.html
- ^ Jmenný prostor System.Xml
- ^ Duke, Justin (29. září 2016). „Jak procházet webovou stránku pomocí Scrapy a Pythonu 3“. Digitální oceán. Archivovány od originál dne 4. října 2017. Citováno 24. listopadu 2017.
Selektory jsou vzory, které můžeme použít k vyhledání jednoho nebo více prvků na stránce, abychom pak mohli pracovat s daty v prvku. scrapy podporuje selektory CSS nebo selektory XPath.
- ^ http://xmlsoft.org/
- ^ http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html
- ^ Online dokumenty na postgresql.org
externí odkazy
- Specifikace XPath 1.0
- Specifikace XPath 2.0
- Specifikace XPath 3.0
- Specifikace XPath 3.1
- Co je nového v XPath 2.0
- XPath Reference (MSDN)
- XPath Expression Syntax (Saxon)
- XPath 2.0 Expression Syntax (Saxon), [1]
- XPath - MDC Docs podle Mozilla Developer Network
- Úvod / výukový program XPath
- Odkaz na funkce XSLT a XPath