INaLCO - M2 Ingénierie Multilingue
Cours XML 2013-2014
- Cours n° 1
(26/09/2013) : XML comme format de données transformable
- Exemples
- Principe de
ces
transformations
- Un peu de
pratique
- Opérer en
réseau vs. sécurité (10/10/2013)
- Cours n° 2
(03/10/2013) : Un minimum de technique
- Le discours
introductif sur XML
- Un peu de
pratique
- Le cours sur
les DTDs
- Conséquence
"philosophique" du contrôle de structure
- Un peu de
pratique
- Cours n° 3
(10/10/2013) : XSLT vers (X)HTML
- Cours n° 4
(17/10/2013) : XSLT vers XML (notamment vers XSL-FO)
- XSL-FO
- Vers XML
- Cours n° 5
(24/10/2013): XML-Schémas et Relax NG
------ Vacances d'automne
- Cours n° 6
(07/11/2013) : RDF et SPARQL
- Cours n° 7
(14/11/2013): un coup d'œil à OWL et aux ontologies
- Cours n° 8
(21/11/2013): JAXP, première approche
- Cours n° 9
(28/11/2013): DOM vu de plus près
- Cours n° 10
(05/12/2013): Introduction à SAX
- Cours n° 11
(12/12/2013): Soutien au projet
- Cours n° 12
(19/12/2013): Soutien au projet
- Cours n° 13
(09/01/2014): Soutien au projet
Ce document sera mis à jour en fonction du déroulement des
cours,
tenez-vous au courant en vous abonnant au fil
RSS !
Les deux phases du cours :
- Sans Java (cours 1 à 6) : manipulation de documents XML sans
recourir à la technologie Java.
- Avec Java (cours 7 à 13) : le minimum de pratique nécessaire
pour
entrer dans le projet (commun avec le cours Java de Pierre Dittgen et
Frédéric Glorieux) qui sera la base de l'évaluation à la fin du 1er
semestre.
-
-
- Shakespeare
- Frantext
- Le corpus
Frantext.
- Un exemple, Le Roi des Montagnes, d'Edmond
About
en XML, en HTML
- La
transformation de XML en HTML (XSLT), pour essais
N.B. Lorsque vous avez choisi un auteur, ou un sujet, etc, Frantext
vous propose une liste d'œuvres.
Pour vous aider dans votre sélection, chacune d'elles est pourvue d'un
petit bouton en forme d'œil vous invitant à l'inspecter :
Ce qu'on vous montre est un fichier HTML obtenu à partir de la source
en XML par un transformation analogue à celle que je vous propose.
- Un autre exemple, plus élaboré, les Odes
funambulesques, de Théodore de Banville
en XML, en XHTML
À titre documentaire, voici le script Perl agent de cette transformation.
- Une représentation des automates finis
et la transformation qui
produit un texte en C++
-
- Existence de dialectes XML interprétables
- XHTML par tous les navigateurs [voyez Wikipédia-fr plus utile ici que Wikipedia-en]
- Observer les différences entre un fichier HTML-4
et XHTML
- Conversion de HTML-4 vers XHTML via la commande
xmllint --html --xmlout fich.html >
fich.xml
qui n'est pas parfaite...
- ou par un petit script en PHP :
<?php
function html2xhtml ($fichin, $fichout){
$doch = new DOMDocument();
$doch->loadHTMLFile($fichin);
$doch->save($fichout);
}
html2xhtml ($argv[1], $argv[2]);
?>
- RSS par certains navigateurs et par les agrégateurs
de flux
[W]
Exemple
- XSL-FO par Apache-FOP et consorts [W]
Othello
- RDF [W] via les requêtes SPARQL [W]
- La transformation se fait d'un fichier XML-source vers
un
fichier XML-interprétable,
qui est ensuite interprété par logiciel ad hoc.
- Plan d'étude :
- Examiner quelques-uns de ces dialectes
- Apprendre à opérer les transformations
- par XSLT (syntaxe XML)
- par programme (ici, en Java, mais aussi en
Perl,
PHP, etc)
-
Pour faire fonctionner une transformation XSLT, donnée par
son fichier
MaTrans.xsl
,
faire (sous Linux)
? xsltproc MaTrans.xsl LeFichierSource.xml >
LeFichierResultat.html
- Allez chercher vos pièces préférées chez Shakespeare,
et
affichez-les en HTML
- Idem pour vos textes français favoris, chez
Frantext.
-
Un document XML
peut mentionner d'autres documents (comme une DTD, une
feuille de srtyle) qui servent à sont interprétation,
mais sont situés sur d'autres serveurs.
Illustration : le fichier othello.xml, identique au
prédédent (Othello en XML) avec pour seules modifications :
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl"
href="http://pagesperso-systeme.lip6.fr/Jean-Francois.Perrot/inalco/XML/IM11/XML-IM-1/ShakHTML.xsl"
?>
<!DOCTYPE PLAY SYSTEM "http://www.cafeconleche.org/examples/shakespeare/play.dtd">
<PLAY>
<TITLE>The Tragedy of Othello, the Moor of Venice</TITLE>
.....
où
- la feuille de style est distante (sur le serveur du
LIP6)
- la DTD est distante (sur le serveur cafeconleche)
- perfectionnement de la démo faite en cours !
Ce fichier s'affiche sans problème si vous le prenez sur le serveur,
mais si vous le téléchargez pour l'utiliser en local,
comme lors de la démo en cours,
- il est affiché correctement par Safari,
- mais Firefox le rejette :
Ceci est dû à la same
origin policy que Firefox applique, ainsi que Chrome - mais pas
Safari.
L'idée est que la feuille de style est en fait un programme
(contrairement à la DTD), dont l'exécution peut poser des problèmes de
sécurité.
La page (le fichier XML) que vous téléchargez est censée se trouver sur
un site de confiance,
mais la feuille de style pourrait provenir d'un site malveillant...
D'où l'exigence de loger les deux sur le même site, réputé bienveillant.
-
-
http://pagesperso-systeme.lip6.fr/Jean-Francois.Perrot/inalco/XMLA/Cours1/Intro/
Trois points essentiels à ne pas manquer :
- Le jeu des balises et des attributs :
noter les deux structures pour représenter un tableau de noms et
notes :
Ces deux exemples nous serviront souvent...
- Le statut du texte, éventuellement parsemé de
balises, comme chez Frantext.
- Le rôle des espaces de noms, simple à comprendre
dans son principe,
mais générateur de substantielles complications pour les programmeurs.
Sur le statut des URI des espaces de noms (namespaces) voyez la
notion de Dereferenceable URI,
qui apparaît dans la théorie du Web sémantique (Linked
Data), dont nous parlerons plus tard.
Dans cette terminologie, les URI d'espaces de noms sont non-déréférençables.
-
- Le contrôle de la correction syntaxique d'un fichier
se
fait par l'outil
xmllint
(de la bibliothèque libxml2)
xmllint --noout MonFichier.xml
(l'option --noout
évite de reproduire le fichier sur la
sortie standard en cas de succès)
- L'arbre représenté par un fichier XML est manifesté
par
différents outils
- on obtient une disposition du fichier avec
indentations par la commande
xmllint --format MonFichierBrut.xml
> MonFichierIndenté.xml
- l'arbre est manipulable par un navigateur (à
condition d'avoir les plug-ins idoines)
- Firefox (par défaut ?)
- Firefox : Inspecteur DOM
[pour en savoir plus sur l'emploi
de l'inspecteur en conjonction avec XPather et avec Firebug]
- Safari : Inspecteur Web
-
http://pagesperso-systeme.lip6.fr/Jean-Francois.Perrot/inalco/XMLA/Cours1/DTD/
Version plus récente :
http://pagesperso-systeme.lip6.fr/Jean-Francois.Perrot/inalco/XML/Traductique/Validation-DTD/
Voyez notamment la section consacrée aux entités.
Jetez un coup d'œil à la DTD de Frantext (qui est livrée avec chaque
fichier du corpus).
N.B. Les DTDs ne connaissent pas les espaces de noms :
Pour la DTD, chaque nom est un tout, qui ne s'analyse pas en préfixe:nomLocal
.
Par suite, la DTD décrivant un fichier avec des namespaces doit
mentionner exactement le mêmes noms que ceux du fichier
(avec les mêmes préfixes, alors que selon la théorie le choix du
préfixe est arbitraire).
Illustration : une DTD
pour l'exemple "avec namespaces" Book Review.
Notez l'impossibilité de déclarer exactement la structure des cellules
de la table (<td>
) : la formulation
(#PCDATA|xdc:author|xdc:price|xdc:pages|xdc:date)
sans répétition, qui serait presqu'exacte, n'est pas
autorisée (format Mixed Content : une fois de plus, le statut
du texte a frappé...)
-
Une DTD définit une famille de documents XML qui ont tous la
même structure,
qui est décrite en termes de
- noms de balises
- noms d'attributs.
Le contenu d'un tel document, au-delà de sa
structure, est donc
formulé par les
- valeurs d'attributs
- contenus textuels.
Notez la différence de nature entre
- le document Voiture-1, qui donne la structure générale des
voitures (en termes de programmation, le type
Voiture
),
- et Voiture-3 qui est censé décrire une voiture
particulière (une insstance du type
Voiture
).
Les éléments structurels prennent ainsi un statut méta
par rapport aux contenus.
Ils ne suivent donc pas les mêmes lois...
Illustration : deux traitements de la liste des pays et de leurs
capitales
- l'un
démontrant la liberté de choix en matière de jeux de caractères -
structure légère qui ne se prête pas à la spécification
- l'autre
de facture plus classique, permettant en outre d'écrire de droite à
gauche
-
- Écrire une DTD pour la liste de pays et de leurs
capitales, 2ème manière
- Écrire une DTD pour les documents XML représentant des automates finis
- Pratiquer la validation de fichiers XML en votre
possession
- avec le Markup Validation Service :
http://validator.w3.org/
- avec
xmllint --noout --valid leFichier
,
pour un fichier qui contient l'indication de sa DTD
- avec
xmllint --noout leFichier --dtdvalid laDTD
,
pour forcer l'application d'une DTD donnée.
-
-
-
- Lisez une brève
introduction à XSL-FO.
Examinez la
transformation du Premier exemple :
- Thème de réflexion : Production d'un document
imprimé
à partir d'une liste de noms & de notes.
Étant donnés un fichier-source XML et une feuille de style le
transformant en FO, le
service que voici
produira pour vous le fichier PDF correspondant (par le ministère
d'Apache-FOP).
Commencez avec cet exemple ultra-simple : un fichier de noms &
notes avec la transformation
minimale assortie (améliorez-la !)
Exemples d'améliorations à l'exemple ultra-simple des noms & notes :
- Trier la liste par ordre décroissant des notes
(classement).
- Ajouter une page de couverture donnant le nombre
d'élèves
et la moyenne des notes
- Aligner les notes verticalement [si vous séchez, voyez ici !]
- en fixant arbitrairement la distance de la
colonne
des notes
et en calculant le nombre d'espaces à insérer après le nom, comme pour
une indentation
- en déterminant la longueur max des noms lors
d'une une
première passe de calcul.
- Quelque exemples (de complexité croissante) :
- Imprimer un poème :
On part de l'exercice "Afficher un poème"
(cf. cours précédent)
- L'impression en pdf des pièces de Shakespeare (explications dans la deuxième vague du cours FO)
- Imprimer en pdf certains textes empruntés au corpus
Frantext (M2-Trad, mars 2012)
-
Nous avons vu ainsi deux applications de XSLT où il s'agissait de
"fondre" le contenu d'un fichier XML
dans un format fixe (XHTML ou FO).
On peut aussi souhaiter transformer un document en conservant de larges
pans de sa structure,
en procédant à des modifications plus ou moins étendues.
C'est l'objet de la section Produire du XML.
Dans l'exemple du changement de format des noms-notes du format avec attributs vers
le format avec fils (et réciproquement),
on veut garder intacte la structure de liste d'élèves, et
n'échanger que la structure des élèves.
La transformation réciproque est donnée avec la syntaxe "compacte"
pour les valeurs d'attributs calculées.
La voici en syntaxe
"développée". Essayez-la !
-
-
- Référence : le début des notes de cours sur XMLS
http://pagesperso-systeme.lip6.fr/Jean-Francois.Perrot/inalco/XMLA/Cours3/XMLS/
- Addendum sur la validation d'un fichier XML qui déclare un schéma :
L'outil xmllint
ne travaille un fichier XML que par
rapport à un schéma donné sur la ligne de commande,
comme il est dit dans le cours :
%xmllint monFichier.xml --schema monSchéma.xsd
xmllint
opère donc avec l'option --schema
de la même manière qu'avec l'option --dtdvalid
pour une
DTD externe.
Il n'existe pas pour les schémas d'option qui correspondrait à l'option
--valid
pour une DTD (à référence) interne.
Il en va de même en Java, mais la difficulté peut être contournée....
En fait, les schémas et les grammaires RNG suivent une logique de vérification
par une tierce partie,
où la référence au standard est donnée en dehors du fichier-candidat,
contrairement à la tradition des DTDs.
Dans le vocabulaire de xmllint
, c'est désormais l'option --dtdvalid
qui est la règle, et non plus --valid
.
- Le
schéma que nous avons écrit en cours pour les poèmes du Cours 3
(exercice).
Écrivez donc une grammaire RNG équivalente !
- Notes sur Relax
NG.
- La spécification écrite en cours des fichiers XML
représentant des automates finis :
- fichier-exemple
auto.xml
- grammaire compacte
auto.rnc
(celle que nous avons écrite)
- grammaire XML
auto.rng
(engendrée par trang
)
- Un exemple de spécification en Relax NG, pour la mise en
ligne du Glossarium
mediae et infimae latinitatis de Du Cange,
par l'École
nationale des Chartes :
Voyez aussi la page Algone
!
Voici ce que donnent, transformées par l'outil Algone, les deux
grammaires RNG que nous avons vues en cours :
-
Introduction à
RDF
et à SPARQL
-
-
Réalisation
en Java
de manipulations XML
- La méthode
newSchema
de SchemaFactory
prend comme argument une Source
quelconque.
Son utilisation avec un argument File
relève de la pure
commodité pour l'utilisateur (convenience method).
- Le refus de Java6 de traiter Relax-NG reste inexpliqué,
ainsi
que la censure du schéma
menu.xsd
obtenu par traduction de la grammaire menu.rnc
(cf. cours
4).
Espérons que cette anomalie disparaîtrea avec Java7.
Essayez quelques exercices
d'application.
Exercice réalisé en cours :
Écrire une classe qui s'exécute en prenant trois arguments (noms
de fichiers)
1. le fichier XML candidat
2. le fichier contenant le XML-schéma qui le garantit
3. le fichier contenant la transformation XSLT, qui repose sur le
schéma en question
et produit le document transformé, sur la sortie standard
en ne ne lançant la transformation que si
- le fichier-candidat est effectivement conforme à son schéma
- la transformation est correcte en tant que XSLT
(en exploitant la TransformerConfigurationException
que
la méthode "Transformer newTransformer(Source source)
"
est susceptible de lancer [voir la JavaDoc]
-
- Les trois premiers pas avec DOM
- Lecture-1 et Lecture-2
(de noms & notes en XML, avec calcul de la moyenne)
- Construction1 et Construction2
(de noms & notes à partir d'un fichier-texte
Traité en cours : Cons2.java
Application : lire un fichier-texte (de noms & notes) et
produire une page HTML les affichant.
- Transformation (de noms & notes1
vers noms & notes2)
- Bréviaire : Mode d'emploi assez
détaillé (mais non exhaustif !)
- problèmes de conformité (DTD)
Pour une présentation de DOM avec Perl comme langage d'implémentation,
voir les notes du cours XML de M2-Traductique d'il y a deux ans :
idem en PHP :
-
L'approche SAX (Simple API for XML - bien mal
nommée)
Notes complémentaires :
- L'exemple avec Morphalou fonctionne de nouveau.
- Le traitement des erreurs de syntaxe par le parseur DOM
nécessite de passer par SAX.
- La technique "DOM pull" (25/01/2011 - remerciements à
Pierre Dittgen).
Entre DOM qui est facile à programmer, mais requiert un espace mémoire
qui peut être prohibitif,
et SAX qui n'a pas cet inconvénient mais dont l'emploi est beaucoup
plus ardu,
on cherche un moyen terme. La technique "DOM pull" est une réponse à
cette demande.
Elle n'est pas standardisée, mais elle se décline sous des noms
différents dans les langages usuels :
Je n'ai pas encore d'expérience personnelle à vous proposer.
-
Cours n° 11
(12/12/2013): Soutien au
projet
Validation d'un document XML par une grammaire RNG compacte.
- Classe
VerifRNG
, homologue de VerifSchema
.
À compiler avec "javac -cp jing.jar:. VerifRNG.java
"
À exécuter avec (par exemple) "java -cp jing.jar:. VerifRNG Nom_note1.rnc
Nom_note1.xml
"
- Explication ?
-
Grammaire-pivot
-
Cours n° 13
(09/01/2014): Soutien au projet