Introduction au langage XML
Le texte peut être vu comme une hiérarchie ordonnée d’objets contenus (OHCO – ordered hierarchy of content objects)1 :
les objets contenus sont, par exemple, des chapitres, des sections, des sous-sections, des paragraphes, des citations, etc., ces objets sont « imbriqués » les uns dans les autres – une section contient plusieurs paragraphes – c’est pourquoi on parle de structure hiérarchique, ces mêmes objets apparaissent les uns à l’intérieur des autres, mais également les uns à la suite des autres :
Cette structure hiérarchique (arbre XML) est facilement compréhensible par l’homme, mais également par la machine. Il est donc très aisé de manipuler ce type de données.
1Steve DeRose, David Durand, Elli Mylonas, and Allen Renear’s 1990 “What is text, really?”
<?xml version="1.0" encoding="UTF-8"?>
Victor
Hugo
avenue Victor-Hugo à Paris
26 février 1802
22 mai 1885
Représenter l’arbre de ce document XML. Faire attention à l’élément racine, au texte, ainsi qu’aux attributs.
XPath est principalement utilisé par les langages de programmation XSLT et XQuery. C’est un langage de requête pour identifier des parties d’un documents XML. Une requête ou expression XPath permet de rechercher des nœuds. Le résultat de cette requête est une séquence de nœuds ou de valeurs atomiques.
« Un document XML est une arborescence de nœuds. Certains nœuds contiennent d’autres nœuds. Un seul nœuds racine contient enfin tous les autres nœuds. XPath est un langage pour sélectionner des nœuds et ensembles de nœuds de cette arborescence.»1
Il existe 7 types de nœuds :
Toute expression XPath retourne un de ces 4 types de données
Une Expression XPath indique un chemin depuis un nœud de départ vers un nœud ou un ensemble de nœuds cibles.
Un chemin est dit absolu lorsqu’il commence à la racine, et relatif lors qu’il part d’un nœud courant ou contextuel.
Un chemin est composé d’étapes de parcours, séparées par « / ». Placé en début d’expression, le signe « / » représentant le nœud racine.
Dans une étape on trouve 3 concepts : un axe, un filtre, un ou des prédicats
axe::filtre[prédicat_1][prédicat_N]
L’axe est le sens du parcours, le filtre correspond aux nœuds à atteindre et les prédicats, optionnels, sont les conditions qui doivent être remplies par les nœuds recherchés.
Les Jokers permettent de trouver plusieurs éléments et types de nœuds en même temps, sans connaître leur nom.
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="xslt.xsl"?>
Victor
Hugo
avenue Victor-Hugo à Paris
26 février 1802
Besançon
22 mai 1885
Paris
Syntaxe abrégée
Chaque étape d’un chemin XPath peut contenir 0 ou plusieurs prédicats
Un prédicat est une expression XPath entre crochets « [] » qui suit le test d’un filtre (ou nœud)
Un prédicat correspond à une condition que doit remplir le nœud pour être retenu
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="xslt.xsl"?>
Victor
Hugo
avenue Victor-Hugo à Paris
26 février 1802
Besançon
22 mai 1885
Paris
/data/num[1] - /data/num[2]
//p[position() > 1]
//chapitre[head != 'Introduction']
//chapitre/[@type = 'Introduction' or @type = 'conclusion']
*Dans un document XSLT on utilisera < et >
number(node) => NaN
/node/number() => 2.0
ceiling(node) => 4.0
round(node) => 3.0
boolean(node) => true
boolean(node/sub)=> false
not(boolean(node/sub))=> true
//node/position() => (1, 2)
count(//node) => 2
name(/ns:root) => ns:root (préfixe + nom)
local-name(/ns:root) => root
/root/node/string() => '10'
/root/node/string-length() => 2
concat('Hello', ' World') => 'Hello World'
/node/concat(@att, .) => 'HelloWorld'
/root/node/contains(., 'Hello') => true
substring-before(/root, ' World') => 'Hello'
substring(/root, 7, 5) => World
substring(/root, 7) => World