Ce document intitulé "Les Données Semi-Structurées Noyau XML" est destiné aux étudiants de la Faculté des Sciences du Département d’Informatique de l’Université de Saad Dahleb Blida 1. Il couvre les notions suivantes:
- Introduction à XML
- Structure XML de base
- Domaines nominaux
- Schémas XML
Cours XML Introduction et Modélisation -DSS - XML, DTD, XML
Télécharger PDFUniversité de Saad Dahleb Blida 1
Faculté des Sciences
Département d’Informatique
L3 – ISIL
Les Données Semi-Structurées Noyau XML
Mme Ferdi Imene
Imene.ferdi@univ-constantine2.dz
2023/2024
Plan
- Introduction à XML
- Structure XML de base
- Domaines nominaux
- Schémas XML
1. Introduction à XML
- Un document peut se définir par le fond et par la forme.
- Forme = structure + présentation
- Fond = structure + sémantique
Origines de XML
- XML est issu de la gestion électronique des documents (GED).
- Séparation du fond de la forme.
- Forme = présentation à partir de la structure (style)
- Fond = structure + données (contenu)
- Langage à balises : encadrement des champs par des balises début et fin.
- Multiples précurseurs dont les plus connues : SGML pour la structuration, HTML pour la présentation
Problème à informatiser
Soit la spécification suivante :
- Une bibliothèque contient des ouvrages.
- Un ouvrage peut être un livre, un article ou un rapport.
- Chaque type d’ouvrage peut être écrite par une langue et a un nombre de page.
- Un livre contient un titre, un ensemble d’auteurs et plusieurs chapitres.
- Chaque chapitre contient plusieurs sections, et chaque section contient plusieurs paragraphes de type texte.
- Un article (ou un rapport) contient un titre, un ensemble d’auteurs et plusieurs sections.
- L’auteur est défini par son nom, prénom et parfois son pays.
Question : comment modéliser cette spécification pour automatiser le traitement de ses données ?
La modélisation des données peut être :
- Totalement structurée comme le cas des bases de données
- Semi structurée comme le cas de XML.
Nous nous intéressons par le deuxième cas : Données semi structurées en XML
Le XML ou eXtensible Markup Language est un langage informatique de décrire et structurer balisage générique.
- Un langage informatique : un ensemble de données selon un jeu de règles et des contraintes définies
- Un langage de programmation (C, Java, C++, php, C#, javascript…)
- Un langage de requête (SQL, SPARQL, Xquery)
- Un langage de description (SGML, XML, HTML, SMIL,…)
XML est un langage qui permet de décrire des données semi structurées à l'aide de balises et de règles que l'on peut personnaliser. Ces balises permettent de structurer de manière hiérarchisée et organisée ces données.
Objectifs du XML
- Faciliter les échanges de données entre les machines.
- Décrire les données de manière aussi bien compréhensible par les hommes qui écrivent les documents XML que par les machines qui les exploitent.
- Possibilité de définir librement les balises utilisées (contrairement à HTML).
- XML joue aujourd'hui un rôle de plus en plus important dans l'échange d'informations sur le Web.
Normes autour de XML
- Xschema : Schémas de documents.
- XSL : Feuilles de styles.
- DOM : API de programmation objet.
- Xlink : pour ajouter des liens hypertextes à un fichier XML.
- XPointer : pour pointer sur des éléments de données d'un document XML.
- Xquery : pour extraire des données des documents XML.
- Xform : pour les formulaires.
- SOAP : Protocole Web Services.
- RDF : Description de ressources Web.
2. Structure XML de base
Un document XML porte l’extension « .xml »
Un document XML est structuré en 2 parties :
- Un prologue qui contient toutes les informations autres que les données ou les éléments (version du XML, Codage …)
- Un arbre d’éléments ayant un élément racine UNIQUE
Les éléments de base
1. Les Balises
- Les balises sont les composants fondamentaux permettant l'écriture de documents XML.
- Elles se distinguent du contenu en utilisant les caractères <, > et /.
Exemple :
- Il existe trois types de balises :
- balise d'ouverture :
- balise de fermeture :
- balise vide :
On peut mettre "des choses" entre ces balises. On parle alors de contenu.
Par exemple :
Une balise peut également contenir une autre balise. On parle alors d'arborescence.
Une balise par paires peut contenir un mélange :
Quelques règles :
- Il est extrêmement important que les balises ouvrantes et fermantes aient exactement le même nom.
- XML fait la distinction entre les majuscules et les minuscules.
- Toute balise ouverte doit impérativement être fermée.
- Si une balise peut en contenir une autre, il est cependant interdit de les chevaucher.
Quelques règles de nommage des balises :
- Les noms peuvent contenir des lettres, des chiffres ou des caractères spéciaux.
- Les noms ne peuvent pas débuter par un nombre ou un caractère de ponctuation.
- Les noms ne peuvent pas commencer par les lettres XML (quelle que soit la casse).
- Les noms ne peuvent pas contenir d'espaces.
- On évite les caractères , ; . < et >.
2. Elément
Un élément XML est un extrait d'un fichier XML comprenant :
- une balise ouvrante
- une balise fermante
- le contenu compris entre les deux balises, qui peut être du texte et/ou d'autres éléments, ou rien (élément vide)
On appelle élément vide un élément qui ne comporte rien entre sa balise ouvrante et sa balise fermante.
Les syntaxes
3. Les attributs
Un attribut est une information supplémentaire attachée à un élément.
Exemple :
Quelques règles
- Les règles de nommage sont les mêmes que pour les balises.
- La valeur d'un attribut doit impérativement être délimitée par des guillemets, simples ou doubles.
- Dans une balise, un attribut ne peut être présent qu'une seule fois.
4. Les commentaires
Commence donc par .
- peut être placés à n'importe quel endroit tant qu'ils se trouvent à l'extérieur d'une autre balise.
Exemple :
Remarque : pas de -- dans un commentaire.
Un document XML
- Un prologue
- Un arbre d'éléments
Un prologue
Déclaration XML
- version (obligatoire) : version de la norme XML par rapport à laquelle le document est écrit. Pour rappel, il existe actuellement 2 versions : 1.0 et 1.1.
- encoding (facultatif, "UTF-8" par défaut) : jeu de caractères utilisé pour le codage du document. Par défaut, l'encodage de XML est l'UTF-8, mais si votre éditeur de texte enregistre vos documents en ISO8859-1, il suffit de la changer dans le prologue.
- Standalone (facultatif) : permet de déterminer si la page XML est autonome (standalone="yes") ou dépendante d'un fichier externe pour la validation de sa structure et de ses données (standalone="no"). Cet attribut est optionnel. S'il n'est pas spécifié c'est la valeur "yes" qui est utilisée par défaut.
Un arbre d'éléments
Les documents écrits avec XML ont une structure arborescente d'éléments dont les nœuds feuilles de l'arbre contiennent des données.
- Elément racine : est le premier élément déclaré dans un document XML, il est unique et englobe tous les autres éléments.
- Les éléments : forment la structure même du document. Ils peuvent contenir du texte, ou bien d'autres éléments, qui sont alors appelés « éléments enfants ».
Exemple de fichier XML : un courriel
Prologue
Arbre d’élément
Document « bien formé »
Un document respectant les règles de XML est appelé document bien formé (« well-formed »).
- Seuls les documents "bien formés" seront affichés correctement par un navigateur web.
- A la moindre erreur de syntaxe, le document ne sera pas ou ne sera que partiellement affiché.
3. Domaines nominaux
Problématique
Liberté en définition des balises :
- Risques des conflits au moment de fusion, Exemple :
- Livre
- Client.
- Commande
- Nom…
Fusion des 2 documents
Confusion sur le sens de l'élément nom
Solution : Classer chaque concept dans une classe (espace des noms), pour savoir comment il doit être interprété
3.1 Définitions
- Un espace de nommage (name space) définit une famille de noms afin d’éviter les confisons entre des éléments qui auraient le même nom mais pas le même sens.
- La notion d’espace de noms peut être perçue comme un groupe d’appartenance ou une famille.
- Cela arrive quand le document XML modélise les informations de plusieurs domaines
Objectifs des espaces de nom
- Distinguer les éléments et les attributs de différentes applications XML qui ont le même nom (éviter les ambiguïtés d’usage.)
- Grouper les éléments et les attributs d'une même application XML pour que les logiciels puissent les reconnaître
3.2 Identification d'un espace de noms
- Un espace de noms est identifié par un URI (Uniform Resource Identifier) appelé URI de l'espace de noms.
- Cet URI est très souvent une URL mais il est sans importance que l'URL pointe réellement sur un document.
- Cet URI garantit seulement que l'espace de noms soit identifié de manière unique.
Les URIs sont purement déclaratives.
- Il n’ ya pas nécessairement quelque chose à l’adresse indiquée.
- Les URIs des espaces de nommage ne sont que des identificateurs formels.
- Les URIs servent seulement à définir des clés universelles.
3.3 Déclaration d’un espace de noms
3.3.1 Les espaces de noms par défaut
La déclaration d’un espace de noms par défaut se fait dans le premier élément qui utilise le vocabulaire, grâce au mot clé xmlns (XML namespace).
Exemple : xmlns="mon_URI"
Ici, l’élément chapitre est dans l’espace de noms http://www.masociete.com.
C’est le même cas de l’élément paragraphe puisqu’il est dans l’élément chapitre.
Attention : un espace de noms par défaut ne concerne que les éléments. Les attributs et les textes n’y appartiennent pas. Le texte d’un élément n’est jamais dans un espace de noms puisqu’il représente la donnée.
Utiliser un espace de noms par défaut a certaines limites :
- Impossible d’utiliser au sein d’un même document deux espaces de noms par défaut qui auraient un mot de vocabulaire en commun. On obtiendrait alors une ambiguïté.
- Présente l’inconvénient d’être peu contrôlable sur un document de taille importante. En effet, tout ajout ou modification d’un tel espace va se répercuter sur la totalité du contenu.
3.3.2 L’espace de nom explicite
- On défini un préfixe avec le mot clé xmlns.
- On associe ce préfixe à une URI.
- Les préfixes n’ont aucune signification particulière.
Exemple : xmlns:prefixe="mon_URI"
Lorsqu’un espace de noms est déclaré avec un préfixe, tous les éléments qui appartiennent à l’espace de noms, doivent être précédés par ce préfixe :
Un conflit (table meuble et table en HTML)
Déclaration des namespaces
Elément qualifié
Le choix du préfixe est complètement arbitraire.
- La seul contrainte est d'être cohérent entre la déclaration du préfixe et son utilisation.
- Même si les préfixes peuvent être librement choisis, il est d'usage d'utiliser certains préfixes particuliers pour certains espaces de noms. Ainsi, on prend souvent html pour XHTML, xsd ou xs pour les schémas XML et xsl les feuilles de style XSLT.
C'est l'URI associé au préfixe qui détermine l'espace de noms.
- Le préfixe est juste une abréviation pour l'URI.
- Deux préfixes associés au même URI déterminent le même espace de noms. Dans l'exemple suivant, les deux éléments firstname et surname font partie du même espace de noms. L'exemple suivant est uniquement donné pour illustrer le propos mais il n'est pas à suivre. C'est une mauvaise pratique d'associer deux préfixes au même URI.
3.4 Portée d'une déclaration
- La portée d'une déclaration d'un espace de noms est l'élément dans lequel elle est faite.
- Il faut remarquer que la portée de la déclaration comprend les balises de l'élément qui la contient.
L’élément paragraphe n’appartient pas à l’espace de noms http://www.masociete.com mais uniquement à l’espace de noms http://www.autresociete.com.
Les éléments dont le nom n'est pas qualifié font partie de l'espace de noms par défaut.
Tant que l'espace de noms par défaut n'a pas été spécifié, les éléments dont le nom n'est pas qualifié ne font partie d'aucun espace de noms. En affectant la chaîne vide à l'attribut xmlns pour l’espace de noms par défauts comme dans l'exemple suivant.
L’espace de noms pour les attributs
- Les attributs peuvent également avoir des noms qualifiés formés d'un préfixe et d'un nom local.
- Ils font alors partie de l'espace de noms auquel est associé le préfixe. l'attribut noNamespaceSchemaLocation fait partie de l'espace de noms des instances de schémas.
- Le nom de l'attribut noNamespaceSchemaLocation doit donc avoir un préfixe associé à cet URI.
Les attributs dont le nom n'est pas qualifié n'appartiennent à aucun espace de noms.
- Ils ne font jamais partie de l'espace de noms par défaut.
Dans l'exemple ci-dessous, l'élément book appartient à l'espace de noms DocBook puisque celui-ci est déclaré comme l'espace de noms par défaut. L'attribut id appartient à l'espace de noms XML et l'attribut version n'appartient à aucun espace de noms.
Le préfixe xml est toujours implicitement lié à l'espace de noms XML identifié par l'URI http://www.w3.org/XML/1998/namespace. Cet espace de noms n'a pas besoin d'être déclaré.
Les quatre attributs particuliers xml:lang, xml:space, xml:base et xml:id font partie de cet espace de noms.
Les espaces de nom peuvent s’appliquer via un préfixe sur un attribut ou une valeur d’attribut.
Dans cet exemple, nous avons qualifié l’attribut quantité ainsi que les valeurs d’attribut 50lots et A4.
3.5 Quelques espaces de noms utilisés
Quelques espaces de noms connus, régulièrement utilisés par les développeurs. Il en existe un très grand nombre :
- DocBook permet de décrire des documents techniques comme des livres, des articles, etc. Cet espace de noms est identifié par l’URI http://docbook.org/ns/docbook.
- MathML est une spécification du W3C qui permet d’afficher des éléments mathématiques divers et variés comme des additions, des soustractions, des matrices, etc. Cet espace de noms est identifié par l’URI http://www.w3.org/1998/Math/MathML.
- Schéma XML Il s’agit d’une spécification du W3C qui permet de décrire des Schémas XML. Cet espace de noms est identifié par l’URI http://www.w3.org/2001/XMLSchema.
- SVG pour Scalable Vector Graphics est une spécification du W3C qui permet de décrire des images vectorielles. Cet espace de noms est identifié par l’URI http://www.w3.org/2000/svg.
- Xlink Il s’agit d’une spécification du W3C permettant de créer des liens entre plusieurs fichiers XML. Cet espace de noms est identifié par l’URI http://www.w3.org/1999/xlink.
- XSLT pour eXtensible Stylesheet Language Transformations est une spécification du W3C qui permet de décrire des transformations à appliquer un document XML. Cet espace de noms est identifié par l’URI http://www.w3.org/1999/XSL/Transform.
4. Schémas XML
Problème :
- Lorsque plusieurs personnes travaillent sur un même document, chacun définit ses propres balises et attributs.
- Une application a besoin d’un document XML écrit par un autre programmeur, ou généré par une application.
- Est-ce qu’il existe une solution qui impose ainsi une écriture uniforme que tout le monde doit respecter ?
Existe deux solutions :
- Document Type Definition (DTD)
- XML schéma
Un schéma est une description de la structure que doit respecter un document lui faisant référence, c'est à dire qu'il établit la liste des éléments XML autorisés (avec leurs attributs), ainsi que l'agencement possible de ces éléments.
4.1 Définition de Type de Document (DTD)
- Une DTD est un ensemble de règles que l'on impose au document XML.
- Ces règles permettent de décrire la façon dont le document XML doit être construit.
- Ces règles peuvent imposer pour chaque d'élément :
- les types de ses éléments fils (chaîne de caractères, identificateur, etc.).
- leur ordonnancement (l'ordre d'apparition des balises dans le document)
- Leur fréquence.
Document XML valide :
Un document valide est un document bien formé conforme à une définition DTD.
Cela signifie que le document XML respecte toutes les règles qui lui sont imposées dans les définitions DTD.
DTD ou XML schéma
4.2 Pourquoi DTD ?
- Plus important lorsque plusieurs personnes travaillent sur un même document.
- La définition impose une écriture uniforme que tout le monde doit respecter.
- éviter que le document XML soit difficilement exploitable.
- Permet au programme exploitant les documents XML d’assurer un automatisme et un gain de temps précieux :
- Le document n'est pas valide : je ne tente pas de l'exploiter.
- Le document est valide : je sais comment l'exploiter.
La DTD définit la filiation des éléments
- Quelle est la racine du document ?
- Combien d’enfants ?
- Qui peut contenir du texte ?
- Qui a des attributs particuliers ?
- Quelles sont les valeurs possibles de ces attributs ?
Une DTD peut contenir :
- Des déclarations d'éléments
- Des déclarations de listes d'attributs
- Des déclarations d'entités
Chacune de ces déclarations commence par la chaîne
Les mots clés possibles sont ELEMENT, ATTLIST, ENTITY et NOTATION. La déclaration se termine par le caractère >.
4.3 la déclaration d'élément
La déclaration d’un élément (balise) se fait par le mot clé ELEMENT.
Exemple pour définir une balise Etudiant :
Cas le contenu est une balise :
Cas le contenu est une valeur :
Cas le contenu est vide :
1. Elément texte :
#PCDATA (Parseable Character Data: données caractères parsées) : Correspond au texte contenu entre les balises de début et de fin de l’élément.
Exemple :
---DTD
2. Elément vide :
EMPTY : L'élément ne contient pas de données spécifiques.
Exemple :
---DTD
3. Elément quelconque
ANY : L'élément peut contenir tout type de
FAQ
1. Qu'est-ce que XML ?
XML, ou eXtensible Markup Language, est un langage informatique utilisé pour décrire et structurer des données semi-structurées à l'aide de balises et de règles personnalisables.
2. Quels sont les objectifs de XML ?
Les objectifs de XML incluent la facilitation des échanges de données entre les machines, la description des données de manière compréhensible par les hommes et les machines, et la possibilité de définir librement les balises utilisées.
3. Qu'est-ce qu'un document bien formé en XML ?
Un document bien formé en XML est un document qui respecte toutes les règles de syntaxe de XML, ce qui signifie qu'il est correctement structuré et peut être affiché correctement par un navigateur web.