Prise de contact avec XML
Ce module donne des premiers éléments sur l'utilisation d'XML avec DILIB et l'approche ScienceExplor.
Sommaire
Notions générales sur XML
Avec ScienceExplor, l'accent est mis sur l'exploration de corpus et non sur la création de documents XML.
...
La notation Sxml
La plateforme Dilib est très fortement insérée dans le système Unix, initialement conçu pour des applications de génie logiciel dans lesquelles la documentation et la gestion des sources sont une contrainte importante.
Unix contient donc un nombre important de commandes de base, par exemple grep, qui permettent de manipuler des flots de ligne.
La notation Sxml vise à utiliser les commandes Unix pour manipuler des flots de documents XML.
Sauts de lignes et tabulations
le caractère saut de ligne est un séparateur de ligne sous Unix.
Avec Sxml, le saut de ligne devient un séparateur de document. Son usage est interdit au sein d'un document.
Pour des raisons techniques (voir plus loin), l'usage de la tabulation est également proscrit au sein d'un document Sxml.
Exemple
Un document XML :
<place>
<placeName>
<settlement type="city">Gand</settlement>
<region type="province" nuts="2">Province de Flandre-Orientale</region>
</placeName>
</place>
Le même en notation Sxml :
<place><placeName><settlement type="city">Gand</settlement><region type="province" nuts="2">Province de Flandre-Orientale</region></placeName></place>
Les tables et dictionnaires Sxml
Les ensembles de données manipulées dans ScienceExplor sont très souvent des tables où à une clé est associée une valeur.
Le clé est généralement une chaîne de caractères. La valeur est souvent un document Xml.
Un exemple avec les codes postaux de Belgique
L'exemple du paragraphe précédent est tiré d'une table de codes postaux utilisés en Belgique.
Sur le wiki Wicri/Belgique, une page de travail contient un tableau wiki :
En utilisant divers outils, cette table est automatiquement traduite dans une table Sxml.
Pour la visualiser, faire sous unix :
source $HOME/Documents/ScienceExplor/Dilib/init.sh
cat $DILIB/data/Wicri/Belgique/codePostal.fr.tab
On obtient ceci :
2000-2060 <place><placeName><settlement type="city">Anvers</settlement> ...
...
9000 <place><placeName><settlement type="city">Gand</settlement> ...
Exemples de commandes Dilib
La bibliothèque Dilib contient des commandes qui permettent de manipuler ces ensembles d'objets XML.
La commande SxmlIndent
, par exemple, permet d'obtenir une édition plus lisible. Essayez :
cat $DILIB/data/Wicri/Belgique/codePostal.fr.tab | SxmlIndent | more
La commande « SgmlFast -c 1
» permet de supprimer la première colonne de la table. Essayez :
cat $DILIB/data/Wicri/Belgique/codePostal.fr.tab | grep Namur
cat $DILIB/data/Wicri/Belgique/codePostal.fr.tab | grep Namur | SgmlFast -c 1
cat $DILIB/data/Wicri/Belgique/codePostal.fr.tab | grep Namur | SgmlFast -c 1 | SxmlIndent
cat $DILIB/data/Wicri/Belgique/codePostal.fr.tab | SxmlIndent | grep Namur
- Remarques
- Dans Dilib, les commandes commençant par le radical
Sxml
manipulent des documents xml bien formés avec les conventions Sxml (pas de sauts de lignes ni tabulation dans les documents Xml). Leur exécution demandent une analyse (parsing) du document xml, et sont donc relativement longues à exécuter. - Quelques commandes se contentent de repérer des chaînes dans le document, et seront donc plus rapides. Dans Dilib elles sont préfixées par
Sgml
Les chemins de balise illustrés avec l'API de MediaWiki
Le moteur MediaWiki dispose d'une api qui donne accès à de nombreuses extraction de de données.
Un premier exemple avec les statistiques
Sur un wiki, en activant l'onglet « Pages spéciales » puis « statistiques » l'internaute peut visualiser un tableau de statistiques qui donne par exemple le nombre de pages d'un wiki.
Il est possible de désigner cette page par un lien. Par exemple sur ce wiki, on peut cliquer sur « Spécial:Statistiques ».
Il est également possible d'obtenir le contenu de ce tableau sous une forme codée en XML. Ceci est possible avec le module Siteinfo de l'API (voir https://www.mediawiki.org/wiki/API:Siteinfo).
En shell, avec la commande curl
il est possible de récupérer ces valeurs dans une forme codée afin de faire des traitements.
Dans les exemples qui vont suivre, pour alléger l'écriture des commandes, la ligne ci dessous range l'url d'un wiki dans la variable d'environnement $WIKI
WIKI=https://lorexplor.istex.fr/Wicri/Europe/fr
Pour obtenir les statistiques de base en format xml, la ligne ci-dessous lance une action de type « query (recherche) », avec un résultat attendu en dans un format xml, en appelant le module « siteinfo » dans sa partie stistiques.
curl "$WIKI/api.php?action=query&format=xml&meta=siteinfo&siprop=statistics"
On obtient alors :
<?xml version="1.0"?><api batchcomplete=""><query><statistics pages="2283" articles="442" edits="6536" images="2" users="0" activeusers="0" admins="1" jobs="0" /></query></api>
Pour obtenir un résultat plus lisible, on enchaîne avec la commande Dilib SxmlIndent
vue plus haut.
curl "$WIKI/api.php?action=query&format=xml&meta=siteinfo&siprop=statistics" 2>nul \
| SxmlIndent
La notation 2>nul
sert à inhiber l'impression de résultats intermédiaires de la commande curl.
Éditions de titres de pages avec l'API
Le module allpages de l'API permet d'obtenir un résultat correspondant à l'onglet « index alphabétique ».
curl "$WIKI/api.php?action=query&format=xml&list=allpages&apfrom=Luxembourg" 2>nul \
| SxmlIndent
Par exemple, à la date de rédaction de cet article, le résultat de cette commande est le suivant :
<?xml version="1.0"?>
<api batchcomplete="">
<continue apcontinue="Maroc" continue="-||"/>
<query>
<allpages>
<p pageid="1497" ns="0" title="Luxembourg (homonymie)"/>
<p pageid="1498" ns="0" title="Luxembourg (pays)"/>
<p pageid="1499" ns="0" title="Luxembourg (ville)"/>
<p pageid="1500" ns="0" title="Lyon"/>
<p pageid="1501" ns="0" title="Lérida"/>
<p pageid="1502" ns="0" title="MEMBRIDGE"/>
<p pageid="1503" ns="0" title="Macédoine-Centrale"/>
<p pageid="1504" ns="0" title="Madrid"/>
<p pageid="1505" ns="0" title="Malaga"/>
<p pageid="1506" ns="0" title="Margaret A. Boden"/>
</allpages>
</query>
</api>