IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

ocaml et XML


Sujet :

Caml

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    Par défaut ocaml et XML
    Salut,

    je programme en ocaml; et je veux stocker les types de donées que j'ai créer sous le format XML.
    Comment je dois procéder? est ce qu'il y a une bibliothèque spécifique en ocaml permettant ceci?
    et comment puis-je extraires mes données par la suite à partir de ces fichiers?


  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681

  3. #3
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 991
    Points
    2 991
    Par défaut
    Pour sérialiser en OCaml il y a deux méthodes à privilégier avant d'utiliser un format poubelle comme le xml :
    • si l'exécutable est peu susceptible d'évoluer ou que les données sont jetables d'une version à l'autre: module Marshal, c'est de loin la solution la plus facile, intégrée en standard dans la stdlib
    • si le format doit être indépendant de l'exécutable: sexplib

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    merci bien pour la proposition;
    j'ai utilisé le module Marshal et ça m'a facilité la tâche énormément.
    SAUF que, en plus des types de données standards j'ai besoin de sauvegarder des types objets (par exemple des widgets de mon interface graphique que j'implémente avec lablgtk2).
    Est ce que vous avez une idées comment puis je le faire?

  5. #5
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 991
    Points
    2 991
    Par défaut
    Marshaller des objets ocaml c'est tout à fait possible, par contre marshaller des objets LablGtk ça n'a probablement aucun sens :
    1. Gtk est écrit en C et ne contient aucun mécanisme de marshalling à ma connaissance
    2. la gestion interne de la mémoire des objets LablGtk2 est spécifique et différente de celle des objets ocaml ordinaires
    3. les mécanismes et services propres à ocaml ne s'étendent pas au delà des frontières du code écrit en ocaml


    Eventuellement tu peux charger un fichier glade à l'aide de libglade cependant on en revient au point n°1: je ne connais aucune méthode de sauvegarde d'une interface Gtk en un fichier glade.

  6. #6
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour !

    Citation Envoyé par amiroushka
    j'ai besoin de sauvegarder des types objets (par exemple des widgets de mon interface graphique que j'implémente avec lablgtk2)
    Tout ce qui a été dit précédemment est fort juste. Quelles sont les raisons qui font que tu as besoin de sauvegarder des objets LablGTK ? En général les applications ont une interface en dur qui évolue au gré des versions, mais sur laquelle l'utilisateur n'a qu'une faible marge de manœuvre. Il n'y a donc a priori aucune raison de vouloir la sauvegarder.

    À la rigueur je comprends que l'on veuille charger dynamiquement l'interface au démarrage de l'application. C'est ce que je fais dans mon logiciel OCamlTeX grâce à un fichier dont la syntaxe est dérivée des S-expressions. C'était une réelle volonté d'implémentation dès l'origine, mais c'est contraignant : il faut parser le fichier et créer les widgets à chaque lancement. Sans compter que la gestion des callback n'est plus tout à fait triviale.

    Ce que je comprends moins, c'est la volonté de sauvegarder l'interface. Il faudrait pour cela une fonction capable de parcourir tous les éléments, leurs enfants, etc., et qui serait en mesure de restituer la hiérarchie dans un fichier. C'est pas impossible à faire, mais c'est long, probablement chiant et inefficace. Sans compter que si tu as un fichier qui contient la description de l'interface avant le lancement, ce même fichier contient la sauvegarde de l'interface, d'une certaine façon !

    Cordialement,
    Cacophrène

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    en fait, je développe un assistant de preuve. donc mon interface affiche l'arbre d'inférence qui est représentée à l'aide des boutons, des labels, etc...
    mon logiciel doit être capable de sauvegarder l'arbre de preuve pour pouvoir restituer et compléter la preuve ultérieurement.
    Ce que j'ai compris que c'est impossible de sauvegarder cet arbre comme il est, il faut le traduire en structure de données et le redessiner encore une fois après

  8. #8
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 991
    Points
    2 991
    Par défaut
    Ce que j'ai compris que c'est impossible de sauvegarder cet arbre comme il est, il faut le traduire en structure de données et le redessiner encore une fois après
    Exactement, c'est l'arbre qui est traduisible en une interface et non l'inverse.
    La partie portable (la logique qui est indépendante de Gtk) de ton application ne doit manipuler et marshaller que le Modèle et c'est la partie dépendante de Gtk qui est capable de reconstituer la Vue (voir approche MVC) sur un certain Modèle.

    Remarque: cette façon de faire n'est liée ni à OCaml ni à Gtk, ça serait la même avec un autre langage ou un autre toolkit.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    oui oui j'en suis tout a fait consciente.
    mais j'ai cherché la facilité en essayant de bruler les étapes.
    ça a marché au début; mais là il faut que j'y retourne pour faire les choses proprement

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    J'ai enfin fait une structure de données permettant de stocker mon arbre.
    Mais au moment de la déserialisation, y a des cas où ça marche parfaitement, mais au delà d'un certain niveau (qd mon arbre dépasse une profondeur 3) l'exception suivante est relevée : Invalid_argument("Marshal.from_size").
    Est ce que c'est dû au fait que ma structure de données est volumineuse?
    et comment puis je corriger ça? car j'ai besoin de stocker des arbres beaucoup plus grand.

  11. #11
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Cyclicité des données ? Si je crois me souvenir bien, c'est un des cas, avec la linéarisation de fonctions, où ça ne marche pas.

Discussions similaires

  1. [Débutant] C/OCaml XML + graphe
    Par Yyukk dans le forum Caml
    Réponses: 8
    Dernier message: 16/04/2011, 22h23
  2. Balises HTML dans un fichier XML
    Par Bastet79 dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 04/09/2002, 16h29
  3. delphi XML / HTML caractéres speciaux !
    Par adem dans le forum EDI
    Réponses: 2
    Dernier message: 29/08/2002, 18h48
  4. Débutant XML
    Par viny dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 25/07/2002, 13h07
  5. Pas de casse dans les XML
    Par :GREG: dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/07/2002, 14h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo