• Aucun résultat trouvé

Introduction au XML 1

N/A
N/A
Protected

Academic year: 2022

Partager "Introduction au XML 1"

Copied!
113
0
0

Texte intégral

(1)

Introduction au XML

(2)

II XML : Une premi` ere d´ efinition JJ

XML (eXtensible Markup Language) permet de repr´ esenter des donn´ ees semi-structur´ ees sous la forme d’un arbre en m´ emoire et d’un document.

<doc>

<personne>

<nom>A</nom>

<adresse>...</adresse>

</personne>

<ville>...</ville>

<pays>....</pays>

</doc>

<doc>

<personne>

<nom>A</nom>

<adresse>...</adresse>

</personne>

<ville>...</ville>

<pays>....</pays>

</doc>

Sérialisation

Analyse

(3)

II Historique d’XML JJ

(4)

I SGML J

1986 - SGML (Standard Generalized Markup Language). Un format texte enrichi de balises qui apportent une s´ emantique :

<!doctype linuxdoc system>

<article>

<title>SGML-Tools User’s Guide

<date>1.0 ($Revision: 1.14 $), 10 November 1997

<abstract>This document is a user’s guide</abstract>

<sect>Installation

<p>You can get <tt>sgml-tools-1.0.x.tar.gz</tt>

• Les r´ edacteurs travaillent sur le sens et pas la forme.

• Description de la structure d’un document (d´ efinition d’un jeu de balises).

• V´ erification de la validit´ e des documents.

• Portabilit´ e des documents.

(5)

I HTML J

1990 - HTML (Hyper Text Markup Language) :

• D´ evelopp´ e et normalis´ e par le W3C (World Wide Web Consortium) ( http://www.w3c.org ).

• Choix ` a priori d’un ensemble de balises : <body> , <table> , etc.

• Avantages : format texte portable et simple.

Discussion critique :

• Demandes continuelles de modifications (versions 3.0, 4.01, 5, etc.).

• M´ elange de balises s´ emantiques ( <address> , <title> , <h1> ) et de balises de mise en forme ( <b> , <i> , <font> ).

Une premi` ere r´ eponse : Feuille de style (CSS1 en 1996 et CSS2 en

1998 normalis´ es par le W3C, puis CSS3, ...).

(6)

II XML : eXtensible Markup Language JJ

• 1997 : L’adaptation de SGML aux besoins du WWW donne XML.

• Objectif 1 : S´ eparer la structure, les donn´ ees et la mise en forme.

XML

XSL CSS

de style

DTD Document

Type Definition

Informations

Feuilles

• Objectif 2 : Assurer la portabilit´ e des donn´ ees et faire en sorte d’utiliser

XML pour tous les ´ echanges.

(7)

II Un exemple XML complet JJ

Description simplifi´ ee d’un ensenble de produits :

produits.xml

<!DOCTYPE stock SYSTEM "produits.dtd">

<stock>

<produit>

<nom> Livre </nom>

<prix> 50 </prix>

</produit>

<produit>

<nom> CD </nom>

</produit>

</stock>

produits.dtd

<!ELEMENT stock (produit+) >

<!ELEMENT produit (nom,prix?)>

<!ELEMENT nom (#PCDATA)>

<!ELEMENT prix (#PCDATA)>

(8)

La feuille de style XSL (eXtensible Style Language) :

produits.xsl

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

<xsl:template match="stock">

<html><body>

<h1>Mes produits</h1>

<xsl:apply-templates/><!-- traiter les fils -->

</body></html>

</xsl:template>

<xsl:template match="produit">

<p><xsl:value-of select="nom"/></p>

</xsl:template>

</xsl:stylesheet>

(9)

le traitement des fichiers produits.xml , produits.dtd , produits.xsl donne le r´ esultat suivant :

produits.html

<html>

<body>

<h1>Mes produits</h1>

<p>Produit Livre </p>

<p>Produit CD </p>

</body>

</html>

(10)

II Utilisation du XML JJ

• XML pour communiquer :

application 1 application 2

XML

• Quelques exemples :

. protocole de transmission (XML-RPC, SOAP, Restful), . d´ efinition de normes (XHTML, SMIL, XML-FO, SVG), . Bases de donn´ ees semi-structur´ ee,

. Fichiers de configuration (JSP, EJB, ...),

• Avantages : portabilit´ e, extensibilit´ e, r´ eutilisation d’outils,

(11)

I XML pour v´ erifier un document J

• XML pour v´ erifier la conformit´ e :

DTD

XML

Validation

Oui

Non

• Avantages :

. Validit´ e assur´ ee

. Int´ egration facilit´ ee

. Aide ` a la r´ edaction

. Normalisation

(12)

I Production de documents ´ electroniques J

• Production de documents XML :

XML

HTML

FO

Text

PS

PDF

DVI XML

DTD

XSL

XSL Processeur

• On peut ajouter des sorties WML, XHTML ou des langages normalis´ es

d´ efinis ` a partir d’XML.

(13)

I Chaˆ ıne de traitement J

• Int´ egration de plusieurs sources de donn´ ees dans une chaˆ ıne de traitement XML :

S.G.B.D.R.

B.D. XML

XML

Production Extraction

Filtre XML

Publication HTML, WML, XML XSL

(14)

Pr´ esentation d’XML

(15)

II Introduction ` a XML JJ

• D´ efinition : XML est un langage de description de documents semi- structur´ es ( http://www.w3.org/XML/ ).

• Contenu d’un document XML :

. un prologue optionnel (encodage et DTD) . un et un seul ´ el´ ement

<message> Hello </message>

• Un document XML qui respecte les r` egles syntaxiques est dit bien form´ e.

Il est utilisable sans DTD.

(16)

II El´ ´ ements XML JJ

• El´ ´ ement sans contenu

• El´ ´ ement avec contenu textuel

• El´ ´ ement avec sous-´ el´ ements

• El´ ´ ement m´ elang´ e

(17)

I El´ ´ ement XML sans contenu J Le document XML le plus simple

est compos´ e d’un seul ´ el´ ement sans contenu. Deux exemples :

<message></message>

<message/>

Arbre en m´ emoire :

/ noeud racine

|

message noeud ´el´ement

DTD :

<!ELEMENT message EMPTY>

La partie fermante est obligatoire. Les noms (appel´ es des identificateurs en XML) sont libres mais ob´ eissent ` a quelques r` egles :

• 1er caract` ere dans { alphab´ etique, - (tiret), (soulign´ e) } ,

• les autres caract` eres dans { alphab´ etique, chiffre, - , } ,

• xml: au d´ ebut est interdit,

(18)

I El´ ´ ement avec un contenu textuel J

El´ ´ ement contenant du texte :

<message> Hello </message>

DTD :

<!ELEMENT message (#PCDATA)>

Arbre en m´ emoire :

/ noeud racine

|

message noeud ´el´ement

|

" Hello " noeud texte

Les deux syst` emes de codage des ruptures de lignes sont pris en charge.

L’encodage par d´ efaut est UTF-8 (caract` eres sur 1, 2, 3 ou 4 octets) ou UTF-16 (caract` eres sur deux ou quatre octets). L’arbre en m´ emoire est cod´ e la plupart du temps en UTF-8.

Les caract` eres sp´ eciaux < et & ne sont pas utilisables.

(19)

I El´ ´ ement avec sous-´ el´ ements J

Le contenu d’un ´ el´ ement peut ˆ etre compos´ e de plusieurs sous-´ el´ ements com- plets :

Un exemple :

<message>

<pour>Jean</pour>

<texte>Salut</texte>

</message>

DTD :

<!ELEMENT message (pour,texte)>

<!ELEMENT pour (#PCDATA)>

<!ELEMENT texte (#PCDATA)>

Arbre (4 fils pour message ) :

/ racine

|

message ´el´ement

|

+----+--+--+----+

| | | |

"\n__" | "\n__" | textes

| |

pour texte ´el´ements

| |

"Jean" "Salut" textes

(20)

I El´ ´ ement avec un contenu m´ elang´ e J

Le contenu d’un ´ el´ ement peut ˆ etre compos´ e d’une r´ ep´ etition de textes et de sous-´ el´ ements :

Exemple XHTML :

<div><i>Cours</i> le <b>lundi</b>.</div>

DTD :

<!ELEMENT div (#PCDATA|b|i)* >

<!ELEMENT b (#PCDATA)>

<!ELEMENT i (#PCDATA)>

Arbre en m´ emoire :

/ racine

|

div ´el´ement

|

+---+---+--+----+

| | | |

| " le " | "." textes

| |

i b ´el´ement

| |

"Cours" "lundi" texte

(21)

I Les attributs J

La partie ouvrante d’un ´ el´ ement peut ˆ etre enrichie par des couples attribut / valeur .

Exemple :

<message type="urgent">

Hello

</message>

DTD :

<!ELEMENT message (#PCDATA)>

<!ATTLIST message type CDATA #REQUIRED>

Arbre :

/ racine

|

message ´el´ement

|

+---+---+

| |

type="urgent" | attribut

|

"\n Hello\n" texte

• La valeur est entour´ ee d’apostrophes ( ’ ) ou de guillemets ( " ).

• Le nom d’un attribut est un identificateur XML.

(22)

I Utilisation des attributs J

Attributs ou sous-´ el´ ements ?

<produit nature="Blu-ray" prix=’20’> Star wars </produit>

ou

<produit>

<nature>Blu-ray</nature>

<prix>20</prix>

<nom>Star wars</nom>

</produit>

R` egle : L’attribut doit changer l’interpr´ etation des donn´ ees :

<prix monnaie="Euros"> 150 </prix>

(23)

I Les attributs r´ eserv´ es J

• xml:lang=’langue’ permet de d´ efinir la langue utilis´ ee dans l’´ el´ ement et tous les sous-´ el´ ements.

La langue suit la norme ISO 3166 d´ efinie par la RFC 1766 (Request For Comment). Par exemple fr ou en-US ou fr-FR .

• xml:space=’preserve’ pr´ eserve les espaces dans l’´ el´ ement et tous les sous-

´ el´ ements.

• xml:space=’default’ applique la politique par d´ efaut pour l’interpr´ etation des espaces dans l’´ el´ ement et tous les sous-´ el´ ements.

• xml:id="identificateur" permet d’associer une et une seule clef ` a un

´ el´ ement (peu utilis´ e)

<article xml:id="intro">

<titre>introduction `a XML</titre>

<paragraphe> ... </paragraphe>

</article>

(24)

II Les r´ ef´ erences d’entit´ es JJ

Les entit´ es sont des fragments de document XML d´ efinis dans la DTD et utilis´ es par &nom de l entit´ e; dans les documents XML. Il existe des entit´ es pr´ ed´ efinis :

Entit´ e Texte Alternative

&#nnn; caract` ere de code d´ ecimal nnn

&#xnnn; caract` ere de code hexad´ ecimal nnn

&quot; " &#34;

&amp; & &#38;

&apos; ’ &#39;

&lt; < &#60;

&gt; > &#62;

Un exemple d’utilisation des entit´ es

<texte commentaire=’Utilisation d&apos;entit´es’>

En HTML, la balise &lt;p&gt; est tr`es utile !

&#169; J.-L.&#160;Massat

</texte>

(25)

II Les commentaires JJ

Un exemple :

<!-- d´eb -->

<message>Bye<!-- M --></message>

<!-- fin -->

Arbre :

/ racine

|

+---+---+

| | |

<!-- d´eb --> | <!-- fin --> commentaires

|

message ´el´ement

| +---+---+

| |

"Bye" | texte

|

<!-- M --> commentaire

• Il ne doit pas y avoir de double tirets ( -- ) dans le texte,

• Les commentaires sont pr´ esents dans l’arbre en m´ emoire.

(26)

II Les instructions de traitement JJ

Les instructions de traitement introduisent un aspect proc´ edural.

Un exemple :

<?cible att1=’val1’ att2=’val2’ ?>

<message> Bye </message>

/ racine

|

+---+---+

| |

<?cible att1=’val1’ | inst. trait.

att2=’val2’ ?> |

|

message ´el´ement

|

"Bye" texte

• Cette instruction revient ` a appeler l’application cible en lui passant la valeur des attributs. Le sens des instructions de traitement d´ epend de l’application qui traite les documents XML.

• Voila un exemple : liaison entre XML et une feuille CSS.

<?xml-stylesheet

href="monStyle.css" media="screen"

(27)

II Types de noeud JJ

Dans un arbre XML (aussi appel´ e un arbre DOM), il existe six types de noeuds :

Type Nom Valeur Fils

racine non non oui

´ el´ ement oui non oui

attribut oui oui non

texte non oui non

commentaire non oui non

inst. de traitement non oui non

(28)

II Section litt´ erale JJ

Avec une section litt´ erale il est possible de stopper l’interpr´ etation des ca- ract` eres sp´ eciaux. La syntaxe est la suivante :

<![CDATA[ texte non soumi `a l’analyse ]]>

L’exemple pr´ ec´ edent devient

<texte>

<![CDATA[en HTML, la balise

<p> est tr`es utile !]]>

&#169; J.-L.&#160;Massat

</texte>

(29)

II Prologue : version et encodage JJ

Le prologue (optionnel) doit ˆ etre plac´ e au d´ ebut du document :

<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>

<message> Hello </message>

• L’encodage est bas´ e sur la norme ISO 10646 (Unicode). L’encodage par d´ efaut est UTF-8 ou UTF-16.

. UCS-4 : Universal Character Set, . UCS-2 : 2

16

possibilit´ es (BMP),

. UTF-16 : c’est UCS-2 plus une partie de UCS-4 (2

16

moins 2

10

plus 2

20

possibilit´ es).

. UTF-8 : codage de UTF-16 sur 8 bits.

• La version est 1.0 (Unicode 2.0) ou 1.1 (Unicode 4.0). La version par

d´ efaut est 1.0.

(30)

II Les espaces de noms JJ

Un probl` eme apparait si on m´ elange deux documents XML dont les ´ el´ ements ont le mˆ eme nom mais pas la mˆ eme d´ efinition. Par exemple

<produit>

<nom> ... </nom>

<description>

<taille> ... </taille>

<poids> ... </poids>

</description>

</produit>

<fournisseur>

<nom> ... </nom>

<description>

<adresse> ... </adresse>

<telephone> ... </telephone>

</description>

</fournisseur>

(31)

I Enrichir le nom des ´ el´ ements J

• Pour supprimer ces ambigu¨ ıt´ es, nous allons enrichir le nom des ´ el´ ements.

Il est maintenant compos´ e d’une partie locale et d’un espace de noms (qui est une URL).

<produit xmlns=’http://www.dil.univ-mrs.fr’>

<nom>...</nom>

<description>...</description>

</produit>

• Chaque r´ edacteur de document XML choisi l’espace de nom dans lequel il va cr´ eer ses ´ el´ ements.

• L’attribut xmlns (XML namespace ) fixe l’espace de nom par d´ efaut de l’´ el´ ement et de tous les sous ´ el´ ements (sauf indication contraire).

• Les espaces de noms doivent ˆ etre utilis´ es si un document XML est destin´ e

`

a ˆ etre m´ elang´ e ` a d’autres sources.

(32)

I Utiliser plusieurs espaces de noms J

• Pour faciliter plusieurs utilisations d’un espace de noms nous allons lui associer un surnom appel´ e le pr´ efixe.

<com:produit xmlns:com=’http://www.biz.com/commercial’>

<com:nom> ... </com:nom>

<com:description> ... </com:description>

<achat:fournisseur xmlns:achat=’http://www.biz.com/achat’>

<achat:nom> ... </achat:nom>

<achat:description> ... </achat:description>

</achat:fournisseur>

</com:produit>

Il est possible de rassembler la d´ efinition des pr´ efixes dans la racine et de les utiliser ensuite.

• Attention, le pr´ efixe n’est qu’une macro. C’est l’espace de nom qui

compte.

(33)

I Espace de noms, attributs et identificateurs J

Les attributs et les identificateurs peuvent b´ en´ eficier des espaces de noms.

Dans ce cas, l’utilisation d’un pr´ efixe est obligatoire.

<com:produit xmlns:com="http://www.biz.com/commercial" >

<com:prix com:monnaie = "com:Euro" >

100

</com:prix>

</com:produit>

(34)

II Style XML JJ

• Il faut coder les ´ el´ ements qui structurent le texte :

<paragraphe> texte du paragraphe </paragraphe>

mais ´ eviter

<paragraphe>

<ligne> Premi`ere ligne. </ligne>

<ligne> Deuxi`eme ligne. </ligne>

</paragraphe>

(35)

• Il faut remplacer le marquage typographique par un marquage s´ emantique. Le code

<p> Notre adresse <tt>www.dil.univ-mrs.fr</tt> appartient au <it>Departement Informatique</it>. </p>

devient

<texte>

Notre adresse <url>www.dil.univ-mrs.fr</url> appartient au <definition>Departement Informatique</definition>.

</texte>

(36)

• Eviter les ´ commentaires structur´ es et pr´ ef´ erer les m´ eta-informations.

Par exemple, le code

<personne>

<!-- mise `a jour le 10/11/18 -->

<nom>...</nom>

...

</personne>

doit ˆ etre ´ evit´ e au profit de

<personne>

<comment> mis `a jour le 10/11/18 </comment>

<nom>...</nom>

...

</personne>

• Soigner le choix entre attribut et sous-´ el´ ement. Les donn´ ees doivent ˆ etre plac´ es dans des ´ el´ ements.

Attention : seuls les ´ el´ ements sont exploitables par des feuilles de style

(37)

Pr´ esentation des DTD ( Do-

cument Type Definition )

(38)

II Introduction JJ

(39)

I Composantes d’une DTD J

• Les DTD viennent de SGML.

• La version XML est une simplification de la version SGML.

• Dans une DTD on trouve :

• des d´ eclarations d’´ el´ ements,

• des d´ eclarations d’attributs,

• des d´ eclarations d’entit´ es : . internes XML,

. externes XML ou non XML.

(40)

I Lien entre XML et DTD J

• La r´ ef´ erence ` a la DTD doit ˆ etre plac´ ee au d´ ebut du fichier :

hello.dtd

<!ELEMENT hello (#PCDATA) >

Fichier hello.xml valide

<!DOCTYPE hello SYSTEM "http://monserveur.fr/dtds/hello.dtd" >

<hello>Hello</hello>

• On peut enrichir la DTD avec des d´ eclarations locales plac´ ees le document XML :

<!DOCTYPE bye SYSTEM "http://monserveur.fr/dtds/hello.dtd" [

<!ELEMENT bye EMPTY >

]>

(41)

• On peut mˆ eme se passer de la DTD :

<!DOCTYPE bye [

<!ELEMENT bye EMPTY >

]>

<bye />

• Un document XML bien form´ e qui respecte sa DTD est dit valide. Il est plus facile d’´ ecrire des feuilles de style pour les documents valides !

• Les URL de DTD relatives sont interpr´ et´ ees ` a partir de la position du do-

cument XML.

(42)

II D´ efinition des ´ el´ ements JJ

(43)

I Contenu libre J

Dans ce cadre il n’y a aucune contrainte sur le contenu d’un ´ el´ ement :

<!ELEMENT doc ANY>

Exemples :

El´ ´ ements XML valides

<doc> Ceci est une <i>documentation</i> tr`es simple. </doc>

<doc> Un simple texte </doc>

<doc />

(44)

I Contenu vide J

C’est la contrainte la plus forte, le contenu doit ˆ etre vide :

<!ELEMENT ´el´ement-vide EMPTY>

Exemples :

El´ ´ ements XML valides

<´el´ement-vide></´el´ement-vide>

<´el´ement-vide/>

<´el´ement-vide />

(45)

I Contenu textuel J

L’´ el´ ement doit contenir du texte (´ eventuellement vide) analysable dans l’en- codage du document (Parsed Character Data) :

<!ELEMENT comment (#PCDATA)>

Exemples :

El´ ´ ements XML valides

<comment>

Un commentaire sur

la balise <![CDATA[<p>]]> et &lt;i&gt;

</comment>

<comment><!-- no comment --></comment>

<comment/>

(46)

I Contenu compos´ e J

Le contenu est compos´ e de plusieurs parties ordonn´ ees :

<!ELEMENT produit (nom,prix)>

<!ELEMENT nom (#PCDATA)>

<!ELEMENT prix (#PCDATA)>

Exemple :

El´ ´ ement XML valide

<produit>

<nom>XML par la pratique</nom>

<prix>20</prix>

</produit>

(47)

I Contenu alternatif J

Plusieurs choix sont possibles pour construire le contenu :

<!ELEMENT reponse (oui|non)>

<!ELEMENT oui EMPTY>

<!ELEMENT non EMPTY>

El´ ´ ements XML valides

<reponse> <oui/> </reponse>

<reponse> <non></non> </reponse>

(48)

I Contenu combin´ e J

L’utilisation des parenth` eses permet de combiner les contenus compos´ es et alternatifs :

<!ELEMENT personne (nom,((adr,ville)|(email,web))) >

El´ ´ ements XML valides

<personne>

<nom>Pierre</nom>

<adr>49 Bd de la R´evolution</adr>

<ville>Marseille</ville>

</personne>

<personne>

<nom>Paul</nom>

<email> [email protected] </email>

<web> http://monsite.fr </web>

</personne>

(49)

I R´ ep´ etition de contenu J

Les caract` eres ? , + , * ajout´ es ` a un contenu permettent de le r´ ep´ eter res- pectivement de 0 ` a 1 fois ( ? ), de 1 ` a n fois ( + ) ou de 0 ` a n fois ( * ).

<!ELEMENT chapitre (

nom, date?, auteur*, intro?,

(nom-de-section,corps-de-section)+ )>

Document XML valide

<chapitre>

<nom>Utiliser les DTD</nom>

<date>10/11/2002</date> <!-- optionnel -->

<!-- 0 `a n fois -->

<auteur>...</auteur><auteur>...</auteur>

<!-- optionnel -->

<intro>...</intro>

<!-- 1 `a n fois -->

<nom-de-section>Pr´eambule</nom-de-section>

<corps-de-section>...</corps-de-section>

</chapitre>

(50)

Cette version est pr´ ef´ erable :

<chapitre>

...

<section>

<nom-de-section>Pr´eambule</nom-de-section>

<corps-de-section>...</corps-de-section>

</section>

</chapitre>

voir mˆ eme

<chapitre>

...

<section>

<nom>Pr´eambule</nom>

<corps>...</corps>

</section>

</chapitre>

(51)

I Contenu mixte J

Le contenu mixte d´ enote un m´ elange entre texte et ´ el´ ements XML (l’´ etoile * est obligatoire) :

<!ELEMENT p (#PCDATA|b|i|tt)* >

El´ ´ ement XML valide

<p>Un <i>exemple</i> <b>important</b> de paragraphe <tt>HTML</tt></p>

On peut noter sur cet exemple les six noeuds fils de l’´ el´ ement p (trois de type

texte et trois de type ´ el´ ement).

(52)

II D´ efinition des attributs JJ

(53)

I D´ eclaration d’attribut J

• Syntaxe :

<!ATTLIST nom_´el´ement

nom_attribut_1 type_attribut_1 d´eclaration_de_d´efaut_1 nom_attribut_2 type_attribut_2 d´eclaration_de_d´efaut_2 ...

>

• Les d´ eclarations de d´ efaut :

’valeur’ valeur par d´ efaut,

#REQUIRED l’attribut doit ˆ etre renseign´ e,

#IMPLIED l’attribut est facultatif,

#FIXED ’valeur’ l’attribut a toujours la mˆ eme valeur

(54)

I Contenu textuel (CDATA) J

Les attributs de type CDATA contiennent des chaˆ ınes de caract` eres (les ca- ract` eres < et & ne sont pas autoris´ es).

<!ELEMENT a ANY>

<!ATTLIST a b CDATA #IMPLIED c CDATA ’Hello’

>

Exemples :

El´ ´ ements XML valides

<a b="coucou" c="10"> ... </a>

<a b="coucou &amp; salut" />

<a/>

(55)

I Identificateurs XML (NMTOKEN) J

Un attribut de type NMTOKEN ou NMTOKENS contient un ou plusieurs identifica- teurs XML s´ epar´ es par des blancs (espace, tabulation et/ou retour chariot) :

<!ELEMENT exercice (#PCDATA)>

<!ATTLIST exercice niveau NMTOKENS #IMPLIED>

Documents XML valides :

<exercice niveau="facile"> ... </exercice>

<exercice niveau="difficile facultatif"> ... </exercice>

(56)

I Liste d’identificateurs J

Exemple :

<!ELEMENT prix (#PCDATA)>

<!ATTLIST prix monnaie (euros|dollars) #REQUIRED>

Document XML valide :

<prix monnaie="euros"> 10 </prix>

Les valeurs possibles doivent ˆ etre des identificateurs (tokens) XML. Les listes

de valeurs n’existent que pour les attributs.

(57)

I Identifiant (ID) et r´ ef´ erence (IDREF ou IDREFS) J

Un attribut de type ID contient un identificateur XML qui doit ˆ etre unique dans le document (unicit´ e des clefs).

Un attribut de type IDREF contient un identificateur XML (ou plusieurs pour IDREFS ) qui doit ˆ etre pr´ esent dans un attribut typ´ e ID du document (contrainte de r´ ef´ erence).

Exemple de DTD

<!ELEMENT p (#PCDATA)>

<!ATTLIST p clef ID #IMPLIED>

<!ELEMENT lien (#PCDATA)>

<!ATTLIST lien ref IDREF #REQUIRED>

Document XML valide

<p clef=’intro’> Ceci est une intro... </p>

Ce d´etail est expliqu´e dans

(58)

II D´ efinition des entit´ es JJ

(59)

I Les entit´ es internes J

Les entit´ es internes sont des macros qui permettent de factoriser et de param´ etrer les documents XML.

<!ENTITY nom_entit´e "valeur">

Caract´ eristiques :

• les r´ ef´ erences se font par &nom entit´ e;

• les d´ efinitions circulaires sont interdites,

• le d´ eveloppement se fait ` a la demande,

• ils sont utilisables dans les documents XML.

(60)

Exemple :

<!ENTITY dom.luminy "univ-mrs.fr" >

<!ENTITY dom.dil "dil.&dom.luminy;" >

Fragment de document XML valide :

<email> massat@&dom.dil; </email>

<a href="http://www.&dom.dil;">...</a>

(61)

I Les entit´ es externes XML J

Les entit´ es externes XML permettent d’inclure des documents XML iden- tifi´ es par une URL.

<!DOCTYPE livre SYSTEM "livre.dtd"

[

<!ENTITY chap1 SYSTEM "chapitre1.xml.inc">

<!ENTITY chap2 SYSTEM "chapitre2.xml.inc">

]

>

<livre> &chap1; &chap2; </livre>

Contraintes sur le document XML inclu :

• il peut contenir un prologue (encodage),

• pas de r´ ef´ erence ` a une DTD,

• il doit ˆ etre bien form´ e, c’est ` a dire contenir un ´ el´ ement complet,

(62)

I Les entit´ es externes non XML J

Une entit´ e externe non XML peut contenir n’importe quoi (image, son, donn´ ees, etc.). Nous devons donc, au pr´ ealable, d´ efinir un type :

<!NOTATION nom_du_type SYSTEM "url_associ´e_au_type">

Par exemple :

<!NOTATION JPEG SYSTEM "JPG">

<!NOTATION JPG SYSTEM "JPG">

<!NOTATION PNG SYSTEM "http://www.w3.org/TR/REC-png">

<!NOTATION SWF SYSTEM "http://www.macromedia.com/software/flash">

(63)

I Les entit´ es externes non XML (suite) J

On peut ensuite d´ efinir l’entit´ e externe non XML :

<!ENTITY maison SYSTEM "maison.jpg" NDATA jpeg>

La r´ ef´ erence &maison; est impossible (ce n’est pas du XML). Son utilisation doit passer par un attribut typ´ e entit´ e externe non XML :

DTD : | <!ELEMENT image EMPTY>

| <!ATTLIST image src ENTITY #REQUIRED>

XML : | <image src="maison"/> <!-- pas de &..; -->

L’attribut peut ´ egalement ˆ etre typ´ e ENTITIES , on peut dans ce cas lui associer

plusieurs entit´ es externes non XML.

(64)

II Les clauses INCLUDE et IGNORE JJ

Deux exemples :

<![IGNORE[

... partie de la DTD `a ignorer ...

]]>

et

<![INCLUDE[

... partie de la DTD `a traiter ...

]]>

(65)

II Les entit´ es param` etres JJ

(66)

I Les entit´ es param` etres internes J

Les entit´ es param` etres sont des macros qui permettent de factoriser et de param´ etrer les DTD. Syntaxe :

<!ENTITY % nom_entit´e "valeur">

Le r´ ef´ erencement se note %nom entit´ e;

<!ENTITY % statut

"statut (public|priv´e) #IMPLIED">

<!ELEMENT article (#PCDATA)>

<!ATTLIST article date CDATA #IMPLIED

%statut;

>

(67)

I Les entit´ es param` etres externes J

Les entit´ es param` etres externes permettent d’inclure des DTD externes.

<!ENTITY % chapitre

SYSTEM "chapitre.mod">

<!ENTITY % tableau

SYSTEM "http://monserveur.fr/dtd/tableau.mod">

%chapitre;

%tableau;

(68)

II Partie interne / externe JJ

<!DOCTYPE livre SYSTEM "livre.dtd"

[

... partie interne ...

]

>

• La partie interne est trait´ ee avant la partie externe.

• Il est donc possible de faire varier la DTD ` a partir des d´ eclarations internes.

• Les clauses IGNORE et INCLUDE ne sont pas utilisables dans la partie interne.

(69)

II Les sections conditionnelles JJ

texte.dtd

<!ENTITY % attr.date ’IGNORE’>

<!ELEMENT para ANY>

<!ELEMENT titre ANY>

<![%attr.date;[

<!ATTLIST para date CDATA #IMPLIED>

<!ATTLIST titre date CDATA #IMPLIED>

]]>

Document XML valide

<!DOCTYPE para SYSTEM "texte.dtd" [

<!ENTITY % attr.date ’INCLUDE’>

]>

<para date="10/01/2015" >Un message</para>

(70)

II La DTD DocBook JJ

<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"

"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" >

<article>

<title>foo</title>

<section>

<title>sect1</title>

<para>This is a paragraph.</para>

<blockquote><para>This is a block quote.</para></blockquote>

<section>

<title>section 1.1</title>

<para>This is a paragraph with a <citetitle>title

citation</citetitle>, a <command>hello</command>, and some

<computeroutput>computer output</computeroutput>. </para>

<itemizedlist>

<listitem><para>this is a list item.</para></listitem>

</itemizedlist>

</section>

</section>

(71)

I Les d´ eclarations de caract` eres J

...

<!ENTITY aacute "&#x00E1;"> <!ENTITY Aacute "&#x00C1;">

<!ENTITY acirc "&#x00E2;"> <!ENTITY Acirc "&#x00C2;">

<!ENTITY agrave "&#x00E0;"> <!ENTITY Agrave "&#x00C0;">

<!ENTITY aring "&#x00E5;"> <!ENTITY Aring "&#x00C5;">

<!ENTITY atilde "&#x00E3;"> <!ENTITY Atilde "&#x00C3;">

<!ENTITY auml "&#x00E4;"> <!ENTITY Auml "&#x00C4;">

<!ENTITY aelig "&#x00E6;"> <!ENTITY AElig "&#x00C6;">

<!ENTITY ccedil "&#x00E7;"> <!ENTITY Ccedil "&#x00C7;">

<!ENTITY eth "&#x00F0;"> <!ENTITY ETH "&#x00D0;">

<!ENTITY eacute "&#x00E9;"> <!ENTITY Eacute "&#x00C9;">

<!ENTITY ecirc "&#x00EA;"> <!ENTITY Ecirc "&#x00CA;">

<!ENTITY egrave "&#x00E8;"> <!ENTITY Egrave "&#x00C8;">

<!ENTITY euml "&#x00EB;"> <!ENTITY Euml "&#x00CB;">

<!ENTITY iacute "&#x00ED;"> <!ENTITY Iacute "&#x00CD;">

<!ENTITY icirc "&#x00EE;"> <!ENTITY Icirc "&#x00CE;">

<!ENTITY igrave "&#x00EC;"> <!ENTITY Igrave "&#x00CC;">

<!ENTITY iuml "&#x00EF;"> <!ENTITY Iuml "&#x00CF;">

<!ENTITY ntilde "&#x00F1;"> <!ENTITY Ntilde "&#x00D1;">

...

(72)

I Les d´ eclarations de notations J

...

<!ENTITY % local.notation.class "">

<!ENTITY % notation.class

"BMP| CGM-CHAR | CGM-BINARY | CGM-CLEAR | DITROFF | DVI

| EPS | EQN | FAX | GIF | GIF87a | GIF89a

| JPG | JPEG | IGES | PCX

| PIC | PNG | PS | SGML | TBL | TEX | TIFF | WMF | WPG

| linespecific

%local.notation.class;">

<!NOTATION BMP PUBLIC "+//ISBN 0-7923-9432-1:: ...">

<!NOTATION CGM-CHAR PUBLIC "ISO 8632/2//NOTATION ...">

<!NOTATION CGM-BINARY PUBLIC "ISO 8632/3//NOTATION ...">

<!NOTATION CGM-CLEAR PUBLIC "ISO 8632/4//NOTATION ...">

<!NOTATION DITROFF SYSTEM "DITROFF">

<!NOTATION DVI SYSTEM "DVI">

<!NOTATION EPS PUBLIC "+//ISBN 0-201-18127-4:: ...">

(73)

I D´ eclarations des ´ el´ ements J

<!ELEMENT title (%title.char.mix;)*>

<!ATTLIST title

%pagenum.attrib; %common.attrib;

%title.role.attrib; %local.title.attrib; >

<!ELEMENT subtitle (%title.char.mix;)*>

<!ATTLIST subtitle

%common.attrib; %subtitle.role.attrib;

%local.subtitle.attrib; >

On remarque dans cet extrait que le contenu des ´ el´ ements n’est jamais donn´ ee

directement. Les r´ edacteurs de DTD passent g´ en´ eralement par une entit´ e

param` etre.

(74)

I D´ eclarations des contenu d’´ el´ ements J

<!ENTITY % pagenum.attrib "pagenum CDATA #IMPLIED">

<!ENTITY % local.common.attrib "">

<!ENTITY % common.attrib

"id ID #IMPLIED

revisionflag (changed|added|deleted|off) #IMPLIED

%local.common.attrib;" >

<!ENTITY % local.title.char.mix "">

<!ENTITY % title.char.mix

"#PCDATA|%gen.char.class;|%link.char.class;

|%tech.char.class;|%docinfo.char.class;

|%inlineobj.char.class; %local.title.char.mix;">

<!ENTITY % local.gen.char.class "">

<!ENTITY % gen.char.class

"abbrev|acronym|citetitle|emphasis|footnote|phrase

|quote|trademark %local.gen.char.class;">

Les entit´ es param` etres local.xxx permettent d’´ etendre cette DTD en ajou-

(75)

Le langage de requˆ ete XPATH

(76)

II Introduction JJ

(77)

I Pr´ esentation J

• Le langage XPATH offre un moyen d’identifier un ensemble de noeuds dans un document XML.

• Toutes les applications ayant besoin de rep´ erer un fragment de document XML peuvent utiliser ce langage.

• Les feuilles de style XSL, les pointers XPOINTER et les liens XLINK utilisent de mani` ere intensive les expressions XPATH.

• XPATH est un premier pas vers un langage d’interrogation d’une base de

donn´ ees XML (XQuery).

(78)

I Structure d’arbre d’un document XML J

produit produit

prix

nom comment

stock

Livre 50 Un commentaire /

monnaie=’Francs’

nom

CD

prix

23

monnaie=’Euros’

<!−− −−>

Texte <!−− −−>

Texte

<!-- Texte -->

<stock>

<produit>

<nom> Livre </nom><prix monnaie="Francs"> 50 </prix>

<comment> Un commentaire </comment>

</produit>

<produit>

<nom> CD </nom><prix monnaie="Euros"> 23 </prix>

</produit> <!-- Texte -->

(79)

I Les expressions XPATH J

La forme g´ en´ erale d’une expression XPATH est

• 10 ou 10.12 un nombre r´ eel (cod´ e en virgule flottant)

• ’Hello’ ou "Hello" une chaˆ ıne de caract` eres

• nom de fonction() l’appel ` a une fonction

• expr1 + expr2 une op´ eration ( + , - , mod , div ) (nombre)

• expr1 = expr2 un test d’´ egalit´ e ( = , != ) (bool´ een)

• expr1 > expr2 une comparaison ( < , <= , > , >= ) (bool´ een)

• expr1 or expr2 ou expr1 and expr2 (bool´ een)

• (expression) une parenth` ese

• chemin un chemin (ensemble de noeuds)

(80)

I Les chemins J

Un chemin a la forme suivante :

• /s´ electeur1/s´ electeur2/... un chemin absolu

• s´ electeur1/s´ electeur2/... un chemin relatif

Chaque s´ electeur s´ electionne un ensemble de noeuds en fonction du r´ esultat du s´ electeur pr´ ec´ edent.

L’ensemble initial est soit le noeud courant (forme relative) soit la racine (forme absolue).

Exemple : /stock/produit/comment

{ / } --> stock -->

{ /stock } --> produit -->

{ /stock/produit[1], /stock/produit[2] } --> comment -->

(81)

I Les s´ electeurs de noeuds J

Les s´ electeurs de noeuds sont de la forme :

axe :: filtre [ condition1 ][ condition2 ]...

• l’axe indique un sens de recherche,

• le filtre s´ electionne un type de noeud,

• les conditions s´ electionnent sur le contenu.

Les parties axe :: et [ condition ] sont optionnelles.

(82)

II Les axes de recherche JJ

(83)

I Les axes en avant J

Les axes qui permettent de descendre dans l’arbre : child

les fils du noeud courant (c’est l’axe par d´ efaut). Ces deux expressions sont identiques :

produit/child::nom

produit/nom

self

le noeud courant,

/stock/produit[ prix > 10 ]/self::produit[ prix < 99 ]

/stock/produit/self::prix r´esultat vide

(84)

I Les axes en avant (suite) J

descendant

les descendants du noeud courant

/stock/descendant::prix

descendant-or-self

les descendants du noeud courant plus lui-mˆ eme.

(85)

I Les axes en arri` ere J

Les axes qui permettent de remonter dans l’arbre : parent

le noeud parent du noeud courant (si il existe),

/stock/produit/comment/parent::produit/prix

ancestor

les ascendants du noeud courant

/stock/produit/comment/ancestor::stock/produit

ancestor-or-self

que dire ?

(86)

I Les axes ` a droite et ` a gauche J

following-sibling

les noeuds fr` eres plac´ es apr` es le noeud courant,

produit

produit produit

stock

preceding-sibling

les noeuds fr` eres plac´ es avant le noeud courant,

(87)

I Les axes avant et apr` es J

following

les noeuds plac´ es apr` es dans le document,

produit produit

prix

nom comment nom prix

stock

preceding

les noeuds plac´ es avant dans le document,

(88)

I Les axes pour les attributs J

attribute

les noeuds de type attribut du noeud courant,

/stock/produit/prix/attribute::monnaie

namespace

les noeuds de type espace de nom du noeud courant,

(89)
(90)

II Les filtres JJ

(91)

I Filtrer les noeuds nomm´ es J

identificateur

les noeuds de l’axe qui portent ce nom.

/stock/produit/prix/attribute::monnaie

*

les noeuds de l’axe qui ont un nom (attribut ou ´ el´ ement)

/stock/*/prix/attribute::*

(92)

I Filtrer les noeuds textuels J

text()

tous les noeuds de type texte de l’axe.

/stock/produit/*/text()

(93)

I Filtrer les commentaires J

comment()

tous les noeuds de type commentaire de l’axe.

(94)

I Filtrer les instructions de traitement J

processing-instruction()

tous les noeuds de type instruction de traitement de l’axe,

(95)

I Filtrer les noeuds J

node()

tous les noeuds de l’axe sauf la racine,

/stock/produit/prix/node()

(96)

II Simplifications JJ

Afin d’´ eviter une trop grande lourdeur, les simplifications suivantes sont auto- ris´ ees :

originale simplifi´ ee exemple

child:: /stock/produit

attribute:: @ /prix/@monnaie

/descendant-or-self::node()/ // //prix

self::node() . prix[. = 10]

parent::node() .. prix/../nom

[position() = x] [x] produits[4]

(97)

II Les types de base de XPATH JJ

Il existe quatre types de base : bool´ een, chaˆ ıne de caract` eres, nombre r´ eel et ensemble de noeuds.

Chaˆ ıne de caract` eres :

• ’chaine de caract` eres’ ou "chaine de caract` eres"

• string(expression)

string(10) = ’10’

string(20.300) = ’20.3’

string(/stock/*/nom) = ’ Livre ’ (le premier noeud)

string(/stock/produit) = ’ Livre 50 ... ’ (concat´enation des noeuds text()) string(/stockx) = ’’

(98)

Bool´ een :

• true() ou false()

• boolean(expression) renvoie vrai ssi l’argument est . le bool´ een vrai

. un nombre diff´ erent de z´ ero

. la chaˆ ıne de longueur sup´ erieure ` a z´ ero . un ensemble de noeuds non vide

boolean(10) = true

boolean(0) = false

boolean(’hello’) = true

boolean(’’) = false

boolean(true()) = true boolean(false()) = false boolean(/stock/produit) = true boolean(/stock/comment) = false

(99)

Nombre r´ eel :

• 100 ou 234.56

• number( expression )

number(10) = 10

number(’10.12’) = 10.12 number(’ 10.120 ’) = 10.12

number(’ 10x ’) = NaN (not a number)

number(true()) = 1

number(false()) = 0

number(/stock/*/prix) = 50 (le premier) number(/stock/prix) = NaN

(100)

II Les conditions JJ

Rappel : les s´ electeurs de noeuds sont de la forme :

axe :: filtre [ condition1 ][ condition2 ]...

D´ efinition : Un s´ electeur calcule

• les noeuds de l’axe

• qui respectent le filtre et

• pour lesquels les conditions (traduites en bool´ een) sont vraies.

(101)

I Condition d’existence J

S´ electionner un noeud en fonction de son contenu :

/stock/produit[ prix/attribute::monnaie ]

/stock/produit[ prix[ attribute::monnaie ] ]

Ces expressions s´ electionnent les noeuds produit ` a condition qu’un prix existe avec l’attribut monnaie pr´ ecis´ e.

Remarque : les sous-expressions sont souvent relatives.

Un exemple ´ etrange :

/stock/produit[ /stock/*/prix ]

(102)

I Condition de position J

num´ ero

vraie ssi le noeud courant a cette position dans le contexte courant.

produit[ 2 ][ comment ]

produit[ comment ][ 2 ]

La premi` ere expression s´ electionne les noeuds produit en deuxi` eme po-

sition si il poss` ede un ´ el´ ement fils comment , la seconde s´ electionne le

deuxi` eme noeud produit qui poss` ede un ´ el´ ement fil comment .

(103)

I Les conditions logiques J

Les relations portent sur deux sous-expressions XPATH : exp1 relation exp2

vraie ssi il existe n1 (dans le r´ esultat de exp1 ) et n2 (dans le r´ esultat de exp2 ) qui respectent la relation. Les relations possibles sont

= != < <= > >=

produit[ prix = 100 ]

les produits qui ont un prix ` a 100.

produit[ prix != 100 ]

les produits qui ont un prix diff´ erent de 100.

produit[ prix < //prix ]

tous les produits sauf les plus on´ ereux.

(104)

Conversion : Pour l’´ egalit´ e, la conversation est automatique pour les nombres et les bool´ eens. Pour les relations d’ordre, la conversion en nombre est au- tomatique.

Quelques expressions vraies :

• (10 = ’10.0’)

• (10 < ’12.0’)

• (’10.3’ < ’12.0’)

• (true() = "faux")

(105)

I Les conditions logiques (2) J

condition1 and condition2

vraie ssi les deux conditions le sont ´ egalement.

produit[prix > 10 and comment]

condition1 or condition2

vraie ssi au moins une des deux conditions est vraie.

(106)

II Fonctions & op´ erations JJ

Les fonctions et op´ erations sont utilisables dans

• les expressions logiques,

• les clauses <xsl:value-of .../> des feuilles de style XSL.

(107)

I Op´ erations et fonctions sur les nombres J

+ , - , mod , div ,

op´ erations utilisables sur les nombres (conversion automatique).

produit[(prix div 10) = (prix mod 10)]

sum( noeuds )

renvoie la somme des noeuds apr` es les avoir transform´ es en nombre.

count( noeuds )

renvoie le nombre de noeuds.

floor( nombre )

arrondi par le bas.

ceiling( nombre ) arrondi par le haut.

round( nombre )

arrondi par le plus proche.

(108)

I Fonctions sur les bool´ eens J

true() et false() constantes

not( boolean )

vraie ssi le param` etre est faux.

produit[not(prix != 100)]

tous les prix sont ´ egaux ` a 100.

(109)

I Fonctions sur les noeuds J

last()

renvoie le nombre de noeuds dans le contexte du noeud courant.

//produit[last()] le dernier produit

//produit[last()-1] l’avant dernier produit

position()

renvoie la position du noeud courant dans son contexte.

//produit[position() = 1] le premier produit

//produit[position()<last()] les produits sauf le dernier

(110)

local-name( noeud )

renvoie la partie locale de l’´ etiquette d’un noeud.

namespace-uri( noeud )

renvoie la partie espace de nom de l’´ etiquette d’un noeud.

name( noeud )

renvoie l’´ etiquette d’un noeud.

(111)

id( chaines )

renvoie les noeuds identifi´ es par au moins une des ´ etiquettes,

id(’CD’)/prix

id(’CD Voiture SX2500 CD’)/prix

id( /reference/attribute::ref )/prix

(112)

I Fonctions sur les chaˆ ınes J

string( objet )

renvoie une version chaˆ ıne du param` etre.

concat( chaˆ ıne1 , ..., chaˆ ıneN ) concat´ enation de chaˆ ınes.

string-length( chaˆ ıne )

renvoie la longueur d’une chaˆ ıne.

normalize-space( chaˆ ıne )

renvoie une version normalis´ ee (suppression des blancs au d´ ebut et ` a la fin et remplacement de toute suite de blancs par un seul).

normalize-space(’ AB CD E ’) = ’AB CD E’

les blancs comprennent l’espace, le retour ` a la ligne (codes 10 et 13)

et la tabulation (code 9).

(113)

translate( ch1 , ch2 , ch3 )

renvoie une copie de ch1 dans laquelle les caract` eres pr´ esents dans ch2 sont remplac´ es par les caract` eres de mˆ eme position dans ch3.

translate(’ABCD’, ’AC’, ’ac’) = ’aBcD’

substring-before( ch1 , ch2 )

renvoie la chaˆ ıne res d´ efinie par ch1 = res + ch2 + reste.

substring-after( ch1 , ch2 )

renvoie la chaˆ ıne res d´ efinie par ch1 = reste + ch2 + res.

substring( chaˆ ıne , d´ ebut ) et substring( chaˆ ıne , d´ ebut , len ) extraction de sous-chaˆ ıne.

starts-with( ch1 , ch2 )

vraie ssi ch1 d´ ebute par ch2.

contains( ch1 , ch2 )

vraie ssi ch1 contient ch2.

Références

Documents relatifs

les noeuds suivant le noeud contexte dans l’ordre de parcours du document following. les noeuds précédant le noeud contexte dans l’ordre de parcours du

Le but de cette activité est de justifier que le produit de deux nombres de signes contraires est un nombre négatif et que celui de deux nombres négatifs est un nombre positif..

Le but de cette activité est de justifier que le produit de deux nombres de signes contraires est un nombre négatif et que celui de deux nombres négatifs est un nombre positif..

Le but de cette activité est de justifier que le produit de deux nombres de signes contraires est un nombre négatif et que celui de deux nombres négatifs est un nombre positif..

Définitions Applications Règles Affichage et Transformations Documentation mathématique Métadonnées En conclusion... Elizabeth Cherhal

On peut donc calculer un produit scalaire uniquement à partir des distances. T.Pautrel - cours: produits scalaires dans le plan - niveau

Exceptions : des pneus, des bleus Les noms terminés par ou ont leur pluriel en

Exceptions : bail, émail, corail, soupirail, travail, vitrail, vantail font leur pluriel en aux. Les noms terminés par x, s ou z ne changent pas au pluriel