1 XML: Syntaxe XML, DTD et Schémas 1. Syntaxe XML 2. DTD 3. Schémas 4. Dialectes 5. Références

Preview:

Citation preview

1

XML: Syntaxe XML, DTD et Schémas

1. Syntaxe XML

2. DTD

3. Schémas

4. Dialectes

5. Références

2

1. Syntaxe XML

Ecriture par balises Syntaxe des balises

<element> contenu de l’élément </element>

« element » doit commencer par une lettre Peut comporter :

– Des chiffres– Des lettres– Moins « - », souligné « _ », point « . », deux-points « : »

Attention à la casse ! (« element » != « Element »)

3

Syntaxe XML

<enseignant><nom>Bonneville</nom>

<grade>PAST</grade><enseignements>

<cours type=‘CM’><titre>Web Dynamique</titre><volume>24</volume>

</cours><cours type=‘TP’>

<volume>18</volume></cours>

</enseignements></enseignant>

<prenom>François</prenom>

<titre>TP Web Dynamique</titre>

4

Structure hiérarchique du XML

Chaque élément peut avoir un ou plusieurs « enfants » (ou du texte)

<nom> est enfant de <enseignant> <enseignant> est parent de <nom>

Chaque élément n’a qu’un seul parent Il existe un unique « ancêtre »

Le seul élément qui est l’ancêtre de tous les éléments = l’élément racine (ici <enseignant>)

5

Syntaxe des données

Les données entre les balises sont des chaînes de caractères

Caractères spéciaux &gt pour < &lt pour > &amp pour & &apos pour ‘ &quot pour ‘‘ &#38 ou &#x26 pour & (numéro dans la page UNICODE)

6Introduction

2. Définir une grammaire structurelle : DTD « DTD » (Document Type Definition) La DTD définit la filiation des éléments

Quelle est la racine du document? Qui doit/peut avoir quels enfants ? Combien d’enfants ? Qui peut contenir du texte ? Qui a des attributs particuliers ? Quelles sont les valeurs possibles de ces attributs ?

La DTD est définie dans le document XML par la balise <!DOCTYPE

– interne au document <!DOCTYPE racine [...]>– dans un fichier externe

<!DOCTYPE racine SYSTEM ’exemple.dtd’>

7

Validité d ’un document XML

Document bien formé (Well Formed document)– balises correctement imbriquées– parsable et manipulable– pas nécessairement valide par rapport à la DTD

Document valide (Valid document)– bien formé + conforme à la DTD (ou au schéma)

Introduction

8

DTD : élément et attribut

<!ELEMENT tag (contenu)– Décrit une balise qui fera partie du vocabulaire.– ex : <!ELEMENT livre (auteur, editeur)>

<!ATTLIST tag [attribut type #mode [valeur]]*– Définit la liste d’attributs pour une balise– ex : <!ATTLIST auteur

genre CDATA #REQUIRED ville CDATA #IMPLIED> <!ATTLIST editeur ville CDATA #FIXED "Paris">

DTD

9

DTD : Notation

Notations

– (a, b) séquence

– (a|b) liste de choix

– a? élément optionnel [0,1]

– a* élément répétitif [0,N]

– a+ élément répétitif [1,N]

Exemples

– (nom, prenom, rue, ville)

– (oui|non)

– (nom, prenom?, rue, ville)

– (produit*, client)

– (produit*, vendeur+)

DTD

10

Types de données

CDATA– Données brutes qui ne seront pas analysées (parsées)

PCDATA – Elément de texte sans descendants ni attributs contenant des caractères à

parser Enumération

– Liste de valeurs séparées par | ID et IDREF

– Clé et référence pour les attributs ANY

– Tout texte possible - pour le développement EMPTY

– Vide

DTD

11

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

12

Exemple de DTD interne<?XML version="1.0" standalone="yes"?><!DOCTYPE CATALOGUE [<!ELEMENT CATALOGUE (VINS+)>

<!ELEMENT VINS (SPECIFICATION+, ANNEE, PRIX)><!ATTLIST VINS NOM CDATA #REQUIRED>

<!ELEMENT SPECIFICATION EMPTY><!ATTLIST SPECIFICATION PROVENANCE CDATA #REQUIRED COULEUR CDATA

#REQUIRED>

<!ELEMENT ANNEE (#PCDATA)><!ELEMENT PRIX (#PCDATA)>]>

<CATALOGUE> <VINS NOM="Saint-Emilion"> <SPECIFICATION PROVENANCE="Bordeaux" COULEUR="Rouge"/> <ANNEE>1999</ANNEE> <PRIX>250F</PRIX> </VINS> ……...</CATALOGUE>

DTD

13

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

14

DTD externe Modèle pour plusieurs documents

– partage des balises et structures

Définition locale ou externe– <!DOCTYPE doc SYSTEM "doc.dtd">– <!DOCTYPE doc PUBLIC "www.e-xmlmedia.com/doc.dtd">

Exemple de document<?xml version="1.0" standalone="no"?><!DOCTYPE VINS SYSTEM "vins.dtd">...

DTD

15

Comment concevoir une DTD ?

Méthode UML-XML– décrire les sources de données

avec UML– utilisation de :

classe attribut agrégation association généralisation

– fixer les cardinalités associations 0..* ou 1..* (+

+) attributs 0 ou 1 (?)

DTD

Classe1

SClasse1 SClasse2{exclusif}

Classe3

Classe4*

1..*Attribut1Attribut2

16

Exercice Définir les DTD pour publier une BD

Lignes

quantite : intarticle : CCNNN

statut : chartotal : FRF

Clients

code : intnom : text

type : CCC

0..*

1..*

1..*

Commandes

num intstatut : char

total : float

1..*

1..* de

Magasins

numero : intrue : textcomplement : textcode_postal : intville : text

0..*

gèrelivrer

0..*

Schéma UML

17

Définition des types et classes

<!-- Types de base--> <!ENTITY % int "(#PCDATA)"> <!ENTITY % float "(#PCDATA)"> <!ENTITY % char "(#PCDATA)"> <!ENTITY % string "(#PCDATA)">

<!-- Classe Commande --> <!ELEMENT Commande (cstatut, ctotal)> <!ATTLIST Commande NUM ID #REQUIRED> <!ELEMENT cstatut %char;> <!ELEMENT ctotal %float;>

<!-- Classe Ligne --> <!ELEMENT Ligne (article, quantite, statut?, total?)> <!ELEMENT article %string;> <!ELEMENT quantite %int;> <!ELEMENT lstatut %char;> <!ELEMENT ltotal %float;>

18

Definition DTD + MESSAGE

<?xml version="1.0" standalone="yes"?>

<!DOCTYPE MESSAGE [

<!ELEMENT MESSAGE (Commande, Ligne+)*>

<!ENTITY %Type SYSTEM "Type.dtd">

%Type;

]>

<MESSAGE><Commande NUM="1">

<cstatut> A </cstatut><ctotal>1000</ctotal>

</Commande><Ligne>

<article>212</article><quantite>100</quantite>

</Ligne><Commande NUM="2">

<cstatut> B </cstatut><ctotal>1000</ctotal>

</Commande><Ligne>

<article>212</article><quantite>300</quantite>

</Ligne><Ligne>

<article>412</article><quantite>400</quantite>

</Ligne></MESSAGE>

19

Insuffisance des DTD

Pas de types de données– difficile à interpréter (coercition nécessaire)– difficile à traduire en schéma objets

Pas en XML – langage spécifique

Propositions de compléments– XML-data de Microsoft (BizTalk)– XML-schema du W3C

DTD

20

3. XML Schéma

Un schéma d'un document définit:– les éléments possibles dans le document– les attributs associés à ces éléments– la structure du document et les types de données

Le schéma est spécifié en XML– pas de nouveau langage– balisage de déclaration– domaine spécifique xsd:

Présente de nombreux avantages– structures de données avec types de données – extensibilité par héritage et ouverture– analysable par un parseur XML standard

Schema

21

Objectifs des schémas

Reprendre les acquis des DTD– Plus riche et complet que les DTD

Permettre de typer les données– Eléments simples et complexes– Attributs simples

Permettre de définir des contraintes– Existence, obligatoire, optionnel– Domaines, cardinalités, références– Patterns, ...

S'intégrer à la galaxie XML

Schema

25

Commandes de base xsd:

element : association d'un type à une balise

– attributs name, type, ref, minOccurs, maxOccurs, ...

attribute : association d'un type à un attribut

– attributs name, type

type simple : les multiples types de base

– entier, réel, string, time, date, ID, IDREF, …,

– extensibles par des contraintes

type complexe : une composition de types

– définit une agrégation d'éléments typés

Schema

26

Les types complexes

Définition d'objets complexes– <sequence> : collection ordonnée d'éléments typés– <all> : collection non ordonnée d'éléments typés– <choice>: choix entre éléments typés

Exemple<xsd:complexType name="FRAdresse"> <xsd:sequence> <xsd:element name=”nom" type="xsd:string"/> <xsd:element name=”rue" type="xsd:string"/> <xsd:element name=”ville" type="xsd:string"/>

<xsd:element name=”codepostal" type="xsd:decimal"/> </xsd:sequence>

<xsd:attribute name=”pays" type="xsd:NMTOKEN" fixed="FR"/> </xsd:complexType>

Schema

27

Héritage de types

Définition de sous-types par héritage

– Par extension : ajout d'informations

– Par restriction : ajout de contraintes

Possibilité de contraindre la dérivation

Exemple :

<complexType name="AdressePays">

<complexContent>

<extension base="Adresse">

<sequence>

<element name="pays" type="string"/>

</sequence>

</extension>

</complexContent>

</complexType>

Schema

28

Les patterns

Contraintes sur type simple prédéfini Utilisation d'expression régulières

– Similaires à celles de Perl

Exemple<xsd:simpleType name="SKU"> <xsd:restriction base="xsd:string">

<xsd:pattern value="\d{3}-[A-Z]{2}"/> </xsd:restriction> </xsd:simpleType>

Schema

29

XML Schema : exemple (1)

<xsd:schema xmlns:xsd="http://www.w3.org/1999/XMLSchema">

<xsd:element name="purchaseOrder" type="PurchaseOrderType"/>

<xsd:element name="comment" type="xsd:string"/>

<xsd:complexType name="PurchaseOrderType">

<xsd:sequence>

<xsd:element name="shipTo" type="USAddress"/>

<xsd:element name="billTo" type="USAddress"/>

<xsd:element ref="comment" minOccurs="0"/>

<xsd:element name="items" type="Items"/>

</xsd:sequence>

<xsd:attribute name="orderDate" type="xsd:date"/>

</xsd:complexType>

Schema

30

XML Schema : exemple (2) <xsd:complexType name="Items">

<xsd:sequence> <xsd:element name="item" minOccurs="0" maxOccurs="unbounded">

<xsd:complexType> <xsd:sequence>

<xsd:element name="productName" type="xsd:string"/> <xsd:element name="quantity">

<xsd:simpleType> <xsd:restriction base="xsd:positiveInteger"> <xsd:maxExclusive value="100"/> </xsd:restriction> </xsd:simpleType>

</xsd:element> <xsd:element name="USPrice" type="xsd:decimal"/> <xsd:element ref="comment" minOccurs="0"/> <xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>

</xsd:sequence> <xsd:attribute name="partNum" type="SKU" use="required"/>

</xsd:complexType> </xsd:element>

</xsd:sequence> </xsd:complexType> </xsd:schema>

Schema

31

Réutilisation de déclarations

Possibilité de référencer un élément plus global– <element ref="Nom" /> (ci-dessus)– Importe l'élément et son type– Peut être utiliser pour importer un groupe

Possibilité d'inclure les types associés à un espace de noms

– <import nameSpace = "http:// ..."– schemaLocation = "http:// ..." />

Possibilité d'étendre un schéma– <redefine schemaLocation="http:// ..."/>– .... Extensions ...– </redefine>

Schema

32

Autres possibilités ...

Mixed Content Empty Content anyType Annotations Attribute Groups Nil Values Specifying Uniqueness Defining Keys & their

References

Namespaces, Schemas & Qualification

Target Namespaces & Unqualified Locals

Qualified Locals Global vs. Local Declarations Undeclared Target

Namespaces Substitution Groups Abstract Elements & Types

Schema

33

Quelques outils de conceptionEditeur Outil Support

Tibco (Extensibility)

XML Authority 2.0

DTDSchéma

Altova XML Spy 4.0 DTDSchéma

Dasan Tagfree 2000 DTD Editor

DTD

Data Junction XML Junction Schéma

Insight Soft. XMLMate 2.0 DTDSchéma

Microstar Soft. Near & Far Designer

DTD

Schema

Recommended