Typage de données XML Les besoins de schémas Plan
Transcription
Typage de données XML Les besoins de schémas Plan
1 3 Les besoins de schémas Dans la gestion de données XML, un schéma est utile pour naviguer et interroger des données, créer et modifier des données, l’optimisation de requêtes, et le stockage des données. Dans la gestion de documents XML, un schéma est utile pour Typage de données XML créer et modifier (éditeurs structurés), échanger (vérification) des documents. 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 2 4 Plan Exemple: Interrogation et Optimisation Typage de données XML DTD : – Utilisation du typage dans le contexte XML 1 – Grammaires d’arbres 2 – XML Schema 3 <!ELEMENT Personnes (Etudiant|Prof)*> <!ELEMENT Etudiant Nom> <!ELEMENT Prof (Nom, Salaire)> Requête XQuery : for $a in Personnes/* return $a/Salaire Version optimisée : for $a in Personnes/Prof return $a/Salaire 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 5 7 Exemple: Stockage d’un document XML dans une Base de Données DTD : 1 2 3 <!ELEMENT Cours (Titre, NomProf, (Etudiant)* > <!ELEMENT Etudiant NomEt > <!ELEMENT Prof (NomProf, Salaire) > Schéma relationnel : Cours(titre, nomProf) Etudiant(nomEt, titre) Prof(nomProf, salaire) Grammaires d’arbres 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 6 8 Exemple: Echange de documents Est-ce que les documents du fournisseurs avec les applications du client ? DTD et Validation sont compatibles a : Schéma de bbcdd par rapport au schéma de de On valide les documents L(b*cd*) : Ensemble de documents qui satisfont : ee f fg L(f(g?)) L(e*) et de (analyse statique): On compare les schémas de Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann <!ELEMENT a (b*cd*) > <!ELEMENT c (e*) > <!ELEMENT d (f(g*)) > Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 9 11 DTD = grammaire d’arbre DTD étendues: types et éléments DTD: Doc doc <!ELEMENT officiel (#PCDATA | cinéma | film)*> <!ELEMENT cinéma (nom, adresse, (séance)*)> Titre titre section Titre titre Section Para para Grammaire d’arbres : TypeOfficiel -> officiel (TypeCinema|TypeFilm|Pcdata)* TypeCinema -> cinema (TypeNom, TypeAdresse, TypeSéance*) TypeFilm -> film (...) TypeNom -> nom (Pcdata) ... Para para element type Section section (Titre, Para*) 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 10 12 Grammaires d’arbres Interpretation Une interpretation d’un arbre vers une grammaire d’arbres est une “mapping” de chaque noeud , noté , dans vers un non-terminal (type) tel que : Une grammaire d’arbres (régulière) est un quadruple , où est , et . est dans 2. le terminal (étiquette) de 3. , il existe une est un ensemble fini de règles de production ou , où , et est une expression régulière sur ( est appelé le modèle de contenu de ). et ses enfants telle que , 1. pour chaque noeud règle de production (types des racines), est un ensemble fini de terminaux (noms d’élément), est un sous-ensemble de est un symbole dans , et est un ensemble fini de non-terminaux (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 13 15 1 2 Titre titre section Section 3 4 5 Titre titre Para para Para para 6 7 8 Section section (Titre, Para*) 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 14 16 5 6 7 8 4 3 : Doc doc Grammaire d’arbres Interprétation Grammaire d’arbre 2 N = {Doc, Para1, Para2, Pcdata} T = {doc, para, pcdata} S = {Doc} Doc -> doc (Para1, Para2*) Para1 -> para (Author, Pcdata) Para2 -> para (Pcdata) Author -> author (Pcdata) Pcdata -> pcdata element type 1 : Grammaire d’arbres Doc doc Grammaire d’arbre Interprétation N = {Doc, Section, Titre, Para, Pcdata} T = {doc, section, titre, para, pcdata} S = {Doc} Doc -> doc (Titre, Section+) Titre -> titre (Pcdata) Section -> section (Titre, Para*) Para -> para (Pcdata) Pcdata -> pcdata Para1 para Para2 para auteur . et section Titre titre Normalisation : Il n’existe pas deux règles Section Titre titre Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann Para1 para (Auteur, Pcdata) Para2 para (Pcdata) Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 17 19 Géneration d’arbres et langages Grammaires à types uniques s’il existe Un arbre est généré par une grammaire d’arbres une interprétation de dans . Une grammaire à types uniques est une grammaire régulière telle que – pour chaque règle de production, les non-terminaux dans son modèle de contenu ne sont pas concurrents et Un langage d’arbres régulier est l’ensemble des arbres générés par une grammaire d’arbres régulièrs. ne sont pas concurrents. – les symboles dans – XML Schema = grammaire à types uniques Exemples : est une grammaire à types uniques. et n’est pas une grammaire à types uniques ( sont concurrents dans la même règle) 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 18 20 Grammaires locales Non-terminaux concurrents Une grammaire locale est une grammaire régulière sans non-terminaux concurrents. Un modèle de contenu restreint la concurrence entre deux non-terminaux et concurrents s’il n’existe pas de séquences de non-terminaux , , et telles que génère et . Deux non-terminaux et sont concurrents entre eux s’il existe deux règles de production et avec le même terminal . DTD=grammaire locale Exemples : est une grammaire locale et n’est pas une grammaire locale ( ) 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 21 23 Grammaires avec concurrence restreinte Fermeture Question : Si les grammaires d’arbres régulières sont fermés sous l’union, l’intersection et la différence. ne sont pas concurrents. précédente est une grammaire avec concurrence les grammaires locales, à types uniques et avec concurrence restreinte sont uniquement fermées sous l’intersection. La grammaire restreinte. les non-terminaux dans grammaire pour chaque règle de production, le modèle de contenu restreint la concurrence entre ses non-terminaux et et sont deux grammaires d’arbres et est une opération ensembliste, est-ce qu’il existe une tel que ? Une grammaire avec concurrence restreinte est une grammaire régulière telle que Exemples : ne peut pas “prendre la restreint la concurrence ( ) place” de Doc -> doc (Para1* Para2*) ne restreint pas la concurrence entre Para1 et Para2. 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 22 24 Validation Expressivité et validation Dans une grammaire sont associés à la même locale, tous les éléments d’un type règle de production Toutes les grammaires d’arbres régulières permettent la validation par évènement (SAX). Exemple : Grammaires à types uniques on cherche une règle de type (a) noeud = racine : il existe au maximum une règle de production (b) noeud <> racine : soit la règle de production du parent de ; on cherche la règle tel que apparaît dans avec concurrence restreinte, il est possible d’identifier pour chaque élément une seule règle de production à partir de son parent et de ses frères de gauche. 1. entrée d’un noeud : à types uniques, tous les fils de type d’un élément sont associés à la même règle de production concurrence restreinte type unique locale 2. sortie d’un noeud : on compare la séquence des étiquettes des enfants de avec . 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 25 Langages de définition de schémas XML 27 XML Schéma Séparation entre types et éléménts (grammaire d’arbre à types uniques) DTD: grammaires locales XML Schéma: grammaires à types uniques Types complexes, abstraits et anonymes DSD, XDuce, Relax Core, Trex: grammaires régulières Sous-typage par extension et restriction Contraintes d’intégrité (clés, clés étrangères) Un schéma XML est lui même un document XML. 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 26 28 Types Simples DTD: un seul type simple (#PCDATA) et 10 types d’attributs Schéma XML: 43 types simples – xsd:string, xsd:byte, ... – xsd:integer, xsd:long, xsd:float, xsd:double, ... – xsd:boolean XML Schema – xsd:time, xsd:timeDuration, xsd:Date, xsd:year, xsd:month, ... – xsd:language, xsd:uriReference – xsd:ID, xsd:IDREF, xsd:NMTOKEN, ... 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 29 31 Restrictions de Types Simples Listes de Valeurs de Type Simple Une liste de numéros de téléphone : On peut restreindre les types simples <xsd:simpleType name=’listeNumTél’> <xsd:list itemType=’numTél’/> </xsd:simpleType> par leur longueur (length, minLength, maxLength) (chaînes de caractères ou listes) Une liste de cinq numéros de téléphone (restriction du type précédent) : par des motifs (chaînes de caractères), par énumération, <xsd:simpleType name=’cinqNumTél’> <xsd:restriction base=’listNumTél’> <xsd:length value=’5’/> </xsd:restriction> </xsd:simpleType> par des intervalles (maxInclusive, maxExclusive, minInclusive, minExclusive) et autres (precision, scale, encoding, period, duration). 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 30 32 Restriction de Types Simples par Motifs Numéro de téléphone: +33-(0)-1-34-45-67-89 DTD: #PCDATA Union de Types Simples Un numéro de téléphone Européen est soit un numéro français, un numéro allement, ... Grammaire d’arbres : Schéma XML: Similaire aux expressions régulières de Perl <xsd:simpleType name=’numTél’> <xsd:restriction base=’xsd:string’> <xsd:pattern value=’+33-(0)-\d(-\d{2}){3}’/> </xsd:restriction> </xsd:simpleType> Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann euroNumTél -> francTél | gerTél | belTél | ... Schéma : <xsd:simpleType name=’euroNumTél’> <xsd:union memberTypes=’francTél gerTél belTél ...’/> </xsd:simpleType> Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 33 35 Types Complexes Eléments Trois constructeurs de type: Déclaration d’éléments: <xsd:element name type contraintes [value]/> ou <xsd:element ref contraintes/> – xsd:sequence: séquence ordonnée d’éléménts – xsd:all: séquence non-ordonnée d’éléménts – xsd:choice: choix d’éléménts (DTD: ’ ’) Contraintes: minOccurs, maxOccurs, fixed – xsd:group: regroupement (DTD: ’(...)’). Exemple: <xsd:element name=’nom’ type=’xsd:string’ minOccurs=’0’ maxOccurs=’2’/> 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 34 36 Attributs Type Complexe: Exemple Déclaration d’attributs: <xsd:attribute name use [value]/> Modèle de contenu DTD: (titre, année) Use : required, optional, fixed, prohibited <xsd:complexType name=’FilmType’> <xsd:sequence> <xsd:element name=’titre’ type=’xsd:string’/> <xsd:element name=’année’ type=’xsd:year’/> </xsd:sequence> </xsd:complexType> Exemple: <xsd:attribute name=’langue’ type=’xsd:language’ optional=’true’/> XML Schéma: Grammaire : FilmType -> Titre Année Titre -> titre String Année -> année xsd:year 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 37 39 Valeurs Nulles Contenu Mélangé (mixed) On distingue entre les éléments vides et les éléments avec un contenu inconnu : DTD: (#PCDATA | cinéma | film)* Schéma XML: Schéma XML : <xsd:complexType name=’OfficielType’ mixed=’true’> <xsd:choice minOccurs=’0’ maxOccurs=’unbounded’> <xsd:element name=’cinema’ type=’CinemaType’ /> <xsd:element name=’film’ type=’FilmType’ /> </xsd:choice> </xsd:complexType> <xsd:element name=’heureFilm’ type=’xsd:time’ nullable=’true’/> Élément XML: <heureFilm xsi:null=’true’/> xsi:null est défini dans l’espace de noms pour des instances (http://www.w3.org/2000/10/XMLSchema-instance). 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 38 40 Groupes: Exemple Extension de Types Complexes Cinémas avec un site Web et un pays (fichier webcountry.xsd): DTD: ((B|C)*,D)+ XML schéma: <xsd:complexType> <xsd:group minOccurs=’1’ maxOccurs=’unbounded’> <xsd:sequence> <xsd:group minOccurs=’0’ maxOccurs=’unbounded’> <xsd:choice> <xsd:element name=’B’ xsd:type=’xsd:string’/> <xsd:element name=’C’ xsd:type=’xsd:string’/> </xsd:choice> </xsd:sequence> </xsd:group> <xsd:complexType> Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann <complexType name=’cybercinemaType’> <complexContent> <extension base=’officiel:cinemaType’> <sequence> <element name=’url’ type=’xsd:string’/> </sequence> </extension> </complexContent> </complexType> Grammaire d’abres : CybercinemaType -> Nom Adresse (Seance)* Url, Nom -> nom String, Url -> url String, ... Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 41 Extension de Types Complexes 43 Restriction de Types Complexes On définit un type spécifique pour les cinémas avec une à trois séances (fichier seance.xsd): Chaque occurrence de CinemaType dans le modèle de contenu d’une règle est remplacée par (CinemaType|CybercinemaType) <complexType name=’séanceobligType’> <complexContent> <restriction base=’cinemaType’> <complexType content=’elementOnly’> <sequence minOccurs=’1’ maxOccurs=’3’> <element ref=’seance’/> </sequence> <element name=’nom’ type=’string’/> <element ref=’adresse’/> </complexType> </complexContent> </complexType> Le remplacement automatique peut être empeché par les attributs block et final. Ces deux attributs peuvent prendre comme valeurs #all ou une liste contenant les valeurs restriction, extension et/ou substitution : <xsd:complexType name=’CinemaType’ block=’restriction’> ... </xsd:complexType> 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 42 44 Utilisation de Types Étendus Valeur unique On indique explicitement le type (grammaire à types uniques) : <cinema xsi:type=’CybercinemaType’> <nom>St André des Arts</nom> <officiel:adresse> <ville> Paris </ville> <rue> rue St. André des Arts </rue> <numéro> 13 </numéro> </officiel:adresse> <url>http://www.st-andré.com</url> </cinema> Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann L’attribut film_id d’un film doit être unique: <unique name=’toto’> <selector>film</selector> <field>@film_id</field> </unique> Les valeurs des element <selector> et <field> sont des expressions XPath. La valeur de <field> doit être unique à l’intérieur de chaque élément sélectionné par le sélecteur. Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 45 Clés et Références 47 Exemple: Inférence de type avec Datalog Etant donné un graphe de données et un graphe de schéma (type) on peut se poser deux questions : Une clé est unique (filmcli = clé): Est-ce que est conforme à ? (validation) appartient à quelle classe dans Quel noeud dans (classification) <key name=’filmclé’> <selector>film</selector> <field>@film_id</field> </key> ? Référence (filmref = clé etrangère): <keyref name=’filmref’ refer=’filmclé’> <selector>séance</selector> <field>@ref_film</field> </keyref> 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 46 48 Exemple: Classification avec Datalog Règles : Si est le fils d’un élément de type Personne et de type string, alors est de type Nom; Si est le fils d’un élément de type Employé et de type integer, alors est de type Sal; Inférence de type Si a des fils de type Nom, alors Personne; est un élément de type Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann Si a des fils de type Nom et de type Salaire alors élément de type Employé. est un Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 49 51 Point-fixe maximal Exemple: Règles Datalog Le résultat des règles précédentes est vide dans les deux cas si on applique la sémantique du point fixe minimal (Nom, Sal, Personne, Employe et Root sont vides au départ) Schéma ; Point fixe maximal: Nom(x) :- Personne(y), parent(x,y), string(x); Sal(x) :- Personne(y), parent(x,y), integer(x); Personne(x) :- Nom(y), parent(y,x); Employe(x) :- Nom(y), parent(y,x), Sal(z), parent(y,z); Root(x):- Personne(y), parent(y,x); Root(x):- Employe(y), parent(y,x); : chaque prédicat intensionel (type) contient tous les faits (objets) de la base ; contient tous les faits qui peuvent être dérivé de 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 50 52 Exemple Base 1 Exemple : Deux Bases de données Base 1 : , &c "Toto" , , Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann = , , : 123 &6 , &5 "Lulu" &4 "Toto" &d "Lulu" , &b , &3 &2 , ... , : : &a Base 2: &1 Base 1: (point fixe) Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 53 55 Exemple Base 2 Base 2 : &r1 , person employee , , , : &p1 &c1 name position , , : &p2 , person company employee , , data , ... , , : , : Simulation: Données works_for name address name position , , &s0 (point fixe) = : &s2 &s3 &s4 &s5 n’a pas pu être typé le noeud &s1 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 54 56 Simulation Simulation: Schéma et Simulation Schémas et données sont des graphes avec des arcs étiquettés : schema person Person company employee works_for Company addr Une relation est une simulation de dans ( ) si pour chaque arc dans et chaque pair , il existe un arc dans , tel que et . Root position name name Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann String String String &r1 &p1 &c1 &p2 &s0 &s1 &s2 &s3 &s4 &s5 Root Simulation Person Company Person String String String String String String Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 57 Simulation: Exemple Bibliographie: Typage XML dans Si et , alors toujours une simulation maximale de M. Makoto, Taxonomy of XML Schema Languages using Formal Language Theory : Il peut y avoir plusieurs simulations de 59 : il existe J. Siméon et P. Wadler, The Essence of XML S. Abiteboul, P. Buneman, D. Suciu: Data on the Web - from relations to semi-structured data and XML est la où Un objet appartient à un concept , si simulation maximale de dans . vers Site W3C: http://www.w3.org/XML/Schema Remarque : le calcul de la simulation maximale correspond au calcul du point fixe maximal du programme Datalog. Articles plus théoriques sur les automates d’arbres... Valeur C UV 19786 - Bases de données avancées - 2003/04 - B. Amann 58 Comparaison de schémas On veut vérifier si toutes les bases de données qui sont conforme à un schéma , sont aussi conforme à un schéma ? ( subsume/inclue ) : , alors et Si où . vers , et est conforme à S’il existe une simulation de , alors est conforme à . 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