Exploration d'un document de métadonnées en langage C : Différence entre versions

De Wicri Manuel
imported>Jacques Ducloy
(Fonction SxmlGetFirstChildByTagName)
imported>Jacques Ducloy
(Fonction SxmlLeafText)
 
(11 révisions intermédiaires par le même utilisateur non affichées)
Ligne 2 : Ligne 2 :
 
  |module=Exploration d'un document de métadonnées en langage C
 
  |module=Exploration d'un document de métadonnées en langage C
 
  |précédent=Exploration d'un document XML en langage C
 
  |précédent=Exploration d'un document XML en langage C
  |suivant=
+
  |suivant=Construction de documents XML en langage C
 
}}
 
}}
 
==Exemples avec des serveurs d'exploration PubMed==
 
==Exemples avec des serveurs d'exploration PubMed==
 
Dans ce module nous traiterons des documents issus d'un serveur d'exploration PubMed dans lequel les documents utilisent 2 DTD : PubMed et TEI.
 
Dans ce module nous traiterons des documents issus d'un serveur d'exploration PubMed dans lequel les documents utilisent 2 DTD : PubMed et TEI.
 +
 +
===Sur les serveurs d'exploration===
  
 
Voici un exemple de document :
 
Voici un exemple de document :
Ligne 18 : Ligne 20 :
 
}}
 
}}
  
Une des première rubriques donne un identifiant nommé RBID (Reference Bibliographique IDentifieur), ici :  
+
Une des première rubriques donne un identifiant nommé RBID (Référence Bibliographique IDentifieur), ici :  
  
 
:<big>'''RBID :'''</big> pubmed:22994451  
 
:<big>'''RBID :'''</big> pubmed:22994451  
 +
 +
===Sur une machine de TP===
  
 
Pour récupérer ce document, on peut faire :
 
Pour récupérer ce document, on peut faire :
Ligne 40 : Ligne 44 :
 
#include "SxmlNode.h"
 
#include "SxmlNode.h"
 
SxmlNode *SxmlGetFirstChildByTagName(SxmlNode *node, char *tag);
 
SxmlNode *SxmlGetFirstChildByTagName(SxmlNode *node, char *tag);
 +
</source>
 +
 +
Exemple, pour extraire les métadonnées pubmed d'un flot de données ScienceExplor.
 +
 +
<source lang="c">
 +
#include "SxmlNode.h"
 +
main()
 +
{
 +
  SxmlNode *docu ,*pubmed;
 +
  while(docu=SxmlInputGetDocumentElement())
 +
    {
 +
      if (pubmed=SxmlGetFirstChildByTagName(docu, "pubmed"))
 +
                {SxmlPrint(pubmed);putchar('\n');
 +
    };
 +
}
 +
</source>
 +
 +
===Fonction SxmlGetFirstDescendantByTagName===
 +
Cette fonction permet d'atteindre le premier descendant d'un nœud dont le nom est identique au paramètre.
 +
;Synopsis:
 +
<source lang="c">
 +
#include "SxmlNode.h"
 +
SxmlNode *SxmlGetFirstDescendantByTagName(SxmlNode *node, char *tag);
 +
</source>
 +
 +
Exemple, pour extraire les résumés d'un flot de documents.
 +
 +
<source lang="c">
 +
#include "SxmlNode.h"
 +
main()
 +
{
 +
  SxmlNode *docu ,*abstract;
 +
  while(docu=SxmlInputGetDocumentElement())
 +
    {
 +
      if (abstract=SxmlGetFirstDescendantByTagName(docu, "Abstract"))
 +
                {SxmlPrint(abstract);putchar('\n');
 +
    };
 +
}
 +
</source>
 +
 +
==Accès aux données textuelles==
 +
===Fonction SxmlLeafText===
 +
Cette fonction renvoie le texte d'un élément ayant un fils (et un seul) réduit à une chaîne.
 +
 +
;Synopsis:
 +
<source lang="c">
 +
#include "SxmlNode.h"
 +
char *SxmlLeafText(SxmlNode *element);
 +
</source>
 +
 +
 +
;Exemple :
 +
<source lang="c">
 +
...
 +
SxmlNode *maFeuille;
 +
...
 +
maFeuille=SxmlFromString("<titre>Tintin en Amérique</titre>");
 +
printf ("%s\n", SxmlLeafText(maFeuille));      /* imprime Tintin en  Amérique */
 
</source>
 
</source>

Version actuelle datée du 25 juin 2020 à 08:13

Exemples avec des serveurs d'exploration PubMed

Dans ce module nous traiterons des documents issus d'un serveur d'exploration PubMed dans lequel les documents utilisent 2 DTD : PubMed et TEI.

Sur les serveurs d'exploration

Voici un exemple de document :

Une des première rubriques donne un identifiant nommé RBID (Référence Bibliographique IDentifieur), ici :

RBID : pubmed:22994451

Sur une machine de TP

Pour récupérer ce document, on peut faire :

EXPLOR_AREA=$WICRI_ROOT/Sante/explor/GrippeBelgique.storage/GrippeBelgiqueV2

HfdIndexSelect -h $EXPLOR_AREA/Data/Main/Exploration/RBID.i  \
                -Sk "pubmed:22994451" \
         | HfdSelect -Kh $EXPLOR_AREA/Data/Main/Exploration/biblio.hfd \
         | SxmlIndent

Accès à un noeud par son nom de balise

Fonction SxmlGetFirstChildByTagName

Synopsis
#include "SxmlNode.h"
SxmlNode *SxmlGetFirstChildByTagName(SxmlNode *node, char *tag);

Exemple, pour extraire les métadonnées pubmed d'un flot de données ScienceExplor.

#include "SxmlNode.h"
main()
{
  SxmlNode *docu ,*pubmed;
  while(docu=SxmlInputGetDocumentElement())
    {
       if (pubmed=SxmlGetFirstChildByTagName(docu, "pubmed"))
                 {SxmlPrint(pubmed);putchar('\n');
    };
}

Fonction SxmlGetFirstDescendantByTagName

Cette fonction permet d'atteindre le premier descendant d'un nœud dont le nom est identique au paramètre.

Synopsis
#include "SxmlNode.h"
SxmlNode *SxmlGetFirstDescendantByTagName(SxmlNode *node, char *tag);

Exemple, pour extraire les résumés d'un flot de documents.

#include "SxmlNode.h"
main()
{
  SxmlNode *docu ,*abstract;
  while(docu=SxmlInputGetDocumentElement())
    {
       if (abstract=SxmlGetFirstDescendantByTagName(docu, "Abstract"))
                 {SxmlPrint(abstract);putchar('\n');
    };
}

Accès aux données textuelles

Fonction SxmlLeafText

Cette fonction renvoie le texte d'un élément ayant un fils (et un seul) réduit à une chaîne.

Synopsis
#include "SxmlNode.h"
char *SxmlLeafText(SxmlNode *element);


Exemple 
 ...
SxmlNode *maFeuille;
 ...
maFeuille=SxmlFromString("<titre>Tintin en Amérique</titre>");
printf ("%s\n", SxmlLeafText(maFeuille));      /* imprime Tintin en  Amérique */