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

Langage PHP Discussion :

importer des données XML-TEI via PHP dans mySQL


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Août 2014
    Messages : 7
    Points : 6
    Points
    6
    Par défaut importer des données XML-TEI via PHP dans mySQL
    Bonjour,

    Je suis quasi néophyte en PHP, ce qui n'est pas le cas en XML-TEI.
    Je souhaite importer certaines données d'un fichier XML-TEI dans une BD mySQL (existante) en me servant de PHP.

    Je sais que normalement avec phpmyadmin, on peut importer des données XML dans mySQL, mais là, je ne souhaite importer que certaines données qui sont d'une certaine manière liées entre elles.

    La différence entre XML et XML-TEI est que le second est plus précis probablement parce qu'il est destiné principalement à des philologues ou à l'édition numérique. Donc on ajoute des attributs et des éléments supplémentaires. Ainsi au lieu d'avoir par exemple :
    <book></book> pour le XML, on aura <div type="book" lang="en"> ici les éléments </div>
    Dans mon cas précis, je souhaite importer type=book (valeur) + tous les éléments ou autre @type (attributs) et éléments liés à la valeur, qui sont situés par nécessairement à la suite dans le fichier XML-TEI, parce que hiérarchisés dans la page.

    Comme point de départ, j'ai regardé un modèle existant :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" ?>
    <articles>
      <article>
        <nom>tutu</nom>
        <id>0</id>
      </article>
      <article>
        <nom>titi</nom>
        <id>1</id>
      </article>
    </articles>
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $articles_xml = simplexml_load_file('test.xml');
    foreach ($articles_xml ->article as $article) {
        print "Nom de l'article: {$article->nom} <br />\n";
        print "Id de l'article: {$article->id} <hr />\n";
        mysql_query("INSERT INTO articles SET nom='".($article->nom)."' AND id='".($article->id)."'") or die("Erreur MySQL : ".mysql_error());
    } 
    ?>

    Mais les fichiers XML-TEI sont plus détaillés, comme dit précédemment ; ainsi on aura par exemple (en gras ce que je souhaite importer) :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <form type="extractedLexem">
                                                
                                                <w type="headword" subtype="unvocalized">klʾat</w>
                                                <gramGrp>
                                                    <gram type="pos">v.</gram>
                                                    <gram type="sys">G.</gram>
                                                    <gram type="tns">perf.</gram>
                                                </gramGrp>
                                            </form>

    Evidemment, il y a les tables et colonnes qui existent déjà dans ma BD mySQL, avec les mêmes noms que ceux du fichier XML-TEI.
    Attention, je n'ai pas de clé primaire INT comme dans mySQL.

    En revanche, l'importation est possible en fonction de deux conditions :
    1. la première condition est que la valeur @type extractedLexem ne soit pas vide
    2. la seconde l'emplacement dans le corpus de texte : je prends exemple un mot toto dans un journal XY, page 14, colonne 2, ligne 5a (première partie de la ligne). Si je reprends on exemple précédent avec l'exemple du journal, mon extractedLexem toto devra être inséré dans la BD, dans la table tb_extractedLexem, colonne extractedLexem, et les références de l'emplacement dans deux autres tables qui rassemblent les références du journal. Malheureusement pour les emplacements, les attributs XML-TEI ne sont pas les mêmes que les noms des colonnes dans mySQL.

    En vous remerciant par avance de vos éclairages,

    McCallum

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    tu devras coder une routine d'importation correspondant à tes besoins avec tes mimines;
    Pour récupérer les attributs et leur valeur regarde du côté de la doc par ici

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Août 2014
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonsoir,

    Merci de ta réponse rawsrc
    Je ne doute pas un seul instant que je vais devoir coder moi-même. Toutefois, je rappelle que je suis débutante et qu'une documentation doit souvent être accompagnée d'explications, en particulier celle de php.net — enfin cet avis n'engage que moi évidemment . XML-TEI est développée pour et par des philologues et nous avons quelques difficultés pour comprendre les langages de programmation puisque nous ne sommes pas formés pour

    Je pensais effectivement opter pour simpleXMLElement, bien que l'on met mis en garde sur le fait que simpleXML risque de ne plus être adapté dès lors que le poids du fichier XML-TEI va grossir et cela au fur et à mesure.

    Pour poursuivre sur ma demande initiale pour l'importation de données XML vers mySQL, trois petites questions comme point de départ :

    1. Pour l'importation, c'est bien simplexml_load_file (nomdufichier.xml) ?

    2. Question de graaaaande néophyte :
    Pour extraire les données de ma bd mysql et afficher dans un navigateur il existe déjà un script php + xhtml5 sur mon serveur, donc comme mes données ne sont pas pour être affichées mais uniquement importées dans ma bd, est-il nécessaire que j'utilise 'print' ou 'echo' ou alors je peux passer directement à l'insertion avec mysql query ?

    3. L'extraction possible d'une donnée XML est conditionnée par une combinaison de plusieurs données (éléments) existants, d'autres sont facultatives ; j'ai regardé la classe SimpleXMLIterator::valid, mais je ne pense pas que ce soit la bonne.
    Par exemple, pour un livre :
    • doit obligatoirement ces trois éléments exister pour que l'importation se fasse :
      • @title = titre du livre
      • @name = nom de l'auteur
      • @publishe r= nom de la maison d'édition
    • facultatif :
      • @page = nombre de pages
      • @editor = éditeur


    D'avance merci de vos réponses,

    MacCallum

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    1. Pour l'acquisition du XML, 2 choix possibles : soit t'utilises l'artillerie lourde à savoir DOMDocument qui dispose d'une suite de fonctions très complètes, soit t'utilises le petit frère : simplexml qui est un sous-ensemble de DOMDocument (plus léger)

    2. Si ton but n'est que l'importation, alors effectivement, pas besoin de echo, une fois le sql correctement assemblé, tu peux passer à l'insertion en base

    3. C'est au moment du parsage XML et de l'assemblage des sql que tu devras t'assurer de respecter les contraintes métiers.
    Donc à chaque extraction, tu devras déterminer à quel type d'objet elle correspond (book, article...) et vérifier la présence des attributs obligatoires et facultatifs et orienter l'exécution de ton code en conséquence.

Discussions similaires

  1. importé des données XML dans excel
    Par function_Help dans le forum Excel
    Réponses: 1
    Dernier message: 29/02/2012, 21h45
  2. [XHTML 1.0] Importer des données XML dans fichier XHTML
    Par StAfX dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 27/01/2009, 14h09
  3. Réponses: 1
    Dernier message: 06/11/2007, 16h43
  4. importer des données XML dans une base Oracle 9
    Par lanfeustdetroll dans le forum JDBC
    Réponses: 3
    Dernier message: 19/07/2007, 00h09
  5. Importer des données XML
    Par Oberown dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/07/2005, 12h59

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