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

XML et Programmation Internet

-

Cours 4

-
kn@lri.fr -
-

Namespaces

-
-

Utilisation des namespaces

-

Problème : comment mélanger au sein d'un même document des - balises venant de deux DTDs (ou schémas) différentes - ?
Exemple : mettre du SVG (images vectorielles) dans - du XHTML (page web)

- - - - ]]> - - - Mon image - - -

Une image

- - - - - ]]> -
-

Comment spécifier que certains éléments doivent êtres - interprétés ? (par exemple par le navigateur web) et que - d'autres font parties des données ?

-
-
-

L'attribut xmlns

-

On peut utiliser un attribut spécial, xmlns - qui est autorisé dans tous les documents XML - sur n'importe quel élément. La valeur de ce dernier est - un lien identifiant la DTD et indique tous les descendants de - l'élément en question sont valides par rapport à la - DTD.
Exemple: -

- xmlns="http://www.w3.org/1999/xhtml" - Mon image - -

Mon image

- xmlns="http://www.w3.org/2000/svg" - - - - - ]]> -
- -
-
-

L'attribut xmlns

-

On peut aussi donner un nom à un namespace particulier - et réutiliser ce nom dans les balises:

- xmlns="http://www.w3.org/1999/xhtml" - xmlns:svg="http://www.w3.org/2000/svg" - Mon image - -

Mon image

- - - - ]]>
-

en utilisant l'attribut xmlns:toto="..." alors toutes la - balises de la forme <toto:nombalise> appartiennent au - namespace toto. Il ne faut pas oublier le namespace sur la - balise fermante !

-
-
-

Digression

-

L'exemple précédent ressemble à ça :

-
-

Mon image

- - - -
-
-

XSLT, principes

-
-

XSLT

-

eXtensible Stylesheet Language Transformations : est - un langage de transformation de documents XML. Il permet - d'extraire (au moyen d'XPath) des nœuds d'un document d'entrée - et de les ré-organiser et de les copier dans un document de - sortie. - Le document de sortie est souvent du XML lui-même mais peut - être aussi du texte, du PDF, … -

- -
-
-

Un exemple simple

-

On réutilise un document de recette de cuisine - du cours 01. La DTD est:

- - - - - - - - - -]]> -
-
-

Un exemple simple (suite)

-

Un document valide par rapport à la DTD est le suivant

- - -Tiramisú - - mascarpone - oeufs - sucre - café - biscuits - -2h - - Séparer les blancs des jaunes - … - … - - -]]> -
-
-

Un exemple simple (suite)

-

On va extraire des informations du document et en faire une - page web :

- - - - - Ingrédients du ]]><u><xsl:value-of select="descendant::title" /></u><![CDATA[ - - -

Ingrédients du ]]><xsl:value-of select="descendant::title" /> -

-
-

Comment exécuter un programme XSLT

- -
-
-

Structure d'un programme XSLT

-

Un programme XSLT commence par la balise :]]> -et fini par la balise : ]]> -Le texte ainsi que les éléments qui ne sont pas dans - le namespace « xsl: » sont copiés à - l'identique dans la sortie.
- Dans la balise principale <xsl:stylesheet> on trouve - un certain nombre de balises <xsl:template match="…" - >.
- Les templates vont jouer le rôle de fonctions et vont être - appelées pour transformer des nœuds du document en nœuds de sortie. -

-
-

Les templates XSLT

-
-

Templates

-

Un template est délimité par une balise <xsl:template match="…" - > où le « â€¦ Â» est une expression XPath. Il peut y avoir - plusieurs templates dans un fichier XSLT.
- Un template est appliqué à un ensemble de nœuds. Parmi cet - ensemble, tous les nœuds qui vérifient l'expression XPath de - l'attribut match sont passés en argument au template.
- Initialement, tous les templates existants sont appliqués au nœud - fictif document. -

-
-
-

Retour sur l'exemple

- - - - - Ingrédients du ]]><u><xsl:value-of select="descendant::title" /></u><![CDATA[ - - -

Ingrédients du ]]><xsl:value-of select="descendant::title" /> -

-
-

Deuxième exemple, 2 templates

-

- - - - - Ingrédients du ]]><u><xsl:value-of select="descendant::title" /></u><![CDATA[ - - -

Ingrédients du ]]><xsl:value-of select="descendant::title" /> -

-
-

Priorité des templates

-

Que se passe-t-il si deux templates peuvent s'appliquer à un même - élément ? On applique les règles de priorité suivantes - (simplifiées) : -

-
    -
  1. Si le match d'un template contient un | entre - plusieurs chemins, la priorité la plus élevée de ces chemins est choisie -
  2. -
  3. si le match est de la forme : child::foo - ou attribute:foo, sa priorité est 0
  4. -
  5. si le match est de la forme : child::* ou - ou attribute:*, sa priorité est -0.25
  6. -
  7. si le match est de la form : child::text() - ou child::node() (idem avec attribute), sa - priorité est -0.5
  8. -
  9. sinon (test complexe, par exemple foo[ count(child::bar) < - 4]), la priorité est 0.5
  10. -
-

Le template ayant la priorité la plus élevée est choisi. On peut - donner explicitement à un template une priorité avec - l'attribut priority="…"
Le moteur XSLT lève une - erreur d'exécution si deux templates ont exactement la même - priorité.

-
-
-

Templates par défaut

-

Il existe 3 templates par défaut qui sont toujours - définis :

- - - - - - - - - -]]> - -

Ils ont des priorités inférieures aux templates présents dans le - fichier donc ne sont appliqués - que si aucun templates ne fonctionne. Ils permettent de « descendre - dans l'arbre » (jusqu'aux textes), si aucun template ne s'applique à - la racine. -

-
- -