Satimage Précédent
Présentation du format XNF
Accueil Documentation Smile Calcul numérique Importation/exportation de données Le format de données XNF Présentation du format XNF  
Introduction

XNF est l'abréviation de Extensible Numerical File Format (format extensible de fichiers de données). Il s'agit de la description d'un format de fichiers publique et extensible concernant le stockage de données numériques.

Un fichier XNF consiste en un ou plusieurs fichiers de données brutes, éventuellement de formats différents, et de métadonnées décrivant le contenu de ces fichiers de données, stockées dans un fichier XML.

Sur Mac, un fichier XNF est un bundle, un dossier d'un genre spécial qui ressemble à un fichier (appelé "package" dans Finder). Si vous double-cliquez sur un fichier XNF, il ouvrira une interface utilisateur dans Smile vous permettant d'explorer, d'extraire et de visualiser les données qu'il contient. Sur d'autres plateformes, un fichier XNF aura l'apparence d'un dossier habituel contenant des fichiers de données et le fichier XML de métadonnées.

SmileLab 3.2 fournit un ensemble de commandes permettant de lire et d'écrire de telles structures dans des fichiers XNF.

Objectifs

Il existe déjà des formats de fichiers permettant de stocker un nombre quelconque d'ensembles de données, et qui stockent également des métadonnées contenant les instructions pour récupérer les données, des informations sur les axes à afficher, etc.

Malheureusement, ces métadonnées sont généralement enregistrées dans un format qui requiert une librairie spécifique pour les relire. Un scientifique non familier avec de type de format, et ne possédant pas de logiciel spécifique permettant d'exploiter ce format n'aura aucun moyen d'extraire les métadonnées, et encore moins les données d'un tel fichier. Par exemple, il est impossible d'envisager de travailler avec des fichiers HDF ou FITS sans utiliser des bibliothèques de fonctions adaptées à ces formats.

D'où l'idée d'enregistrer les métadonnées dans un XML séparé. Il existe déjà des formats de fichiers de données possédant un index en XML. Cependant, nous n'avons pas jusqu'ici pu identifier un tel format qui serait suffisament simple et générique pour être utilisable par la communauté scientifique. Les formats existants mettent en oeuvre un XML complexe, souvent spécifique à un champ professionnel ou à une application, et qui nécessite finalement des bibliothèques spécifiques tout comme les autres formats.

XNF a été conçu à partir des exigences suivantes :

  • XNF doit accepter des formats de fichiers générés habituellement par des programmes scientifiques (fichiers binaires générés en FORTRAN ou en C),
  • générer les métadonnées doit être relativement facile, même sans lolgiciel spécifique, et sans bibliothèque XML,
  • les métadonnées doivent être raisonnablement compréhensibles pour un utilisateur non équipé d'un logiciel spécifique.

Anatomie d'un fichier XNF

e bundle (ou, sur d'autres plateformes, le dossier) contient deux éléments au niveau le plus bas : un dossier nommé Contents, dans lequel sont stockés les fichiers de données, et le fichier XML index.xml, qui décrit le contenu des fichiers de données. Les méta-données du fichier XML peuvent être parsées et utilisées par un logiciel spécifique pour fournir l'interface voulue aux données numériques correspondantes.

La syntaxe des fichiers index.xml est définie dans la DTD du format XNF. Cette DTD est relativement simple, en voici un résumé de ses spécifications.

La racine d'un document XNF est tableofcontents. Cette racine peut contenir un nombre quelconque de dataset.

L'élément dataset

Un élément dataset possède un attribut xml:id unique permettant d'y accéder et un attribut dimension indiquant le nombre de dimensions du dataset.

<dataset xml:id='pressure' dimension="3">...</dataset>

Un élément dataset doit ensuite contenir autant d'éléments axis que son nombre de dimensions puis un nombre quelconque d'éléments data. Les éléments axis fournissent la longueur des données pour chaque dimension, les éléments data fournissent les références aux données.

L'élément data

En général, l'élément data constitue une référence à des données contenues dans un fichier binaire. Le fichier binaire est spécifié par l'attribut href.

  • L'attribut href doit contenir une url absolue ou relative à la base (xml:base) du dataset. Par défaut, cette base est "Contents/".
  • L'attribut offset donne en bytes la position du début des données dans le fichier.
  • L'attribut type renseigne le format des données à extraire. Cet attribut doit prendre l'une des valeurs suivantes : real32 | real64| uint8 | uint16 | uint32 | sint8 | sint16 | sint32 | complex64 | complex32.
  • L'attribut byte_order (big ou little) doit indiquer si les données sont en little endian (Intel) ou big endian (PPC).

<data href="file1" offset="64" type="real32" byte_order="little"/>

Alternativement, l'élément data peut contenir explicitement les données sous forme de contenu texte : des nombres écrits en ASCII, séparés par des espaces, par exemple <data>1.04 0.93103 etc. </data>.

L'élément axis

L'élément axis doit contenir un attribut size donnant le nombre de valeurs sur cet axe. On peut définir optionnellement les échelles de différentes façons:

  • en définissant une échelle linéaire avec les attributs start (première valeur) et step (incrément d'une valeur à la suivante),
    <axis size='100' start='0' step='0.1'/>
  • en incluant un élément data,
  • en spécifiant avec l'attribut idref l'identifiant d'un dataset de dimension 1.

Utiliser XNF dans SmileLab

SmileLab 3.2 ouvre les fichiers XNF. Lorsque vous double-cliquez un fichier XNF et que SmileLab est installé, ou si vous glissez un fichier XNF sur l'icône de Smile, une interface utilisateur permettant de visualiser les données s'ouvrira dans Smile. Vous pouvez alors naviguer dans les données, obtenir les informations de tous les éléments du fichier XNF, et visualiser les données (l'interface s'adapte au type de données sélectionnées par l'utilisateur).

SmileLab fournit des commandes pour manipuler avec AppleScript des fichiers XNF. Grâce à ces commandes vous n'avez pas besoin de connaître précisément le format des fichiers qui stockent vos données. Ces commandes permettant de lire et d'écrire du XNF sont définies dans la suite XNF du Dictionnaire de XMLLib.osax.

Pour automatiser le traitement de données, vous pouvez avoir besoin d'effectuer une recherche dans les méta-données. Pour cela, vous aurez besoin d'un logiciel pouvant traiter des données XML. Smile possède des commandes XML, qui sont une implémentation en AppleScript de libxml2, un parseur et un ensemble d'utilitaires XML développés en C dans le cadre du projet Gnome. Le plus souvent, vous aurez à utiliser XPath, qui est implémenté via la commande XMLXPath.

Gestion du format XNF depuis du code C/C++

La structure du format XNF est simple. Il est facile de créer une nouvelle entrée manuellement, ou de comprendre les méta-données en les relisant : il s'agit là du moyen d'utilisation le plus basique.

Dans le cadre d'une utilisation dans un programme, vous pouvez implémenter sur n'importe quelle plateforme une interface au XNF comme le fait SmileLab sur MacOSX, en utilisant une librairie XML et en appelant des routines basiques de lecture/écriture de données binaires. Une bibliothèque en C, basée sur libxml2, implémente les principales fonctions requises pour manipuler des fichiers XNF. Cette bibliothèque est disponible dans la section téléchargement.

Conseils pour fabriquer le fichier index.xml
  • Si vous souhaitez pouvoir vérifier la conformité à la DTD de XNF, vous devez déclarer la DTD dans l'en-tête du fichier :

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE tableofcontents SYSTEM "http://www.satimage.fr/software/dtds/XNFv2.dtd">
  • Si vous éditez index.xml dans Smile, appuyez sur ^⌘R pour vérifier la syntaxe XML, et sur ⌥⌘R pour valider le fichier relativement à sa DTD. Vous pouvez également utiliser les informations de la DTD de XNF 2.0 pour remplir le fichier index.xml.

  • Le dossier de Smile contient quelques exemples de fichiers .xnf : utilisez ces exemples comme point de départ. Cliquez ici pour voir un autre exemple de fichier index.xml.

English version
Copyright ©2013 Paris, Satimage