Upload
others
View
12
Download
1
Embed Size (px)
Citation preview
Axe Ingénierie des Systèmes d’Informations
Gestion de documents électroniques
(et le travail collaboratif assisté par ordinateur)
Philippe [email protected]
23 octobre 2006
23 octobre 2006 Axe ISI2
Emploi du temps (version 2.1)● Jeudi 21 septembre 2006 matin
● Cours : généralités et CVS● Vendredi 22 septembre 2006 matin
● TP : CVS● Jeudi 28 septembre 2006 matin
● TP : CVS sous eclipse● Cours : XML 1
● Lundi 23 octobre 2006 matin● Cours : XML 2● TP : XML 1
● Jeudi 26 octobre 2006 matin● TP : XML (un autre TP suivra, en accord avec Laurent Vercouter)
● Jeudi 14 décembre 2006 matin● Conférence : aspects juridiques du document numérique (présence
active requise)
23 octobre 2006 Axe ISI3
plan● XML : généralités, exemples, syntaxe● Validation : DTD● Namespaces● Une application XML : XHTML● CSS : Cascading Style Sheets● XSL-T : Transformations● XSL-FO : Formatting Objects● XPaths● XLinks, XPointers● XML-Schemas
23 octobre 2006 Axe ISI4
XML : validation
● DTD : Document Type Definition
● DTD : permet de fournir un ensemble formel de règles pour définir la structure d'un document
● Par exemple en XHTML : un élément li ne peut se trouver qu'en fils de ul ou ol.
● Un document XML sera valide s'il est bien formé et s'il respecte sa DTD.
23 octobre 2006 Axe ISI5
XML : DTD● Une DTD est composée de déclarations● Principe : tout ce qui n'est pas autorisé est interdit● Que fait le validateur en cas d'invalidité ? Rejet ? Arrêt ?
Ignorance ? ...● Le document XML doit contenir une référence à sa DTD :
<?xml version="1.0" standalone="no"?>
<!DOCTYPE person SYSTEM "http://www.cafeconleche.org/dtds/person.dtd">
<person> <name> <first_name>Alan</first_name> <last_name>Turing</last_name> </name> <profession>computer scientist</profession> <profession>mathematician</profession> <profession>cryptographer</profession></person>
23 octobre 2006 Axe ISI6
DTD : exemple
<!ELEMENT first_name (#PCDATA)><!ELEMENT last_name (#PCDATA)><!ELEMENT profession (#PCDATA)><!ELEMENT name (first_name, last_name)><!ELEMENT person (name, profession*)>
Avec cette DTD, l'exemple précédent serait valide :
Dans une DTD, l'ordre des déclarations est quelconque
Les exemples suivants ne sont pas valides pour cette DTD
23 octobre 2006 Axe ISI7
DTD : exemples non valides
<person> <profession>computer scientist</profession> <profession>mathematician</profession> <profession>cryptographer</profession></person>
<person> <profession>computer scientist</profession> <name> <first_name>Alan</first_name> <last_name>Turing</last_name> </name> <profession>mathematician</profession> <profession>cryptographer</profession></person>
23 octobre 2006 Axe ISI8
DTD : exemples non valides<person> <name> <first_name>Alan</first_name> <last_name>Turing</last_name> </name> <profession>mathematician</profession> <profession>cryptographer</profession> <publication>On Computable Numbers...</publication></person>
<person> <name> <first_name>Alan</first_name> <last_name>Turing</last_name> </name> was a <profession>computer scientist</profession>, a <profession>mathematician</profession>, and a <profession>cryptographer</profession></person>
23 octobre 2006 Axe ISI9
DTD : déclarations internes
<?xml version="1.0"?>
<!DOCTYPE person [ <!ELEMENT person (name, profession*)> <!ELEMENT first_name (#PCDATA)> <!ELEMENT last_name (#PCDATA)> <!ELEMENT profession (#PCDATA)> <!ELEMENT name (first_name, last_name)>]>
<person> <name> <first_name>Alan</first_name> <last_name>Turing</last_name> </name> <profession>computer scientist</profession> <profession>mathematician</profession> <profession>cryptographer</profession></person>
bien fo
rmé
et valid
e
23 octobre 2006 Axe ISI10
DTD : la déclaration
<!DOCTYPE person SYSTEM "http://www.cafeconleche.org/dtds/person.dtd">
élément racine
<!DOCTYPE rss PUBLIC "//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss0.91.dtd">
Public ID
<!DOCTYPE person SYSTEM "/dtds/person.dtd">
<!DOCTYPE person SYSTEM "person.dtd">
annonce une Public IDavec URI de secours
23 octobre 2006 Axe ISI11
DTD : déclaration semi-interne
<!DOCTYPE person SYSTEM "name.dtd" [ <!ELEMENT profession (#PCDATA)> <!ELEMENT person (name, profession*)>]>
internal DTD subset
external DTD subset
ATTENTION : ces 2 sous-ensemblesdoivent être compatibles et l'un ne doitpas redéfinir un élément de l'autre.Sinon : problème.Néanmoins des déclarations d'entitéspeuvent être refaites, mais ... !
23 octobre 2006 Axe ISI12
DTD : dans le détail (1)● Éléments : forme générale =
<!ELEMENT element_name content_specification>● Contenu = données textuelles uniquement :
<!ELEMENT phone_number (#PCDATA)>● Contenu = un seul fils :
<!ELEMENT fax (phone_number)>● Contenu = séquence ordonnée :
<!ELEMENT name (first_name , last_name)>● Contenu : nombre de fils :
<!ELEMENT name (f_name+ , m_name* , l_name?)>
23 octobre 2006 Axe ISI13
DTD : dans le détail (2)
● Contenu = au choix :<!ELEMENT method (params | fault | #PCDATA)>
● Contenu = combinaison :<!ELEMENT circle (center, (radius|diameter))>
● Contenu = mixte :<!ELEMENT definition (#PCDATA | term)* >
exemple :
<definition>The <term>Turing Machine</term> is an abstract finite state automaton with infinite memory that can be proven equivalent to any any other finite state automaton with arbitrarily large memory.</definition>
23 octobre 2006 Axe ISI14
DTD : dans le détail (3)
● Contenu = n'importe quoi :<!ELEMENT page ANY >
● Les attributs :<!ATTLIST image source CDATA #REQUIRED width CDATA #REQUIRED height CDATA #REQUIRED alt CDATA #IMPLIED >
élément
obligatoire
optionneldonnée textuelle
23 octobre 2006 Axe ISI15
DTD : dans le détail (4)● Contenu des attributs :
● CDATA donnée textuelle● NMTOKEN name token● NMTOKENS un ou plusieurs name token● Enumeration ( 1 | 2 | toto )● ENTITY cf. déclaration ENTITY● ENTITIES plusieurs ENTITY● ID un nom unique dans le doc XML● IDREF l'attribut ID d'un autre élément● IDREFS plusieurs IDREF● NOTATION cf. déclaration NOTATION
23 octobre 2006 Axe ISI16
DTD : dans le détail (5)
● Attributs : complément de déclarations● #IMPLIED attribut optionnel● #REQUIRED attribut obligatoire● #FIXED (valeur imposée) :
<!ATTLIST biography xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">
● Valeur par défaut :
<!ATTLIST web_page protocol NMTOKEN "http">
23 octobre 2006 Axe ISI17
DTD : dans le détail (6)● Déclaration d'entités générales :
<!ENTITY super "supercalifragilisticexpialidocious">
puis utilisation de &super dans le doc XML
● Entités de paramètres :
<!ENTITY % residential_content "address, footage, rooms, baths"><!ENTITY % rental_content "rent">
<!ELEMENT apartment (%residential_content;, %rental_content;)><!ELEMENT sublet (%residential_content;, %rental_content;)>
et plein d'autres choses à découvrir ...
23 octobre 2006 Axe ISI18
plan● XML : généralités, exemples, syntaxe● Validation : DTD● Namespaces● Une application XML : XHTML● CSS : Cascading Style Sheets● XSL-T : Transformations● XSL-FO : Formatting Objects● XPaths● XLinks, XPointers● XML-Schemas
23 octobre 2006 Axe ISI19
XML : namespaces
● Problématique :● Distinction entre élements et/ou attributs en provenance
de plusieurs vocabulaires● Regroupement d'éléments et attributs d'une même
application XML
● Solution :● Associer un préfixe à chaque élément et attribut● Moyen : avec un attribut xmlns:prefixe
23 octobre 2006 Axe ISI20
Namespaces : utilité● Un document XML peut par exemple utiliser des
balises de XHTML, de SVG et de MathML● Comment les distinguer si elles ont un même nom ?
<painting> <title>Memory of the Garden at Etten</title> <artist>Vincent Van Gogh</artist> <date>November, 1888</date> <description> Two women look to the left. A third works in her garden. </description></painting> <RDF>
<Description about="http://www.cafeconleche.org/examples/impressionists.xml"> <title> Impressionist Paintings </title> <creator> Elliotte Rusty Harold </creator> <description> A list of famous impressionist paiintings organized by painter and date </description> <date>20000822</date> </Description></RDF>
Dublin Core
RDF
23 octobre 2006 Axe ISI21
Namespaces : solution
<rdf:RDF xmlns:rdf="http://www.w3.org/TR/RECrdfsyntax#">
<rdf:Description xmlns:dc="http://purl.org/dc/" about="http://www.cafeconleche.org/examples/impressionists.xml"> <dc:title> Impressionist Paintings </dc:title> <dc:creator> Elliotte Rusty Harold </dc:creator> <dc:description> A list of famous impressionist paintings organized by painter and date </dc:description> <dc:date>20000822</dc:date>
</rdf:Description> </rdf:RDF>
L'URI ne pointe pas nécessairement vers un document
23 octobre 2006 Axe ISI22
Namespace par défaut
<?xml version="1.0"?><html xmlns="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink">
<head><title>Three Namespaces</title></head> <body> <h1 align="center">An Ellipse and a Rectangle</h1> <svg xmlns="http://www.w3.org/2000/svg" width="12cm" height="10cm"> <ellipse rx="110" ry="130" /> <rect x="4cm" y="1cm" width="3cm" height="6cm" /> </svg> <p xlink:type="simple" xlink:href="ellipses.html"> More about ellipses </p> <p xlink:type="simple" xlink:href="rectangles.html"> More about rectangles </p> <hr/> <p>Last Modified May 13, 2000</p> </body></html>
23 octobre 2006 Axe ISI23
Namespaces : par déclaration d'attribut
● Possibilité de ne pas spécifier l'attribut xmlns dans tous les éléments svg d'un document
<!ATTLIST svg xmlns CDATA #FIXED "http://www.w3.org/2000/">
RAPPEL :L'URI ne pointe pas nécessairement vers un document
23 octobre 2006 Axe ISI24
plan● XML : généralités, exemples, syntaxe● Validation : DTD● Namespaces● Une application XML : XHTML● CSS : Cascading Style Sheets● XSL-T : Transformations● XSL-FO : Formatting Objects● XPaths● XLinks, XPointers● XML-Schemas
23 octobre 2006 Axe ISI25
de HTML à XHTML (1)
● Pour que le document soit bien formé :● Ajouter les balises fermantes qui manquent (</p>, </li>,
...) et corriger les éléments vides● Supprimer les entrelacements ● Quoter les valeurs d'attributs (<p align="center">)● Ajouter une valeur à certains attributs booléens
raccourcis● Remplacer les & et < par des appels d'entités● Vérifier qu'il n'y a qu'un seul élément racine <html>● Corriger les commentaires (<!-- blabla -->)● Spécifier l'encodage (in déclaration xml)
23 octobre 2006 Axe ISI26
de HTML à XHTML (2)
● Pour que le document soit valide :● Ajouter la déclaration DOCTYPE● Changer tous les éléments et attributs en minuscules● Enlever les éléments non standards● L'élément racine doit être html● Etc.
● 3 DTD sont disponibles :● Strict : recommandé● Transitional : accepte certains éléments dépréciés● Frameset : transitional + les frames
23 octobre 2006 Axe ISI27
XHTML : quel rendu à l'écran ?
● Les navigateurs ne peuvent pas afficher n'importe quel document XML (problème de sémantique)
● Pour cela : les Cascading Style Sheet (CSS)● Dans le XHTML : une instruction de traitement ; par exemple
<?xmlstylesheet href="http://www.cafeconleche.org/style/titus.css" type="text/css" media="tv, projection, print"?>
href et type : obligatoires media : screen | tty | tv | projection |handled | print | braille | aural | all
Autres pseudo-attributs : charset et alternate/title
23 octobre 2006 Axe ISI28
XHTML : pourquoi ?
● Un standard : rigueur et donc garantie de prise en compte des balises
● Un standard : permet de bénéficier des outils XML (valideur par exemple)
● Séparation du contenu et du rendu (CSS)● Peut être combiné avec d'autres namespaces● Il est modulaire, et eXtensible ...
23 octobre 2006 Axe ISI29
plan● XML : généralités, exemples, syntaxe● Validation : DTD● Namespaces● Une application XML : XHTML● CSS : Cascading Style Sheets● XSL-T : Transformations● XSL-FO : Formatting Objects● XPaths● XLinks, XPointers● XML-Schemas
23 octobre 2006 Axe ISI30
CSS
● But : afficher du XML à un utilisateur● Inconvénient : syntaxe non-XML (cf. XSL-FO)● CSS ne transforme pas le document : il le
présente presque comme il est en XML● CSS = une liste d'éléments auxquels appliquer
un style de rendu● Syntaxe simple
23 octobre 2006 Axe ISI31
CSS : un exemple/* Defaults for the entire document */recipe {fontfamily: "New York", "Times New Roman", serif; fontsize: 12pt }
/* Make the dish look like a headline */dish { display: block; fontfamily: Helvetica, Arial, sansserif; fontsize: 20pt; fontweight: bold; textalign: center}
/* A bulleted list */ingredient {display: listitem; liststyleposition: inside }
/* Format these two items as paragraphs */directions, story { display: block; margintop: 12pt; marginleft: 4pt}
23 octobre 2006 Axe ISI32
CSS : sélecteurs
● Pour tous les éléments qui n'ont rien de plus précis :* {fontsize: large}
● Pour la descendance uniquement :ingredients quantity {fontsize: medium}
● Pour la descendance immédiate uniquement :ingredients > quantity {fontsize: medium}
● Héritage :ingredients quantity {fontsize: inherit}
● Selon des valeurs d'attributs, etc.
23 octobre 2006 Axe ISI33
CSS : propriétés d'affichage
● Sous forme de listes● Sous formes de tableaux● Réglage des polices● Réglage de l'alignement● Réglage des couleurs● Réglage de l'indentation● Et pleins d'autres choses ...
23 octobre 2006 Axe ISI34
plan● XML : généralités, exemples, syntaxe● Validation : DTD● Namespaces● Une application XML : XHTML● CSS : Cascading Style Sheets● XSL-T : Transformations● XSL-FO : Formatting Objects● XPaths● XLinks, XPointers● XML-Schemas
23 octobre 2006 Axe ISI35
XSL-T : transformations
● XSL = eXtensible Stylesheet Language● XSL-T : transformations● XSL-FO : formattage d'objets
● XSL-T = application XML = {templates}● XSL-T processor : compare les éléments et autres
sommets d'un document XML, avec les templates ; et s'il y a correspondance (matching) alors il écrit le template en sortie. Il rend un nouveau document (éventuellement XML).
23 octobre 2006 Axe ISI36
XSL-T : exemple minimal
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
</xsl:stylesheet>
Racine usuelle (ou alors xsl:transform)
namespace
version
Cette XSL-T ne transforme rien : ellerend tous les éléments (sans attributs)
23 octobre 2006 Axe ISI37
XSL-T : exemple <?xml version="1.0"?><people> <person born="1912" died="1954"> <name> <first_name>Alan</first_name> <last_name>Turing</last_name> </name> <profession>computer scientist</profession> <profession>mathematician</profession> <profession>cryptographer</profession> </person> <person born="1918" died="1988"> <name> <first_name>Richard</first_name> <middle_initial>P</middle_initial> <last_name>Feynman</last_name> </name> <profession>physicist</profession> <hobby>Playing the bongoes</hobby> </person></people>
<?xml version="1.0" encoding="utf8"?> Alan Turing computer scientist mathematician cryptographer Richard P Feynman physicist Playing the bongoes
avec la XSL-T minimale
Pas du XML ! pourquoi ?
23 octobre 2006 Axe ISI38
XSL-T : processeurs
● Ce sont soit :● Des programmes à part entière (xalan, saxon, ...)● Des packages Java● Du coté serveur (cf. Apache par exemple)● Ou dans un navigateur : spécifier où est la stylesheet :
<?xml version="1.0"?><?xmlstylesheet type="application/xml" href="http://www.oreilly.com/styles/people.xsl"?><people> ...
23 octobre 2006 Axe ISI39
XSL-T : template rules
● Chaque règle est un élément xsl:template● L'attribut d'appariement est un Xpath (cf plus loin)
<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="person"><p>A Person</p></xsl:template>
</xsl:stylesheet>
entréesortie
<?xml version="1.0" encoding="utf8"?>
<p>A Person</p>
<p>A Person</p>
23 octobre 2006 Axe ISI40
XSL-T : calcul de valeur
<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="person"> <p> <xsl:valueof select="name"/> </p> </xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="utf8"?> <p> Alan Turing </p> <p> Richard P Feynman </p>
23 octobre 2006 Axe ISI41
XSL-T : calcul de valeur
<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="people"> <p> <xsl:valueof select="name"/> </p> </xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="utf8"?> <p> </p>
?
23 octobre 2006 Axe ISI42
XSL-T : valeur d'un noeud
23 octobre 2006 Axe ISI43
XSL-T : apply-templates<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="name"> <xsl:valueof select="last_name"/>, <xsl:valueof select="first_name"/> </xsl:template>
<xsl:template match="person"> <xsl:applytemplates select="name"/> </xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="utf8"?> Turing, Alan
Feynman, Richard
Sans ça il aurait aussi sortiprofessions, et hobbies
ordrequelconque
23 octobre 2006 Axe ISI44
XSL-T : apply-templates<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="name"> <xsl:valueof select="last_name"/>, <xsl:valueof select="first_name"/> </xsl:template>
<xsl:template match="person"> <balise> <xsl:applytemplates /> </balise> </xsl:template>
</xsl:stylesheet>
ordrequelconque
<?xml version="1.0"?> <balise> Turing, Alan computer scientist mathematician cryptographer </balise>
<balise> Feynman, Richard physicist Playing the bongoes </balise>
23 octobre 2006 Axe ISI45
XSL-T : for-each<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="people"> <balise> <xsl:valueof select="person"/> </balise> </xsl:template></xsl:stylesheet>
<?xml version="1.0"?><balise> Alan Turing computer scientist mathematician cryptographer</balise>
Le premier élémentseulement est choisi
23 octobre 2006 Axe ISI46
XSL-T : for-each<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="people"> <xsl:foreach select="person"> <balise> <xsl:valueof select="."/> </balise> </xsl:foreach> </xsl:template></xsl:stylesheet>
Tous les éléments fils « person » sont traités
23 octobre 2006 Axe ISI47
XSL-T : appariement de noeuds
● Noeud racine : <xsl:template match="/">● comportement par défaut surchargeable
● Appariement autre que les fils immédiats :● ex : <xsl:template match="/people/*/name">
● Appariement d'un descendant de niveau quelconque :● ex : <xsl:template match="/people//name">● ex : <xsl:template match="//name">
23 octobre 2006 Axe ISI48
XSL-T : appariement de noeuds
● Appariement par ID :● ex : <xsl:template match="id('toto')">
● Appariement d'un commentaire :● ex : <xsl:applytemplates select="comment()">● puis : <xsl:template match="comment()"> <xsl:comment> <xsl:valueof select="."/> </xsl:comment> </xsl:template>● ou directement xsl:valueof select="comment()"
23 octobre 2006 Axe ISI49
XSL-T : pour sortir du HTML
<xsl:template match="people"> <html> <head><title>Famous Scientists</title></head> <body>
<xsl:applytemplates select="person"/>
</body> </html></xsl:template> <html>
<head><title>Famous Scientists</title></head><body> <p>Turing, Alan</p> <p>Feynman, Richard</p></body></html>
En ajoutant cette règle :
Et c'est du HTML.Pourquoi ?
23 octobre 2006 Axe ISI50
XSL-T : et les attributs ?● Par défaut les attributs ne sont pas atteints
<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="people"> <html> <head><title>Famous Scientists</title></head> <body> <dl> <xsl:applytemplates/> </dl> </body> </html> </xsl:template> <xsl:template match="person"> <dt><xsl:applytemplates select="name"/></dt> <dd><ul> <li>Born: <xsl:applytemplates select="@born"/></li> <li>Died: <xsl:applytemplates select="@died"/></li> </ul></dd> </xsl:template></xsl:stylesheet>
23 octobre 2006 Axe ISI51
XSL-T : à découvrir
● Plein d'autres choses, bien évidemment(named templates, numbering and sorting
output elements, conditional processing, iteration, extension elements and functions, importing other stylesheets, ...)
● Un outil très puissant, très facile à utiliser
● À vous de découvrir ...
23 octobre 2006 Axe ISI52
plan● XML : généralités, exemples, syntaxe● Validation : DTD● Namespaces● Une application XML : XHTML● CSS : Cascading Style Sheets● XSL-T : Transformations● XSL-FO : Formatting Objects● XPaths● XLinks, XPointers● XML-Schemas
23 octobre 2006 Axe ISI53
XSL-FO : en bref
● C'est une application XML qui permet de représenter des informations dans des pages, des blocs de texte, des graphiques, ...
● Ne pas écrire du XSL-FO directement, mais le faire faire par du XSL-T ! Puis c'est transformable en Tex, en PDF, ... (cf. T.P.)
23 octobre 2006 Axe ISI54
An XSLT to XSL-FO transform
<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:template match="/"> <fo:root> <fo:layoutmasterset> <fo:simplepagemaster marginright="1in" marginleft="1in" marginbottom="1in" margintop="1in" pagewidth="8.5in" pageheight="11in" mastername="first"> <fo:regionbody/> </fo:simplepagemaster> </fo:layoutmasterset> <fo:pagesequence masterreference="first"> <fo:flow flowname="xslregionbody"> <xsl:applytemplates/> </fo:flow> </fo:pagesequence> </fo:root> </xsl:template> <xsl:template match="dish|ingredient|directions|story"> <fo:block><xsl:applytemplates/></fo:block> </xsl:template></xsl:stylesheet>
23 octobre 2006 Axe ISI55
plan● XML : généralités, exemples, syntaxe● Validation : DTD● Namespaces● Une application XML : XHTML● CSS : Cascading Style Sheets● XSL-T : Transformations● XSL-FO : Formatting Objects● XPaths● XLinks, XPointers● XML-Schemas
23 octobre 2006 Axe ISI56
XPath : qu'est-ce ?
● C'est un langage non-XML● Permet de désigner un sommet par position,
postion relative, type, contenu, ...● Ils utilisent XPath : XPointer, XSL-T, XML-S,
XForms, ...● XPath représente des nombres, des chaines de
caractères et des booléens● Il permet des calculs simples (arithmétique,
manipulation de chaines, ...)
23 octobre 2006 Axe ISI57
XPath : rapidement
● Un document XML = un arbre● Le but : en extraire certains sommets● Pour XPath il y a 7 types de sommets :
● racine du document, élément, texte, attribut, commentaire, instruction de traitement, espace de noms
● Attention : XPath intervient après instantiation des CDATA, appel d'entités et déclarations.
● XPath n'atteint pas les déclarations XML, les DOCTYPE et les contenus des DTD
23 octobre 2006 Axe ISI58
XPath : les localisations
<xsl:template match="/"> <html><xsl:applytemplates/></html></xsl:template>
racine du document
<xsl:template match="person"> <xsl:valueof select="name"/></xsl:template>
le fils name
<xsl:template match="comment( )"> <i>Comment Deleted</i></xsl:template>
les commentaires
<xsl:template match="person"> <attributes><xsl:applytemplates select="@*"/></attributes></xsl:template>
et là ??
23 octobre 2006 Axe ISI59
XPath : calculs simples
<xsl:template match="person"> <century> <xsl:valueof select="(@born (@born mod 100)) div 100"/>th </century></xsl:template>
il sortira quoi ??
<xsl:template match="profession">
<xsl:if test=".='computer scientist' or .='physicist'">
<xsl:valueof select="."/>
</xsl:if>
</xsl:template>
23 octobre 2006 Axe ISI60
XPath : tests simples
<xsl:template match="person"> <century> <xsl:applytemplates select="name[middle_initial]"/> </century></xsl:template>
Ne pas confondre avec "name/middle_initial"
23 octobre 2006 Axe ISI61
plan● XML : généralités, exemples, syntaxe● Validation : DTD● Namespaces● Une application XML : XHTML● CSS : Cascading Style Sheets● XSL-T : Transformations● XSL-FO : Formatting Objects● XPaths● XLinks, XPointers● XML-Schemas
23 octobre 2006 Axe ISI62
XLinks, XPointers
● XLinks : pour faire des liens entre documents XML (comme <A ... en HTML)
● XPointers : syntaxe non-XML pour désigner des endroits d'un documents XML (à découvrir)
23 octobre 2006 Axe ISI63
XLinks
<novel xmlns:xlink= "http://www.w3.org/1999/xlink" xlink:type = "simple" xlink:href = "ftp://archive.org/pub/etext/etext93/wizoz10.txt">
<title>The Wonderful Wizard of Oz</title> <author>L. Frank Baum</author> <year>1900</year>
</novel>
Permet de créer des liens plus complexes (extended, locator,arc, title, ressource) ; mais quelle sémantique ?
Permet aussi de spécifier le comportement (ouverture,remplacement, encapsulé, ... )
23 octobre 2006 Axe ISI64
plan● XML : généralités, exemples, syntaxe● Validation : DTD● Namespaces● Une application XML : XHTML● CSS : Cascading Style Sheets● XSL-T : Transformations● XSL-FO : Formatting Objects● XPaths● XLinks, XPointers● XML-Schemas
23 octobre 2006 Axe ISI65
XML-Shemas
● Ça vient en remplacement des DTD● Les DTD sont plus anciennes, plus utilisées● Les DTD ne sont pas en XML, les XML-S
sont en XML● Dans les DTD on ne peut pas typer les données,
dans XML-S on le peut● D’autres défauts techniques des DTD ont été
comblés dans XML-S
23 octobre 2006 Axe ISI66
XML-S : exemple simplissime
<?xml version="1.0"?>
<xsd:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsd:element name="fullName" type="xs:string"/>
</xsd:schema>
23 octobre 2006 Axe ISI67
XML-S : restriction
<?xml version="1.0"?>
<xsd:simpleType name="myInteger"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="10000"/> <xsd:maxInclusive value="99999"/> </xsd:restriction></xsd:simpleType>
23 octobre 2006 Axe ISI68
XML-S : type complexe
<?xml version="1.0"?>
<xsd:element name="internationalPrice"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:decimal"> <xsd:attribute name="currency" type="xsd:string"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element>
23 octobre 2006 Axe ISI69
XML-S : type complexe
<?xml version="1.0"?>
<complexType name="PurchaseOrderType"> <sequence> <element name="shipTo" type="po:USAddress"/> <element name="billTo" type="po:USAddress"/> <element ref="po:comment" minOccurs="0"/> <! etc. > </sequence> <! etc. > </complexType>