From: Kim Nguyễn Date: Tue, 16 Sep 2014 09:11:42 +0000 (+0200) Subject: Add second lecture. X-Git-Url: http://git.nguyen.vg/gitweb/?p=hacks%2FsimpleWebSlides.git;a=commitdiff_plain;h=21d58f0c3807263b9285f4904f70d55d032f03f4 Add second lecture. --- diff --git a/simpleWebSlides.js b/simpleWebSlides.js index cc030cf..90634bc 100644 --- a/simpleWebSlides.js +++ b/simpleWebSlides.js @@ -152,6 +152,7 @@ SWS.Effects = new function () { var self = this; self.objectDeactivateFadeOut = function (o) { + if (o.is("embed")) return; o.animate({'opacity': '0'}, 200, function () { diff --git a/xpi/tree.svg b/xpi/tree.svg new file mode 100644 index 0000000..2a22beb --- /dev/null +++ b/xpi/tree.svg @@ -0,0 +1,468 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + bibliography + book + book + title + author + author + year + publisher + title + author + year + publisher + "Foundations of Databases" + "Abiteboul" + "Hull" + "Vianu" + "Addison Wesley" + "1995" + + + + + + + "The Lord of the Rings" + "J. R. R. Tolkien" + "Houghton Mifflin" + "2001" + + + + + #document + + author + + diff --git a/xpi/xpi_02.xhtml b/xpi/xpi_02.xhtml new file mode 100644 index 0000000..ce4fa3d --- /dev/null +++ b/xpi/xpi_02.xhtml @@ -0,0 +1,386 @@ + + + + + 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

+ +
+ +