Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.Les listes de discussions XMLfr sont à votre disposition pour réagir sur nos articles ou simplement poser une question.Si vous ètes passionnée(e) par XML, pourquoi ne pas en faire votre métier ?XMLfr n'est heureusement pas le seul site où l'on parle de XML. Découvrez les autres grâce à XMLfr et à l'ODP.Les partenaires grâce auxquels XMLfr peut se développer.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.
 Manifestations XML francophones et internationales.L'actualité des affaires et stratégies XML.L'actualité des technologies XML.Les nouveautés et l'actualités de notre site.Pointeurs sur l'actualité XML sur d'autres sites, en français comme en anglais.


PYX

Répondez à cet article.

XML tout simplement


vendredi 24 mars 2000

Introduction

PYX est un modèle simple pour l'échange de données XML entre processus. C'est en quelque sorte un SAX du pauvre.

PYX ne prétend pas modéliser toute l'information contenue dans un document XML. Il transmet un sous-ensemble raisonnable de cette information, qui peut être utilisé pour vérifier la qualité du XML, produire des rapports et, sous certaines conditions, recréer un document XML (ou le document d'origine modifié).

PYX permet le traitement de documents par des outils de traitement de texte classique tel que awk, sed ou Perl, et notamment l'écriture de "one-liners" beaucoup plus facilement qu'avec SAX, le DOM ou autre.

Depuis le premier article décrivant PYX des implémentations Python, Perl et Java sont apparues.

Détails techniques

Pour les anciens, PYX s'inspire fortement du format produit par nsgmls, le parser SGML de James Clark. La différence majeure est que les attributs sont affichés après le nom de l'élément.

Un processeur Pyxie lit un document XML et produit en sortie les événements suivants, un par ligne :

  • début d'élément,

  • fin d'élément,

  • attribut,

  • texte,

  • processing instruction,

Le premier caractère de chaque ligne donne le type d'événement:

()A-?
début d'élément
fin d'élément
attribut
texte
processing instruction

Le nom de l'élément suit immédiatement la parenthèse, le texte suit immédiatement le tiret, A est suivi du nom de l'attribut puis d'un espace puis de sa valeur, ? est suivi de la cible, d'un espace puis de la processing instruction. Le texte comprend les espaces non-significatifs inclus dans le balisage (les retours a la ligne sont représentés par "\n").

Il est important de noter certains événements ne sont pas pris en compte, par exemple les commentaires XML, ou les débuts ou fin de section CDATA. Il n'est donc pas garanti de pouvoir recréer le document original a partir du flot PYX. En pratique, pour des documents "simples", par exemple crées automatiquement à partir d'une base de données il est souvent possible de générer le flot PYX, effectuer des transformations simples, et recréer le document en sortie.

Par exemple le document suivant:

<Person>
<?A4TypeSetter PageBreak?>
<Surname>McGrath</Surname>
<Given>Sean</Given>
<e-mail type="internet">sean@digitome.com</e-mail>
</Person>

donne en sortie le flot:

(Person
-\n
?A4TypeSetter PageBreak
-\n
(Surname
-McGrath
)Surname
-\n
(Given
-Sean
)Given
-\n
(e-mail
Atype internet
-sean@digitome.com
)e-mail
-\n
)Person

One-liners

PYX est particulièrement adapté a la création de "one-liners" qui permettent d'extraire efficacement des informations d'un fichier XML.

Quelques exemples, utilisant divers outils de génération d'un flot PYX:

Compter le nombre d'occurrence de l'élément speech dans Hamlet:

xmln hamlet.xml | grep ^(speech$

Compter le nombre de mots (dans le texte uniquement) d'un document:

xmln fig1.xml | grep "^-" | awk "{print substr($0,2)}" 

Enfin comment afficher la liste des éléments utilisés dans un document XML et leur fréquence d'utilisation:

pyx file.xml | perl -n  -e '$nb{$1}++ if( m/\A\((.*)\n/);
END { map { print "$_ used $nb{$_} time(s)\n";} sort keys %nb;}'

Un exemple plus complexe: ex_pyx, utilisant pyxw pour régénérer le document en sortie.

Implémentations

PYX a été implémenté en:

  • Python (la version originale): la librairie Pyxie, ainsi que xmln (utilisant un parser non-validant et xmlv (utilisant un parser validant), outils produisant un flot Pyxie,

  • Perl: le module XML::PYX, contient une librairie PYX et les outils pyx (utilisant un parser non-validant, base sur XML::Parser) et pyxv (utilisant un parser validant, nécessite XML::Parser::Checker), outils produisant un flot Pyxie, ainsi que pyxw qui crée un document XML à partir d'un flot Pyxie,

  • Java: PYXToSAX permet à une application SAX d'utiliser un parser PYX et SAXToPYX permet d'utiliser un parser SAX pour produire un flot PYX.

Liens (en anglais)

Contact m.v.rodriguez@ieee.org

 

Mots clés.



L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.


Les documents publiés sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot  

Conception, réalisation et hébergement
Questions ou commentaires
  redacteurs@xmlfr.org