28
1 Initiation à XML Sebti Foufou

1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

Embed Size (px)

Citation preview

Page 1: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

1

Initiation à XML

Sebti Foufou

Page 2: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

2

Les DTD souvent incorrectes La majorité des DTDs sont incorrectes

• elements qui manquent• erreurs de syntaxe• incompatibilté dans la déclaration des attributes

C ‘est apparemment du au fait que : • les gens ne comprennent pas les DTDs et• le standard est flou sur ce qui est obligatoire et ce qui ne

l’est pas. Mais si les DTDs sont incorrectes, cela vaut-il la

peine de valider les documents ? Une DTD n’est pas toujours représentée par un

graphe connexe : racines multiples, utilisation de ANY

Page 3: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

3

Les DTD ce qui ne va pas ? trop orientées document

• DTDs créées à l’origine pour le traitement de texte trop simples et trop compliquées à la fois trop limitées pour représenter des structures complexes aucun typage pour IDREF pas de notion de tuple pas de notion de typage, de sous-typage et d’héritage ambiguité au niveau des content-models trop de façon différentes de représenter la même chose noms globaux et pas locaux pas de mécanismes pour gérer les versions, permettre

l’extension et l’évolution

Page 4: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

4

Un document XML<?xml version="1.0" encoding="UTF-8"?> <book isbn="0836217462"> <title> Being a Dog Is a Full-Time Job </title> <author>Charles M. Schulz</author> <character>

<name>Snoopy</name> <friend-of>Peppermint Patty</friend-of>

<since>1950-10-04</since> <qualification> extroverted beagle </qualification>

</character> <character>

<name>Peppermint Patty</name> <since>1966-08-22</since>

<qualification>bold, brash and tomboyish</qualification>

</character> </book>

Page 5: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

5

Contenu XML Schemas

– Elements v. Types– Regular expressions– Expressive power

ResourcesW3C Draft: www.w3.org/TR/2001/REC-xmlschema-1-20010502

Page 6: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

6

Schema XML http://www.w3.org/TR/xmlschema-1/10/2000 Généralise les DTDs Utilise une syntaxe XML Deux documents de 3WC: structures et datatypes

• http://www.w3.org/TR/xmlschema-1• http://www.w3.org/TR/xmlschema-2

XML-Schema est très complexes• Souvent critiqués• Propositions pour d’autres alternatives

Page 7: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

7

Un exemple<xsd:element name=“paper” type=“papertype”/><xsd:complexType name=“papertype”> <xsd:sequence> <xsd:element name=“title” type=“xsd:string”/> <xsd:element name=“author” minOccurs=“0” type=“xsd:string”/> <xsd:element name=“year” type=“xsd:string”/> <xsd: choice> < xsd:element name=“journal” type=“xsd:string”/> <xsd:element name=“conference” type=“xsd:string”/> </xsd:choice> </xsd:sequence></xsd:complexType></xsd:element>

DTD: <!ELEMENT paper (title,author*,year, (journal|conference))>

Page 8: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

8

Elements v.s. Types

<xsd:element name=“person”> <xsd:complexType> <xsd:sequence> <xsd:element name=“name” type=“xsd:string”/> <xsd:element name=“address” type=“xsd:string”/>

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

<xsd:element name=“person”> <xsd:complexType> <xsd:sequence> <xsd:element name=“name” type=“xsd:string”/> <xsd:element name=“address” type=“xsd:string”/>

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

<xsd:element name=“person” type=“ttt”><xsd:complexType name=“ttt”> <xsd:sequence> <xsd:element name=“name” type=“xsd:string”/> <xsd:element name=“address” type=“xsd:string”/> </xsd:sequence></xsd:complexType>

<xsd:element name=“person” type=“ttt”><xsd:complexType name=“ttt”> <xsd:sequence> <xsd:element name=“name” type=“xsd:string”/> <xsd:element name=“address” type=“xsd:string”/> </xsd:sequence></xsd:complexType>

DTD: <!ELEMENT person (name,address)>

Page 9: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

9

Eléments Vs types 2 Types:

• Types simples (integers, strings, ...)• Types complexes (expressions régulière, comme dans les

DTDs) Elément-type-élément :

• L’élément root est un type complexe• Ce type complexe est une expression régulière d’éléments• Ces même élément ont leurs propres types complexes...• Aux feuilles de l’arbre on retrouve les types simples

Page 10: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

10

Types: Local ou global Type local: <xsd:element name=“person”>

[définit localement le type person] </xsd:element>

Type global: <xsd:element name=“person” type=“ttt”/>

<xsd:complexType name=“ttt”> [définit ici le type ttt] </xsd:complexType>

Type global : peut être re-utilisé pour définir d’autres types

Page 11: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

11

Elément: Local ou global Elément local : <xsd:complexType name=“ttt”>

<xsd:sequence> <xsd:element name=“address” type=“...”/>... </xsd:sequence> </xsd:complexType>

Elément global : <xsd:element name=“address” type=“...”/>

<xsd:complexType name=“ttt”> <xsd:sequence> <xsd:element ref=“address”/> ... </xsd:sequence> </xsd:complexType>

Elément global : même rôle que dans les DTDs

Page 12: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

12

Expressions régulières Recall the element-type-element alternation: <xsd:complexType name=“....”>

[une expression régulière d’éléments] </xsd:complexType>

Expressions régulières :• <xsd:sequence> A B C </...> = A B C• <xsd:choice> A B C </...> = A | B | C• <xsd:group> A B C </...> = (A B C)• <xsd:... minOccurs=“0” maxOccurs=“unbounded”> ..</...> =

(...)*• <xsd:... minOccurs=“0” maxOccurs=“1”> ..</...> = (...)?

Page 13: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

13

Portée des noms<xsd:element name=“person”>

<xsd:complexType> . . . . . <xsd:element name=“name”> <xsd:complexType> <xsd:sequence> <xsd:element name=“firstname” type=“xsd:string”/> <xsd:element name=“lastname” type=“xsd:string”/> </xsd:sequence>

</xsd:complexType>

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

<xsd:element name=“product”> <xsd:complexType> . . . . . <xsd:element name=“name” type=“xsd:string”/>

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

L’élément name n’a pas la même signification dans person et dans product

Page 14: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

14

Types complexes 3 constructeurs pour définir les sous éléments d’un

éléments :• sequence• choice• all

<xsd:complexType name="PurchaseOrderType">

<xsd:all> <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:all>

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

</xsd:complexType>

<xsd:complexType name="PurchaseOrderType">

<xsd:all> <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:all>

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

</xsd:complexType>

Page 15: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

15

sequence<xsd:complexType name="typePersonne">     <xsd:sequence>          <xsd:element name="nom" type="xsd:string"/>          <xsd:element name="prénom" type="xsd:string"/>          <xsd:element name="dateDeNaissance" type="xsd:date"/>          <xsd:element name="adresse" type="xsd:string"/>          <xsd:element name="email" type="xsd:string"/>          <xsd:element name="téléphone" type="numéroDeTéléphone"/>     </xsd:sequence></xsd:complexType>

 Exemple :<personne>     <nom>Berners-Lee</nom>     <prénom>Tim</prénom>     <dateDeNaissance>1955-06-08</dateDeNaissance>     <adresse>545 Technology Square Room NE43-356 Cambridge MA 02139

USA</adresse>     <email>[email protected] </email>     <téléphone>617 253 5702 </téléphone></personne>

Page 16: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

16

choice<xsd:complexType name="typePersonne">

     <xsd:sequence>

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

          <xsd:element name="prénom" type="xsd:string"/>

          <xsd:element name="dateDeNaissance" type="xsd:date"/>

           <xsd:choice>

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

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

          </xsd:choice>

           <xsd:element name="téléphone" type="numéroDeTéléphone"/>

     </xsd:sequence>

</xsd:complexType>

Page 17: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

17

all<xsd:complexType name="typePersonne">     <xsd:all>          <xsd:element name="nom" type="xsd:string"/>          <xsd:element name="prénom" type="xsd:string"/>          <xsd:element name="dateDeNaissance" type="xsd:date"/>          <xsd:element name="adresse" type="xsd:string"/>          <xsd:element name="email" type="xsd:string"/>          <xsd:element name="téléphone" type="numéroDeTéléphone"/>     </xsd:all></xsd:complexType>

C’est l’équivalent de séquence avec minOccurs='0' et maxOccurs='1‘. Les fils de l'éléments peuvent apparaître, dans n’importe quel ordre, au plus une fois, c'est à dire que la contrainte d'occurrence maximum est égale à 1 et la contrainte d'occurrence minimum est égale à 0

Page 18: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

18

Type dérivés par extension<complexType name="Address">

<sequence> <element name="street" type="string"/>

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

</sequence>

</complexType>

<complexType name="USAddress">

<complexContent>

<extension base="ipo:Address">

<sequence> <element name="state" type="ipo:USState"/>

<element name="zip" type="positiveInteger"/>

</sequence>

</extension>

</complexContent>

</complexType>

Notion d’héritage

Page 19: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

19

Type dérivés par extension, 2<xsd:element name="salaire" type="typeSalaire"/> <xsd:complexType name="typeSalaire">     <xsd:simpleContent>          <xsd:extension base="xsd:positiveInteger">               <xsd:attribute name="devise" type="xsd:string"/>          </xsd:extension>     </xsd:simpleContent></xsd:complexType>

Exemple :<salaire devise="USD">2918</salaire> 

Page 20: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

20

Type dérivés par restriction<complexContent>

<restriction base="ipo:Items“> … [réécrire le contenu avec les restrictions]... </restriction>

</complexContent>

Types simples :• String, Token, Byte, unsignedByte, Integer, positiveInteger• Int (larger than integer), unsignedInt, Long, Short• Time, dateTime, Duration, Date, ID, IDREF, IDREFS• ...

Page 21: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

21

Type complexe vide

<xsd:complexType name="typeSalaire">

     <xsd:attribute name="devise" type="xsd:string"/>

     <xsd:attribute name="montant" type="xsd:positiveInteger"/>

</xsd:complexType>

  Exemple

<salaire devise="USD" montant="2918"/>

Page 22: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

22

Contenu “Mixed”, Type “Any”

Contenu mixte : mieux que dans les DTDs, du texte peut etre insere entre les elements

<xsd:complexType mixed="true"> . . . .

Type Any : veut dire que tout est autorisé<xsd:element name="anything" type="xsd:anyType"/. . . .

Page 23: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

23

Attributs <xsd:element name=“paper” type=“papertype”/>

<xsd:complexType name=“papertype”>

<xsd:sequence>

<xsd:element name=“title” type=“xsd:string”/>

. . . . . .

</xsd:sequence>

<xsd:attribute name=“language" type="xsd:NMTOKEN" fixed=“English"/>

</xsd:complexType>

Associés aux types et non pas aux éléments. Uniquement aux types complexes Ajout difficile d’attributs à des types simples

Page 24: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

24

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

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

     <xsd:element name="contacts" type="typeContacts"/>

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

    

     <xsd:complexType name="typeContacts">

          <!--déclarations du modèle de contenu ici-->

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

     </xsd:complexType>

</xsd:schema>

 Exemple : l'attribut maj est optionnel, avec une valeur par défaut au 31 décembre 2000 s'il n'apparaît pas<xsd:attribute name="maj" type="xsd:date" use="default" value="2000-12-

31"/>

Page 25: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

25

Attributs, 3

use value Effet

required - L'attribut doit apparaître, en prenant n'importe quelle valeur

required 8 l'attribut doit apparaître, en prenant comme valeur 8

optional - l'attribut peut apparaître, il peut avoir n'importe quelle valeur

fixed 8 l'attribut peut apparaître, s'il est présent sa valeur doit être 8, s'il n'apparaît pas sa valeur est 8

default 8 l'attribut peut apparaître, s'il n'est pas présent sa valeur est 8, autrement sa valeur est celle donnée

prohebited - l'attribut ne doit pas apparaître !

Page 26: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

26

Groupes d'attributs<?xml version="1.0" encoding="ISO-8859-1"?><xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">         <xsd:element name="contacts" type="typeContacts"/>     <xsd:element name="remarque" type="xsd:string"/>         <xsd:complexType name="typeContacts">          <!--déclarations du modèle de contenu ici-->          <xsd:attributeGroup ref="InfosMaj"/>     </xsd:complexType>      <xsd:attributeGroup name="InfosMaj">          <xsd:attribute name="maj" type="xsd:date"/>          <xsd:attribute name="auteur" type="xsd:string"/>     </xsd:attributeGroup></xsd:schema>

Page 27: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

27

Types simple List

<xsd:simpleType name="numéroDeTéléphone">

     <xsd:listitemType="xsd:unsignedByte"/>

</xsd:simpleType>

<téléphone>02 24 15 74 48</téléphone>

Union <xsd:simpleType name="numéroDeTéléphoneMémoTechnique">

     <xsd:unionmemberTypes="xsd:string numéroDeTéléphone"/>

</xsd:simpleType>

<téléphone>18</téléphone>

<téléphone>Les Pompiers</téléphone>

Page 28: 1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté

28

Les facets

Facets = des propriétés supplémentaires pour restreindre un type simple

15 facets définis par XML Schema • Length, minLength, maxLength, pattern, • enumeration , whiteSpace • maxInclusive, maxExclusive, minInclusive, • minExclusive, totalDigits, fractionDigits

Restriction = un sous ensemble d’un type simple donnée Types simples peuvent être des restrictions, des unions ou des listes

<xsd:simpleType name="listOfMyIntType">

<xsd:list itemType="myInteger"/>

</xsd:simpleType>

<listOfMyInt>20003 15037 95977 95945</listOfMyInt>