Sunteți pe pagina 1din 127

XML & Technologies associes

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

Maodo DIOP Enseignant Chercheur Consultant

Donnes semistructures

Maodo DIOP Enseignant Chercheur Consultant

Plan

XML SAX

Maodo DIOP Enseignant Chercheur Consultant

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

XML standardise la manire dont l'information est


change prsente archive retrouve transforme crypte

Maodo DIOP Enseignant Chercheur Consultant

XML : rgles de bases


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

Balise (ou tag ou label ou noeud)


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

Elment de donnes ou contenu ou PCDATA


Attribut

XML : rgles de bases (suite)


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

Maodo DIOP Enseignant Chercheur Consultant

XML : Exemple sans attributs


<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> <licenceprofessionelle> <etudiant> <nom>Moussa</nom> <prenom>Faye</prenom> <matricule>LP2502011</matricule> </etudiant> </licenceprofessionelle> NB : licenceprofessionelle est la racine de notre document etudiant, nom, prenom, matricule des balises non racines Moussa, Faye, LP2502011 les contenus respectifs des balises Etudiant, nom, prenom
Maodo DIOP Enseignant Chercheur Consultant 9

XML : Exemple avec attributs


<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?> <licenceprofessionelle> <etudiant genre ="masculin " nationality ="senegalais" > <nom>Moussa</nom> <prenom>Faye</prenom> <matricule>LP2502011</matricule> </etudiant> </licenceprofessionelle> NB : genre et nationality sont des attributs du tag etudiant

Maodo DIOP Enseignant Chercheur Consultant

10

XML : Caractres spciaux


Contexte : Comment est pars ou interprt ce contenu dans un document XML ? <logique> deux <trois>un </logique> Le parseur va lire : PCDATA deux balise ouvrante trois PCDATA un c.--d. considre <trois> une balise !!!! Ce qui est FAUX PROBLEME

Maodo DIOP Enseignant Chercheur Consultant

11

XML : Caractres spciaux


SOLUTION I: XML propose lequivalent des caractres dechappement ou speciaux dont la syntaxe est &value; &quote; pour les quotes,&lt; pour le caractre suprieur ou chevron ouvert, &gt; pour le caractre inferieur ou chevron ferm &eacute; pour &egrave; pour &agrave; pour &ugrave; pour &ecirc; pour &iuml; pour &euml; pour &Ecirc; pour &ccedil;pour et enfin &oelig; pour etc. Cf : http://www.w3.org/MarkUp/html3/latin1.html Ainsi nous aurons : <logique> deux &lt; trois &gt; un </logique>
Maodo DIOP Enseignant Chercheur Consultant 12

XML : Caractres spciaux


SOLUTION II: XML propose lutilisation de CDATA dont la syntaxe est : [CDATA[VALUE_TO_BE_CDATED]] Ainsi nous aurons : <logique> [CDATA[deux <trois>un]] </logique> NB: CDATA permet de transmettre les donnes quelles contiennent telles quelles lapplication, via le parseur. Trs pratique, dans le cas o lon transmet un code source.

Maodo DIOP Enseignant Chercheur Consultant

13

Espaces de noms (namespace)

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

XML : Arborescence cas 1


licenceprofesionnelle

etudiant

etudiant

nom Moussa

prenom Faye

matricule LP2502011

nom Demba

prenom Sarr

matricule LP3502011

Maodo DIOP Enseignant Chercheur Consultant

15

XML : Quelques denominations


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

Maodo DIOP Enseignant Chercheur Consultant

16

XML : Document bien form ?

Un document XML est bien form si et seulement si


Structure en arbre respecte + Respect des rgles de nommage

Ou Bien balises correctement imbriques analysable (parsable) et manipulable pas ncessairement valide par rapport au jargon

Maodo DIOP Enseignant Chercheur Consultant

17

Validit des documents

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

Maodo DIOP Enseignant Chercheur Consultant

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

Maodo DIOP Enseignant Chercheur Consultant

19

Plan

XML SAX

Maodo DIOP Enseignant Chercheur Consultant

20

SAX : Dfinition & concept


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

Maodo DIOP Enseignant Chercheur Consultant

22

Principe dun parseur SAX


<?xml version="1.0"?> . . .

Lorque tu vois le debut du document, applique la REGLE

SAX Parser

Lorsque tu vois le debut dun element, applique la REGLE

Lorsque tu vois la fin dun element , applique la REGLE

Maodo DIOP Enseignant Chercheur Consultant

23

SAX : Principe expliqu


<?xml version="1.0"?> <licenceprofessionelle> <etudiant> <nom>Moussa</nom> <prenom>Faye</prenom> </etudiant> </licenceprofessionelle> startDocument startElement licenceprofessionelle startElement etudiant startElement nom characters Moussa endElement nom startElement prenom characters Faye endElement prenom endElement etudiant endElement licenceprofessionelle endDocument

Maodo DIOP Enseignant Chercheur Consultant

24

API SAX

Maodo DIOP Enseignant Chercheur Consultant

25

Used to create a SAX Parser


XML-Reader Factory Content Handler Error Handler DTD Handler Entity Resolver

Gere les evenements lis au document : debut de tag, fin de tag, etc.

Gere les erreurs rencontres par le parseur

XML

XML Reader

Gere les DTD

Gere les Entits


26

Maodo DIOP Enseignant Chercheur Consultant

SAX : Fonctionnement par programmation


1)

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);

Maodo DIOP Enseignant Chercheur Consultant

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();

Maodo DIOP Enseignant Chercheur Consultant

29

Comment crer un parser SAX

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);

Crer un parseur SAX par nom

Maodo DIOP Enseignant Chercheur Consultant

30

Parser un document

Instancier le parseur

XMLReader reader = XMLReaderFactory.createXMLReader();

Configurer settings

reader.setFeature(http://xml.org/sax/features/namespace s, true); reader.setFeature(http://xml.org/sax/features/validation, false); reader.parse(document.xml);

Parser le document

Maodo DIOP Enseignant Chercheur Consultant

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);

Maodo DIOP Enseignant Chercheur Consultant

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);

Maodo DIOP Enseignant Chercheur Consultant

33

Recevoir les evenements SAX (1/4)

01 02 03 04 05 06 07 08 09 10 11 12 13

Implementer un compteur dlment


public class ElementCounter extends DefaultHandler { private int elements; public void startDocument() { elements = 0; } public void startElement(String uri, String localName, String qname, Attributes attributes) { elements++; } public void endDocument() { System.out.println(elements: +elements); } }

Maodo DIOP Enseignant Chercheur Consultant

34

Recevoir les evenements SAX (2/4)

01 02 03 04 05 06 07 08 09 10 11 12 13

Implementer un compteur dlment


public class ElementCounter extends DefaultHandler { private int elements; public void startDocument() { elements = 0; } public void startElement(String uri, String localName, String qname, Attributes attributes) { elements++; } public void endDocument() { System.out.println(elements: +elements); } }

Maodo DIOP Enseignant Chercheur Consultant

35

Recevoir les evenements SAX (3/4)

01 02 03 04 05 06 07 08 09 10 11 12 13

Implementer un compteur dlment


public class ElementCounter extends DefaultHandler { private int elements; public void startDocument() { elements = 0; } public void startElement(String uri, String localName, String qname, Attributes attributes) { elements++; } public void endDocument() { System.out.println(elements: +elements); } }

Maodo DIOP Enseignant Chercheur Consultant

36

Recevoir les evenements SAX (4/4)

01 02

Enregistrer notre handler personalis

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

<nom> Moussa</nom> <prenom>Faye</ prenom>

Donnes de sortie

elements: 2
Maodo DIOP Enseignant Chercheur Consultant

37

Collecter des erreurs (1/4)

01 02 03 04 05 06 07 08 09 10 11 12

Implementer un gestionnaire derreur

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

Collecter des erreurs (2/4)

01 02 03 04 05 06 07 08 { 09 System.out.println([fatal error] +e.getMessage()); 10 throw e; 11 } 12 }

Implementer un gestionnaire derreur


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

Maodo DIOP Enseignant Chercheur Consultant

39

Collecter des erreurs (3/4)

01 02 03 04 05 06 07 08 09 10 11 12

Implementer un gestionnaire derreur


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

40

Collecter des erreurs (4/4)


01 02 03 04 05

Enregistrer notre gestionnaire derreurs


XMLReader reader = XMLReaderFactory.createXMLReader(); reader.setFeature(http://xml.org/sax/features/namespaces, true); reader.setFeature(http://xml.org/sax/features/validation, true); reader.setErrorHandler(new ErrorPrinter()); reader.parse(document.xml);

Input

<nom> <prenom>Faye</prenom> <surnom>Ngoor</surnom </nom>

Output

[error] Document root element nom", must match DOCTYPE root "null". [error] Document is invalid: no grammar found.
Maodo DIOP Enseignant Chercheur Consultant 41

Resoudre les entits (1/4)

Implementer lentity resolver


public class ResolverPrinter implements EntityResolver { public InputSource resolveEntity(String publicId, String systemId) { System.out.println(publicId: +publicId); System.out.println(systemId: +systemId); return null; } }

01 02 03 04 05 06 07

Maodo DIOP Enseignant Chercheur Consultant

42

Resoudre les entits (2/4)

Implementer lentity resolver

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 }

Maodo DIOP Enseignant Chercheur Consultant

43

Resoudre les entits (3/4)

Implementer lentity resolver

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 }

Maodo DIOP Enseignant Chercheur Consultant

44

Resoudre les entits (4/4)

Enregister lentity resolver personalis


XMLReader reader = XMLReaderFactory.createXMLReader(); reader.setFeature(http://xml.org/sax/features/namespaces, true); reader.setFeature(http://xml.org/sax/features/validation, false); reader.setEntityResolver(new ResolverPrinter()); reader.parse(document.xml);

01 02 03 04 05

Input

<!DOCTYPE root SYSTEM grammar.dtd> <root/>

Output

publicId: null systemId: file:///D:/xml/examples/grammar.dtd


Maodo DIOP Enseignant Chercheur Consultant 45

Modle de document

Maodo DIOP Enseignant Chercheur Consultant

46

Plan

DOM API DOM

Maodo DIOP Enseignant Chercheur Consultant

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

Maodo DIOP Enseignant Chercheur Consultant

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

Maodo DIOP Enseignant Chercheur Consultant

49

Plan

DOM API DOM

Maodo DIOP Enseignant Chercheur Consultant

50

Document Object Model

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

Parent Next Sibling

Node
Last Child

51

DOM : Arborescence
licenceprofesionnelle

etudiant

etudiant

nom Moussa

prenom Faye

matricule LP2502011

nom Demba

prenom Sarr

matricule LP3502011

Maodo DIOP Enseignant Chercheur Consultant

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.

Maodo DIOP Enseignant Chercheur Consultant

53

org.w3c.dom.Node (1/4)

Node information
short

getNodeType();

e.g. Node.ELEMENT_NODE

String

getNodeName(); String getNodeValue();

Namespace information
String

getPrefix(); String getLocalName(); String getNamespaceURI();


Maodo DIOP Enseignant Chercheur Consultant 54

org.w3c.dom.Node (2/4)

Attributes
boolean

hasAttribute(String name); NamedNodeMap getAttributes();

Children
Node

getFirstChild(); Node getLastChild(); boolean hasChildNodes(); NodeList getChildNodes();


Maodo DIOP Enseignant Chercheur Consultant 55

org.w3c.dom.Node (3/4)

Links to other nodes


Document

getOwnerDocument(); Node getParentNode(); Node getPreviousSibling(); Node getNextSibling();

Other methods
Node

cloneNode(boolean deep);

Maodo DIOP Enseignant Chercheur Consultant

56

org.w3c.dom.Node (4/4)

Editing node values


void

setNodeValue(String value); void setPrefix(String prefix);

Editing tree structure


Node

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

getLength(); Node item(int index);

Maodo DIOP Enseignant Chercheur Consultant

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);

Maodo DIOP Enseignant Chercheur Consultant

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);

Maodo DIOP Enseignant Chercheur Consultant

60

Parser un Document

Instantier un parseur
org.apache.xerces.parsers.DOMParser

parser = new org.apache.xerces.parsers.DOMParser();

Parser le fichier et faites une recherche


parser.parse(document.xml); org.w3c.dom.Document

document =

parser.getDocument();

Maodo DIOP Enseignant Chercheur Consultant

61

Parcourir un Document (1/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); } } }

Maodo DIOP Enseignant Chercheur Consultant

62

Parcourir un Document (2/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); } } }

Maodo DIOP Enseignant Chercheur Consultant

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); } } }

Maodo DIOP Enseignant Chercheur Consultant

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); } } }

Maodo DIOP Enseignant Chercheur Consultant

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(); } }

Maodo DIOP Enseignant Chercheur Consultant

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(); } }

Maodo DIOP Enseignant Chercheur Consultant

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(); } }

Maodo DIOP Enseignant Chercheur Consultant

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(); } }

Maodo DIOP Enseignant Chercheur Consultant

69

org.w3c.dom.Document (1/3)

Etends org.w3c.dom.Node Methode de requete


DocumentType

getDoctype(); Element getDocumentElement(); Element getElementById(String id); NodeList getElementsByTagName(String name); NodeList getElementsByTagNameNS(String nsURI, String local);

Maodo DIOP Enseignant Chercheur Consultant

70

org.w3c.dom.Document (2/3)

Quelques methodes usine gaz


Element

createElement(String name); Element createElementNS(String namespaceURI, String qualifiedName); Attr createAttribute(String name); Attr createAttributeNS(String namespaceURI, String qualifiedName); Text createTextNode(String data);

Maodo DIOP Enseignant Chercheur Consultant

71

org.w3c.dom.Document (3/3)

Autres methodes usine gaz (factory)


ProcessingInstruction createProcessingInstruction(String target, String data); Comment createComment(String data); CDATASection createCDATASection(String data); EntityReference createEntityReference(String name); DocumentFragment createDocumentFragment();

Methodes omises(Factory)

DocumentType, Notation, Entity

Maodo DIOP Enseignant Chercheur Consultant

72

Construire un arbre en utilisant lAPI

Instantier un objet Document

org.w3c.dom.Document document = new org.apache.xerces.dom.DocumentImpl();

Crer un contenu

Element root = document.createElement(root); document.appendChild(root); Text text = document.createTextNode(text); root.appendChild(text);

Maodo DIOP Enseignant Chercheur Consultant

73

Recherche delements (1/4)

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> } }

Maodo DIOP Enseignant Chercheur Consultant

74

Recherche delements (2/4)

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> } }

Maodo DIOP Enseignant Chercheur Consultant

75

Recherche delements (3/4)

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> } }

Maodo DIOP Enseignant Chercheur Consultant

76

Recherche delements (4/4)

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> } }

Maodo DIOP Enseignant Chercheur Consultant

77

Importation des noeuds(1/2)

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

Document#importNode Document#adoptNode DOM Level 3 working draft

Maodo DIOP Enseignant Chercheur Consultant

78

Importation des noeuds(2/2)

Document#importNode

ERREUR!

01 02 03

Document doc1, doc2; Node node1, parent2; parent2.appendChild(node1);

SOLUTION

01 02 03 04

Document doc1, doc2; Node node1, parent2; Node node2 = doc2.importNode(node1); parent2.appendChild(node2);

Maodo DIOP Enseignant Chercheur Consultant

79

Typages des donnes

Maodo DIOP Enseignant Chercheur Consultant

80

Plan

DTD XML Schemas

Maodo DIOP Enseignant Chercheur Consultant

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

Maodo DIOP Enseignant Chercheur Consultant

DTD

82

Dclaration d'lment simple

<! 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>

Maodo DIOP Enseignant Chercheur Consultant

DTD

83

Dclaration d'lment compos


Dfinit une squence ou un choix d'lments Syntaxe spcifique avec oprateurs de composition d'lments :

<! ELEMENT balise (composition) >


Oprateur Signification + L'lment doit tre prsent au minimum une fois * L'lment peut tre prsent plusieurs fois (ou aucune) ? L'lment peut tre optionnellement prsent | L'lment A ou B peuvent tre prsents (pas les deux) , L'lment A doit tre prsent et suivi de l'lment B Les parenthses permettent de regrouper des lments afin de leur appliquer les () autres oprateurs Exemple A+ A* A? A|B A,B (A,B)+

Maodo DIOP Enseignant Chercheur Consultant

DTD

84

Exemple d'lment compos

<!ELEMENT etudiant (nom, prenom+, tel?,matricule, adresse) >


<!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>

Maodo DIOP Enseignant Chercheur Consultant

DTD

85

Dclaration dattribut

Les attributs sont prciss dans linstruction ATTLIST Syntaxe spcifique avec oprateurs de composition d'lments :

NAME TYPE OBLIGATION DEFAULT_VALUE


O TYPE prend ces valeurs

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 |.

Maodo DIOP Enseignant Chercheur Consultant

DTD

86

O OBLIGATION ne concerne pas les numrations peut prendre ces valeurs :


Dclaration dattribut (suite)


#REQUIRED : attribut obligatoire. #IMPLIED : attribut optionnel. #FIXED : attribut toujours prsent avec une valeur.

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

Maodo DIOP Enseignant Chercheur Consultant

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">

Maodo DIOP Enseignant Chercheur Consultant

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

Maodo DIOP Enseignant Chercheur Consultant

89

Exemple de DTD interne


<?XML version="1.0" standalone="yes"?> <!DOCTYPE CLASSE [ <!ELEMENT CLASSE ETUDIANT+)> <!ELEMENT ETUDIANT (IDENTIFICATION+, ANNEE, NOTE)> <!ATTLIST ETUDIANT MATRICULE CDATA #REQUIRED> <!ELEMENT IDENTIFICATION EMPTY> <!ATTLIST IDENTIFICATION NOM CDATA #REQUIRED PRENOM CDATA #REQUIRED> <!ELEMENT ANNEE (#PCDATA)> <!ELEMENT NOTE(#PCDATA)> ]> <CLASSE> <ETUDIANT MATRICULE="LPXXXXXX"> <IDENTIFICATION NOM="Moussa" PRENOM="Faye"/> <ANNEE>2011</ANNEE> <NOTE>18</NOTE> </ETUDIANT>... </CLASSE>

DTD

Maodo DIOP Enseignant Chercheur Consultant

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

Maodo DIOP Enseignant Chercheur Consultant

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

Maodo DIOP Enseignant Chercheur Consultant

92

DTD : Entit paramtre

Permet la dfinition d'un groupe d'lments sous un nom (macro)

<!ENTITY %nom "definition"> %nom; <!ENTITY %genres "(homme | femme)"> <!ATTLIST auteur genre %genres; #REQUIRED> <!ENTITY %mpeg PUBLIC "http://www.myweb.fr/fic.dtd">

Rutilisable dans une DTD par simple appel :

Exemple :

Peuvent tre externes :

DTD

Maodo DIOP Enseignant Chercheur Consultant

93

Quelques rgles d'criture


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

Maodo DIOP Enseignant Chercheur Consultant

94

Insuffisance des DTD

Pas de types de donnes

difficile interprter par le rcepteur difficile traduire en schma objets


Pas dexpression rgulires sur les entits Pas en XML

langage spcifique Solution Utilisation de XML Schemas

DTD

Maodo DIOP Enseignant Chercheur Consultant

95

Plan

DTD XML Schemas

Maodo DIOP Enseignant Chercheur Consultant

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

XML Schemas : environs 43 types simples


Maodo DIOP Enseignant Chercheur Consultant

97

XML Schemas : Restriction

Type simples par :


Longueur (length, minLength, maxLength) Expressions regulieres Enumeration : maxInclusive, maxExclusive, minInclusive, minExclusive Intervalles Etc (precision, scale, encoding, period,duration)
DTD : #PCDATA XML Schema

Exemples

<xsd:simpleType name='motDePasse'> <xsd:restriction base='xsd:string'> <xsd:length value='8'/> </xsd:restriction> </xsd:simpleType>

Maodo DIOP Enseignant Chercheur Consultant

98

XML Schemas : Restriction

Exemples

Une liste de 30 etudiants

<xsd:simpleType name=licenceprofessionnelle'> <xsd:restriction base=numLicprof'> <xsd:length value=30'/> </xsd:restriction> </xsd:simpleType>

Le genre est defini soit Masculin soit Feminin

<xsd:simpleType name=genre'> <xsd:union memberType=masculin feminin /> </xsd:simpleType>

Maodo DIOP Enseignant Chercheur Consultant

99

XML Schemas : Element & Gestion doccurences

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'/>

Maodo DIOP Enseignant Chercheur Consultant

100

XML Schemas : Attributs

Syntaxe : <xsd:attribute NAME USE [VALUE]/> Use: required,optional,fixed,prohibited Exemple: <xsd:attribute name='surnom' type='xsd:string' optional='true'/>

Maodo DIOP Enseignant Chercheur Consultant

101

XML Schemas : Types Complexes

Types Sequences ordonnes : xsd:sequence Sequences non ordonnes : xsd:all Choix delements equivalence du DTD | : xsd:choice Regroupement equivalence du DTD () : xsd:group
Exemple

DTD : (nom, prenom,matricule,dateNaissance)

<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>

Maodo DIOP Enseignant Chercheur Consultant

102

XML Schemas : Types Complexes (Contenu Melang)

Exemple

DTD : (nom | prenom)* Schema XML equivalent

<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>

Maodo DIOP Enseignant Chercheur Consultant

103

XML Schemas : Types Complexes (Groupes)

Exemple

DTD : ((B|C)*)+ Schema XML equivalent

<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>

Maodo DIOP Enseignant Chercheur Consultant

104

XML Schemas : Gestion de valeurs nulles


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

Maodo DIOP Enseignant Chercheur Consultant

105

XML Schema cours.xsd (Exemple)


<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="courses"> <xsd:complexType> <xsd:sequence> <xsd:element name="course" minOccurs="1" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <xsd:element name="title" type="xsd:string"/> <xsd:element name="description" type="xsd:string"/> <xsd:element name="credits" type="xsd:decimal"/> <xsd:element name="lastmodified" type="xsd:dateTime"/> </xsd:sequence> <xsd:attribute name="cid" type="xsd:ID"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema>

Feuilles de style

Maodo DIOP Enseignant Chercheur Consultant

107

Plan

XSL/XSLT

Maodo DIOP Enseignant Chercheur Consultant

108

XSLT: Definition

Specification de W3C 1&2

eXtensible Stylesheet Language Transformations


Transformation dun format XML vers un autre format (XML, XHTML/HTML, CSV,TXT). XSLT 1.0 est fortement coupl XPath 1.0 alors que XSLT 2.0 est associ XPath 2.0. Squelette dun document XSLT <xsl:stylesheet version="1.0" xmlns:xsl=http://www.w3.org/1999/XSL/Transform></xsl:stylesheet>
Linstruction output, qui se place sous la racine stylesheet, dsigne la nature du document en sortie. Voici quelques attributs : method = text, html, xml ; encoding = jeu de caractres ; indent = yes ou no ; media-type = type MIME de sortie.
Maodo DIOP Enseignant Chercheur Consultant 109

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>

Maodo DIOP Enseignant Chercheur Consultant

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.

Maodo DIOP Enseignant Chercheur Consultant

112

Plan

XSL XSLT

Maodo DIOP Enseignant Chercheur Consultant

113

Requtes et liens

Maodo DIOP Enseignant Chercheur Consultant

114

Plan

XPATH Xlink

Maodo DIOP Enseignant Chercheur Consultant

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)

Maodo DIOP Enseignant Chercheur Consultant

116

XPATH : Definition

Version 2.0 = Version 1.0 + Apports Apports


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>

Maodo DIOP Enseignant Chercheur Consultant

117

XPATH : Parcours sequentiel


Cas de nud La squence /

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

XPATH : Chaines de caracteres

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

Maodo DIOP Enseignant Chercheur Consultant

119

XPATH : Chaines de caracteres

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()

Maodo DIOP Enseignant Chercheur Consultant

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

Maodo DIOP Enseignant Chercheur Consultant

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

Maodo DIOP Enseignant Chercheur Consultant

122

XPATH : Boolen

Pas de valeurs littrales comme true ou false comme PHP

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]

Maodo DIOP Enseignant Chercheur Consultant

123

Plan

XPATH Xlink

Maodo DIOP Enseignant Chercheur Consultant

124

XLink : Definition (1/2)


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>

Maodo DIOP Enseignant Chercheur Consultant

125

XLink : Definition (2/2)

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

S-ar putea să vă placă și