Tehnologia XPath
XPath 1.0 vs XPath 2.0
XPath este un limbaj folosit pentru interogarea fisierelor XML, sau, mai corect spus, XPath 1.0 este asa. Varianta 2.0 este mult mai complexa, si poate lucra pe mult mai multe tipuri de date. O definitie mai buna pentru 2.0 ar fi: un limbaj pentru procesarea secventelor, care ofera si un suport pentru interogarea fisierelor XML.
(expression language for processing sequences).
XPath 2.0 a aparut din combinarea XSLT 2.0 si XQuery 1.0.
De ce a fost nevoie de un upgrade?
- era nevoie de mai multe functii pentru a se usura anumite task-uri
- se dorea compatibilitatea cu XML Schema
- era nevoie de performante mai ridicate
Astfel, XPath 2.0 este un supraset al XPath 1.0, dar un subset al XQuery.
Ce aduce nou?
- Mai multe tipuri de date care pot fi procesate: pe langa multimi de noduri, string-uri, valori booleene si numere, au fost introduse tipuri ca date calendaristice (year, month etc), URI-uri, tipuri derivate, precum si conversii intre ele. Bineinteles, odata cu ele, au fost introduse functii, constructori si operatori asociati.
De exemplu, in versiunea 1.0 aveam tipurile:
String, boolean, number, nodeset
iar in 2.0:
· toate tipurile (simple si complexe) din W3C XML Schema
· tipuri derivate din XML Schema
· valori atomice
- Avem in continuare diferite tipuri de noduri organizate intr-o structura de arbore:
- elemente
- atribute
- noduri document (un element nou introdus – pana acum era cel radacina)
- avem tipuri de date specifice XML Schema pentru aceste noduri
De asemenea, testarea nodurilor se face dupa felul sau numele lor, precum si dupa tipul lor.
- Expresiile XPath intorc intotdeauna secvente, si s-au definit o serie de reguli legate de acestea:
R1. Totul este o secventa.
Chiar daca, aparent, expresiile intorc un nod, sau un string, ele de fapt intorc o secventa care contine un nod, respectiv un string.
R2. Nu existe secvente imbricate.
De exemplu, expresiile (2, 4, (1,2,3), 6) si (2, 4, 1, 2, 3, 6) se evalueaza la aceeasi secventa. (virgula este un operator de concatenare a secventelor)
R3. Secventele sunt ordonate (conteaza ordinea elementelor secventei)
In XPath 1.0 aveam notiunea de “multime de noduri”. Aici, aceasta notiune devine “secventa de elemente” (“sequence of items”). Secventele, spre deosebire de multimi, pot contine duplicate si sunt ordonate (sunt un fel de multiset-uri).
- In XPath 2.0 se pot aplica operatori asupra secventelor.
Exemple:
for $x in /order/item return $x/price * $x/quantity
(10, 1 to 3) se evalueaza la (10, 1, 2, 3)
1 to count($alta_secventa)
reverse(5 to 10)
- In versiunea 2.0 exista cuantificatori – some , every
some $x in /students/student/name satisfies $x = "Fred"
(every)
In XPath 1.0, daca scriam /students/student/name = “Fred”, se returna “true”
Daca exista cel putin un student cu numele Fred. Cuantificatorii din versiunea 2.0 rafineaza expresia.
- Exista expresii conditionale (if)
if (test-expression)
then expression
else expression
- Mai multe noduri pot fi testate in acelasi timp
//persoana/student/text() | //persoana/profesor/text() din versiunea 1.0 devine:
//persoana( student | profesor)/text()
- Sunt introduse mult mai multe functii: http://www.w3.org/TR/xpath-functions
Un tool free pentru testarea expresiilor XPath 2.0 poate fi gasit la http://saxon.sourceforge.net/
De asemenea, informatii despre operatori, functii etc:
http://www.w3.org/TR/2001/WD-xquery-operators-20011220/
Bibliografie:
http://www.xml.com/pub/a/2002/03/20/xpath2.html
http://www.mulberrytech.com/papers/XPath-2-0-User-Grp-HTML/contents.html
3 comentarii:
foarte greu de citit articolul tau . Ar fi trebuit sa-l structurezi in vreun fel. :)
Subscriu, articolul nu e bine structurat. Deasemenea, tehnologia prezentata are legaturi minimale cu interactiunea om-calculator sau interfetele web(chiar si in sens generalizat).
Cateva observatii si sugestii:
- ai duplicat continutul de aici: http://interfete-web-online.com/articole/xpath.html Cred ca ar fi mai bine ca pe blog sa ai doar o introducere a articolului, urmata de o referinta catre acesta.
- nu ai marcat titlul. Drept urmare agregatorul meu de rss mi-a afisat ca titlu intregul paragraf nr. 3!(fara 1 si 2).
- formatarea textului lasa de dorit. E simplu: atentie la marimea fontului, aliniere si consistenta bullet-urilor.
- blogul asta are layout-ul unui blog personal. Pentru articole tehnice cu structura mai complexa mariti latimea zonei ce afiseaza continutul articolului.
Nu vreau sa fiu rau, dau acest feedback doar pentru ca acesta este un blog despre interfete, iar prezentarea informatiilor ar putea fi unul din punctele de interes.
Sper ca feedback-ul meu sa fie constructiv. ;)
Ok, la partea cu layout-ul o sa schimb eu ceva (cred). Oricum , de vreo saptamana tot caut variante, dar nici una nu imi place.
Si cum sa nu, orice forma de feedback constructiv e bine venita. :)
Trimiteți un comentariu