1 Initiation à XML Sebti Foufou. 2 Les DTD souvent incorrectes La majorité des DTDs sont...

Preview:

Citation preview

1

Initiation à XML

Sebti Foufou

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

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

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>

5

Contenu XML Schemas

– Elements v. Types– Regular expressions– Expressive power

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

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

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

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

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

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

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

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”> ..</...> = (...)?

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

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>

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>timbl@w3.org </email>     <téléphone>617 253 5702 </téléphone></personne>

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>

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

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

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> 

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

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

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

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

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

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 !

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>

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>

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>

Recommended