Limites des DTD Espaces de noms XML : Une introduction (2
Transcription
Limites des DTD Espaces de noms XML : Une introduction (2
Limites des DTD Syntaxe spécifique Analyseurs XML non appropriés XML : Une introduction (2) Typage Pas de possibilité de typer les contenus Typage faible des valeurs d’attributs (orienté document plutôt que XML-Data) Description de documents XML http://kiwi.emse.fr/3A/dn.html Pas de modélisation partielle d'un document J.J. Girardot J.J. GIRARDOT - EMSE 11/2004 la modélisation doit être complète dans le DTD on peut inclure des fichiers externes on peut définir des parties conditionnelles 1 Exemple J.J. GIRARDOT - EMSE 11/2004 2 Espaces de noms Qu'est-ce qu'un « title » ? <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 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 Les URI Associer des « vocabulaires » (DTD ou Schémas) à des URI. Uniform Ressource Identifier Normalisation IAB & W3C Contrainte : permettre de retrouver automatiquement une définition associée à une URI Classification URL : Uniform Ressource Locator URN : Uniform Ressource Name 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> 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. 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 J.J. GIRARDOT - EMSE 11/2004 Historique les concepts d'URL et d'URN s'estompent, certains URI ne sont pas des URL ou URN manifestes, etc... 5 J.J. GIRARDOT - EMSE 11/2004 6 Attribution des URI Les URN Organisme : IANA Correspondent à des « NameSpace », définis par des NID http://www.iana.org/assignments/uri-schemes Catégorie 1 : de la forme urn-<num> Définis : urn-1, urn-2, urn-3 Environ 30 schémas enregistrés, attribués par l'IANA : Catégorie 2 : identificateurs spécifiques : http:, ftp:, etc. '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 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 J.J. GIRARDOT - EMSE 11/2004 8 Notes Qu'est-ce qu'un espace de Noms ? Description de base : RFC 2717 Règles de création : RFC 2718 Syntaxe des URN : RFC 2141 Un ensemble d'identificateurs, appartenant à l'un des trois groupes (sans conflit de nom) : types de données attributs globaux éléments urn: <nid> : <namespace specific string> Syntaxe des URI : RFC 2396 attributs propres à un élément <scheme>://<authority><path>?<query> quelques schémas : Les types de données permettent de spécifier des types spécifiques à une application déterminée Dans un document : 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 J.J. GIRARDOT - EMSE 11/2004 un attribut qualifié est cherché dans les attributs globaux un attribut non qualifié est cherché dans les attributs de l'élément courant 9 J.J. GIRARDOT - EMSE 11/2004 10 Utilisation des NameSpaces Terminologie Un NameSpace est référencé par un attribut spécial Préfixe : l'identificateur qui précède « : » dans un nom de balise ou d'attribut 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 le préfixe est défini par l'utilisation d'un attribut xmlns : xmlns:<prefixe>='<espace de noms>' Exemples : xmlns:edi='http://ecom.example.org/schema' xmlns='http://www.w3.org/1999/xhtml' J.J. GIRARDOT - EMSE 11/2004 11 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 Exemple 1 L'utilisation d'un attribut xmlns définit une référence à un espace de noms Éléments provenant de deux NameSpaces 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 J.J. GIRARDOT - EMSE 11/2004 <?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> 13 Exemple 2 J.J. GIRARDOT - EMSE 11/2004 14 Exemple 3 <?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> <?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 J.J. GIRARDOT - EMSE 11/2004 16 Exemple 4 Exemple 5 Utilisation incorrecte Utilisation correcte 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> J.J. GIRARDOT - EMSE 11/2004 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. 17 Quelques NameSpaces et leurs URI J.J. GIRARDOT - EMSE 11/2004 18 XML Schemas 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 <!-- 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> Syntaxe XML (il existe un Schéma for Schemas) Utilisation et support des Namespaces 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 19 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)> BookStore.xsd xsd = Xml-Schema Definition Une dtd simple 21 J.J. GIRARDOT - EMSE 11/2004 J.J. GIRARDOT - EMSE 11/2004 22 Liaison schéma - document 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> <?xml version="1.0"?> 1 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 2 targetNamespace="http://www.books.org" xmlns="http://www.books.org" 3 elementFormDefault="qualified"> 4 5 <xsd:element name="BookStore"> 6 <xsd:complexType> <xsd:sequence> <xsd:element ref="Book" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Book"> <xsd:complexType> <xsd:sequence> <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:sequence> </xsd:complexType> </xsd:element> <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> 2 3 schemaLocation="http://www.books.org BookStore.xsd" 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. targetNamespace="http://www.books.org" BookStore.xsd BookStore.xml - fait référence aux éléments de l'espace de noms http://www.books.org - définit les éléments de l'espace de noms 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). J.J. GIRARDOT - EMSE 11/2004 23 J.J. GIRARDOT - EMSE 11/2004 24 Faire coexister deux espaces de noms Solution 2 É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. Choisir XMLSchema comme espace de noms par défaut http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema http://www.books.org (targetNamespace) http://www.books.org (targetNamespace) complexType complexType BookStore element sequence Title string Publisher boolean Book schema Book Title string Author sequence Author schema BookStore element boolean ISBN Publisher ISBN Date integer Date integer J.J. GIRARDOT - EMSE 11/2004 <?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> J.J. GIRARDOT - EMSE 11/2004 25 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 <?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:complexType> <xsd:sequence> <xsd:element name="Book" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <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:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> 26 La définition des éléments est interne (locale) Autre écriture 27 J.J. GIRARDOT - EMSE 11/2004 28 Définition des types d’éléments Quels types sont-ils disponibles ? Deux écritures: Un exemple : date 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"> <xsd:complexType> … </xsd:complexType> </xsd:element> J.J. GIRARDOT - EMSE 11/2004 string boolean decimal float double duration dateTime time date gYearMonth gYear gMonthDay gDay gMonth hexBinary base64Binary anyURI Qname NOTATION 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 29 Note: 'T' séparateur date/time INF = infinity NAN = not-a-number Types primitifs "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 J.J. GIRARDOT - EMSE 11/2004 Type primitif Représentation d’une date : an, mois et jour Syntaxe : CCYY-MM-DD 31 J.J. GIRARDOT - EMSE 11/2004 30 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 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 <?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:restriction> </xsd:simpleType> <xsd:element name="BookStore"> <xsd:complexType> <xsd:sequence> <xsd:element name="Book" maxOccurs="unbounded"> <xsd:complexType> <xsd:sequence> <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:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> Une chaîne sans TAB, CR ou LF Une chaîne normalisée any valid xml:lang value, e.g., EN, FR, ... Utilisable seulement avec les attributs Utilisable seulement avec les attributs Utilisable seulement avec les attributs Utilisable seulement avec les attributs Un identificateur Un identificateur non qualifié Utilisable seulement avec les attributs Utilisable seulement avec les attributs Utilisable seulement avec les attributs 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 Type énumération de schémas Date est de type gYear, ISBN de type ISBNType J.J. GIRARDOT - EMSE 11/2004 34 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:restriction> </xsd:simpleType> <xsd:simpleType name="shape"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="circle"/> <xsd:enumeration value="triangle"/> <xsd:enumeration value="square"/> </xsd:restriction> </xsd:simpleType> <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}"/> </xsd:restriction> </xsd:simpleType> Nouveau type : shape. Un élément de ce type doit avoir l’une des valeurs circle, triangle, ou square. La barre verticale signifie "ou" J.J. GIRARDOT - EMSE 11/2004 Nous définissons ici le Type ISBNType. 35 J.J. GIRARDOT - EMSE 11/2004 36 Facettes des “integer” Type contraint Les entiers ont 8 facettes: totalDigits pattern whitespace enumeration maxInclusive maxExclusive minInclusive minExclusive <xsd:simpleType name= "EarthSurfaceElevation"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="-1290"/> <xsd:maxInclusive value="29035"/> </xsd:restriction> </xsd:simpleType> 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 Héritage des contraintes Syntaxe : <xsd:simpleType name= "EarthSurfaceElevation"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="-1290"/> <xsd:maxInclusive value="29035"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="nom"> <xsd:restriction base="xsd:base"> <xsd:facette value="valeur"/> ... </xsd:restriction> </xsd:simpleType> <xsd:simpleType name= "BostonAreaSurfaceElevation"> <xsd:restriction base="EarthSurfaceElevation"> <xsd:minInclusive value="0"/> <xsd:maxInclusive value="120"/> </xsd:restriction> </xsd:simpleType> Par "ou logique" pattern et enumeration Par "et logique" autres contraintes J.J. GIRARDOT - EMSE 11/2004 39 J.J. GIRARDOT - EMSE 11/2004 40 Déclaration des types simples Types complexes Par restriction sur les facettes de types primitifs ou de types simples définis Par union de types simples Syntaxe : <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 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 <xsd:complexType name="nom"> <xsd:constructeur> <xsd:element name="nom"/> <xsd:attribute name="nom"/> ... </xsd:constructeur> </xsd:complexType> Les constructeurs sequence, choice et all Les contenus element ou attribute, attribut mixed J.J. GIRARDOT - EMSE 11/2004 42
Documents pareils
XML Schema XML Schéma Types Simples Restrictions de Types
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann
Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann