A63 : Persistance des bases de données
Définitions de balises
SGML
À la fin des années 1960, Charles GOLDFOND, Edward MOSHER et Raymond LORIE (IBM) construisent un système puissant et portable pour interchanger et manipuler des documents légaux -> utilisation d’un langage de balises Le langage informait de la nature abstraite des informations plutôt que de leur mise en page. Les informations de mise en page était spécifiée dans un format appelé feuille de style.
L’équipe d’IBM décida également de mettre en place un système capable de rejeter des documents invalides (documents avec des informations manquantes ou en surplus) La structure de chaque type de documents fût alors strictement définie dans un fichier appelé DTD (Document Type Definition).
1969: GML (Generalized Markup Language)
1974: SGML (Standard Generalized Markup Language)
HTML + CSS (Cascading Style Sheet) créés par le W3C (World Wide Web Consortium)
XML proposé par le W3C combine la puissance et l’extensibilité de son ancêtre SGML et la simplicité imposées par la communauté du Web.
Principes :
- permet de créer des langages de balises pour décrire n’importe quel type de document et appartenant à n’importe quel type de domaine d’une manière structurée : hiérarchique
- permet de créer de nouvelles balises
Analyse de document XML :
- Lire le document
- Contrôle de la syntaxe
- Indique les erreurs
Syntaxe :
- Un seul élément racine
- Chaque élément doit avoir une balise de début et de fin
- Les balises doivent être correctement imbriquées
- La valeur des attributs doivent être entre guillemets
- XML fait la différence entre les majuscules et les minuscules
=> Un document syntaxiquement correct est dit bien formé !
Les caractères autorisées
On différencie :
- les caractères contenus dans les balises (nom d’élément et d’attributs)
- les caractères de données (contenues entre deux balises)
Certains caractères blancs seront significatifs et d’autres pas.
Ex : xml<balise>C'est un caractère de _ _ _ _ _ données</balise>
On n’utilisera pas d’espaces dans les noms d’éléments et d’attributs.
Références d’entité et entités prédéfinies :
&xxx;
& (&)
<(<)
> (>)
' (’)
"(")
Les balises
Définition
Un élément définit une structure, il peut avoir ou ne pas avoir de contenu (élément fils et des caractères de données). Aucun, un à plusieurs attributs peuvent lui être associés.
Définition 2
Un attribut décrit un élément. Il sera placé à l’intérieur de la balise de départ d’un élément. La valeur d’un attribut est entourée d’apostrophes.
<voiture porte='4' />
Ceci est un élément sans caractères de données.
La section CDATA n’est pas traitée par l’analyse XML. Elle peut contenir du texte, des caractères reservés et des espaces. Elle est souvent utilisée pour contenir du code script :
xml<![CDATA[ _ _ _ ]]>
Les espaces de nom
La notion d’espace de nom permet d’éviter les collisions de nom.
Ex: ```xml
Ces deux éléments sujet peuvent être différenciés par des espaces de nom.
```xml<ecole:sujet>Math</ecole:sujet>
<medecine:sujet>electro encephalographie</medecine:sujet>```
Chaque préfixe d'espace de nom est associé à un identificateur de ressource uniforme (URI) qui identifie de façon unique un espace de nom.<br/><br/>
Pour être sûr que l'espace de nom est unique, une méthode consiste à utiliser les URL (Universal Resources Locators). Car les noms de domaines sont toujours uniques.
## Avantages de XML
Intérêt de XML : pas toujours besoin de faire des requêtes sur le serveur, le client peut s'en occuper.
# Les DTD (Document Type Definition)
=### Définition =
Définit la structure d'un document XML => valide sa conformité.<br/><br/>
Une DTD est définie en utilisant la grammaire EBNF (Extended Backus-Naur Form)<br/><br/>
Un document XML conforme à une DTD est dit __valide__.<br/><br/>
Un analyseur validant (Ex: Validant XML Microsoft) permet de dire si un document XML est valide ou non.
## Déclaration de document type
```xml<!DOCTYPE nomRacine >```
La DTD peut être soit interne soit externe.
Déclaration interne :
```xml<!DOCTYPE monMessage[
<!ELEMENT monMessage(#PCDATA)>
]>```
```xml<!DOCTYPE monMessage SYSTEM "maDTD.dtd"
[<!ELEMENT monElement (#PCDATA)>
]>```
Exemple :
```xml<!DOCTYPE html PUBLIC "http://www.w3.org/TR/html4/strict.dtd">```
## Déclaration d'élements Type
Un élément est un bloc de base d'un document XML.
```XML
<!ELEMENT monelement (#PCDATA)>
PCDATA est la spécification du contenu, et monelement est le nom de l’élément.
PCDATA veut, ici, signifier que l’élément contient des caractères de données.
La DTD permet de définir l’ordre et la fréquence des éléments fils
- Les séquences sont indiquées avec ‘,’
<!ELEMENT classe (professeur, étudiant)>
- Exactement 1 professeur et 1 étudiant dans cet ordre.
- Les choix indiqués par ‘|’ Exemple : ```xml
* Contient soit une glace soit une pâtisserie, mais pas les deux indicateurs d'occurences
```xml
<!ELEMENT album (chanson+)> : Une occurence ou plus
<!ELEMENT album (titre, (titre-chanson,durée)+)> : On devra spécifier une fois au MINIMUM titre-chanson.
<!ELEMENT bibliothèque (livre*)> : On peut répéter autant de fois livre qu'on veut dans bibliothèque.
<!ELEMENT choix (personne?)> : L'élément choix pourra avoir un élément personne ou pas.
Voici un exemple plus complet :
<!ELEMENT ferme (fermier+, (chien*|chat?), cochon*, (chèvre|vache)?, (poulet+|canard*))>
Ceci donnera :
<ferme>
<fermier>Jeanne Dupond</fermier>
<fermier>Jean Dupond</fermier>
<chat>ponpon</chat>
<cochon>tire-bouchon</cochon>
<poulet>cocotte</poulet>
</ferme>
Déclaration d’attributs
S’effectue avec le mot clé ATTLIST
<!ELEMENT x EMPTY>
<!ATTLIST x y CDATA #REQUIRED>
EMPTY est l’élément vide.
x : nom de l’élément
y : nom de l’attribut
CDATA : contenu de l’attribut
#REQUIRED : utilisation de l’attribut
Attributs par défaut : #REQUIRED, #IMPLIED, #FIXED.
- #REQUIRED : doit être défini
- #IMPLIED : Si l’attribut n’apparaît pas dans l’élément XML peut utiliser n’importe quelle valeur.
- #FIXED : la valeur de l’attribut est une constante et ne peut pas être autre chose dans le document
<!ATTLIST adresse code_postal #FIXED "67730">
Types d’attributs
Il y a 3 types différents d’attributs :
- les chaînes (CDATA)
- les attributs à jeton
- les attributs énumérés
Attributs à jeton
- ID : Identifie de manière unique un élément. XML demande apparemment (expérience de la prof) un caractère alphabétique d’abord ! Exemple : s1.
- IDREF : pointe sur un élément ayant un attribut ID. Vérifie si il existe dans le document un élément avec un attribut ID dont la valeur correspond à la valeur de l’attribut IDREF.
- NMTOKEN (peu usité) : la valeur ne doit être constituée que de lettres, de chiffres, de tirets (-), de soulignés (_), de deux points (:) et de points (.).
Le type énuméré
Déclare une liste de valeurs possibles pour l’attribut. Ces valeurs sont séparées dans la définition par un ‘|’.
<!ATTLIST personne genre (M|F) "F">
Les sections conditionnelles
Une DTD permet d’inclure ou d’exlure des déclarations en utilisant des sections conditionnelles.
<![INCLUDE[ _ _ _ _ _]]> : donne la directive d'inclure l'élément
<![IGNORE[ _ _ _ _ _]]> : donne la directive d'ignorer l'élément
Traitement des espaces dans les DTD
- les attributs de type CDATA respectent les espaces
- les attributs à jeton (ID, IDREF, NMTOKEN) suppriment les espaces
- les attributs de type énuméré suppriment les espaces (normalisation)
Les schémas
Les schémas étudiés ici respectent le standard W3C (World Wide Web Consortium).
- Le but d’un schéma est de spécifier une structure de document XML.
- Utilise la même syntaxe que celle utilisée dans un document XML
- Possède plus de possibilités de spécifications que les DTD
Dans les schémas XML le contenu d’un élément est défini par son nom et son type.
On distingue les types simples et les types complexes.
Des types simples sont prédéfinis.
Ex: String, Integer, decimal
Un type simple ne peut pas contenir d’éléments fils ou d’attributs.
Un type complexe peut spécifier des éléments fils et des attributs associés.
Les éléments peuvent être constitués d’éléments préalablement définis en utilisant les concepts d’agrégation et d’héritage.
- Agrégation : permet de regrouper un ensemble d’élements à l’intérieur d’un nouvel élément
- Héritage : permet d’étendre la définition d’un élément préalablement défini