220 likes | 337 Views
XML. Introduction. XML: e X tensible M arkup L anguage Défini par le consortium W3C A l’origine, proposé comme langage d’annotation (en remplacement ou en complément à HTML, SGML, …) pas en tant que langage pour BD Les documents contiennent des tags qui décrivent le contenu <Cours>
E N D
Introduction • XML: eXtensible Markup Language • Défini par le consortium W3C • A l’origine, proposé comme langage d’annotation (en remplacement ou en complément à HTML, SGML, …) pas en tant que langage pour BD • Les documents contiennent des tags qui décrivent le contenu <Cours> <Titre_cours>XML</Titre_cours> <Section> <Titre>Introduction</Titre> <Texte> XML: eXtensible …</Texte> </Section> … </Cours>
Introduction • Contrairement à HTML • On peut définir nous même les tags • On ne s"intéresse a priori qu’au contenu et non à la forme de la présentation du document • La présentation est définie en des endroits différents • Le but du W3C était (est ?) de remplacer HTML pour ajouter de la sémantique aux documents du WEB
Introduction • Actuellement, XML est plutôt utilisé comme langage d’échange de données entre applications • Plusieurs communautés ont défini des standards de représentation de données basés sur XML • ChemML, BSML (BioSequenceML), GraphML, … • Chaque standard définit des restrictions pour valider les documents en utilisant • Des outils de spécification de type • Les DTD (Document Type Description) • XML schemas • Une description textuelle de la sémantique • XML autorise l’ajout de nouveaux tags, mais ceux-ci sont contraints par les DTD • Plusieurs outils pour valider, interroger et afficher les documents XML
Structure d’un document XML(1) • Tag: c’est le label ou l’étiquette d’une partie des données • Élément : c’est une partie de données commençant par un <nom_de_tag> et se terminant par </nom_de_tag> • Les éléments peuvent être imbriqués • Les éléments doivent être correctement imbriqués <personne> <nom> Dupont <prénom> Jean </prénom></nom> </personne> • Chaque document doit obligatoirement n’avoir qu’un seul élément au niveau le plus haut
L’imbrication d’éléments(1) • L’imbrication est utile lors du transfert de données <commandes> <commande> <num_cde> 112 </num_cde> <client> ABCD </client> <produit> <num_prod> 123_132</num_prod> <prix> 200 </prix> <qté> 40 </qté> </produit> <produit> … </produit> </commande> <commande> … </commande> </commandes>
L’imbrication d’éléments (2) L’imbrication est prohibée ou découragée dans les bases de données relationnelles • La théorie de la normalisation nous incite à ne pas créer la table Cde(NumC, DateC, NumProduit, num_cl, nom_cli, Prix, Quantité) • En BD relationnelle, l’imbrication est remplacée par le concept de clé étrangère Cde(NumC, DateC, num_cl), Cli(num_cl, nom_cli), CP(NumC, numP, quantité), Prod(NumProduit, Prix) • L’imbrication est appropriée quand il faut transférer les données car les application externes n’ont pas un accès direct aux données référencées par les clés étrangères
Structure d’un document XML (2) • Le mixage de texte avec les sous-éléments est autorisé dans XML <lettre> Bonjour <destinataire> M. Dupont </destinataire> … </lettre> • Ceci est utile pour les documents du type texte auxquels on veut ajouter des « repères » mais déconseillé lorsqu’il s’agit de transférer des données • Tout le contenu doit être décrit !!
Les attributs • Les éléments peuvent avoir des attributs <compte type="chèque"> <numC>150</numC> <solde>100</solde> … </compte> • Les attributs sont spécifiés par nom_att=valeur dans le tag de début de de l’élément • Un élément peut avoir plusieurs attributs <compte type="chèque" numC="150"> <solde>100</solde> </compte>
Un peu plus sur la structure • Les éléments sans sous-éléments ou sans texte peuvent être abrégés <compte num="150" type="chèque" solde="100"/>
Document bien formé • Un document est bien formé si • Il a une seule racine • Chaque tag ouvrant a un tag fermant qui lui correspond • Chaque attribut n’apparaît qu’une seule fois dans un tag ouvrant, sa valeur doit être spécifiée et entre "
Les espaces de noms : Namspaces • Les données XML doivent être échangées entre organisations • Le même tag risque d’être utilisé avec différents sens causant des confusions • La spécification d’un nom unique pour un élément permet de résoudre le problème • Meilleur solution, utiliser Namespace:nom_local • Namespace: désigne une URI où les tags sont définis, ou bien un alias à une URL
Espace de nom : (exemple) <société xmlns="http://abcd.com/societes" xmlns:per="http://abcd.com/personnes"> <nom> abcde </nom> <employés> <employé> <per:nom> Jean Dupont</nom> </employé> </employés> </société> • Le tag<nom> est utilisé avec deux sens, une première fois pour désigner le nom d’une société et une deuxième fois pour désigner le nom d’une personne. • Le Namespace par défaut est http://abcd.com/societes. L’autre a un alias " per "
Définition du schéma • Le schéma d’une BD fixe l’organisation logique des données qu’on peut stocker ainsi que leurs types • Les documents XML ne sont pas obligés d’avoir un schéma • Cependant, quand il s’agit d’échanger des données, il devient nécessaire de fixer la structure pour pouvoir ensuite écrire les applications qui les exploitent • Il existe deux mécanismes • Les DTD (Document type definition) • Très utilisées • Les XML schemas • Plus récents, plus riches et bien plus compliquées donc moins utilisés
Les DTD • Elles spécifient • Quels éléments peuvent apparaître dans le document • Quels attributs peuvent/doivent apparaître dans le document • Quels sous-éléments peuvent/doivent apparaître dans le document • Les DTD ne contraignent pas le type de données • Tout est chaîne de caractères • Syntaxe • <!ELEMENT élément (spécification_des-sous-éléments)> • <!ATTLIST élément(attributs)>
Spécification des éléments dans une DTD • Les sous-éléments peuvent être spécifiés comme • Noms d’éléments • #PCDATA (chaînes de caractère) • EMPTY (pas de sous-éléments) • ANY (n’importe quoi) • Exemple <!ELEMENT livre(titre, année, auteur+, mot_clé*)> <!ELEMENT titre (#PCDATA)> <!ELEMENT année (#PCDATA)> <!ELEMENT auteur(nom, prénom)> <!ELEMENT nom (#PCDATA)> <!ELEMENT prénom (#PCADATA)> <!ELEMENT mot_clé (#PCDATA)>
Spécification des attributs dans une DTD • Pour chaque attribut • Son nom • Son type • CDATA (chaîne) • ID (identificateur ~clé) • IDREF (fait référence à un ID ~ clé étrangère) • IDREFS (ensemble de références) • Si • Il est obligatoire (#REQUIRED) • Il a une valeur par défaut (valeur) • Sinon (#IMPLIED) • Exemple: <!ATTLIST compte( type CDATA "chèque" Num ID #REQUIRED)> <!ATTLIST client( idCli ID #REQUIRED comptes IDREFS #REQUIRED)>
XML Schema • C’est un outil plus sophistiqué que les DTD. Permet de spécifier • Les types • Contraintes sur les valeurs min/max • De nouveaux types utilisateur • XML schema est lui même défini en XML • Intégré aux Namespaces (contrairement aux DTD) • Permet de définir des clés et des clés étrangères • … • MAIS: BIEN PLUS COMPLQUE QUE LES DTD
XML Schema: Exemple <xsd:schema xmlns:xsd=http://www.w3.org/2001/XMLSchema> <xsd element Name="banque" type ="banque_type"/> <xsd:element Name="compte"> <xsd:complexType> <xsd:sequence> <xsd:element Name="no_cte" type "xsd:string"/> <xsd:element Name="agence" type "xsd:string"/> <xsd:element Name="solde" type "xsd:decimal"/> </xsd:sequence> </xsd:complexType> </xsd:element> … définition du client … <xsd:complexType Name="banque_type"> <xsd:sequence> <xsd:element ref="compte" minOcuurs="0" maxOccurs="unbounded"/> <xsd:element ref="client" minOcuurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
Modèle arborescent (1) <?xml version="1.0" encoding="ISO-8859-1"?> <CINEMA No = "125"> <NOM> Epée de Bois </NOM> <Adresse> 100 rue neuve </Adresse> <Bus> Ligne F </Bus> </CINEMA>
Modèle arborescent (2) No 125 CINEMA NOM ADRESSE BUS 100 rue neuve Epée de Bois Ligne F Les nœuds sont des éléments, des attributs ou des chaînes (nœuds terminaux)
Modèle arborescent • Les nœuds éléments ont des éléments fils qui peuvent être soit des éléments, soit des attributs soit des chaînes • Les fils d’un élément sont triés dans l’ordre de leur apparition dans le document XML • Tous les nœuds ont un et un seul parent sauf la racine • Les nœuds attributs ont obligatoirement un fils de type chaîne mais pas de petit-fils