Upload
alayna-morvan
View
105
Download
0
Embed Size (px)
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>[email protected] </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>