Code & Systèmes Libres
SML

Introduction

Tout a commencé avec un programme d'importation de fichiers plats. J'ai décidé de décrire dans un arbre XML les divers paramètres d'importation :

  • La base de données
    • host
    • user
    • database
    • ...
  • Les tables
    • fichier d'import
    • Champs, typés, etc...

Après avoir commencé à taper ce fichier de description... je me suis rendu compte à quel point XML n'est pas adapté à la saisie. Avec un éditeur de texte, ou avec un éditeur graphique dédié.

Solution

J'arrête donc, et après quelques recherches sur Google, je trouve des docs sur YAML, SOX, SXML...

Et je retiens SOX.

  • YAML est excellent, mais trop compliqué à saisir dans la plupart des cas
  • SXML est trop lié à Scheme

Je reprends SOX et je l'allège encore un peu (!). SML est né, et le parser SML en Python suit.

Et voici un document source :

>encoding iso-8859-1
>output XML
import
       dbinfo
               host dagon
               user user
               password nope
               database databasename
       tables
               table
                       desc
                               file:type=tab Articles
                               tablename article
                       champ:type=S;pk=1 Code
                       =:type=S Designation
                       =:type=S Famille
                       =:type=S Categorie
                       =:type=S Marque
                       =:type=S PCB
                       =:type=S CodeFournisseur
                       =:type=I StockReel
                       =:type=S SSCategorie

Et le résultat, après l'avoir passé dans le parser SML et mis en forme avec xmllint:

<?xml version="1.0" encoding="iso-8859-1"?>
<import>
 <dbinfo>
  <type>pgsql</type>
  <host>dagon</host>
  <user>user</user>
  <password>nope</password>
  <dbname>databasename</dbname>
 </dbinfo>
 <tables>
  <table>
   <desc>
    <file type="tab">Articles</file>
    <tablename>article</tablename>
   </desc>
   <champ pk="1" type="S">Code</champ>
   <champ type="S">Designation</champ>
   <champ type="S">Famille</champ>
   <champ type="S">Categorie</champ>
   <champ type="S">Marque</champ>
   <champ type="S">PCB</champ>
   <champ type="S">CodeFournisseur</champ>
   <champ type="I">StockReel</champ>
   <champ type="S">SSCategorie</champ>
  </table>
 </tables>
</import>

Résultat, une saisie très simplifiée. Moins d'erreurs de typo, de fermeture de balises, d'imbrications...

Certes, on ne peut pas saisir de valeur multiligne, ni de CDATA... mais je couvre 99% des documents XML que je dois produire, très simplement.

Download

Pour le moment WikiPlace ne gère pas le téléchargement de fichiers... Contactez-moi pour avoir le source SML.py

Valid HTML 4.01!Valid CSS!