e X tended M arkup L angage

65
1 e e X X tended tended M M arkup arkup L L angage angage Par Nadah Hassan

description

e X tended M arkup L angage. Par Nadah Hassan. L ’ univers XML. XML famille Avantage de XML Contexte et Application de XML Déclaration de DTD Déclaration d'éléments Déclaration d'attributs Déclaration d'entités générales Déclaration d'entités paramètres. XML : la famille. - PowerPoint PPT Presentation

Transcript of e X tended M arkup L angage

Page 1: e X tended  M arkup  L angage

1

eeXXtended tended MMarkup arkup LLangageangage

Par Nadah Hassan

Page 2: e X tended  M arkup  L angage

2

XML familleAvantage de XMLContexte et Application de XML Déclaration de DTDDéclaration d'élémentsDéclaration d'attributsDéclaration d'entités généralesDéclaration d'entités paramètres

L’universL’univers XML XML

Page 3: e X tended  M arkup  L angage

3

XML : la familleXML : la famille

Né : fin 96Père : W3CPetit-fils de SGML (ISO-1986)Cousin d’HTMLReconnu le : 10/02/98 – version 1.0Descendance – XHMTL, MathML, SVG,

XFORM, XSLT…

Page 4: e X tended  M arkup  L angage

4

Le 30 Octobre 2004

Société XYZ,12 rue ZairRabat

Ministère de L’intérieurDirection Du Budget

Tel: 037133564Fax: 0379765426

Objet: ben quoi?Exécution du marchéMonsieur,

Bla bla bli, bli blo bla, kkkk vhlg vckjdhklbg fdskjbvhv feje slc ifehfe fhckh c jeflccj n khef iheznf jùkvbc lkhdklvn v

Veuillez agréer patati patata vachement sincères.

signature

Pied de page

Logo

Date

Destinataire

Corps

Pied de page

En-tête

Objet

Salutation

Formule depolitesse

Signature

Exemple de documentExemple de document

Page 5: e X tended  M arkup  L angage

5

Une représentation classiqueUne représentation classique

Page 6: e X tended  M arkup  L angage

6

…<date> 30 oct 2004 </date>

<salutation> Monsieur, </salutation>

<corps> <para> Ici le premier paragraphe </para> <para> et là le deuxième </para></corps>

</lettre>

<lettre><entete> <logo loc="logo-graph.gif"/> <adresse> &abrev-adresse; </adresse></entete><destinataire> <nom> Mr Alaoui </nom> <adresse> <rue> Avenue de la victoire </rue> <ville> Rabat </ville> </adresse></destinataire><objet>Marché</objet>…

Représentation XMLReprésentation XML

Page 7: e X tended  M arkup  L angage

7

Echange et partage d’informationEchange et partage d’information En XML, une communauté d'auteurs invente librement les

balises qui lui paraissent utiles pour représenter les informations qu’ils comptent échanger ou partager

Exemple: diverses façons de représenter une date– <date> 5 Janvier 2000 </date>– <date> <a>2000</a><m>01</m><j>05</j> </date>– <date format='ISO-8601'> 2000-01-05 </date>

Exemples– Commandes en commerce électronique ou toute transaction– Publication et recherche d’information dans un domaine industriel

comme l’industrie des biotechnologies

Avantages de XMLAvantages de XML

Page 8: e X tended  M arkup  L angage

8

Interopérabilité des outils de traitementInteropérabilité des outils de traitement

Existence d’outils pour le traitement des données au format XML– Parseurs, éditeurs, browser…

Conséquences:– Un serveur de documents XML est susceptible

de répondre à l'ensemble des besoins d'une organisation.

– Un seul éditeur permet de traiter l'ensemble des données d'une organisation.

Avantages de XML (suite)Avantages de XML (suite)

Page 9: e X tended  M arkup  L angage

9

XML XML Context

XML : Représentation de données DTD (Document Type Definition): Structure du document XSD (XML Schema Definition) = DTD en XML XLink (XML Linking Language): Liens étendus XHTML = « HTML aux normes XML » DOM (Document Object Model): Modèle de données SAX (Simple API for XML): Parser XPath: Structuration du parsing (parcours du DOM) XSL (eXtended Stylesheet Language): Traitement FO (Formatting Objects): Formattage de texte XML Query Language: Requêtes (Quilt, XML-QL, XQL,etc) …

Page 10: e X tended  M arkup  L angage

10

•Traitement du XMLXML ApplicationXML Application

Page 11: e X tended  M arkup  L angage

11

XML Bien ForméXML Bien Formé Contient un ou plusieurs éléments

– Non vide Un seul point de départ

– Racine– les valeurs d'attributs doivent être entre guillemets – Les balises de fermeture sont obligatoire

Imbrication correcte (arbre)– Structure hiérarchique– Les balises ne doivent pas se chevaucher :

Un élément ne peut avoir des attributs vides <DL COMPACT> incorrecte <DL COMPACT=""> correcte

<CIN><prénom>Jalil</prénom><nom>Rizk<nom><numéro>A11437398</numéro><Photo url="ar.gif"/>

</CIN>

ElémentElément racineracine

Page 12: e X tended  M arkup  L angage

12

Structure d'un élément Structure d'un élément Un élément est de la forme:

<nom attr='valeur'> contenu </nom> <nom> est la balise d'ouverture </nom> est la balise de fermeture [ éléments vides, indifféremment <nom> </nom> ou <nom/> ]

contenu est le contenu d'un élément – composé d’une liste (peut-être vide) de texte, d'autres éléments,

d'instructions de traitement et de commentaires attr='valeur' représente un ensemble éventuellement

vide d'attributs, c'est à dire de paires (nom,valeur). Un élément ne peut posséder qu'un seul attribut de nom donné

Page 13: e X tended  M arkup  L angage

13

XML en arbreXML en arbreEntête

adresses

personne

type nom prenom adresse

personne

type nom prenom adresse

Page 14: e X tended  M arkup  L angage

Instructionsde traitement

Type dedocument

Corps dudocument

Racine dudocument

Attribut

Element vide

Element non-vide

Commentaire

Balise d'ouverture Balise de fermeture

Declaration<? xml version = "1.0" ?><? xml-stylesheet href = "http://high-Tech.edu.ma/XMLToHTML.xsl"

type = "text/xsl" version = "1.0" ?><? cocoon-process type = "xslt" ?><! DOCTYPE adresses SYSTEM "http:// high-Tech.edu.ma/ Adr.dtd">

<!--Ceci est un commentaire-->< adresses> <personne id= « C254898 " > <type classe= "enseignant" rang="MA"/> <nom>Miloudi</nom> <prenom>Jamal</prenom> <adresse>Agdal, Ecole High-Tech</adresse> </personne></adresses >

Entête dudocument ou prologue

Exemple XML (annoté)Exemple XML (annoté)

Page 15: e X tended  M arkup  L angage

15

Déclaration de DTDExemple de document XML : Une DTD simple<?xml version="1.0" encoding="ISO-8859-1"

standalone="no"?><!ELEMENT Personne (Nom, Profession*) ><!ELEMENT Nom (Prenom, Nom_Famille) ><!ELEMENT Prenom(#PCDATA) ><!ELEMENT Nom_Famille(#PCDATA) ><!ELEMENT Profession (#PCDATA) >

<Personne> <Nom> < Prenom >Mohamed</ Prenom > < Nom_Famille >Ali</ Nom_Famille > </Nom> <Profession>Boxeur</Profession></Personne>

Définition de type de documentDéfinition de type de document

Page 16: e X tended  M arkup  L angage

16

Contrainte sur les noms (détail)Contrainte sur les noms (détail) Un nom d'élément ou d’attribut est une suite non vide de caractères pris

parmi – les caractères alphanumériques; le tiret-souligné (undescore); le signe moins;

le point; – le caractère deux-points (:) sens particulier

qui doit satisfaire les contraintes suivantes– le premier caractère doit être alphabétique ou un tiret-souligné– les trois premiers caractères ne doivent pas former une chaîne dont la

représentation en lettres minuscules est "xml".

Exemples de noms d'élémentscorrects incorrects

_totoNom_sociétéxsl:ruleX.11

1998-catalogueXmlSpécifificationnom société

Page 17: e X tended  M arkup  L angage

17

Syntaxe des attributs Syntaxe des attributs Un attribut est une paire nom='valeur' qui permet de

caractériser un élément. Un élément peut avoir plusieurs attributs. Dans ce cas, les paires nom='valeur' seront séparées par un espace.– <rapport langue='fr' dern-modif='08/07/99'>– <annuaire generator='SQL2XML V2.0'

update='07.08.99'> La valeur d'un attribut est une chaîne encadrée par des

guillemets (") ou des apostrophes simples ('). Une valeur d'attribut ne doit pas contenir les caractères ^, % et &.

Un élément a un ensemble d ’attributs (ordre n’a pas de sémantique pour les attributs)

Page 18: e X tended  M arkup  L angage

18

Déclaration de DTDDéclaration interneDéclaration d'élémentsExemple: Déclaration interne de la DTD "Person"

<?xml version="1.0" encoding="ISO-8859-1" ?><!DOCTYPE Personne [ <!ELEMENT Prenom(#PCDATA)> …]><Personne> …</Personne>

Définition de type de document Définition de type de document

Page 19: e X tended  M arkup  L angage

19

Définition de type de documentDéfinition de type de document Déclaration de DTD

Déclaration externe

Exemple: Déclaration externe de la DTD "Person"

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?><!DOCTYPE Personne SYSTEM "personne.dtd"><Personne> <Nom> <Prenom>Karim</Prenom> <Nom_Famille>Najoui</Nom_Famille> </Nom></Personne>

Page 20: e X tended  M arkup  L angage

20

Déclaration d'éléments<!ELEMENT nom_élément (modèle_contenu)>

#PCDATASous-élémentsSéquencesNombres de sous-élémentsChoixParenthèsesContenu mixteEléments videsANY

Définition de type de documentDéfinition de type de document

Page 21: e X tended  M arkup  L angage

21

Définition De Type De DocumentDéfinition De Type De Document

Déclaration d'éléments#PCDATA

<!ELEMENT Prénom (#PCDATA)>

Sous-éléments

<!ELEMENT Fax (Tel)>

L'élément Fax doit et ne peut contenir qu'un et un seul élément TelSéquences<!ELEMENT Nom (Prénom, Nom_Famille)>

• Prénom et Nom_Famille sont obligatoire

• Leur ordre d'apparition est défini et ne peut être inversé

• Aucun élément supplémentaire n'est toléré

Page 22: e X tended  M arkup  L angage

22

Définition De Type De DocumentDéfinition De Type De DocumentNombre de sous-éléments

<!ELEMENT Nom (Prénom, SurNom?, Nom_Famille)>

• ? Autorise zéro ou un élément

• * Autorise zéro ou un ou plusieurs éléments

• + Autorise un ou plusieurs élémentsChoix

<!ELEMENT Paragraphe (#PCDATA | Paragraphe)*>

<!ELEMENT Nom (Nom_Famille | Dénomination)>

Contenu mixte

Page 23: e X tended  M arkup  L angage

23

Parenthèses

<!ELEMENT Cercle (Centre, (Rayon | Diamètre))>

Exemple :

< Cercle Cercle >

< CentreCentre ><x>12</x><y>0</y></ CentreCentre >

< DiamètreDiamètre >3</ DiamètreDiamètre >

</ Cercle Cercle >

Définition De Type De DocumentDéfinition De Type De Document

Page 24: e X tended  M arkup  L angage

24

Déclaration d'élémentsEléments vides

ANY

<!ELEMENT Image (Empty)>

<!ELEMENT Document (ANY)>

Exemple : la balise image HTML

<Image source="moto.jpg" width="200" height="100"/>

A éviter !!!

Définition De Type De DocumentDéfinition De Type De Document

Page 25: e X tended  M arkup  L angage

25

<!ATTLIST Nom_Element  Nom Type Defaut  Nom Type Defaut  ... >

Définition De Type De DocumentDéfinition De Type De DocumentDéclaration d'attributs

<?xml version="1.0" standalone="yes"?><!DOCTYPE gestionnaire [ <!ELEMENT gestionnaire (répertoire)> <!ELEMENT répertoire (#PCDATA)> <!ATTLIST répertoire fichier NMTOKEN #REQUIRED>]>

CDATAIDIDREFIDREFSENTITYENTITIESNMTOKENNMTOKENSénumération

#REQUIRED#IMPLIED#FIXED

Page 26: e X tended  M arkup  L angage

26

Types d'attributs

Déclaration d'attributs

Peut contenir n'importe quelle chaîne de caractères possibles dans la valeur d'un attribut XML bien formé. C'est le type d'attribut le plus général.

•CDATA

•NMTOKEN

•NMTOKENS

Un attribut de type NMTOKENS contient une ou plusieurs unités lexicales nominales séparées par des blancs.

Définition De Type De DocumentDéfinition De Type De Document

NMTOKEN est une unité lexicale nominale XML.

Page 27: e X tended  M arkup  L angage

27

Déclaration d'attributsTypes d'attributs

•Enumération

<!ATTLIST Date Jour (Lundi | Mardi | Mercredi | Jeudi | Vendredi | Samedi | Dimanche)>

•ID

Doit contenir un nom XML (non une unité lexicale nominale) qui est unique dans le document.

Ex: <Employé No_Cin=" A17705">

•IDREF

Fait référence à un attribut de type ID.

Définition De Type De DocumentDéfinition De Type De Document

Page 28: e X tended  M arkup  L angage

28

Contient une liste d'ID.

•IDREFS

Déclaration d'attributsTypes d'attributs

•ENTITYContient le nom d'une entitée non-parsée déclarée n'importe où dans la DTD.

•ENTITIESContient une liste d'entités (séparées par un blancs) non-analysées déclarées n'importe où dans la DTD.

•NOTATIONContient le nom d'une notation déclarée dans la DTD.<?xml version="1.0" standalone="no"?><!DOCTYPE vidéothèque [ <!ELEMENT vidéothèque (vidéo)> <!ELEMENT vidéo EMPTY> <!ATTLIST vidéo source ENTITY #REQUIRED> <!NOTATION avi SYSTEM "video/avi"> <!ENTITY vacance SYSTEM "mes_vacances.avi" NDATA avi>]><vidéothèque> <vidéo source="&vacance;"/><vidéothèque>

Définition De Type De DocumentDéfinition De Type De Document

<?xml version="1.0" standalone="yes"?><!DOCTYPE site [<!ENTITY fichier SYSTEM "fichier.zip"><!ELEMENT téléchargement (#PCDATA)><!ATTLIST téléchargement source ENTITY #REQUIRED><!ELEMENT site (téléchargement)>]><site><téléchargement source="fichier">Cliquez ici pour télécharger le fichier</téléchargement></site>

Page 29: e X tended  M arkup  L angage

29

Déclaration d'attributsAttribut par défaut•#IMPLIED

L'attribut est optionnel.

•#REQUIREDL'attribut est obligatoire.

•#FIXEDLa valeur de l'attribut est fixe et non modifiable.

Ex: <!ATTLIST biography xlmns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">

•LittéralLa valeur par défaut en tant que chaîne entre guillemets.

Ex: <!ATTLIST Réseau Protocole NMTOKEN "http">

Définition De Type De DocumentDéfinition De Type De Document

Page 30: e X tended  M arkup  L angage

30

Attributs PrédéfinisAttributs Prédéfinis Il existe des noms d'attributs prédéfinis: xml:lang

– déclare la langue utilisé dans le contenu de l ’élement et prend des valeurs de type code de langue

(p.ex. en ou fr-CH) <!ATTLIST fichier xml:lang NMTOKEN #FIXED 'fr'>

<!ATTLIST file xml:lang NMTOKEN #FIXED 'en-GB'> Xml:space

– permet de préserver les espaces pour la présentation de l ’élement

<!ATTLIST fichier xml:space (default|preserve) ’preserve'>

– La déclaration des attributs d'un élément utilisant un de ces attributs prédéfinis doit explicitement mentionner l'attribut prédéfini. Par exemple:

<!ATTLIST UnElement xml:lang NMTOKEN 'en-US'> <!ATTLIST pre xml:space (preserve) #FIXED ’preserve’>

Page 31: e X tended  M arkup  L angage

31

Les sections CDATALes sections CDATA Les sections CDATA permettent de ne pas traiter les blocs de

texte comportant des caractères qui seraient normalement identifiés comme du balisage. Les sections CDATA commencent par la chaîne "<![CDATA[" et se terminent par la chaîne "]]>". La chaîne ']]>' ne doit pas figurer à l'intérieur d'une section CDATA.

Section CDATA :               <exemple>                    <![CDATA[ <aaa>bb&cc<<<]]>              </exemple>               Une section CDATA ne doit pas comporter la chaîne de caractères ']]>' :

               <exemple>                    <![CDATA[ <aaa>bb ]]>cc<<<]]>               </exemple>

Pose problème Pose problème à l’analyseurà l’analyseur

Page 32: e X tended  M arkup  L angage

32

• Déclaration des entités

Définition De Type De DocumentDéfinition De Type De Document

•Entité générale interneEntité générale interneuniquement utilisé dans le document sous la forme uniquement utilisé dans le document sous la forme &titre;&titre;

<!ENTITY titre <!ENTITY titre ""Langage XML">Langage XML">

•Entité paramêtre interneEntité paramêtre interneuniquement dans la DTDuniquement dans la DTD

<!ENTITY %attname "name ID #REQUIRED"><!ENTITY %attname "name ID #REQUIRED">

•Entité paramêtre externeEntité paramêtre externeuniquement dans la DTDuniquement dans la DTD

<!ENTITY %nouveau SYSTEM "nouveau.txt"><!ENTITY %nouveau SYSTEM "nouveau.txt">

•Entité générale externeEntité générale externeuniquement dans la DTDuniquement dans la DTD

<!ENTITY arch PUBLIC "archive.z" NDATA gzip><!ENTITY arch PUBLIC "archive.z" NDATA gzip>

•Entité générale préféfiniesEntité générale préféfinies&lt; &amp; &gt; &quot; &apos&lt; &amp; &gt; &quot; &apos

Page 33: e X tended  M arkup  L angage

33

Déclaration d'entités paramètresServent à définir des symboles qui seront utilisés ailleurs dans la DTD. Partout où une entité est mentionnée, elle peut être remplacée par la chaîne de caractères qui lui est associée.

Exemple: Déclaration d'une entité paramètre<!ENTITY % list "UL | OL"><!ENTITY % preformatted "PRE"><!ENTITY % block"P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT | BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS">

<!ENTITY % heading "H1|H2|H3|H4|H5|H6">

Toute occurence de %heading; doit être remplacée par H1|H2|H3|H4|H5|H6

Définition De Type De DocumentDéfinition De Type De Document

Page 34: e X tended  M arkup  L angage

34

Les instructions de Les instructions de traitementstraitements

Les instructions de traitements sont destinées aux applications qui traiteront le document

<?application instruction+ ?>Exemple avec les feuilles de style :

<?xml-stylesheet type="text/xsl" href="article2xhtml.xsl"?><?xml-stylesheet type="text/css" href="article.css"?>

Page 35: e X tended  M arkup  L angage

35

Donnez la DTD de ce document recette

Page 36: e X tended  M arkup  L angage

36

Recette.dtdRecette.dtd

Page 37: e X tended  M arkup  L angage

37

ExeExemplesmples<?xml version="1.0" standalone="yes"?><!DOCTYPE magasin [ <!ELEMENT magasin (service+)> <!ELEMENT service (produit*)> <!ATTLIST service code ID #REQUIRED> <!ELEMENT produit (#PCDATA)> <!ATTLIST produit code ID #REQUIRED>]><magasin> <service code="A001"> <produit code="4DE205"> Soupe </produit> <produit code="2TM206"> Condiment </produit> <produit code="3KJ227"> Conserve </produit> </service> <service code="A003"> <produit code="1OU152"> Lessive </produit> <produit code="8AH070"> Essui-tout </produit> </service></magasin>

Page 38: e X tended  M arkup  L angage

38

ExemplesExemples<?xml version="1.0" standalone="yes"?><!DOCTYPE société [ <!ATTLIST société codes_services IDREFS #IMPLIED> <!ELEMENT société (service+)> <!ELEMENT service (employé*)> <!ATTLIST service code ID #REQUIRED> <!ELEMENT employé (#PCDATA)> <!ATTLIST employé code ID #REQUIRED> <!ATTLIST employé code_service IDREF #REQUIRED>]>

<société codes_services="A001 A003"> <service code="A001"> <employé code="E205" code_service="A001"> Jean Dupont </employé> <employé code="E206" code_service="A001"> Frédéric Marc </employé> <employé code="E207" code_service="A001"> Fabrice Detterne </employé> <employé code="H107" code_service="A003"> Angélique Millet </employé> </service> <service code="A003"> <employé code="A115" code_service="A003"> Isabelle Mascot </employé> </service></société>

Page 39: e X tended  M arkup  L angage

39

ExemplesExemples<?xml version="1.0" standalone="yes"?><!DOCTYPE site [ <!ENTITY fichier SYSTEM "fichier.zip"> <!ELEMENT téléchargement (#PCDATA)> <!ATTLIST téléchargement source ENTITY #REQUIRED> <!ELEMENT site (téléchargement)>]><site> <téléchargement source="fichier"> Cliquez ici pour télécharger le fichier </téléchargement></site>___________________________________________________________________________<?xml version="1.0" standalone="yes"?><!DOCTYPE collection [ <!ENTITY image SYSTEM "http://www.monsite.com/image.gif"> <!ENTITY image2 SYSTEM "http://www.monsite.com/image2.gif"> <!ENTITY image3 SYSTEM "http://www.monsite.com/image3.gif"> <!ENTITY image4 SYSTEM "http://www.monsite.com/image4.gif"> <!ENTITY imageN SYSTEM "http://www.monsite.com/imageN.gif"> <!ELEMENT album EMPTY> <!ATTLIST album source ENTITIES #REQUIRED> <!ELEMENT collection (album)>]><collection> <album source="image image2 image3 image4 imageN"/></collection>

Page 40: e X tended  M arkup  L angage

40

Les espaces de nommage Les espaces de nommage Les espaces de nommage sont particulièrement

importants quand les noms d'éléments ou d'attributs provenant de domaines différents se contredisent.

Ce n'est que par la référence à un espace de nommage qu'il devient clair comment l'élément doit être interprété.

Supposons qu'il y ait deux fois, dans un document XML un élément nommé Pilote. Une fois, il se réfère au domaine informatique et l’autre fois au domaine aéronautique <pilote>Mr Mohamed Be Ali</pilote><pilote>carte réseau</pilote>

<pilote xmlns:aero = "http://aeronautique.org/RAM" >Mr Mohamed Be Ali</pilote><pilote xmlns:inf = "http://Computer.org/HP" >carte réseau</pilote>

Page 41: e X tended  M arkup  L angage

41

Les DTD ne sont pas écrites en XML, ce qui signifie que les technologies existantes pour manipuler des documents XML telles que DOM ou SAX ne peuvent être utilisées pour « parser » des schémas de documents.

Les DTD ne supportent pas les espaces de nom ce qui rend impossible l'import de schémas externes afin de réutiliser du code existant.

Les DTD n'offrent qu'un typage très limité des données.

Limites des DTDLimites des DTD

Page 42: e X tended  M arkup  L angage

42

Forme sérialisée et forme Forme sérialisée et forme arborescente des document arborescente des document

XMLXML Il existe deux représentations d’un document

XML.– Forme sérialisée : c’est la forme courante, où le

contenu est marqué par des balises.– Forme arborescente : elle met en évidence la structure

du document.– Il est plus facile de raisonner sur la forme

arborescente pour concevoir des traitements

– Un typage simplifié par rapport à celui de DOM

Page 43: e X tended  M arkup  L angage

43

Un document sous forme Un document sous forme sérialiséesérialisée

Cette représentation permet le stockage et l’échange de documents.

<? xml version=" 1.0" encoding=" ISO- 8859- 1"?><CINEMA>

<NOM>Epée de Bois</ NOM><ADRESSE>100, rue Mouffetard</

ADRESSE><METRO>Censier- Daubenton</

METRO></ CINEMA>

Page 44: e X tended  M arkup  L angage

44

Le même, sous forme arborescenteLe même, sous forme arborescente La structure des arbres XML est définie par le Document Object

Model (DOM), qui analyse le document et crée et une représentation arborescente avec des nœuds typé :

le noeud racine est de type Document, les catégories syntaxiques (commentaires,balises, texte) se traduisent par différents types de noeuds (Element ,Text, Attribut, ProcessingInstruction, Comment, CDataSection )

les noeuds constituent un arbre qui reflète l’imbrication des éléments dans la forme sérialisée

Nom

CINEMA

ADRESSE METRO

Épée de bois 100, rue Mouffetard Censier- Daubenton

Page 45: e X tended  M arkup  L angage

45

En pratique On utilise la forme sérialisée :

Pour stocker un document dans un fichier et pour échanger des documents La forme arborescente :

Permet de spécifier des manipulations de données XML; utilisée par certaines applications qui gèrent l’ensemble du document en mémoire (exemple : éditeurs XML)

<?xml version="1.0" encoding="ISO-8859-1"?>

<!-- Commentaire -->

<A>Le texte de A

<B>Le texte de B</B>

<D attr1="1" attr2="azerty">

<C/></D>

<![CDATA[2x < y]]></A>

Page 46: e X tended  M arkup  L angage

46

API XMLAPI XML

DOM pour manipuler un document XML depuis un langage de programmation VB, Java, JavaScript, Jscript, ...

SAX (Simple API for XML) orienté événement au cours de l ’ analyse, le parseur appelle des fonctions de callback quand il rencontre le début/ fin du document et des éléments

Page 47: e X tended  M arkup  L angage

47

Analyeur XMLAnalyeur XML

Page 48: e X tended  M arkup  L angage

48

Traitement DOM Traitement DOM

Page 49: e X tended  M arkup  L angage

49

MSXML Document Object Model (DOM)MSXML Document Object Model (DOM)

Object Interface DescriptionDocuments DOMDocument Un document XML

Nodes IXMLDOMNode Tout type de noeud

Nodelists IXMLDOMNodeList Collection de noeuds

Elements IXMLDOMElement Noeud Element, hérite de IXMLDOMNode

Attributes IXMLDOMAttribute Noeud Attribute, hérite de IXMLDOMNode

Microsoft XML Parser (MSXML.DLL) qui vient avec Internet Explorer 5 expose un ensemble d’interfaces accessible au Visual Basic

Private Sub test()

Dim xmlDoc As New DOMDocument

Dim strXMLContent As String, success As Boolean

strXMLContent = "<cd><title>Showbiz</title><band>Muse</band></cd>"success = xmlDoc.loadXML(strXMLContent)If success = True Then

MsgBox xmlDoc.xml Else MsgBox "impossible de charger le contenu XML " & strXMLContent End If End Sub

Pour utiliser les objet DOM il faut référencer le composant Microsoft

XML dans le projet

Page 50: e X tended  M arkup  L angage

50

API DOMAPI DOMLe modèle d'objet spécifié par le W3C défini 12 types de noeuds différents.

Le modèle d'objet de document fourni tout une panoplie d'outils destinés àconstruire et manipuler un document XML. Pour cela, le DOM met à disposition des interfaces, des méthodes et des propriétés permettant de gérer l'ensemble des composants présents dans un document XML.

Le DOM spécifie diverses méthodes et propriétés permettant notamment, de créer (createNode…), modifier (replaceChild…), supprimer (remove…) ou d'extraire des données (get…) de n'importe quel élément ou contenu d'un document XML.

De même, le DOM définit les types de relation entre chaque noeud, et desdirections de déplacement dans une arborescence XML. Les propriétésparentNode, childNodes, firstChild, lastChild, previousSibling et nextSibling permettent de retourner respectivement le père, les enfants, le premier enfant, le dernier enfant, le frère précédent et le frère suivant du nœud courant.

Le modèle d'objet de document offre donc au programmeur les moyens detraiter un document XML dans sa totalité

Page 51: e X tended  M arkup  L angage

51

L’interface NodeL’interface Node

Propriétés :attributes, childNodes, firstChild, lastChild, localName, namespaceURI,nextSibling, nodeName, nodeType, nodeValue, ownerDocument, parentNode, prefix,previousSiblingMéthodes :appendChild, cloneNode, hasAttributes, hasChildNodes, insertBefore, isSupported,normalize, removeChild, replaceChild

L’interacfe Node représente un noeud de l'arborescence d'un document XML.

Page 52: e X tended  M arkup  L angage

52

Chargement d’un contenu XMLChargement d’un contenu XML

En définissant la propriété Async

du document sur False, l'analyseur

ne rend pas la main à votre code

tant que le document n'est pas

entièrement chargé . .

Active la validation du document par la DTD ou le schéma

Uninitialized : 0

Loading : 1 Loaded : 2

Interactive : 3 Completed : 4

Page 53: e X tended  M arkup  L angage

53

Errors Handling dans le modèle Errors Handling dans le modèle DOMDOM

Déclaration de l’objet erreur

Récupération de l’objet erreur L’objet parseError est une

propriété en lecture seule de l’objet

DOMDocument

Page 54: e X tended  M arkup  L angage

54

La gestion des blancs La gestion des blancs

Page 55: e X tended  M arkup  L angage

55

Déplacement dans l’arbreDéplacement dans l’arbre

Page 56: e X tended  M arkup  L angage

56

Manipulation des nœuds DOMManipulation des nœuds DOM

Création du nœud

newNode

Ajout du nœud newNoeud au nœud root

Le résultat : <root><name/></root>

Page 57: e X tended  M arkup  L angage

57

Manipulation des nœuds DOMManipulation des nœuds DOM

Le résultat : <root><name>Juicy Studio</name></root>

Page 58: e X tended  M arkup  L angage

58

Affichage de Contenu DOMAffichage de Contenu DOM

Appel récursif

Parcours de la collection des

noeuds

Page 59: e X tended  M arkup  L angage

59

Lecture d'un flux XML via SAX Lecture d'un flux XML via SAX

Instanciation du gestionnaire d’erreur

Instanciation de l’analyseur XML

Instanciation du ContentHandler ou

gestionnaire de Contenu

Association du contenthandler à l’analyseur XML

Association du Errorhandler à l’analyseur XML

Lancement de l’analyse

Voyons comment l’analyseur travaille ?

Page 60: e X tended  M arkup  L angage

60

Principe de SAXPrincipe de SAXLe parseur analyse le flot de caractères du document et appelle des méthodes dites de callback lors qu ’ il rencontre les balises de début et de fin du document et des éléments

<?xml version="1.0" encoding="ISO-8859-1" ?><tests> <test id="1" nom="mon test"/> <test id="2" nom="test 2" type="rien">Un peu de texte </test></tests

ContentHandler

SAXXMLReader30

L’implémentation de l’analyseur est

fournie

ContentHandler est juste une interface, il

faut l’implémenter

Page 61: e X tended  M arkup  L angage

61

Principe de SAXPrincipe de SAX

Page 62: e X tended  M arkup  L angage

62

Exemple d’implementation de ContentHandlerExemple d’implementation de ContentHandler

appelée par le parser une et une seule fois au démarrage de l'analyse du document xml

appelée à la fin du parcours du document après toutes les autres méthodes.

appelée au début, permet de localiser "le curseur" pendant le traitement du document

appelée à la rencontre d'un élément XML IVBSAXContentHandler_startElement(strNamespaceURI As String, strLocalName As String, strQName As String, ByVal oAttributes As MSXML2.IVBSAXAttributes) où strNameSpaceUri est la chaîne de caractères contenant l'URI complète de l'espace de nommage du tag ou une chaîne vide si le tag n'est pas compris dans un espace de nommage, strLocalName est le nom du tag sans le préfixe s'il y en avait un, strQName est le nom du tag version xml 1.0 c'est à dire $prefix:$localname, Enfin oAttributes est la liste des attributs du tag

Mme Agueznay
import org.xml.sax.*;import org.xml.sax.helpers.XMLReaderFactory;public class LocatorDemo implements ContentHandler { private Locator locator; public void setDocumentLocator(Locator locator) { this.locator = locator; } private void printLocation(String s) { int line = locator.getLineNumber(); int column = locator.getColumnNumber(); System.out.println( s + " at line " + line + "; column " + column ); } public void startDocument() { printLocation("startDocument()"); } public void endDocument() { printLocation("endDocument()"); } public void startElement(String namespaceURI, String localName, String qualifiedName, Attributes atts) { printLocation("startElement()"); } public void endElement(String namespaceURI, String localName, String qualifiedName) { printLocation("endElement()"); } public void characters(char[] text, int start, int length) { printLocation("characters()"); } public void startPrefixMapping(String prefix, String uri) { printLocation("startPrefixMapping()"); } public void endPrefixMapping(String prefix) { printLocation("endPrefixMapping()"); } public void ignorableWhitespace(char[] text, int start, int length) { printLocation("ignorableWhitespace()"); } public void processingInstruction(String target, String data) { printLocation("processingInstruction()"); } public void skippedEntity(String name) { printLocation("skippedEntity()"); } public static void main(String[] args) { if (args.length == 0) { System.out.println("Usage: java SAXSpider URL1"); } String uri = args[0]; try { XMLReader parser = XMLReaderFactory.createXMLReader(); // Install the ContentHandler ContentHandler handler = new LocatorDemo(); parser.setContentHandler(handler); parser.parse(uri); } catch (Exception e) { System.err.println(e); } } // end main} // end LocatorDemo
Mme Agueznay
import org.xml.sax.*;import org.xml.sax.helpers.XMLReaderFactory;public class LocatorDemo implements ContentHandler { private Locator locator; public void setDocumentLocator(Locator locator) { this.locator = locator; } private void printLocation(String s) { int line = locator.getLineNumber(); int column = locator.getColumnNumber(); System.out.println( s + " at line " + line + "; column " + column ); } public void startDocument() { printLocation("startDocument()"); } public void endDocument() { printLocation("endDocument()"); } public void startElement(String namespaceURI, String localName, String qualifiedName, Attributes atts) { printLocation("startElement()"); } public void endElement(String namespaceURI, String localName, String qualifiedName) { printLocation("endElement()"); } public void characters(char[] text, int start, int length) { printLocation("characters()"); } public void startPrefixMapping(String prefix, String uri) { printLocation("startPrefixMapping()"); } public void endPrefixMapping(String prefix) { printLocation("endPrefixMapping()"); } public void ignorableWhitespace(char[] text, int start, int length) { printLocation("ignorableWhitespace()"); } public void processingInstruction(String target, String data) { printLocation("processingInstruction()"); } public void skippedEntity(String name) { printLocation("skippedEntity()"); } public static void main(String[] args) { if (args.length == 0) { System.out.println("Usage: java SAXSpider URL1"); } String uri = args[0]; try { XMLReader parser = XMLReaderFactory.createXMLReader(); // Install the ContentHandler ContentHandler handler = new LocatorDemo(); parser.setContentHandler(handler); parser.parse(uri); } catch (Exception e) { System.err.println(e); } } // end main} // end LocatorDemo
Page 63: e X tended  M arkup  L angage

63

Exemple d’implementation de ContentHandlerExemple d’implementation de ContentHandler

Cet événement est levé à chaque fois que des espaces normalement ignorés sont rencontrés.

appelée à la fin du parcours d’un élément

événement levé par la présence de texte entre la balise d'ouverture et la balise de fermeture

Si le parser ne lit pas la dtd, il ne peut résoudre les entités et il appéle la méthode à la rencontre de chaque entité non résolue. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"> <body> <h1>My resum&eacute;</h1> </body> </html>

Cet événement est lancé à chaque fois qu'une balise située dans un espace de nommage est rencontrée.

Page 64: e X tended  M arkup  L angage

64

Exemple d’implementation de ContentHandlerExemple d’implementation de ContentHandler

Cet événement est lancé à chaque fois qu'une balise située dans un espace de nommage est rencontrée. Les attributs comme xmlns="http://ns.idns.org/" et xmlns:xlink="http://www.w3.org/1999/xlink" ne sont pas inlus dans la liste des attributs passés à la méthode startElement(). Ils sont signalés par un appel à la méthode startPrefixMapping() immédiatement avant l’appel à la méthode startElement()

Appelée à la fin du traitement dans un espace de nommage, immédiatement après l’événement endElement.

Page 65: e X tended  M arkup  L angage

65

SAX en JavaSAX en Java