Title: Laurent Romary DIST CNRS Laurent'Romaryloria'fr Susanne Alt ATILF CNRS saltatilf'fr
1Laurent Romary (DIST CNRS)Laurent.Romary_at_loria.
frSusanne Alt (ATILF CNRS)salt_at_atilf.fr
Normalisation lexiques et corpus
2INTRODUCTION
3Hello,apres avoir chipote avec VerbNet, je
suis en train de rentrer dans le lard de FrameNet
anglais, j'ai qq questions (1) est-ce que
tu connais des outils standards qui donnent une
API pour manipuler les donnees de FrameNet dans
un programme java ? e.g. je voudrais eviter de
me colletiner l'ecriture d'un parser XML (...).
J'ai trouve l'API de Stanford mais il parsent que
les fichiers d'annotation, pas les fichiers de
LUs (Lexical Units) (2) En travaillant sur les
bases de donnees lexicales developpees ici, on se
rend compte qu'on a un mal de chien a préserver
la consistance des données. Seuls les auteurs de
l'"ontologie" semblent pouvoir s'y retrouver
(...) Est-ce que tu connais la methode de
developpement utilisee par les FrameNet boys ???
ont-ils fait des papiers la dessus ?
Un jeudi sur terre le 16/11/2005
4FrameNet "lexical units"
entrée verbale
frame
définition
participants
constructions syntaxiques
FrameNet abandon http//www.icsi.berkeley.edu/
framenet/
5FrameNet "fichiers d'annotation"
- Corpus 130.000 phrases d'exemples annotées
6FrameNet distribution
- DocsDTDs.tgz Contains README.pdf, the Book in PDF
and HTML, and the DTDs - HTMLfiles.tgz Complete set of HTML files frame
descriptions, LU annotations, lexical entry
reports, and indexes to them (LUIndex.html,
frameIndex.html, etc.). - basicXML.tgz Complete set of XML files for FN
database, including frame descriptions, frame
relations, metarelations, LU annotation, lexical
entry reports. Does not include part-of-speech
labels on annotated sentences. - luPosXML.tgz Annotated sentences in XML with
part-of-speech labels. Does not include frame
information or lexical entry reports. - DiffsXML.tgz XML files representing changes in
frames, frame relations and lexical units since
Release 1.1 - OWLfiles.tgz Contains a representation in OWL of
the frames and frame relations only, as of July
2004. - format XML (norme) DTDs (propriétaires)
- Base de données XML (pas d'outils d'accès)
- Phrases annotées XML (outils développés
ailleurs)
7Explication de texte
- Masses de données
- corpus, dictionnaires, lexiques, ensembles de
règles - diffusées librement, sous licence, par des
agences - Mais
- autant de formats que de ressources
- Donc
- problèmes de documentation
- problèmes des outils d'accès
- problèmes de maintenance, de mise à jour, de
partage
8Hello,apres avoir chipote avec VerbNet, je
suis en train de rentrer dans le lard de FrameNet
anglais, j'ai qq questions (1) est-ce que
tu connais des outils standards qui donnent une
API pour manipuler les donnees de FrameNet dans
un programme java ? e.g. je voudrais eviter de
me colletiner l'ecriture d'un parser XML (...).
J'ai trouve l'API de Stanford mais il parsent que
les fichiers d'annotation, pas les fichiers de
LUs (Lexical Units) (2) En travaillant sur les
bases de donnees lexicales developpees ici, on se
rend compte qu'on a un mal de chien a préserver
la consistance des données. Seuls les auteurs de
l'"ontologie" semblent pouvoir s'y retrouver
(...) Est-ce que tu connais la methode de
developpement utilisee par les FrameNet boys ???
ont-ils fait des papiers la dessus ?
En résumé
données
outils
formats
mise à jour
documentation
9Standards pour...
- Documents semi-structurés
- XML, DTD, XSL
- Données linguistiques
- Unicode, codes Langues, relaxNG
- Données textuelles
- Text Encoding Interchange (TEI)
- Linguistic Annotation Framework (LAF)
- Données lexicales
- Multext, Genelex, Lexical Markup Framework (LMF)
- Métadonnées
- OLAC, INTERA, TEI
10Languages semi-structurésSusanne Alt (ATILF
CNRS)
Cours I
11Documents semi-structurés
- Quel format d'échange pour des données
linguistiques ? - BD relationnelle, texte, balisages
semi-structurés - Langages de balisage (SGML, HTML, XML)
- Généalogie et philosophie
- XML
- syntaxe
- sémantique (DTDs, RelaxNG)
- Traiter des documents XML
- recherche XPath
- édition XSLT
12Voilà à quoi ça ressemble HTML
lt!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML
4.0//EN"gt ltHTMLgt ltheadgt lttitlegtContactlt/titl
egt lt/headgt ltbodygt lth1gtSusanne
Salmon-Altlt/h1gt ltpgt ltbgtalt_at_loria.frlt/bgt
ltbrgt tél 03 83 59 20 35ltbrgt équipe
Langue et Dialogueltbrgt ltigtLorialt/igt
lt/pgt lt/bodygt lt/HTMLgt
13Voilà à quoi ça ressemble XML
lt?xml version"1.0" encoding"iso-8859-1"?gt lt!DOCT
YPE MEMBRE SYSTEM "http///MEMBRE.dtd"gt lt!-- Un
membre du LORIA --gt ltMEMBRE TYPE"IE"
ID"M28"gt ltNOMgt Salmon-Alt lt/NOMgt ltPRENOMgt
Susanne lt/PRENOMgt ltMELgt alt_at_loria.fr
lt/MELgt ltTELgt 03 83 59 20 35 lt/TELgt ltFAXgt 03 83
41 30 79 lt/FAXgt ltEQUIPE LAB"LORIA"gt Langue
et Dialogue lt/EQUIPEgt lt/MEMBREgt
14Voilà à quoi ça ressemble XSL
lt?xml version"1.0" encoding"iso-8859-1"?gt ltxsls
tylesheet version"1.0" xmlnsxsl"http//www.w3.o
rg/1999/XSL/Transform"gt ltxsltemplate
match"/"gt ltHTMLgt ltHEADgt ltTITLEgtMon
répertoirelt/TITLEgt lt/HEADgt ltBODYgt
ltxslapply-templates/gt lt/BODYgt lt/HTMLgt lt/xsltemp
lategt ltxsltemplate match"MEMBRE"gt
ltPgt ltxslapply-templates select"NOM"/gt ltxsltex
tgt - lt/xsltextgt ltxslapply-templates
select"EQUIPE"/gt lt/Pgt lt/xsltemplategt lt/xslstyl
esheetgt
ltHTMLgt ltHEADgt ltTITLEgtMon reacutepertoirelt/TITLE
gt lt/HEADgt ltBODYgt ltPgt Salmon-Alt - Langue et
Dialogue lt/Pgt lt/BODYgt lt/HTMLgt
15Langages de description
- Valeur ajoutée aux données brutes
- principe de base ltbalisegt mon texte lt/balisegt
- balises structurant les données
- type dinfos ajoutées
- informations sur laspect ( présentationelles )
- informations sur la structure ( logiques )
- informations sur le fond ( sémantiques )
- gt traitements par navigateurs (HTML) ou XSL
(XML) - avantages
- séparation des données des méta-données
- documents semi-structurés
- HTML, SGML, XML
16Pour quoi faire ?
- Modéliser des données (semi-)structurées
- textes littéraires
- bases de données bibliographiques
- dictionnaires
- paramètres de configuration
- échange de données entre applications
- cartographie des gènes
- Publier les données sur le web (HTML, XML/XSL,
XHTML) - Séparer les structures sémantiques de la
présentation (SGML, XML) - Intégrer des données hétérogènes (XML)
17Pourquoi vous ny échapperez pas...
- Intégration croissante dans une large gamme
dapplications - Usage industriel et applicatif
- édition, communication, web, ...
- bases de données
- intégration de données multimédia
- Internet (catalogue de produits et E-Commerce)
- Usage scientifique et monde de la recherche
- cartographie du génome humain
- codage de données scientifiques (chimie, maths,
...) - représentation des connaissances (logique, IA,
...) - linguistique computationnelle (dictionnaires,
traduction, ...) - Indépendance
- de toute langue, toute plate-forme et de tout
fabricant de logiciel
18Vue générale
- Standard Generalized Markup Language
- Hyper Text Markup Language
- eXtended Markup Language
19XML ? SGML
- SGML (Standard Generalized Markup Language)
- norme ISO 8879 (1986)
- langage de définition pour balises (DTD)
- XML
- sous-ensemble de SGML
- moins complexe
- spécification XML 36 pages
- norme SGML 250 pages
- structure logique de documents électroniques
- portail vers le Web
20XML ? HTML
- HTML (HyperText Markup Language, 1990)
- application SGML
- ensemble de balises figées
- afficher texte, liens hypertextes et images
(pages Web) - XML
- pas de balises prédéfinies
- permet de spécifier des balises en fonction des
données - META-langage
- centré sur la structuration du contenu (et non
pas la forme) - Actuellement
- HTML est devenu une application XML (XHTML)
21Initiation à XML
Cours I
22Qu'est-ce que c'est donc ?
- Une recommandation du W3C
- http//www.w3.org/XML/
- Un langage de description extensible
- méta-langage qui permet de définir dautres
langages - ? HTML, ? SGML)
- Une simplification de la norme SGML
- Centré sur les structures
- logiques et sémantiques
- ? présentationnelles
23Chaîne de traitement des données
Édition
Transformation
Consultation
Conception
XML Données
XPath/ XSL/XSLT Filtres
XHTML "Vues"
DTD/ Schéma Structures
24Voilà à quoi ça ressemble XML
lt?xml version"1.0" encoding"iso-8859-1"?gt lt!DOCT
YPE MEMBRE SYSTEM "http///MEMBRE.dtd"gt lt!-- Un
membre du LORIA --gt ltMEMBRE TYPE"IE"
ID"M28"gt ltLOGIN ID"alt"/gt ltNOMgt Salmon-Alt
lt/NOMgt ltPRENOMgt Susanne lt/PRENOMgt ltMELgt
alt_at_loria.fr lt/MELgt ltTELgt 03 83 59 20 35
lt/TELgt ltFAXgt 03 83 41 30 79 lt/FAXgt ltEQUIPE
LAB"LORIA"gt Langue et Dialogue lt/EQUIPEgt lt/ME
MBREgt
25Les éléments et leur contenu
lt?xml version"1.0" encoding"iso-8859-1"?gt lt!DOCT
YPE MEMBRE SYSTEM "http///MEMBRE.dtd"gt lt!-- Un
membre du LORIA --gt ltMEMBRE TYPE"IE"
ID"M28"gt ltLOGIN ID"alt"/gt ltNOMgt Salmon-Alt
lt/NOMgt ltPRENOMgt Susanne lt/PRENOMgt ltMELgt
alt_at_loria.fr lt/MELgt ltTELgt 03 83 59 20 35
lt/TELgt ltFAXgt 03 83 41 30 79 lt/FAXgt ltEQUIPE
LAB"LORIA"gt Langue et Dialogue lt/EQUIPEgt lt/ME
MBREgt
balise ouvrante
élément vide
élément
contenu textuel
balise fermante
26Les éléments et leurs attributs
lt?xml version"1.0" encoding"iso-8859-1"?gt lt!DOCT
YPE MEMBRE SYSTEM "http///MEMBRE.dtd"gt lt!-- Un
membre du LORIA --gt ltMEMBRE TYPE"IE"
ID"M28"gt ltLOGIN ID"alt"/gt ltNOMgt Salmon-Alt
lt/NOMgt ltPRENOMgt Susanne lt/PRENOMgt ltMELgt
alt_at_loria.fr lt/MELgt ltTELgt 03 83 59 20 35
lt/TELgt ltFAXgt 03 83 41 30 79 lt/FAXgt ltEQUIPE
LAB"LORIA"gt Langue et Dialogue lt/EQUIPEgt lt/ME
MBREgt
valeur d'attribut
nom d'attribut
27Autres éléments
lt?xml version"1.0" encoding"iso-8859-1"?gt lt!DOCT
YPE MEMBRE SYSTEM "http///MEMBRE.dtd"gt lt!-- Un
membre du LORIA --gt ltMEMBRE TYPE"IE"
ID"M28"gt ltLOGIN ID"alt"/gt ltNOMgt Salmon-Alt
lt/NOMgt ltPRENOMgt Susanne lt/PRENOMgt ltMELgt
alt_at_loria.fr lt/MELgt ltTELgt 03 83 59 20 35
lt/TELgt ltFAXgt 03 83 41 30 79 lt/FAXgt ltEQUIPE
LAB"LORIA"gt Langue et Dialogue lt/EQUIPEgt lt/ME
MBREgt
déclaration XML
déclaration DTD
commentaire
28Et voici... le jeu des 7 fautes !
lt?xml version"1.0" encoding"iso-8895-1"gt lt?xml-s
tylesheet type"text/xsl" href"C\susanne\corpus\
ozkan\annotation\stylesheets\comptage.xsl"?gt lt!DOC
TYPE membre SYSTEM "C//dialogue.dtd"gt ltdialoguegt
lt!-- ceci est un jeu pour vous réveiller
-gt ltheadgt ltcoding_infogt ltauthorgtJulien
Jacquotlt/authorgt ltdategt00-03-11lt/dategt lt/codi
ng_infogt ltdialogue_infogt ltcouple
instructor"Elise" manipulator"Daniel"
strategy_manipulator"prudent"gtC11lt/couplegt ltfi
guregtballonlt/figuregt lt/dialogue_infogt lt/headgt
ltbodygt ltverbal_action id who"I"gt ltseggtqui
est ce qui fait ça làltseggt ltcomment
type"speech_act"gtquestion introduitelt/commentgt
lt/verbal_actiongt ltverbal_action id"xsd2"
who"M"gt ltseggtah, moi je fais
rienlt/seggt ltcomment typespeech_actgtinformation
en réponselt/commentgt lt/verbal_actiongt lt/bodygt
29Solution
lt?xml version"1.0" encoding"iso-8895-1"?gt lt?xml-
stylesheet type"text/xsl" href"C\susanne\corpus
\ozkan\annotation\stylesheets\comptage.xsl"?gt lt!DO
CTYPE dialogue SYSTEM "C//dialogue.dtd"gt ltdialog
uegt lt!-- ceci est un jeu pour vous réveiller
--gt ltheadgt ltcoding_infogt ltauthorgtJulien
Jacquotlt/authorgt ltdategt00-03-11lt/dategt lt/codi
ng_infogt ltdialogue_infogt ltcouple
instructor"Elise" manipulator"Daniel"
strategy_manipulator"prudent"gtC11lt/couplegt ltfi
guregtballonlt/figuregt lt/dialogue_infogt lt/headgt
ltbodygt ltverbal_action id"xsd1"
who"I"gt ltseggtqui est ce qui fait ça
làlt/seggt ltcomment type"speech_act"gtquestion
introduitelt/commentgt lt/verbal_actiongt ltverbal_
action id"xsd2" who"M"gt ltseggtah, moi je
fais rienlt/seggt ltcomment type"speech_act"gtinfo
rmation en réponselt/commentgt lt/verbal_actiongt lt
/bodygt lt/dialoguegt
30DTDs
Cours I
31Chaîne de traitement des données
Édition
Transformation
Consultation
Conception
XML Données
XPath/ XSL/XSLT Filtres
XHTML "Vues"
DTD/ Schéma Structures
32Documents bien-formés
- Syntaxe correcte
- balises fermés ?
- guillements autour des attributs ?
- etc.
- jeu précédent document mal-formé
- Mais sémantique non vérifiable
- nom des éléments ?
- enchâssement ?
- valeurs des attributs ? etc.
- jeu précédent pas de moyen pour vérifier, car
pas de - Document Type Definition (DTD)
33Documents valides rôle de la DTD
- Valide bien-formé conforme à une DTD
- Définition dune DTD
- contraintes sur les noms des éléments, des
attributs - description du contenu des éléments
- enchâssement déléments, texte, ...
- attachement dattributs à un élément donné
- type des attributs
- facultatifs, obligatoire
- valeur des attributs
- numériques, alpha-numériques, liste fermée
- Principes de bases approche SGML
traditionnelle, mais - DTD optionnelle en XML et syntaxe simplifiée
- production en valide et distribution en
bien-formé
34Trois questions sur la DTD
1. Comment connaître la structure de mes
documents ?
3. Comment partager la structure de mes
documents avec mes collègues ?
2. Comment décrire la structure de mes documents
?
351. La structure des documents
- Analyse attentive des données à traiter !!!
- Mettre à jour les règles générales sur la
structuration des données... - composantes nécessaires ? éléments ?
- propriétés pertinentes ? attributs ?
- valeurs spécifiques de certains attributs ?
- type des attributs ?
- enchâssement des éléments ? séquences déléments ?
362. Ecrire une DTD
- lt!ELEMENT MEMBRE
- (LOGIN, NOM, PRENOM?, MEL, TEL, FAX, EQUIPE)gt
- lt!ELEMENT LOGIN EMPTYgt
- lt!ATTLIST LOGIN
- ID ID REQUIREDgt
- lt!ELEMENT NOM (PCDATA)gt
- lt!ELEMENT PRENOM (PCDATA)gt
- lt!ELEMENT MEL( PCDATA)gt
- lt!ELEMENT TEL (PCDATA)gt
- lt!ELEMENT FAX (PCDATA)gt
- lt!ELEMENT EQUIPE (PCDATA)gt
- lt!ATTLIST EQUIPE
- LAB CDATA REQUIREDgt
37Déclaration des éléments
- lt!ELEMENT MEMBRE
- (LOGIN, NOM, PRENOM?, MEL, TEL, FAX, EQUIPE)gt
- lt!ELEMENT LOGIN EMPTYgt
- lt!ATTLIST LOGIN
- ID ID REQUIREDgt
- lt!ELEMENT NOM (PCDATA)gt
- lt!ELEMENT PRENOM (PCDATA)gt
- lt!ELEMENT MEL( PCDATA)gt
- lt!ELEMENT TEL (PCDATA)gt
- lt!ELEMENT FAX (PCDATA)gt
- lt!ELEMENT EQUIPE (PCDATA)gt
- lt!ATTLIST EQUIPE
- LAB CDATA REQUIREDgt
nom de lélément
mot-clé ELEMENT
38Contenu des éléments
- lt!ELEMENT MEMBRE
- (LOGIN, NOM, PRENOM?, MEL, TEL, FAX, EQUIPE)gt
- lt!ELEMENT LOGIN EMPTY gt
- lt!ATTLIST LOGIN
- ID ID REQUIREDgt
- lt!ELEMENT NOM (PCDATA)gt
- lt!ELEMENT PRENOM (PCDATA)gt
- lt!ELEMENT MEL (PCDATA)gt
- lt!ELEMENT TEL (PCDATA)gt
- lt!ELEMENT FAX (PCDATA)gt
- lt!ELEMENT EQUIPE (PCDATA)gt
- lt!ATTLIST EQUIPE
- LAB CDATA REQUIREDgt
éléments enfants
élément vide
données textuelles
39Séquençage des éléments enfants
- lt!ELEMENT MEMBRE
- (LOGIN, NOM, PRENOM?, MEL, TEL, FAX, EQUIPE)gt
gt 0
gt 1
1
lt 1
OU exclusif
factorisation
lt!ELEMENT PAYMENT (CASHCREDIT_CARD)gt
lt!ELEMENT ADRESSE (RUE,(VILLECODE_POSTAL))gt
40Déclaration des attributs
- lt!ELEMENT MEMBRE
- (LOGIN, NOM, PRENOM?, MEL, TEL, FAX, EQUIPE)gt
- lt!ELEMENT LOGIN EMPTYgt
- lt!ATTLIST LOGIN
- ID ID REQUIREDgt
- lt!ELEMENT NOM (PCDATA)gt
- lt!ELEMENT PRENOM (PCDATA)gt
- lt!ELEMENT MEL( PCDATA)gt
- lt!ELEMENT TEL (PCDATA)gt
- lt!ELEMENT FAX (PCDATA)gt
- lt!ELEMENT EQUIPE (PCDATA)gt
- lt!ATTLIST EQUIPE
- LAB CDATA REQUIREDgt
mot-clé ATTLIST
nom de lélément
nom de lattribut
type de lattribut
valeur implicite
41Types dattributs
42Plusieurs attributs
lt!ATTLIST EQUIPE LAB CDATA REQUIREDgt
lt!ATTLIST EQUIPE Date CDATA IMPLIEDgt
lt!ATTLIST EQUIPE LAB CDATA REQUIRED Date
CDATA IMPLIED gt
43attributs présence et valeurs
- ??? lt!ATTLIST LOGIN IDENT ID FIXED "M"gt
443. Utilisation et partage d'une DTD
- DTD interne au document XML
- DTD déclarée au début du document XML (entre
crochets) - avantage proximité
- inconvénient partage de la même DTD entre
plusieurs documents XML
déclaration doctype
lt!DOCTYPE MEMBRE lt!ELEMENT MEMBRE
gt gt ltMEMBRE TYPE"IE" ID"M28"gt lt/MEMBREgt
déclaration DTD
document XML
453. Utilisation et partage d'une DTD
- DTD externe au document XML
- DTD déclarée dans un fichier à part
- avantage partage de la même DTD pour plusieurs
docs XML - inconvénient rétro-compatibilité
lt!ELEMENT MEMBRE gt
déclaration DTD (fichier .dtd)
- lt!DOCTYPE MEMBRE SYSTEM "http///MEMBRE.dtd"gt
- ltMEMBRE TYPE"IE" ID"M28"gt
-
- lt/MEMBREgt
46Application
- Ecrire une DTD pour une entrée de dictionnaire
- ltpgtltbgtAccomodationlt/bgt,ltigtf.lt/igt, faculté de
lil humain permettant de maintenir une vision
nette des objets quelle que soit leur distance.
ltBRgt - ltbgtltIgtEn stéréoscopielt/bgtlt/igt, faculté des yeux
humains dobtenir la vision stéréoscopique par
superposition de deux images.lt/pgt
Accomodation,f., faculté de loeil humain
permettant de maintenir une vision nette des
objets quelle que soit leur distance. En
stéréoscopie, faculté des yeux humains dobtenir
la vision stéréoscopique par superposition de
deux images.
47Exemple d'une DTD simple
- lt?xml version1.0 encodingiso-8859-1?gt
- lt!DOCTYPE dico
- lt!-- Coucou --gt
- lt!ELEMENT dico (article)gt
- lt!ELEMENT article (vedette, gramm, sens)gt
- lt!ELEMENT vedette (PCDATA)gt
- lt!ELEMENT gramm (categorie, (genre nombre
transitivité))gt - lt!ELEMENT genre (PCDATA)gt
- lt!ELEMENT nombre (PCDATA)gt
- lt!ELEMENT transitivité (PCDATA)gt
- lt!ELEMENT sens (domaine?, def, exemple, sens)gt
- lt!ATTLIST sens n CDATA IMPLIEDgt
- gt
48Version TEI
Text Encoding Initiative
- lt?xml version"1.0" encoding"iso-8859-1"?gt
- lt!DOCTYPE entry SYSTEM "http///entry.dtd"gt
- lt!-- A dictionary entry --gt
- ltentrygt
- ltformgt
- ltorthgtaccomodationlt/orthgt
- lt/formgt
- ltgramGrpgt
- ltgengtflt/gengt
- lt/gramGrpgt
- ltsensegt
- ltdefgtFaculté de loeuil humain permettant de
maintenir une vision nette des objets quelle que
soit leur distance.lt/defgt - lt/sensegt
- ltsensegt
- ltusg typedomgtEn STEREOSCOPIElt/usggt,
- ltdefgtfaculté des yeux humains dobtenir la
vision stéréoscopique par superposition de deux
images.lt/defgt - lt/sensegt
- lt/entrygt
49Fragments de la DTD TEI
- lt!ELEMENT entry (form, grmGrp?, sense)gt
- lt!ELEMENT form (orth, phon)gt
- lt!ELEMENT orth (PCDATA)gt
- lt!ATTLIST orth lang (fren) REQUIREDgt
- lt!ELEMENT sense (def usg etym eg tr)gt
- lt!ATTLIST sense n CDATA IMPLIEDgt
50Représentation arborescente
51XPath
Cours I
52Chaîne de traitement des données
Édition
Transformation
Consultation
Conception
XML Données
XPath/ XSL/XSLT Filtres
XHTML "Vues"
DTD/ Schéma Structures
53XPath
- XML Path Langage 1.0
- recommandation du W3C (1999)
- permet l'adressage de partie de documents XML
- recherche, sélection et extraction de fragments
XML - basé sur
- noms d'éléments
- noms/valeurs d'attributs
- chemins dans le document
- positions
54L'Adressage avec les XPath
- Adressage absolu
- A partir d'une URI/URL
- id(M28), here(), root()
- Adressage relatif en suivant des axes
- ancestor, parent
- descendant, child
- preceding-sibling, following-sibling
55Morphalou c'est un arbre...
La seule vue que lon doit avoir dun document
XML !
lexicalDatabase
lexicalEntry
lexicalEntry
lexicalEntry
inflectionGroup
inflectionGroup
inflection
inflection
56Les motifs (Xpath)
- / (racine du document)
- element
- /sous-element
- /sous-element1(premier sous-élément)
- /sous-element/sous-sous-element
- //sous-elements
- . (moi-même)
- (tous les éléments)
- _at_attribut
- element/_at_ (tous les attributs de lélément)
- elementsous-element (tous les éléments
possédant ce sous-élément) - element_at_attribut"valeur" (tous les éléments
dont lattribut à telle valeur)
57XPath - Exemples
- /
- /lexicalDatabase
- /lexicalDatabase/lexicalEntry
- /lexicalDatabase/lexicalEntry130
- /lexicalDatabase/lexicalEntry_at_lemma"abigotir"
- //lexicalEntry_at_lemma"abigotir"
- //lexicalEntry_at_lemma"aba"/inflectionGroup
58XPath - Exercices
- Combien y-t-il d'entrées dans "Morphalou" ?
- Extraire les adverbes ?
- Combien de pluriels appartenant à des noms ?
- Extraire les noms masculins ?
- Extraire tous les verbes qui ont des participes
présent ? - Extraire tous les lemmes dérivés de la racine
"abandon" ?
59XPath - Solutions
- count(//lexicalEntry)
- //lexicalEntry_at_grammaticalCategory"adverb"
- count(//lexicalEntry_at_grammaticalCategory"commonN
oun"/inflectionGroup/inflection_at_grammaticalNumbe
r"plural") - //lexicalEntry_at_grammaticalCategory"commonNoun"
and _at_grammaticalGender"masculine" - //inflection_at_grammaticalMood"participle" and
_at_grammaticalTense"present"/ancestorlexicalEntr
y - //lexicalEntrystarts-with (_at_lemma,"abandon")
60XSL
Cours I
61Plus concrètement...
62Principe de base
- Cher moteur XSL, quand tu rencontres la racine du
document, fait quelque chose - Cher moteur XSL, si tu rencontres lélément
annuaire, fait telle chose - Cher moteur XSL, si tu rencontres lélément
membre, fait telle autre chose - Et ainsi de suite ...
- Une feuille de style XSL est une suite de règles
ou de templates .
63Exemple de structure XSL
- lt?xml version"1.0"?gt
- ltxslstylesheet xmlnsxsl"http//www.w3.org/TR/WD
-xsl"gt -
- ltxsltemplate match"/"gt
-
- lt/xsltemplategt
- ltxsltemplate match"annuaire"gt
-
- lt/xsltemplategt
-
- lt/xslstylesheetgt
64Structure des règles (template)
- Chaque règle possède deux parties
- Un motif (XPath) qui identifie le/les nud(s) XML
du document qui est/sont concerné(s) par la règle
et sur le(s) quel(s) il faut appliquer une action - Une action qui effectue la transformation et/ou
spécifie les caractéristiques de la présentation
ltxsltemplate matchmotifgt action lt/xsltemp
lategt
65Structure d une règle (exemple)
ltxsltemplate matchannuairegt
ltxslapply-templates/gt lt/xsltemplategt
Cher moteur XSL, quand tu parses un document XML
et que tu tombes sur un élément ltannuairegt ,
utilise cette règle
Va vers chacun de mes fils ( ltentetegt et ltmembregt
) et applique les règles qui les concernent
66Les actions
- Ecrire quelque chose...
- contenu des éléments
- ltxslvalue-of select"."/gt
- ltxslvalue-of select"sous-element"/gt
- contenu dattributs
- ltxslvalue-of select"_at_attribut"/gt
- du texte
- ltxsltextgt mon texte avec espaces lt/xsltextgt
- Appeler dautres règles
- ltxslapply-templates/gt
- ltxslapply-templates select"motif"/gt
67Objectifs
- Définir un langage de feuilles de style pour XML
- Transformation de documents
- Sélection
- Filtrage
- Présentation de documents
- HTML, XHTML
- RTF, Word, PS, PDF, ...
68Lexemple d annuaire
ltannuairegt ltentetegt ltresponsablegtRichardlt/re
sponsablegt ltdateRevisiongt23 avril
2000lt/dateRevisiongt lt/entetegt ltmembregt
ltprenomgtLaurentlt/prenomgtltnomgtRomarylt/nomgt
lttel type"fax"gt03.83.41.30.79lt/telgt lttel
type"bureau"gt03.83.59.20.37lt/telgt ltadressegt
ltruegtCampus Scientifique, BP 239lt/ruegt
ltvillegtVandoeuvre lès Nancylt/villegt
ltcodePostalgt54506lt/codePostalgt
ltpaysgtFRANCElt/paysgt lt/adressegt
ltdépartement href"departements.xmlinformatique"/
gt lt/membregt lt/annuairegt
69Mise en uvre
lt?xml version"1.0" encoding"UTF-8"?gt ltxslstyles
heet xmlnsxsl"http//www.w3.org/1999/XSL/Transfo
rm" version"1.0"gt ltxsltemplate
match"/"gt ltxslapply-templates/gt
lt/xsltemplategt
ltxsltemplate match"annuaire"gt
ltxslapply-templates/gt lt/xsltemplategt
ltxsltemplate match"entete"gt
ltxslvalue-of select"responsable"/gt
lt/xsltemplategt ltxsltemplate
match"membre"gt ltxslvalue-of
select"nom"/gt lt/xsltemplategt lt/xslstyle
sheetgt
70Par défaut...
- Pour les éléments appelés par
- ltxslapply-templates/gt
- mais sans
- ltxsltemplate match"..." gt
- le contenu est produit en sortie...
- Donc pour ceux qui ne nous intéressent pas
(sans action) - ne pas les appeler par leur pères... ou
- supprimer laction et
- supprimer les règles concernant les fils
- Exemple
- ltentêtegt précédent...
71Factorisation des motifs
- Pour éviter les répétitions inutiles de règles,
on peut factoriser les motifs sur une seule règle
ltxsltemplate match"nom prenom"gt ltBgt
ltxslvalue-of select"."/gt lt/Bgt lt/xsltemplategt
Cette règle s'applique à la fois aux éléments
ltnomgt et ltprenomgt
72Contrôler le parcours du document
- Pour l'instant, nous avons vu que XSL parcourt le
document dans l'ordre de ses éléments - annuaire, entete, responsable, , membre, prenom,
nom, tel, adresse, etc. - de la racine vers les feuilles de l'arbre
- Comment contrôler l'ordre dans lequel les choses
peuvent être effectuées ? - Exemples
- codePostal avant ville
- nom avant prenom
73Contrôler le parcours du document
- ltxslapply-templates select"motif"gt
- Sans select, apply-templates traite les éléments
dans l'ordre où ils apparaissent dans le document - L'attribut select permet d'indiquer au moteur XSL
de traiter uniquement les éléments qui vont
correspondre au motif. - On contrôle l'ordre maintenant !...
74Exemple
... ltxsltemplate match"membre"gt
ltxslapply-templates select"nom"/gt
ltxslapply-templates select"prenom"/gt
ltxslapply-templates select"tel"/gt
ltxslapply-templates select"departement"/gt
ltxslapply-templates select"adresse"/gt lt/xsltemp
lategt ...
75Les boucles (for-each)
- Pour chaque élément qui correspond à un motif,
fait l'action - Exemple la liste des membres
ltxslfor-each select"motif"gt
action lt/xslfor-eachgt
76Les boucles exemple
... ltxsltemplate match"annuaire"gt
ltxslapply-templates select"entete"/gt ltTABLE
BORDER"1" WIDTH"100"gt ltxslfor-each
select"membre"gt ltTRgt ltxslapply-templates/gt
lt/TRgt lt/xslfor-eachgt lt/TABLEgt lt/xsltemplat
egt ...
77Le test avec xslif
... ltxsltemplate match"entete"gt lt!-- si pas
de date, écrire 3 ? --gt ltxslif
test"not(dateRevision)"gt ltxsltextgt ???
lt/xsltextgt lt/xslifgt ...
lt/xsltemplategt ...
ltxslif test"position()2"gt...
ltxslif test"_at_id"gt...
78Le tri avec xslsort
- Le tri est effectué en utilisant des éléments
xslsort dans les xslapply-templates ou
xslfor-each - clé primaire, secondaire, etc...
... ltxsltemplate match"annuaire"gt
ltxslapply-templates select"membre"gt
ltxslsort select"nom" order"ascending"/gt
lt/xslapply-templatesgt lt/xsltemplategt ...
79Choix multiple xslchoose
... ltxslchoosegt ltxslwhen test"quelque-chose
"gt action lt/xslwhengt ltxslwhen
test"autre-chose"gt action lt/xslwhengt
... ltxslotherwisegt action
lt/xslotherwisegt lt/xslchoosegt ...
80Les variables
- Mettre/stocker des valeurs ou résultats de select
dans des variables - ltxslvariable name"toto" select"text()"/gt
- référence toto
- ltxslvalue-of select"toto"/gt
- Ecrite une fois ! Lue plusieurs fois !
- on ne peut pas modifier la valeur d'une variable
- Portée d'une variable
- dans l'élément qui contient sa déclaration
81Appel explicite à une règle
- Une règle (un template) peut avoir un nom
- on peut alors l'invoquer explicitement
- des fonctions en quelque sorte...
... ltxsltemplate match"dateRevision"gt
ltxslcall-template name"formatDate"/gt
lt/xsltemplategt ltxsltemplate
name"formatDate"gt lt!-- Code XSL ici pour
formater la date --gt lt/xsltemplategt ...
82Passage de paramètres à une règle
- Déclaration d'un ou plusieurs paramètres
ltxsltemplate name"ecrireNom"gt ltxslparam
name"prenom"/gt ltxslparam name"nom"
select"Dupont"/gt ltfont color"red"gt...lt/fontgt
lt/xsltemplategt
- Passer les paramètres à l'invocation d'une règle
ltxsltemplate match"membre"gt
ltxslcall-template name"ecrireNom"gt
ltxslwith-param name"prenom" select"Prenom"/gt
ltxslwith-param name"nom" select"Nom"/gt
lt/xslcall-templategt lt/xsltemplategt
83 Format de sortie
- ltxsloutputgt
- Indiquer à XSL ce qu'il est en train de générer
- HTML ltp/gt en ltpgtlt/pgt
- XML
- texte
- Codage des caractères, fermeture des balises, ...
ltxslstylesheet gt ltxsloutput method"html"
encoding"UTF-8"/gt ltxsltemplate
/gt lt/xslstylesheetgt
84Générer du XML
- lt?xml version"1.0"gt
- ltxslstylesheet version"1.0" xmlnsxsl"http//ww
w.w3.org/1999/XSL/Transform" xmlnsfo"http//www.
w3.org/1999/XSL/Format"gt - ltxsloutput method"xml" encoding"iso-8859-1"/gt
- ltxsltemplate match"..."gt
- ltxslelement name"MonElement"gt
- ltxslattribute name"MonAttribut"gt
- ltxslvalue-of select"A"/gt
- lt/xslattributegt
- ltxslvalue-of select"E"/gt
- lt/xslelementgt
- lt/xsltemplategt
ltMonElement MonAttribut"A"gt E lt/MonElementgt
85Manipulation chaînes de caractères
- Fonctions classiques pour chaînes de caractère
string concat(string, string) string
substring-before(string, string) string
substring-after(string, string) string
substring(string, number, numbre?) number
string-length(string?) string normalize-space(stri
ng?) string translate(string, string, string)
boolean starts-with(string, string) boolean
contains(string, string)
ltxslvalue-of select"substring-after( text() ,
'_')"/gt ltxslwhen test"contains(Name, 'e')"gt...
86Exemples chaînes de caractères
- concat("13","/","09","/","1999")
- substring-before("13/09/1999","/")
- substring-after("13/09/1999","09")
- substring("13/09/1999",7,3)
- substring("13/09/1999",0,3)
- translate("cosmos 1999","csm","CSM")
- starts-with("cosmos 1999", "star")
- starts-with("cosmos 1999", "co")
- contains("cosmos 1999", "kirk")
- contains("cosmos 1999", "os")
"13/09/1999" "13" "/1999" "1999" "13" "CoSMoS
1999" false true false true
87Réutiliser des feuilles de style
- ltxslimportgt
- Idem mais avec des priorités supérieures au reste
des règles de la feuille de style
- ltxslincludegt
- Macro remplace l'élément include avec le
contenu de la feuille de style incorporée - ltxslstylesheet gt
- ltxslinclude href"fds2.xsl"gt
- lt/xslstylesheetgt
A
ordre B gt C gt A