280 likes | 378 Views
Initiation à XML. Sebti Foufou. Les DTD souvent incorrectes. La majorité des DTDs sont incorrectes elements qui manquent erreurs de syntaxe incompatibilté dans la déclaration des attributes C ‘e st apparemment du au fait que : les gens ne comprennent pas les DTDs et
E N D
Initiation à XML Sebti Foufou
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
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
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>
Contenu • XML Schemas • Elements v. Types • Regular expressions • Expressive power Resources W3C Draft: www.w3.org/TR/2001/REC-xmlschema-1-20010502
Schema XML • http://www.w3.org/TR/xmlschema-1/10/2000 • Généralise les DTDs • Utilise une syntaxe XML • Deux documents de 3WC: structureset 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
Un exemple <xsd:elementname=“paper” type=“papertype”/> <xsd:complexTypename=“papertype”> <xsd:sequence> <xsd:elementname=“title” type=“xsd:string”/> <xsd:elementname=“author” minOccurs=“0”type=“xsd:string”/> <xsd:elementname=“year”type=“xsd:string”/> <xsd:choice> < xsd:elementname=“journal”type=“xsd:string”/> <xsd:elementname=“conference”type=“xsd:string”/> </xsd:choice> </xsd:sequence> </xsd:complexType> </xsd:element> DTD: <!ELEMENT paper (title,author*,year, (journal|conference))>
Elements v.s. Types <xsd:elementname=“person”> <xsd:complexType> <xsd:sequence> <xsd:elementname=“name”type=“xsd:string”/> <xsd:elementname=“address”type=“xsd:string”/> </xsd:sequence> </xsd:complexType></xsd:element> <xsd:elementname=“person”type=“ttt”><xsd:complexType name=“ttt”> <xsd:sequence> <xsd:elementname=“name” type=“xsd:string”/> <xsd:elementname=“address” type=“xsd:string”/> </xsd:sequence></xsd:complexType> DTD: <!ELEMENT person (name,address)>
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
Types: Local ou global • Type local: <xsd:elementname=“person”> [définit localement le type person] </xsd:element> • Type global: <xsd:elementname=“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
Elément: Local ou global • Elément local : <xsd:complexType name=“ttt”> <xsd:sequence> <xsd:elementname=“address” type=“...”/>... </xsd:sequence> </xsd:complexType> • Elément global : <xsd:elementname=“address” type=“...”/> <xsd:complexType name=“ttt”> <xsd:sequence><xsd:elementref=“address”/> ... </xsd:sequence> </xsd:complexType> • Elément global : même rôle que dans les DTDs
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”> ..</...> = (...)?
Portée des noms <xsd:elementname=“person”> <xsd:complexType> . . . . . <xsd:elementname=“name”> <xsd:complexType> <xsd:sequence> <xsd:elementname=“firstname” type=“xsd:string”/> <xsd:elementname=“lastname” type=“xsd:string”/> </xsd:sequence></xsd:complexType> </xsd:element> . . . . </xsd:complexType></xsd:element> <xsd:elementname=“product”> <xsd:complexType> . . . . . <xsd:elementname=“name” type=“xsd:string”/> </xsd:complexType></xsd:element> • L’élément name n’a pas la même signification dans person et dans product
Types complexes • 3 constructeurs pour définir les sous éléments d’un éléments : • sequence • choice • all <xsd:complexTypename="PurchaseOrderType"> <xsd:all> <xsd:elementname="shipTo" type="USAddress"/> <xsd:elementname="billTo" type="USAddress"/> <xsd:elementref="comment" minOccurs="0"/> <xsd:elementname="items" type="Items"/> </xsd:all> <xsd:attributename="orderDate" type="xsd:date"/> </xsd:complexType>
sequence <xsd:complexTypename="typePersonne"> <xsd:sequence> <xsd:elementname="nom"type="xsd:string"/> <xsd:elementname="prénom"type="xsd:string"/> <xsd:elementname="dateDeNaissance"type="xsd:date"/> <xsd:elementname="adresse"type="xsd:string"/> <xsd:elementname="email"type="xsd:string"/> <xsd:elementname="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>
choice <xsd:complexTypename="typePersonne"> <xsd:sequence> <xsd:elementname="nom"type="xsd:string"/> <xsd:elementname="prénom"type="xsd:string"/> <xsd:elementname="dateDeNaissance"type="xsd:date"/> <xsd:choice> <xsd:elementname="adresse"type="xsd:string"/> <xsd:elementname="email"type="xsd:string"/> </xsd:choice> <xsd:elementname="téléphone"type="numéroDeTéléphone"/> </xsd:sequence> </xsd:complexType>
all <xsd:complexTypename="typePersonne"> <xsd:all> <xsd:elementname="nom"type="xsd:string"/> <xsd:elementname="prénom"type="xsd:string"/> <xsd:elementname="dateDeNaissance"type="xsd:date"/> <xsd:elementname="adresse"type="xsd:string"/> <xsd:elementname="email"type="xsd:string"/> <xsd:elementname="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
Type dérivés par extension <complexTypename="Address"> <sequence> <elementname="street" type="string"/> <elementname="city" type="string"/> </sequence> </complexType> <complexTypename="USAddress"> <complexContent> <extensionbase="ipo:Address"> <sequence> <elementname="state" type="ipo:USState"/> <elementname="zip" type="positiveInteger"/> </sequence> </extension> </complexContent> </complexType> • Notion d’héritage
Type dérivés par extension, 2 <xsd:elementname="salaire"type="typeSalaire"/> <xsd:complexTypename="typeSalaire"> <xsd:simpleContent> <xsd:extensionbase="xsd:positiveInteger"> <xsd:attributename="devise"type="xsd:string"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> • Exemple : <salairedevise="USD">2918</salaire>
Type dérivés par restriction <complexContent> <restrictionbase="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 • ...
Type complexe vide <xsd:complexTypename="typeSalaire"> <xsd:attributename="devise"type="xsd:string"/> <xsd:attributename="montant"type="xsd:positiveInteger"/> </xsd:complexType> • Exemple <salairedevise="USD"montant="2918"/>
Contenu “Mixed”, Type “Any” • Contenu mixte : mieux que dans les DTDs, du texte peut etre insere entre les elements <xsd:complexTypemixed="true">. . . . • Type Any : veut dire que tout est autorisé <xsd:elementname="anything" type="xsd:anyType"/ . . . .
Attributs <xsd:elementname=“paper” type=“papertype”/> <xsd:complexTypename=“papertype”> <xsd:sequence> <xsd:elementname=“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
Attributs, 2 <?xml version="1.0" encoding="ISO-8859-1"?> <xsd:schemaxmlns:xsd="http://www.w3.org/2000/10/XMLSchema"> <xsd:elementname="contacts"type="typeContacts"/> <xsd:elementname="remarque"type="xsd:string"/> <xsd:complexTypename="typeContacts"> <!--déclarations du modèle de contenu ici--> <xsd:attributename="maj"type="xsd:date"/> </xsd:complexType> </xsd:schema> • Exemple : l'attribut majest optionnel, avec une valeur par défaut au 31 décembre 2000 s'il n'apparaît pas <xsd:attributename="maj"type="xsd:date"use="default"value="2000-12-31"/>
Groupes d'attributs <?xml version="1.0" encoding="ISO-8859-1"?> <xsd:schemaxmlns:xsd="http://www.w3.org/2000/10/XMLSchema"> <xsd:elementname="contacts"type="typeContacts"/> <xsd:elementname="remarque"type="xsd:string"/> <xsd:complexTypename="typeContacts"> <!--déclarations du modèle de contenu ici--> <xsd:attributeGroupref="InfosMaj"/> </xsd:complexType> <xsd:attributeGroupname="InfosMaj"> <xsd:attributename="maj"type="xsd:date"/> <xsd:attributename="auteur"type="xsd:string"/> </xsd:attributeGroup> </xsd:schema>
Types simple • List <xsd:simpleTypename="numéroDeTéléphone"> <xsd:listitemType="xsd:unsignedByte"/> </xsd:simpleType> <téléphone>02 24 15 74 48</téléphone> • Union <xsd:simpleTypename="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>
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>