Limites des DTD XML : Une introduction (2) Description de documents XML http://kiwi.emse.fr/3a/dn.html J.J. Girardot Syntaxe spécifique Analyseurs XML non appropriés Typage Pas de possibilité de typer les contenus Typage faible des valeurs d attributs (orienté document plutôt que XML-Data) Pas de modélisation partielle d'un document la modélisation doit être complète dans le DTD on peut inclure des fichiers externes on peut définir des parties conditionnelles Exemple Qu'est-ce qu'un «title»? J.J. GIRARDOT - EMSE 11/2004 1 <section><title>book-signing Event</title> <signing> <author title="mr" name="vikram Seth" /> <book title="a Suitable Boy" price="$22.95" /> </signing> <signing> <author title="dr" name="oliver Sacks" /> <book title="the Island of the Color-Blind" price="$12.95" /> </signing> </section> J.J. GIRARDOT - EMSE 11/2004 3 Espaces de noms J.J. GIRARDOT - EMSE 11/2004 2 On désire manipuler en XML des documents de structures différentes Les DTD fournissent une solution Chaque DTD définit une structure spécifique de document On veut utiliser au sein d'un même document des éléments et attributs issus de types de documents différents Exemple : écrire un article, utilisant des formules mathématiques et des dessins ; DTD impliqués : DocBook MathML (Mathematical Mark-Up Language) SVC (Scalable Vector Graphics) Problèmes On ne peut simplement «mélanger» les DTD (conflits de noms) On ne peut plus «copier» des fragments de documents si l'on change les noms J.J. GIRARDOT - EMSE 11/2004 4
Solution Associer des «vocabulaires» (DTD ou Schémas) à des URI. Contrainte : permettre de retrouver automatiquement une définition associée à une URI c.f. description des URI Référencer ces vocabulaires par des alias, utilisés comme préfixes dans les balises. Syntaxe choisie <préfixe>:<identificateur> Le préfixe est un identificateur Il a été associé à une URI, qui désigne une DTD L'identificateur est défini dans la DTD Attribution des URI J.J. GIRARDOT - EMSE 11/2004 5 Organisme : IANA http://www.iana.org/assignments/uri-schemes Environ 30 schémas enregistrés, attribués par l'iana : http:, ftp:, etc. Schéma non enregistrés Schémas publics liste maintenue (officieusement) par le W3C http://www.w3.org/addressing/schemes Schémas privés Utilisés par des entreprises comme Microsoft, WebTV, etc Des centaines sont utilisés et/ou créés chaque année J.J. GIRARDOT - EMSE 11/2004 7 Les URI Uniform Ressource Identifier Normalisation IAB & W3C Classification URL : Uniform Ressource Locator URN : Uniform Ressource Name Historique Référencer une ressource par son nom ou son adresse. URI : RFC 2396, URL : RFC 2717, URN : RFC 2276. Pratique actuelle : URI devient le terme générique pour l'ensemble des types de références. les concepts d'url et d'urn s'estompent, certains URI ne sont pas des URL ou URN manifestes, etc... Les URN J.J. GIRARDOT - EMSE 11/2004 6 Correspondent à des «NameSpace», définis par des NID Catégorie 1 : de la forme urn-<num> Définis : urn-1, urn-2, urn-3 Catégorie 2 : identificateurs spécifiques : 'ietf' [RFC 2648], URN Namespace for IETF Documents 'pin'[rfc 3043], The Network Solutions Personal Internet Name (PIN): A URN Namespace for People and Organizations 'issn' [RFC 3043], Using The ISSN as URN within an ISSN-URN Namespace 'oid' [RFC 3061], A URN Namespace of Object Identifiers 'newsml' [RFC 3085], URN Namespace for NewsML Resources 'oasis' [RFC 3121], A URN Namespace for OASIS 'xmlorg' [RFC 3120], A URN Namespace for XML.org 'publicid' [RFC 3151], A URN Namespace for Public Identifiers J.J. GIRARDOT - EMSE 11/2004 8
Notes Description de base : RFC 2717 Règles de création : RFC 2718 Syntaxe des URN : RFC 2141 urn: <nid> : <namespace specific string> Syntaxe des URI : RFC 2396 <scheme>://<authority><path>?<query> quelques schémas : http, ftp, gopher, news, telnet, mailto, etc. URL & formes abrégées Syntaxe : http://www.ibiblio.org/xml/signature.xml URL abrégé : /xml/signature.xml URL abrégé relatif : signature.xml Utilisation des NameSpaces J.J. GIRARDOT - EMSE 11/2004 9 Un NameSpace est référencé par un attribut spécial Syntaxes de l'attribut : xmlns = "valeur" xmlns:<prefixe>="valeur" Le préfixe est un identificateur choisi par l'utilisateur La valeur est une URI désignant l'espace de nom Exemples : xmlns:edi='http://ecom.example.org/schema' xmlns='http://www.w3.org/1999/xhtml' J.J. GIRARDOT - EMSE 11/2004 11 Qu'est-ce qu'un espace de Noms? Un ensemble d'identificateurs, appartenant à l'un des trois groupes (sans conflit de nom) : types de données attributs globaux éléments attributs propres à un élément Les types de données permettent de spécifier des types spécifiques à une application déterminée Dans un document : un attribut qualifié est cherché dans les attributs globaux un attribut non qualifié est cherché dans les attributs de l'élément courant Terminologie J.J. GIRARDOT - EMSE 11/2004 10 Préfixe : l'identificateur qui précède «:» dans un nom de balise ou d'attribut le préfixe est défini par l'utilisation d'un attribut xmlns : xmlns:<prefixe>='<espace de noms>' Espace de noms : un URI Nom local : l'identificateur qui suit «:» dans un nom de balise ou d'attribut Nom qualifié : la combinaison d'un préfixe et d'un nom local séparés par le caractère «:», ou un identificateur sans préfixe Nom étendu : l'identification conceptuellement constituée d'un espace de noms et d'un nom local J.J. GIRARDOT - EMSE 11/2004 12
Sémantique L'utilisation d'un attribut xmlns définit une référence à un espace de noms xmlns : espace de noms par défaut xmlns:préfixe : alias d'un espace de nom L'espace de noms ainsi référencé est «actif» pour la balise où apparaît l'attribut, et pour toute balise contenue dans celle-ci Un espace de noms ainsi référencé peut être masqué par une nouvelle déclaration, effectué au sein d'une balise contenu dans la balise courante Plusieurs espaces de noms peuvent être référencés au sein d'une même balise Exemple 2 J.J. GIRARDOT - EMSE 11/2004 13 <?xml version="1.1"?> <!-- initially, the default namespace is "books" --> <book xmlns='urn:loc.gov:books' xmlns:isbn='urn:isbn:0-395-36341-6'> <title>cheaper by the Dozen</title> <isbn:number>1568491379</isbn:number> <notes> <!-- make HTML the default namespace for some commentary --> <p xmlns='http://www.w3.org/1999/xhtml'> This is a <i>funny</i> book! </p> </notes> </book> J.J. GIRARDOT - EMSE 11/2004 15 Exemple 1 Éléments provenant de deux NameSpaces <?xml version="1.1"?> <!-- unprefixed element types are from "books" --> <book xmlns='urn:loc.gov:books' xmlns:isbn='urn:isbn:0-395-36341-6'> <title>cheaper by the Dozen</title> <isbn:number>1568491379</isbn:number> </book> Exemple 3 J.J. GIRARDOT - EMSE 11/2004 14 <?xml version='1.1'?> <Beers> <!-- the default namespace inside tables is that of HTML --> <table xmlns='http://www.w3.org/1999/xhtml'> <th><td>name</td><td>origin</td><td>description</td></th> <tr> <!-- no default namespace inside table cells --> <td><brandname xmlns="">huntsman</brandname></td> <td><origin xmlns="">bath, UK</origin></td> <td> <details xmlns=""><class>bitter</class><hop>fuggles</hop> <pro>wonderful hop, light alcohol, good summer beer</pro> <con>fragile; excessive variance pub to pub</con> </details> </td> </tr> </table> </Beers> J.J. GIRARDOT - EMSE 11/2004 16
Exemple 4 Utilisation incorrecte les noms étendus des attributs d'un même élément doivent être différents <!-- http://www.w3.org is bound to n1 and n2 --> <x xmlns:n1="http://www.w3.org" xmlns:n2="http://www.w3.org" > <bad a="1" a="2" /> <bad n1:a="1" n2:a="2" /> </x> Exemple 5 Utilisation correcte <!-- http://www.w3.org is bound to n1 and is the default --> <x xmlns:n1="http://www.w3.org" xmlns="http://www.w3.org" > <good a="1" b="2" /> <good a="1" n1:a="2" /> </x> Note : dans le second exemple, a="1" est l'attribut local de l'élément good du NS "http://www.w3.org", alors que n1:a="2" est l'attribut global de ce même NS. J.J. GIRARDOT - EMSE 11/2004 17 Quelques NameSpaces et leurs URI XML Schemas : http://www.w3.org/2001/xmlschema SMIL 2.0 : http://www.w3.org/2001/smil20/pr/ XHTML : http://www.w3.org/1999/xhtml Voice XML : http://www.w3.org/2001/vxml RDF : http://www.w3.org/1999/02/22-rdf-syntax-ns# SVG : http://www.w3.org/2000/svg Xlink : http://www.w3.org/1999/xlink XSLT : http://www.w3.org/1999/xsl/transform XSI : http://www.w3.org/2001/xmlschema-instance EV : http://www.w3.org/2001/xml-events... J.J. GIRARDOT - EMSE 11/2004 19 XML Schemas Syntaxe XML (il existe un Schéma for Schemas) Utilisation et support des Namespaces J.J. GIRARDOT - EMSE 11/2004 18 Déclarations «orientées objet» (héritage, types abstraits ) Définition de types global (top-level) et local (inlined) Modularité (inclusion de schema et redéfinitions) Structure auto-documentée Expression de la cardinalité des sous-éléments Valeurs nulles (absence de contenus) Attributs et éléments par défaut Any-element, any-attribute Unicité des contraintes et ID/IDREF attribute scope Expressions régulières pour specifier des chardata et des attributs valides Nombreux types de données prédéfinis pour les contenus et les attributs J.J. GIRARDOT - EMSE 11/2004 20
Exemple : BookStore.dtd <!ELEMENT BookStore (Book+)> <!ELEMENT Book (Title, Author, Date, ISBN, Publisher)> <!ELEMENT Title (#PCDATA)> <!ELEMENT Author (#PCDATA)> <!ELEMENT Date (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT Publisher (#PCDATA)> Une dtd simple J.J. GIRARDOT - EMSE 11/2004 21 BookStore.xsd xsd = Xml-Schema Definition <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" 1 targetnamespace="http://www.books.org" 2 xmlns="http://www.books.org" 3 elementformdefault="qualified"> 4 5 <xsd:element name="bookstore"> 6 <xsd:element ref="book" minoccurs="1" maxoccurs="unbounded"/> <xsd:element name="book"> <xsd:element ref="title" minoccurs="1" maxoccurs="1"/> <xsd:element ref="author" minoccurs="1" maxoccurs="1"/> <xsd:element ref="date" minoccurs="1" maxoccurs="1"/> <xsd:element ref="isbn" minoccurs="1" maxoccurs="1"/> <xsd:element ref="publisher" minoccurs="1" maxoccurs="1"/> <xsd:element name="title" type="xsd:string"/> <xsd:element name="author" type="xsd:string"/> <xsd:element name="date" type="xsd:string"/> <xsd:element name="isbn" type="xsd:string"/> <xsd:element name="publisher" type="xsd:string"/> </xsd:schema> J.J. GIRARDOT - EMSE 11/2004 22 Utilisation du schéma <?xml version="1.0"?> <BookStore xmlns ="http://www.books.org" 1 xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.books.org BookStore.xsd"> <Book> <Title>My Life and Times</Title> <Author>Paul McCartney</Author> <Date>July, 1998</Date> <ISBN>94303-12021-43892</ISBN> <Publisher>McMillin Publishing</Publisher> </Book>... </BookStore> 1. Cette déclaration d'un espace de noms par défaut indique que tous les noms non qualifiés sont définis dans l'espace de noms dont l'uri est http://www.books.org. 2. Nous allons faire référence à un attribut "schemalocation" dont les caractéristiques sont définies dans la norme 1 des schémas, à l'uri http://www.w3.org/2001/xmlschema-instance. 3. L'attribut "schemalocation" indique au valideur de schémas que l'espace de noms http://www.books.org est défini par "BookStore.xsd" (schemalocation se compose de deux valeurs). 2 3 J.J. GIRARDOT - EMSE 11/2004 23 Liaison schéma - document schemalocation="http://www.books.org BookStore.xsd" BookStore.xml - fait référence aux éléments de l'espace de noms http://www.books.org targetnamespace="http://www.books.org" BookStore.xsd - définit les éléments de l'espace de noms http://www.books.org J.J. GIRARDOT - EMSE 11/2004 24
Faire coexister deux espaces de noms Éléments de l espace de noms des Schémas Éléments de l espace de noms en cours de définition Solution 1 :les noms des Schémas sont qualifiés ; la cible est prise comme espace de noms par défaut. http://www.w3.org/2001/xmlschema http://www.books.org (targetnamespace) Solution 2 Choisir XMLSchema comme espace de noms par défaut http://www.w3.org/2001/xmlschema http://www.books.org (targetnamespace) complextype element sequence schema boolean string integer BookStore Author Book Title Publisher ISBN Date complextype element sequence schema boolean string integer BookStore Author Book Title Publisher ISBN Date J.J. GIRARDOT - EMSE 11/2004 25 J.J. GIRARDOT - EMSE 11/2004 26 <?xml version="1.0"?> <schema xmlns="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.books.org" xmlns:bk="http://www.books.org" elementformdefault="qualified"> <element name="bookstore"> <complextype> <sequence> <element ref="bk:book" maxoccurs="unbounded"/> </sequence> </complextype> </element> <element name="book"> <complextype> <sequence> <element ref="bk:title"/> <element ref="bk:author"/> <element ref="bk:date"/> <element ref="bk:isbn"/> <element ref="bk:publisher"/> </sequence> </complextype> </element> <element name="title" type="string"/> <element name="author" type="string"/> <element name="date" type="string"/> <element name="isbn" type="string"/> <element name="publisher" type="string"/> </schema> L espace de noms par défaut est celui des Schémas. Il n est pas nécessaire de qualifier : - schéma - élément - complextype - séquence - string Le préfixe bk sert à référencer l espace cible. Les noms des éléments sont des identificateurs. Il n y a pas d ambiguïté dans leur utilisation. J.J. GIRARDOT - EMSE 11/2004 27 <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.books.org" xmlns="http://www.books.org" elementformdefault="qualified"> <xsd:element name="bookstore"> <xsd:element name="book" maxoccurs="unbounded"> <xsd:element name="title" type="xsd:string"/> <xsd:element name="author" type="xsd:string"/> <xsd:element name="date" type="xsd:string"/> <xsd:element name="isbn" type="xsd:string"/> <xsd:element name="publisher" type="xsd:string"/> </xsd:schema> Autre écriture La définition des éléments est interne (locale) J.J. GIRARDOT - EMSE 11/2004 28
Définition des types d éléments Deux écritures: Sous forme d attribut <xsd:element name="name" type="type" minoccurs="int" maxoccurs="int"/> Sous forme de contenu <xsd:element name="name" minoccurs="int" maxoccurs="int"> Quels types sont-ils disponibles? Un exemple : date Type primitif Représentation d une date : an, mois et jour Syntaxe : CCYY-MM-DD Exemple 4 mars 2004 est noté 2004-03-04 Contraintes CC et YY compris entre 00 et 00 MM compris entre 01 et 12 DD compris entre 01 et 28, 29, 30 ou 31 selon le mois et l an J.J. GIRARDOT - EMSE 11/2004 29 J.J. GIRARDOT - EMSE 11/2004 30 Types primitifs string boolean decimal float double duration datetime time date gyearmonth gyear gmonthday gday gmonth hexbinary base64binary anyuri Qname NOTATION Note: 'T' séparateur date/time INF = infinity NAN = not-a-number "Hello World" {true, false, 1, 0} 7.08 12.56E3, 12, 12560, 0, -0, INF, -INF, NAN 12.56E3, 12, 12560, 0, -0, INF, -INF, NAN P1Y2M3DT10H30M12.3S format: CCYY-MM-DDThh:mm:ss format: hh:mm:ss.sss format: CCYY-MM-DD format: CCYY-MM format: CCYY format: --MM-DD format: ---DD format: --MM chaîne hexadécimale chaîne base 64 URI/URN/URL Nom qualifié Notation Types dérivés Types dérivés prédéfinis Restriction sur des types primitifs Ex : Entier positif : positiveinteger Types construits (user defined) Types simples Restrictions de types prédéfinis par spécifications de facettes length, minlenght, maxlength, pattern, enumeration, whitespace Types complexes Composition J.J. GIRARDOT - EMSE 11/2004 31 J.J. GIRARDOT - EMSE 11/2004 32
normalizedstring token language IDREFS ENTITIES NMTOKEN NMTOKENS Name NCName ID IDREF ENTITY integer nonpositiveinteger negativeinteger long int short byte nonnegativeinteger unsignedlong unsignedint unsignedshort unsignedbyte positiveinteger Une chaîne sans TAB, CR ou LF Une chaîne normalisée any valid xml:lang value, e.g., EN, FR,... Un identificateur Un identificateur non qualifié 456 -infini à 0 -infini à -1-9223372036854775808 à 9223372036854775807-2147483648 à 2147483647-32768 à 32767-127 à 128 0 à infini 0 à 18446744073709551615 0 à 4294967295 0 à 65535 0 à 255 1 à infini J.J. GIRARDOT - EMSE 11/2004 33 <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.books.org" xmlns="http://www.books.org" elementformdefault="qualified"> <xsd:simpletype name="isbntype"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{1}-\d{5}-\d{3}-\d{1}"/> <xsd:pattern value="\d{1}-\d{3}-\d{5}-\d{1}"/> <xsd:pattern value="\d{1}-\d{2}-\d{6}-\d{1}"/> <xsd:element name="bookstore"> <xsd:element name="book" maxoccurs="unbounded"> <xsd:element name="title" type="xsd:string"/> <xsd:element name="author" type="xsd:string"/> <xsd:element name="date" type="xsd:gyear"/> <xsd:element name="isbn" type="isbntype"/> <xsd:element name="publisher" type="xsd:string"/> </xsd:schema> Nous définissons ici le Type ISBNType. Date est de type gyear, ISBN de type ISBNType J.J. GIRARDOT - EMSE 11/2004 34 Type énumération de schémas Exemple : type énumérés <xsd:simpletype name="isbntype"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{1}-\d{5}-\d{3}-\d{1}"/> <xsd:pattern value="\d{1}-\d{3}-\d{5}-\d{1}"/> <xsd:pattern value="\d{1}-\d{2}-\d{6}-\d{1}"/> <xsd:simpletype name="isbntype"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{1}-\d{5}-\d{3}-\d{1} \d{1}-\d{3}-\d{5}-\d{1} \d{1}-\d{2}-\d{6}-\d{1}"/> La barre verticale signifie "ou" <xsd:simpletype name="shape"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="circle"/> <xsd:enumeration value="triangle"/> <xsd:enumeration value="square"/> Nouveau type : shape. Un élément de ce type doit avoir l une des valeurs circle, triangle, ou square. J.J. GIRARDOT - EMSE 11/2004 35 J.J. GIRARDOT - EMSE 11/2004 36
Facettes des integer Les entiers ont 8 facettes: totaldigits pattern whitespace enumeration maxinclusive maxexclusive mininclusive minexclusive Type contraint <xsd:simpletype name= "EarthSurfaceElevation"> <xsd:restriction base="xsd:integer"> <xsd:mininclusive value="-1290"/> <xsd:maxinclusive value="29035"/> Nouveau type 'EarthSurfaceElevation'. Les éléments de ce type sont des entiers compris entre -1290 et 29035. J.J. GIRARDOT - EMSE 11/2004 37 J.J. GIRARDOT - EMSE 11/2004 38 Agencement des contraintes Syntaxe : Par "ou logique" pattern et enumeration Par "et logique" autres contraintes <xsd:simpletype name="nom"> <xsd:restriction base="xsd:base"> <xsd:facette value="valeur"/>... J.J. GIRARDOT - EMSE 11/2004 39 Héritage des contraintes <xsd:simpletype name= "EarthSurfaceElevation"> <xsd:restriction base="xsd:integer"> <xsd:mininclusive value="-1290"/> <xsd:maxinclusive value="29035"/> <xsd:simpletype name= "BostonAreaSurfaceElevation"> <xsd:restriction base="earthsurfaceelevation"> <xsd:mininclusive value="0"/> <xsd:maxinclusive value="120"/> J.J. GIRARDOT - EMSE 11/2004 40
Déclaration des types simples Par restriction sur les facettes de types primitifs ou de types simples définis Par union de types simples <xsd:union membertypes="type1 type2 type3"> Par liste de types simples <xsd:list itemtypes="xsd:positiveinteger"> Une liste a une facette length sur laquelle il est possible de placer des restrictions J.J. GIRARDOT - EMSE 11/2004 41 Syntaxe : Types complexes <xsd:complextype name="nom"> <xsd:constructeur> <xsd:element name="nom"/> <xsd:attribute name="nom"/>... </xsd:constructeur> Les constructeurs sequence, choice et all Les contenus element ou attribute, attribut mixed J.J. GIRARDOT - EMSE 11/2004 42 Autres aspects Balise any pour autoriser n'importe quel élément Balise anyattribute pour les attributs Noms globaux et noms internes Expressions régulières pour les chaînes Types et éléments abstraits Espaces de noms distincts pour : éléments attributs types attributs globaux J.J. GIRARDOT - EMSE 11/2004 43