X-Git-Url: http://git.nguyen.vg/gitweb/?a=blobdiff_plain;f=xpi%2Fxpi_02.xhtml;fp=xpi%2Fxpi_02.xhtml;h=0000000000000000000000000000000000000000;hb=8a2e36282654d761b5bee1b2832d25f27097094b;hp=ce4fa3da6b2cbdbb4fa8466bb8a03a7b5260c3c7;hpb=6e8bc5175a0d55e46d072fce27496d93beee3f83;p=hacks%2FsimpleWebSlides.git diff --git a/xpi/xpi_02.xhtml b/xpi/xpi_02.xhtml deleted file mode 100644 index ce4fa3d..0000000 --- a/xpi/xpi_02.xhtml +++ /dev/null @@ -1,386 +0,0 @@ - - - - - XPath - - - - - - - - - - - - - - - - - - - - -
-

XML et Programmation Internet

-

Cours 2

-
kn@lri.fr -
- -

Modèle d'arbre

-
- -

XML vu comme un arbre (1/2)

- - -
-
-

XML vu comme un arbre (2/2)

-

Un document XML peut être vu comme un arbre:

- - - - Foundations of Databases - Abiteboul - Hull - Vianu - Addison Wesley - 1995 - - - - The Lord of the Rings - J. R. R. Tolkien - Houghton Mifflin - 2001 - - -]]> - -
-
-

Sérialisation d'un arbre sous forme de document

-

Étant donné un arbre, comment peut ont produire - le document XML correspondant ?

- //pseudo-code - void print(Node n) - { - if (n is text or comment) { output_text(n) } - else { - output_text ("<" + tag(n) + ">"); - for k in children(n) - print(k); - output_text ("</" + tag(n) + ">"); - } - - -
-
-

Ordre du document, parcours préfixe

-

On appelle ordre du document un ordre total sur les - nœuds d'un document qui correspond à leur ordre dans un fichier - sérialisé. Il correspond aussi à la numérotation lors du parcours - préfixe

-
    -
  1. #document
  2. -
  3. bibliography
  4. -
  5. book
  6. -
  7. title
  8. -
  9. "Foundations of Databases"
  10. -
  11. author
  12. -
  13. "Abiteboul"
  14. -
  15. author
  16. -
  17. "Hull"
  18. -
  19. author
  20. -
  21. "Vianu"
  22. -
- - -
-
-

Construction d'un arbre à partir d'un fichier XML ?

-

Pour simplifier on suppose un fichier sans texte, uniquement avec - des balises ouvrantes/fermantes

- - type Node = { label : string; children : List<Node> } - Stack<Node> stack; - stack.push (new Node("#document"), [])); - while (true) { - - tag = read (); - if end_of_file () break; - if tag is opening { - parent = stack.peek(); - node = new Node(tag, []); - parent.addChild(node); - stack.push(node); - } - if tag is closing { - stack.pop(); - } - } - -

En pratique, on utilise des bibliothèques toutes faites pour - lire/écrire des fichiers!

-
-

XPath, introduction

-
-

Intérogation de documents XML

-

Les documents représentant des données (semi-) structurées, on - souhaite en extraire de l'information

-

On va pouvoir écrire des requêtes sur des critères scalaires - ( -« renvoyer tous les livres publiés après 2000 Â»), mais aussi sur des - critères de structure (« renvoyer tous les éléments qui ont - un fils author Â»)

-
-
-

XPath

-

XPath est un langage de selection de nœud dans un document - XML. Il ne permet que de sélectionner des nœuds, pas d'en - construire de nouveaux. C'est un langage restreint qui ne contient - pas de fonctions, variables, … On peut le voir comme un équivalent - du SELECT de SQL

-
- -
-

XPath (exemple)

-

Sélectionner tous les titres du document (de manière compliquée)

- /descendant::author/parent::book/child::title - - -
-
-

XPath : syntaxe

-

La syntaxe d'une requête XPath est:

- /axe1::test1[ pred1 ]/ … /axen::testn[ predn ] - - -
-
-

XPath : sémantique

-

Étant donné la requête:

- /axe1::test1[ pred1 ]/ … /axen::testn[ predn ] -
    -
  1. le nœud contexte au nœud document
  2. -
  3. on sélectionne l'ensemble A1 tous les nœuds qui sont dans - l'axe1 par rapport au nœud contexte
  4. -
  5. on sélectionne l'ensemble T1 des nœud de - A1 qui vérifient le test test1
  6. -
  7. on sélectionne l'ensemble P1 des nœud de - T1 qui vérifient pred1
  8. -
  9. On réapplique le pas 2 sur P1
  10. -
  11. …
  12. -
-
-
-

XPath : sémantique (exemple)

-
- /descendant::author/parent::book/child::title -
  1. On séléctionne le nœud document
  2. -
  3. On séléctionne tous les descendants
  4. -
  5. On filtre en ne gardant que les nœuds author - (T1 ≡ P1)
  6. -
  7. Sur chacun des author on prend le parent (on n'obtient que - 2 parents car on garde des ensembles de noeuds)
  8. -
  9. On filtre les parents pour ne garder que ceux qui - sont book
  10. -
  11. On sélectionne tous les fils de chacun des book
  12. -
  13. On ne garde que les fils qui ont le - tag title
  14. -
-
- - -
-
-

XPath : axes

-

Le standard XPath définit un grand nombre d'axes

- -
-
-

XPath : les tests

-

On peut sélectionner des nœuds selon les critères suivants

- -
-
-

XPath : prédicats (syntaxe)

- - p ::= p or p - | p and p - | not (p) - | count(…), contains(…), position(), … - | chemin XPath - | e1 op e2 - -

e1 et e2 sont des - expressions arithmétiques, op peut être <, >, =, !=, - +, -, *, /, mod, …

-
-
-

XPath : prédicats (sémantique)

-

On évalue le prédicat et on converti son résultat en valeur de - vérité. Si la valeur vaut vrai, on garde le nœud courant, si elle - vaut faux, on ne le garde pas -

-

XPath connait 4 types de données pour les prédicats :

- - -
-
-

XPath : prédicats (exemples)

- - -
-
-

Caractéristiques d'XPath

- -
- -