Académique Documents
Professionnel Documents
Culture Documents
Maodo DIOP
Enseignant-Chercheur, Consultant en Ingnierie Logicielle & Administrateur Rseaux dmaodo@{gmail,yahoo}.com
Maodo DIOP Enseignant Chercheur Consultant 1
Plan General
Donnes semi-structures Modle de document Typages des donnes Feuilles de style Requtes et liens
Donnes semistructures
Plan
XML SAX
XML : dfinitions
Mtalangage soit un langage pour crire d'autres langages base de langages modeles eXtensible Markup Language : langage de balise, extensible c-a-d pas de balises predefinies ; loisir de crer ses propres balises Cre pour structurer de l'information contrairement HTML pour afficher et rien d'autres
Tout document XML doit comporter une racine. Les noms peuvent contenir des lettres, des chiffres ou d'autres Les noms ne peuvent dbuter par un nombre ou un signe de ponctuation. Les noms ne peuvent commencer par les lettres xml (ou XML ou Xml...) Les noms ne peuvent contenir des espaces. La longueur des noms est libre mais on conseille de rester raisonnable On vitera certains signes qui pourraient selon les logiciels, prter confusion comme "-", ";", ".", "<", "> Les caractres spciaux pour nous francophones comme , , , , sont priori permis mais pourraient tre mal interprts par certains programmes
Maodo DIOP Enseignant Chercheur Consultant 6
XML : concept
Marque de dbut et fin permettant de reprer un lment textuel Syntaxe: <nombalise> de dbut, </nombalise> de fin Texte encadr par une balise de dbut et une de fin Les lments de donnes peuvent tre imbriques <etudiant> <nom> Moussa </nom> <prenom>Faye</prenom> <matricule> LP2502011 </ matricule > </etudiant> Doublet nom="valeur" qualifiant une balise <licence type="professional" year="2011" semestre="second">
Maodo DIOP Enseignant Chercheur Consultant
Attribut
Les balises sont sensibles la casse (majuscules et minuscules) Toute balise ouverte doit imprativement tre ferme. Les balises doivent tre correctement imbriques. Les valeurs des attributs doivent toujours tre mises entre des guillemets Les commentaires suivent la syntaxe HTML
10
11
13
Contexte: Comment mixer des tags issus de differents models de langage sans XML sans problmes ? Comment garantir quil n y a pas de conflit entre les tags ? Solution Utilisation de namespace dont la syntaxe est xmlns:valeur o valeur est lURL ou URI du namespace Similaire aux packages en Java ou la notion de module pour Pascal ou Delphi Namespace = Identifiant UNIQUE Exemple <tag xmlns:ucad="http://www.ucad.sn/Coud", xmlns:ugb="http://www.ugb.sn/Crous"><ucad:etudiant> <nom>Moussa</nom><prenom>FAYE</prenom> </ucad:etudian> <ugb:etudiant >Moussa Faye </ugb:etudiant >
Maodo DIOP Enseignant Chercheur Consultant 14
XML
etudiant
etudiant
nom Moussa
prenom Faye
matricule LP2502011
nom Demba
prenom Sarr
matricule LP3502011
15
Lorsquun element dans un arbre ne possede que des enfants qui sont des elements, on parle de contenu element Quand un element possde, et des donnes et dautres elements, on parle de contenu mixte Enfin, lorsquun lement ne possde que des donnes ,alors on parle de lui comme un lement simple. Les attributs XML compars des variables dont la valeur permet de preciser une balise
16
Ou Bien balises correctement imbriques analysable (parsable) et manipulable pas ncessairement valide par rapport au jargon
17
Document bien form (Well Formed Document) balises correctement imbriques analysable (parsable) et manipulable pas ncessairement valide par rapport au jargon (DTD ou XML Schems) Document valide (Valid Document) bien form + conforme la DTD ou au schma
Introduction
18
Equivalence BD et XML
Le nom de la table peut correspondre la racine du document XML Chaque ligne de la table est un element XML Chaque colonne (valeur) de la ligne peut tre un PCDATA ou une proprit dun lment. Outils de mapping :
J2EE : Hibernate , Castor etc .Net : Nhibernate etc PHP : Doctrine, Propel etc
Introduction
19
Plan
XML SAX
20
uvre de Peter Murray-Rust,David Megginson et Tim Bray Simple API for XML : une API simple pour ragir sur le contenu et la structure dun document. Le document est vu comme une suite dvnements qui surviennent lors de la lecture squentielle du document SAX repose sur un systme devenements. Ainsi lorsquun parseur lit un fichier XML, il emet des informations en direction dun ou plusieurs handlers (gestionnaires). Ces gestionnaires sont cres par des applications. Par exemple, lorsque le parseur rencontre une balise, la methode startElement() du gestionnaire du document se voit invoque. Reception des informations au goutte goutte dans lordre de lecture : generation complique pour des structures omplexes Propose un API de bas niveau,efficace et delicat mettre en uvre manuellement pour des structures non complexes. Implementation facilite par les interfaces proposes par SAX Pour des documents lourds ( des mega-octest) utiliser SAX est plus conseill que DOM qui cre lobjet en mmoire : trop de temps,encombrements de la mmoire
Maodo DIOP Enseignant Chercheur Consultant
21
SAX : Fonctionnement
Principe
Un document est transform en un flux dvnements syntaxiques (balise ouvrante, fermante ) A chaque vnement, un callback est appel dans lordre dapparition dans le document Aucune mmoire Une application est un couteur dvnements Parcours prfix en profondeur de larbre Lecture seule
22
SAX Parser
23
24
API SAX
25
Gere les evenements lis au document : debut de tag, fin de tag, etc.
XML
XML Reader
2) 3)
Ouverture du fichier Lecture des parties significatives du fichier Cas possible 1) Document mal form ou non valide par rapport son DTD ou son schma , appel dune mthode de linterface ErrorHandler 2) Reference une entit trouve, faire appel une methode de linterface de EntiyResolver 3) Composant DTD trouv, , faire appel une methode de linterface de DTDHandler 4) Balise rencontre; du texte etc, faire appel une mthode de linterface ContentHandler
Si le document nest pas terminer, retour au 2
Maodo DIOP Enseignant Chercheur Consultant
5)
27
org.xml.sax.XMLReader (1/2)
Valeurs par defaut void setFeature(String featureId, boolean state); boolean getFeature(String featureId); void setProperty(String propertyId, Object value); Object getProperty(String propertyId); Parser void parse(String systemId); void parse(InputSource inputSource);
28
org.xml.sax.XMLReader (2/2)
Handlers void setContentHandler(ContentHandler handler); ContentHandler getContentHandler(); void setDTDHandler(DTDHandler handler); DTDHandler getDTDHandler(); void setErrorHandler(ErrorHandler handler); ErrorHandler getErrorHandler(); Entity resolver void setEntityResolver(EntityResolver resolver); EntityResolver getEntityResolver();
29
org.xml.sax.helpers.XMLReaderFactory
XMLReader
createXMLReader();
Crer un parseur SAX Methode de recherche System property: org.xml.sax.driver Jar Services: META-INF/services/org.xml.sax.driver
XMLReader
createXMLReader(String className);
30
Parser un document
Instancier le parseur
Configurer settings
Parser le document
31
org.xml.sax.ContentHandler (1/2)
void setDocumentLocator(Locator locator); void startDocument(); void endDocument(); void processingInstruction(String target, String data); void skippedEntity(String name);
32
org.xml.sax.ContentHandler (2/2)
void startPrefixMapping(String prefix, String uri); void endPrefixMapping(String prefix); void startElement(String uri, String localName, String qname, Attributes attrs); void endElement(String uri, String localName, String qname); void characters(char[ ] ch, int offset, int length); void ignorableWhitespace(char[ ] ch, int offset, int length);
33
01 02 03 04 05 06 07 08 09 10 11 12 13
34
01 02 03 04 05 06 07 08 09 10 11 12 13
35
01 02 03 04 05 06 07 08 09 10 11 12 13
36
01 02
XMLReader reader = XMLReaderFactory.createXMLReader(); reader.setFeature(http://xml.org/sax/features/namespaces, true); 03 reader.setFeature(http://xml.org/sax/features/validation, false); 04 reader.setContentHandler(new ElementCounter()); 05 reader.parse(document.xml);
Donnes dentre
Donnes de sortie
elements: 2
Maodo DIOP Enseignant Chercheur Consultant
37
01 02 03 04 05 06 07 08 09 10 11 12
public class ErrorPrinter implements ErrorHandler { public void warning(SAXParseException e) { System.out.println([warning] +e.getMessage()); } public void error(SAXParseException e) { System.out.println([error] +e.getMessage()); } public void fatalError(SAXParseException e) throws SAXException { System.out.println([fatal error] +e.getMessage()); throw e; } }
Maodo DIOP Enseignant Chercheur Consultant
38
39
01 02 03 04 05 06 07 08 09 10 11 12
40
Input
Output
[error] Document root element nom", must match DOCTYPE root "null". [error] Document is invalid: no grammar found.
Maodo DIOP Enseignant Chercheur Consultant 41
01 02 03 04 05 06 07
42
01 public class ResolverPrinter implements EntityResolver { 02 public InputSource resolveEntity(String publicId, String systemId) { 03 System.out.println(publicId: +publicId); 04 System.out.println(systemId: +systemId); 05 return null; 06 } 07 }
43
01 public class ResolverPrinter implements EntityResolver { 02 public InputSource resolveEntity(String publicId, String systemId) { 03 System.out.println(publicId: +publicId); 04 System.out.println(systemId: +systemId); 05 return null; 06 } 07 }
44
01 02 03 04 05
Input
Output
Modle de document
46
Plan
47
DOM
Document Object Model Interface de programmation d'applications (API) pour documents XML Permet de modliser un document XML comme une classe avec un ensemble d'objets, mthodes... Architecture DOM (subdivision en module)
DOM XML : ajoute au Core des specifications relatives XML telles que les entits ou les sections CDATA DOM HTML : extension du Core simplifiant la traverse de document HTML DOM Events : inclus les evenements XML tels que la modification darbre ou les evenements utilisateurs pour HTML (souris, clavier) DOM CSS : extension du Core pour la manipulation de feuilles de style CSS DOM Load And Save : module dimportation ou dexportation darbres DOM depuis ou vers un fichier XML DOM Abstract Schemas : module daccs aux informations relatives au schma du document (DTD,XML Schema ) DOM Xpath : recele les fonctions dinterrogation des arbres DOM par le langage Xpath 1.0
48
Liens utiles
DOM Level 1 Specification http://www.w3.org/TR/REC-DOM-Level-1 DOM Level 2 Specifications http://www.w3.org/TR/DOM-Level-2-Core http://www.w3.org/TR/DOM-Level-2-Views http://www.w3.org/TR/DOM-Level-2-Events http://www.w3.org/TR/DOM-Level-2-Style http://www.w3.org/TR/DOM-Level-2-HTML
49
Plan
50
Model darbre generique Noeud Type, name, value Attributes Prev. Sibling Parent node First Child Previous, next sibling nodes First, last child nodes Collections Lists Maps
Maodo DIOP Enseignant Chercheur Consultant
Node
Last Child
51
DOM : Arborescence
licenceprofesionnelle
etudiant
etudiant
nom Moussa
prenom Faye
matricule LP2502011
nom Demba
prenom Sarr
matricule LP3502011
52
Node Interfaces
Package org.w3c.dom Document Element, Attr, Text ProcessingInstruction, Comment EntityReference, CDATASection DocumentType, Notation, Entity DocumentFragment
Tous les noeuds implemententorg.w3c.dom.Node.
53
org.w3c.dom.Node (1/4)
Node information
short
getNodeType();
e.g. Node.ELEMENT_NODE
String
Namespace information
String
org.w3c.dom.Node (2/4)
Attributes
boolean
Children
Node
org.w3c.dom.Node (3/4)
Other methods
Node
cloneNode(boolean deep);
56
org.w3c.dom.Node (4/4)
appendChild(Node child); Node insertBefore(Node newChild, Node refChild); Node removeChild(Node child); Node replaceChild(Node newChild, Node oldChild);
Maodo DIOP Enseignant Chercheur Consultant 57
org.w3c.dom.NodeList
Methodes
int
58
org.w3c.dom.NamedNodeMap (1/2)
Methodes de recherches
int
getLength(); Node item(int index); Node getNamedItem(String name); Node getNamedItemNS(String namespaceURI, String localName);
59
org.w3c.dom.NamedNodeMap (2/2)
Methode deditions
Node
setNamedItem(Node node); Node setNamedItemNS(Node node); Node removeNamedItem(String name); Node removeNamedItemNS(String namespaceURI, String localName);
60
Parser un Document
Instantier un parseur
org.apache.xerces.parsers.DOMParser
document =
parser.getDocument();
61
01 02 03 04 05 06 07 08 09 10
Methode recursive
public void traverse(Node node) { System.out.println(node: +node.getNodeName()); if (node.hasChildNodes()) { NodeList children = node.getChildNodes(); for (int i = 0; i < children.getLength(); i++) { Node child = children.item(i); traverse(child); } } }
62
01 02 03 04 05 06 07 08 09 10
Methode recursive
public void traverse(Node node) { System.out.println(node: +node.getNodeName()); if (node.hasChildNodes()) { NodeList children = node.getChildNodes(); for (int i = 0; i < children.getLength(); i++) { Node child = children.item(i); traverse(child); } } }
63
Parcourir un Document(3/8)
01 02 03 04 05 06 07 08 09 10
Methode recursive
public void traverse(Node node) { System.out.println(node: +node.getNodeName()); if (node.hasChildNodes()) { NodeList children = node.getChildNodes(); for (int i = 0; i < children.getLength(); i++) { Node child = children.item(i); traverse(child); } } }
64
Parcourir un Document(4/8)
01 02 03 04 05 06 07 08 09 10
Methode recursive
public void traverse(Node node) { System.out.println(node: +node.getNodeName()); if (node.hasChildNodes()) { NodeList children = node.getChildNodes(); for (int i = 0; i < children.getLength(); i++) { Node child = children.item(i); traverse(child); } } }
65
Parcourir un Document(5/8)
01 02 03 04 05 06 07 08
Methode recursive : #2
public void traverse(Node node) { System.out.println(node: +node.getNodeName()); Node child = node.getFirstChild(); while (child != null) { traverse(child); child = child.getNextSibling(); } }
66
Parcourir un Document(6/8)
01 02 03 04 05 06 07 08
Methode recursive : #2
public void traverse(Node node) { System.out.println(node: +node.getNodeName()); Node child = node.getFirstChild(); while (child != null) { traverse(child); child = child.getNextSibling(); } }
67
Parcourir un Document(7/8)
01 02 03 04 05 06 07 08
Methode recursive : #2
public void traverse(Node node) { System.out.println(node: +node.getNodeName()); Node child = node.getFirstChild(); while (child != null) { traverse(child); child = child.getNextSibling(); } }
68
Parcourir un Document(8/8)
01 02 03 04 05 06 07 08
Methode recursive : #2
public void traverse(Node node) { System.out.println(node: +node.getNodeName()); Node child = node.getFirstChild(); while (child != null) { traverse(child); child = child.getNextSibling(); } }
69
org.w3c.dom.Document (1/3)
getDoctype(); Element getDocumentElement(); Element getElementById(String id); NodeList getElementsByTagName(String name); NodeList getElementsByTagNameNS(String nsURI, String local);
70
org.w3c.dom.Document (2/3)
createElement(String name); Element createElementNS(String namespaceURI, String qualifiedName); Attr createAttribute(String name); Attr createAttributeNS(String namespaceURI, String qualifiedName); Text createTextNode(String data);
71
org.w3c.dom.Document (3/3)
ProcessingInstruction createProcessingInstruction(String target, String data); Comment createComment(String data); CDATASection createCDATASection(String data); EntityReference createEntityReference(String name); DocumentFragment createDocumentFragment();
Methodes omises(Factory)
72
Crer un contenu
73
01 02 03 04 05 06 07 08
Document#getElementsByTagName
public void iteratePeople(Document document) { NodeList people = document.getElementsByTagName(person); int length = people.getLength(); for (int i = 0; i < length; i++) { Node person = people.item(i); // do something with <person> } }
74
01 02 03 04 05 06 07 08
Document#getElementsByTagName
public void iteratePeople(Document document) { NodeList people = document.getElementsByTagName(person); int length = people.getLength(); for (int i = 0; i < length; i++) { Node person = people.item(i); // do something with <person> } }
75
Document#getElementsByTagName
01 02 03 04 05 06 07 08
public void iteratePeople(Document document) { NodeList people = document.getElementsByTagName(person); int length = people.getLength(); for (int i = 0; i < length; i++) { Node person = people.item(i); // do something with <person> } }
76
01 02 03 04 05 06 07 08
Document#getElementsByTagName
public void iteratePeople(Document document) { NodeList people = document.getElementsByTagName(person); int length = people.getLength(); for (int i = 0; i < length; i++) { Node person = people.item(i); // do something with <person> } }
77
Probleme
Deplacer des noeuds vers dautres documents differents, quoiquil en soit, lever une exception DOM
Pourquoi ?
Le design pattern Factory design pattern autorise differentes implementations et dautres implementations personaliseso another tree
Solution
78
Document#importNode
ERREUR!
01 02 03
SOLUTION
01 02 03 04
Document doc1, doc2; Node node1, parent2; Node node2 = doc2.importNode(node1); parent2.appendChild(node2);
79
80
Plan
81
DTD
Permet de dfinir le vocabulaire et la structure qui seront utiliss dans le document XML Grammaire du langage dont les phrases sont des documents XML (instances) Peut tre mise dans un fichier (DTD externe) et tre appele dans le document XML Une DTD peut tre interne ou externe au document XML. Conseil: Utiliser la forme externe pour des raisons de maintenance et de facilit daccs
DTD
82
<! ELEMENT balise (dfinition) > Le paramtre dfinition reprsente soit un type de donne prdfini, soit un lment de donnes compos, constitu lui mme d'lments Types prdfinis ANY : L'lment peut contenir tout type de donne EMPTY : L'lment ne contient pas de donnes spcifiques #PCDATA : L'lment doit contenir une chane de caractre (Parsable Character DATA), le # indique au parseur un motreserv Exemple <! ELEMENT Nom (#PCDATA)> <Nom>Moussa FAYE</Nom>
DTD
83
Dfinit une squence ou un choix d'lments Syntaxe spcifique avec oprateurs de composition d'lments :
DTD
84
<!ELEMENT nom (#PCDATA) > <!ELEMENT prenom (#PCDATA) > <!ELEMENT tel(#PCDATA) > <!ELEMENT matricule(#PCDATA) > <!ELEMENT adresse (ANY) >
<etudiant>
<nom>Moussa</nom> <prenom>Pierre</prenom> <prenom>Faye</prenom> <tel>2215708897</tel> <matricule>LP2502011</matricule> <adresse><rue></rue><ville>Paris</ville></adresse> </etudiant>
DTD
85
Dclaration dattribut
Les attributs sont prciss dans linstruction ATTLIST Syntaxe spcifique avec oprateurs de composition d'lments :
CDATA : du texte (Character Data) ; ID : un identifiant unique (combinaison de chiffres et de lettres) ; IDREF : une rfrence vers un ID ; IDREFS : une liste de rfrences vers des ID (sparation par un blanc) ; NMTOKEN : un mot (donc pas de blanc) ; NMTOKENS : une liste de mots (sparation par un blanc) Une numration de valeurs : chaque valeur est spare par le caractre |.
DTD
86
Et enfin La DEFAULT_VALUE est prsente pour lnumration ou lorsque la valeur est type avec #IMPLIED ou #FIXED
Exemple : <!ATTLIST etudiant nom CDATA #REQUIRED prenom CDATA #REQUIRED deuxiemeprenom CDATA #IMPLIED surnom CDATA #FIXED bleu > C-a-d lelement etudiant possed des attributs obligatoires(nom et prenom), un attribut (deuxieme prenom ) et enfin un attribut par defaut valant bleu pour surnom
DTD
87
Exemple d'attributs
<! ATTLIST personne num ID, age CDATA, genre (Masculin | Feminin ) > <!ELEMENT auteur (#PCDATA) > <!ELEMENT editeur (#PCDATA) > <!ATTLIST auteur genre (Masculin | Feminin ) #REQUIRED ville CDATA #IMPLIED> <!ATTLIST editeur ville CDATA #FIXED "Dakar">
DTD
88
Exemple de DTD
<!ELEMENT doc (livre* | article+) > <!ELEMENT livre (titre, auteur+) > <!ELEMENT article (titre, auteur*) > <!ELEMENT titre(#PCDATA) > <!ELEMENT auteur(nom, adresse) > <!ATTLIST auteur id ID #REQUIRED > <!ELEMENT nom(prenom?, nomfamille) > <!ELEMENT prenom (#PCDATA) > <!ELEMENT nomfamille (#PCDATA) > <!ELEMENT adresse (ANY) >
DTD
89
DTD
90
Exemple de ID et IDREF
<?xml version="1.0" standalone="yes"?> <!DOCTYPE DOCUMENT [ <!ELEMENT DOCUMENT(PERSONNE*)> <!ELEMENT PERSONNE (#PCDATA)> <!ATTLIST PERSONNE PNUM ID #REQUIRED> <!ATTLIST PERSONNE MERE IDREF #IMPLIED> <!ATTLIST PERSONNE PERE IDREF #IMPLIED> ]> <DOCUMENT>
<PERSONNE PNUM = "P1">Marie</PERSONNE> <PERSONNE PNUM = "P2">Jean</PERSONNE> <PERSONNE PNUM = "P3" MERE="P1" PERE="P2">Pierre</PERSONNE> <PERSONNE PNUM = "P4" MERE="P1" PERE="P2">Julie</PERSONNE>
</DOCUMENT>
DTD
91
DTD externe
Modle pour plusieurs documents partage des balises, attributs et structures Dfinition locale ou externe <!DOCTYPE doc SYSTEM "doc.dtd"> <!DOCTYPE doc PUBLIC "www.myweb.com/doc.dtd"> Exemple de document <?xml version="1.0" standalone="no"?> <!DOCTYPE ETUDIANTS SYSTEM "etudiants.dtd">
...
DTD
92
<!ENTITY %nom "definition"> %nom; <!ENTITY %genres "(homme | femme)"> <!ATTLIST auteur genre %genres; #REQUIRED> <!ENTITY %mpeg PUBLIC "http://www.myweb.fr/fic.dtd">
Exemple :
DTD
93
Modularit
dfinir dans des entits spares les parties rutilisables Regrouper les dclarations d'entits en tte Utiliser des entits pour les modles de contenus viter les DTD trop gnrales Dcouper les DTD trop complexes
Prcdence
Abstraction
Spcificit
Simplicit
DTD
94
DTD
95
Plan
96
XML Schemas
Document XML : grammaire type (types complexes, anonyme,abstrait) contrairement DTD : PCDATA et 10 types dattributs Utilisation du namespace :
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> xsd:string, xsd:byte, ... xsd:integer, xsd:long, xsd:float, xsd:double, ... xsd:boolean xsd:time, xsd:timeDuration, xsd:Date, xsd:year, xsd:month, ... xsd:ID, xsd:IDREF, xsd:NMTOKEN xsd:union
97
Longueur (length, minLength, maxLength) Expressions regulieres Enumeration : maxInclusive, maxExclusive, minInclusive, minExclusive Intervalles Etc (precision, scale, encoding, period,duration)
DTD : #PCDATA XML Schema
Exemples
98
Exemples
99
Syntaxe : <xsd:element name type contraintes [value]/> ou <xsd:element ref contraintes/> Contraintes: minOccurs, maxOccurs, fixed Exemple: <xsd:element name='nom' type='xsd:string minOccurs='0 maxOccurs='2'/> <xsd:element name=prenom' type='xsd:string minOccurs='0 maxOccurs='2'/>
100
Syntaxe : <xsd:attribute NAME USE [VALUE]/> Use: required,optional,fixed,prohibited Exemple: <xsd:attribute name='surnom' type='xsd:string' optional='true'/>
101
Types Sequences ordonnes : xsd:sequence Sequences non ordonnes : xsd:all Choix delements equivalence du DTD | : xsd:choice Regroupement equivalence du DTD () : xsd:group
Exemple
<xsd:complexType name='personne'> <xsd:sequence> <xsd:element name='nom' type='xsd:string'/> <xsd:element name='prenom' type='xsd:string'/> <xsd:element name='matricule' type='xsd:int'/> <xsd:element name='dateNaissance' type='xsd:year'/> </xsd:sequence> </xsd:complexType>
102
Exemple
<xsd:complexType name='personne mixed=true > <xsd:choice minOccurs=0 maxOccurs=unbounde> <xsd:element name='nom' type='xsd:string'/> <xsd:element name='prenom' type='xsd:string'/> </ xsd:choice > </xsd:complexType>
103
Exemple
<xsd::complexType> <xsd:group minOccurs=1 maxOccurs=unbounded> <xsd:sequence> <xsd:group minOccurs=0 maxOccurs=unbounded> <xsd:choice> <xsd:element name=B xsd:type=xsd:string/> <xsd:element name=C xsd:type=xsd:string/> </xsd:choice> </xsd:sequence> </xsd:group> </xsd:complexType>
104
Elements vides et Elemenst contenu inconnu Schema XML : <xsd:element name='dateElection' type='xsd:time' nullable='true'/> Element XML : <dateElection xsi:null='true'/> xsi:null est dfini dans lespace de noms pour des instances http://www.w3.org/2000/10/XMLSchemainstance
105
Feuilles de style
107
Plan
XSL/XSLT
108
XSLT: Definition
XSLT: Concepts
Notion de template <xsl:template attributs > </xsl:template>avec comme attributs name : un nom, si on appelle le template directement indpendamment des nuds courants match : chemin de localisation XPath qui indique pour quels noeuds le template peut tre appel. mode : contexte dusage au template priority : choix entre diffrents templates acceptant les mmes noeuds. Notion de template avec parametre <xsl:with-param name=VALUE">CONTENU</xsl:with-param> Appel de template explicite <xsl:call-template=TEMPLATE_NAME">CONTENU</xsl:call-template> Recuperation de valeur <xsl:value-of select=@NODE_NAME/>
Maodo DIOP Enseignant Chercheur Consultant 110
XSLT: Concepts
Boucle <xsl:for-each select="TAG_NAME">CONTENU </xsl:for-each> Tri <xsl:sort select="@TAG_NAME"/> Condition <xsl:if test="CONDITION"> CONTENU</xsl:if> Pas de else : utiliser la negation du test Test avec choose,when,otherwise <xsl:when test="CONDITION"> CONTENU</xsl:when> Affectation dattribut <xsl:attribute-set name="attribute_name >CONTENU</xsl:attribute-set> Copie dun nud et de son contenu <xsl:copy>CONTENU</xsl:copy>
111
XSLT: Concepts
Inclusion de document XSLT <xsl:include href=" xsltfilename.xsl"/> Import de document XSLT <xsl:import href=" xsltfilename.xsl"/> Parent du format XSL-FO(eXtensible Stylesheet Language Formatting Objects) pour la gestion des formats PDF, RTF,PostScript.
112
Plan
XSL XSLT
113
Requtes et liens
114
Plan
XPATH Xlink
115
XPATH : Definition
Spcification de W3C Version 1.0 2.0 langage dexpressions utilisant des slecteurs SQL de XML Syntaxe arborescente : selecteur/selecteur/selecteur Syntaxe dun slecteur : element[predicat] Type :
les ensembles de nuds (type nodeset, cest--dire une collection non ordonne sans rptition de nuds darbre XML), Les boolens (type boolean), les nombres rels (type number), les chanes de caractres (type string)
116
XPATH : Definition
Operations ensembliste : intersect, union, except Quantification : some, every, satisfies Expressions conditionnelles : for, in, where, sortby, let, return ou ForLetWhereReturn Casting ou Typage : typeswitch, instance of , etc
Exemple
<licenceprofessionnelle> Retourner les valeurs de lattribut nom du <etudiant nom="Moussa DIOUF"/> noeud etudiant : <etudiant/> <etudiant nom="Mody Amar"/> for $j in ( //etudiant/@nom) <professeur nom="Linus Torvals"/> return $j <professeur nom="Rob Pike"/>
</licenceprofessionnelle>
117
Dsigne le document en premire position Sinon dsigne le nud courant Parcours rcursif de tous les nuds descendants partir du nud courant
La squence //
Le caractre gnrique * dsigne tout nud lment Le caractre gnrique @ permet de prfixer un attribut La position sobtient par position()=n ou par la notation [n] avec n une valeur entire. Questions /* ? //* ? //*[7] ?
Maodo DIOP Enseignant Chercheur Consultant 118
Fonctions prdfinies
string-length(ch) : pour renvoyer le nombre de caractres de la chane concat : pour concatner deux chanes en une seule normalize-space : suppression de tous les espaces blancs en tte, tous les espaces blancs en fin translate : remplacer certains caractres par dautres ; substring(ch,nb1,nb2) : extraction de sous-chane ; contrains : tester la prsence dune sous-chane dans une chane ; starts-with(ch1,ch2) : tester la prsence dune sous-chane au dbut dune chane ; substring-after : recherche de sous-chane et extraire la sous-chane situe aprs ; substring-before, pour rechercher une sous-chane et extraire la sous-chane situe avant. end-with nexiste pas
119
Exemple
Afficher la liste des personnes dont le prnom commence par la lettre M //nom[start-with(@prenom,"M")] Afficher les liens dune page contenant le terme php /html/body//a[contains(text(), "php ")]/text()
120
XPATH : Nombre
Fonctions prdfinies
floor(nombre_decimal ) : arrondi infrieur (10.9 devient 10 ceil( nombre_decimal ) : arrondi suprieur (10.1 devient 11, par exemple) round(nombre_decimal ) : arrondi au plus juste (10.4 devient 10 et 10.6 devient 11 exemple) count(liste_de_noeud ) : nombre de nuds sum(liste_de_noeud) : somme de nuds min(liste_de_noeud) : plus petite valeur dune squence de nuds max(liste_de_noeud) : plus grande valeur dune squence de nuds avg(liste_de_noeud) : moyenne des valeurs dune squence de nuds
121
XPATH : Nombre
Exemple
count( ( 1, 2 ,3,4,5 ) ) : 5 sum( ( 1, 2 ,3,4 ) ) : 10 min( ( 100, 20 ,30 ) ) : 20 max( ( 1, 2 ,3 ) ) : 3 avg( ( 1, 2 ,3,4 ) ) : 5
122
XPATH : Boolen
Fonctions prdfinies
true() pour VRAI false() pour FAUX Les operateurs or, and et not() permettent respectivement de reprsenter le OU boolen, le ET boolen et la ngation Les operateurs < > <= >= = != sont utilisables avec les boolens
Exemple
/famille/nom[@prenom=Moussa or @prenom=Ali] ou le document XML est : <famille> <nom prenom="Moussa" famille="Samba"/> <nom prenom="Ali" famille ="Camara"/> </famille> /famille/nom[@prenom=Moussa and @prenom=Ali]
123
Plan
XPATH Xlink
124
XML Linking Language Gestion de liens entre diffrents documents. Peu employ vu lextensibilt de XML pour la cration de propres attributs ou balises pour raliser des liens. Nom despace : xmlns:xlink=http://www.w3.org/1999/xlink
Exemple <carnetadresse xmlns:xlink="http://www.w3.org/1999/xlink"> <contact xlink:href="etudiant/etudiant2011xml" xlink:label="Licence Professionelle" xlink:role="http://www.ucad.sn/etudiant" xlink:title="Licence"/> </carnetadresse>
125
Exemple <carnetadresse xmlns:xlink="http://www.w3.org/1999/xlink"> <contact xlink:href="etudiant/etudiant2011xml" xlink:label="Licence Professionelle" xlink:role="http://www.ucad.sn/etudiant" xlink:title="Licence"/> </carnetadresse>
1) 2) 3) 4) 5)
xlink est le prfixe retenu pour raliser un lien. Ce lien est effectu par lattribut href vers un autre document ; label est le texte affich pour le lien ; role est la nature du lien (un tudiant) et title est le titre du lien.
Maodo DIOP Enseignant Chercheur Consultant 126
Question ?
Maodo DIOP Enseignant Chercheur Consultant 127