Upload
pascaline-dubois
View
123
Download
4
Embed Size (px)
Citation preview
Tutoriel XML – Première Partie
F. Sajous & L. TanguyERSS – Sémantique et Corpus
2
Plan
• Aparté obligatoire : le codage des caractères• Historique, principes, soucis et solutions
• La structure d'un document XML• En-tête et syntaxe• Blocs structurants, blocs en lignes, attributs• Bonne formation• Saisie et modifications avec un éditeur XML
• Les DTD• Principes• Déclaration• Lien document-DTD, validation
• Recherche dans un document XML par XPath
3
Principes du codage des caractères (1)• Un caractère est stocké sous la forme d'un code
numérique• Un fichier texte = une suite de nombres
• Table de codage : équivalence caractère-nombre• Plusieurs types de codages
• Raisons historiques, techniques et commerciales• Peut varier d'un système / outil à l'autre
• Distinction : caractère ≠ glyphe (apparence physique, indiqué par une police)
4
Combien de caractères (et lesquels) ?• Coder le minimum de caractères pour gagner de
la place• ASCII : 7 bits = 128 (lettres, chiffres, signes)
• Pas de lettres accentuées (cible = anglais)• Extensions du code ASCII : 8 bits (octet) = 256
• Iso-8859-1 (latin 1) : ajout des lettres accentuées pour l'europe de l'ouest
• Plusieurs codes similaires : CP1252, CP857, …• De latin 2 à latin 10 : autres langues d'europe
• Autres alphabets sans rapport avec l'ASCII• API, cyrillique, arabe, etc.
5
Problèmes dus au codage (1)
• Texte écrit par l'application A utilisant la table TA
• 'é' -> 243• Texte lu par l'application B utilisant la table TB
• 243 -> 'Û'• L'application B n'est pas forcément au courant
• Codages concurrents actuels :• Standard anglo-saxon : ASCII• Standards ISO (Unix), CodePage Windows,
DOS, Mac, etc.
6
Problèmes dus au codage (2)
• Uniquement pour les fichiers texte (bruts)• Les traitements de texte et autres indiquent en
interne le codage• Autres alphabets
• API, autres langues, etc.• Autant de tables de codage• Problème en texte brut : plusieurs alphabets
dans le même document
7
Codage "Universel"
• UNICODE : codage pour tous les caractères• 4 Milliards de caractères possibles (langues
asiatiques notamment)• En couches de 256 caractères
• Un standard, plusieurs utilisations• UTF-8 : les caractères ASCII sont codés sur un
octet, les autres, cela dépend…• UTF-16 : les caractères ASCII, latin, etc sur 2
octets, les autres sur 4• UTF-32 : tous sur 4 octets
8
Concrètement (1)
• Le codage d'un fichier texte doit être fait suivant un code précis
• Texte en Français, Anglais, Allemand, etc. :• Choix entre "Iso Latin 1" et Unicode
• Texte mixte (Français + API, Français + Coréen…) : Unicode
• Espérer que les destinataires seront bien équipés
• Le choix par défaut : UTF-8 (incompatible avec iso-8859-1 pour les lettres accentuées)
• En XML, le codage est explicite !
9
Concrètement (2)
• Taper un caractère bizarre• Lettres accentuées du français : pas de pb.• Sinon :
• Vérifier que l'on est bien en codage Unicode• En fonction de l'outil
• Word : insérer caractères spéciaux• Sinon, copier-coller depuis Word
• Dans le pire des cas, utiliser le code numérique du caractère
• Ų = ¬• Dans tous les cas, vérifier que l'on a bien
installé une police compatible…
10
Concrètement (3)
• Que faire si on a des accents mal fichus ?• Identifier le problème : "ça a raté"ٱa a ratٱ code 8 bits interprété en UTF-8ça a raté UTF-8 interprété en 8 bits‡a a rat‚ mauvais code 8 bits
• Pas de panique !• Windows : Utilisez un éditeur universel : Word,
NotePad (ils vous poseront la question)• Linux : utilisez "recode", le transcodeur universel• Macintosh : Ok, vous pouvez paniquer
11
XML : Eléments de Syntaxe
12
Structure générale d'un document
• En-tête• Indique que c'est du XML, de quelle version• Indique le codage des caractères• Exemple :<?xml version="1.0" encoding="iso-8859-1"?>• Note : c'est le seul cas où une balise est notée
par <? ?>• Corps
• Une balise unique doit contenir tout le reste du document (racine du document)
13
Eléments : syntaxe générale
• Une balise doit être nommée :• Avec des minuscules (c'est mieux), accentuées
si l'on veut• Eventuellement, des _ , des - et des chiffres
• Eléments simples :• Balise ouvrante <X>• Balise fermante </X>• Toute balise ouverte tu fermeras• Tu ne feras pas chevaucher des balises
• Mauvais exemple :<X> <Y> </X> </Y>
14
Types d'éléments (1)
• Eléments vides• Balise ouvrante et fermante à la fois
<exemple/>• Rôle : permet d'indiquer des informations
ponctuelles dans un document• Exemples : pauses dans un discours, référence
à un élément non-textuel (photo, etc.)
15
Types d'éléments (2)
• Eléments avec attributs• Eléments vides ou non• Les attributs sont codés dans la balise• Syntaxe : nom="valeur" OU nom='valeur'• L'ordre des attributs n'a pas d'importance• La balise fermante est une balise simple• Exemple :
<article catégorie="Politique">….
</article>
16
Eléments structurants ou en ligne
• Deux types d'usage des éléments• Structurants
• Organisent la hiérarchie du document• Contiennent soit d'autres balises, soit du texte
(élément terminal)• Sont généralement nécessaires• Exemples : titres, sections, paragraphes, etc.
• En ligne• Permettent un balisage au fil du texte• Sont optionnels• Exemples : indications discursives, annotations,
notes, pauses, etc.
17
XML et mise en page
• Les retours à la ligne ne jouent AUCUN rôle dans un document XML
• Ils ne servent qu'à faciliter la lecture• Les éditeurs peremettent généralement de
réorganiser la présentation du document à l'écran
• Les espaces n'ont d'importance que dans le texte
• Aucun rôle entre deux balises• Attention à séparer les attributs, toutefois
18
Commentaires et caractères spéciaux• On peut commenter une partie d'un document en
l'entourant de <!-- et de -->• Le contenu sera ignoré pour tout traitement
• Pour insérer dans du texte les caractères suivants : < > &
• On doit utiliser les notations suivantes :< (less than) <> (greater than) >& (ampersand) &
• On peut insérer un caractère quelconque si on connaît son code :
• { Caractère de code 123 (décimal)• ᨯ Caractère de code 1A2F (hexadécimal)
(donné par Word entre autres)
19
Editeur XML
• Facilite la saisie• Permet de vérifier la bonne formation
• Les règles syntaxiques ont-elles été respectées ?
• Peut mettre en forme votre document
• Exemple : Oxygen• Disponible sur Windows et Unix• Pas trop cher• Pas trop mal
• Au boulot ! (Exercice 1)
20
Les DTD
• Principes• Syntaxe• Association doc-DTD• Validation d'un document
21
Principes Généraux des DTD
• Grammaire du document• Indique les éléments pouvant être utilisés, et
comment• Permet la validation d'un document• Facilite la saisie / annotation de données
22
Syntaxe d'une DTD
• Dans un fichier à part (extension .dtd)• Une ligne d'en-tête : la même que pour un
document XML<?xml version="1.0" encoding="iso-8859-1"?>
• Note : le codage de caractères est indépendant des fichiers XML associés…
• Puis, dans un ordre quelconque, la déclaration des éléments du document
23
Déclaration d'un élément
<!ELEMENT nom type>(note : pas du XML !)
Où :• nom : nom de la balise / élément• type peut être :
#PCDATA : l'élément ne contient que du texte(structure) : l'élément contient d'autres éléments,
avec une syntaxe particulière
24
Structure d'un élément complexe
• La structure indique quels éléments, combien, et dans quel ordre, on peut trouver dans l'élément défini
(e1, e2) : un élément e1 puis un élément e2(e1 | e2) : l'un ou l'autre(e+) : 1 ou plusieurs éléments e(e*) : 0 ou plusieurs éléments e(e?) : 0 ou 1 élément e
• Les éléments e1 et e2 doivent ensuite être décrit de la même manière
25
Encore plus compliqué…
• Eléments complexes :<!ELEMENT mail
(auteur, destinataire+, sujet?, corps, signature?)>• Soit : un auteur, un ou plusieurs destinataires, un sujet
optionnel, un corps, une signature optionnelle
• Eléments mixtes, pouvant contenir du texte, et éventuellement des éléments :
<!ELEMENT texte (#PCDATA | élem_ligne)*>Exemple d'instanciation :<texte>
début <élem_ligne>texte notable</élem_ligne> suite
</texte>
26
Attributs (1)
• On peut en plus autoriser des attributs à un élément
• Syntaxe :
<!ATTLIST élément attribut1 type1 option1attribut2 type2 option2…>
27
Attributs (2)
• Type d'un attribut• CDATA : texte non contraint• ID : identifiant unique• (valeur1 | valeur2 | … ) : choix parmi une liste
• Options d'un attribut• #REQUIRED : attribut obligatoire• #IMPLIED : attribut optionnel
• Exemple :<!ATTLIST mail
priorité(urgent | normal)#REQUIRED>
Instanciation XML possible :<mail priorité="urgent"> … </mail>
28
Association DTD-document
• Rien à faire dans la DTD• Dans l'en-tête du document XML :<!DOCTYPE racine SYSTEM "fichier.dtd">Où racine est le nom de l'élément de plus haut niveau
défini dans la DTD
• Il est possible d'utiliser une DTD située sur un serveur Web :
<!DOCTYPE racine SYSTEM "http://www..dtd">
29
Quelques règles pour les DTD
• Tout élément apparaissant dans la description d'un autre doit aussi être décrit
• L'ordre n'a aucune importance• On peut vérifier la bonne formation d'une DTD• On ne peut pas vérifier sa cohérence
• Sauf avec des éditeurs très chers• Une vérification plus approfondie se fait au
moment de la validation d'un document XML
30
Au boulot
• Définir une DTD• Associer une DTD à un document
• Pour en faciliter la saise• Pour en vérifier la conformité et le valider• Pour importer des données de texte brut
• A discuter par la suite :• Choix d'une structure pour une information• Attributs vs. éléments
31
XPATH
• Elément de la technologie XSLT• Pour la manipulation des documents
• XPATH permet :• De repérer un élément dans un document• Incidemment, de fouiller des données en se
basant sur la structure• XPATH est intégré dans les bons éditeurs
XML• A venir : interrogation de corpus par XPATH…
32
XPATH : principes
• Une expression analogue à celle d'une adresse Web, avec en plus, des contraintes
• Il faut penser en termes d'arbre
• Exemples de base :/mail/expéditeur expéditeur d'un mail/mail/@priorité priorité (attribut)
d'un mail
33
Syntaxe par l'exemple
/ Racine du document/X Elément racine du document (de nom X)//Y Elément Y n'importe où dans le document/X/Z Elément Z situé sous la racine X//X/.. Elément contenant l'élément XX/@att Attribut att de l'élément X//X/../Y Elément Y frère de l'élément XEtc.
NOTE : une expression XPATH peut correspondre à plusieurs éléments d'un même document
34
Ajout de contraintes• Aspect vital : ajouter des contraintes sur le contenu ou
la position des éléments• Contrainte sur la position
//X[1] = premier élément X/X/Y[2] = deuxième fils Y de X
• Contraintes sur le contenu//X[Y = 'contenu'] Elément X dont le texte du fils Y
est contenu• Exemple : //mail[expéditeur = 'ludovic']
• NOTES : - utilisez soit des ' ' soit des " "- il s'agit d'une équivalence exacte
- idem pour les attributs
35
Recherche de chaînes
• Au lieu de l'équivalence exacte, on peut utiliser la fonction contains qui recherche des segments
//mail[contains (subject, 'XML')]• tout mail dont le sujet contient la chaîne 'XML'
//mail[contains (subject, 'XML')]/corps• Le corps d'un mail dont le sujet contient 'XML'
• Si la contrainte porte sur l'élément sélectionné, on utilise la notation "text()" :
//subject[contains(text(), 'XML')]• Le sujet d'un mail, s'il contient "XML"
36
Combinaisons de contraintes
• On peut mixer plusieurs contraintes par des connecteurs logiques (and / or )
//mail[contains(subject, 'XML') and auteur='ludovic']
Un mail de ludovic dont le sujet contient XML
//mail[contains(subject, 'XML') or contains(subject, 'corpus') ]
Un mail dont le sujet contient XML ou corpus
37
Au boulot !
• Prochaines étapes : • Le langage de transformation XSLT• Les liens bases de données XML
• D'ici là :• Etudes de cas réels du labo• Phonologie, discours, corpus divers