Exploration d'un document de métadonnées en langage C

De Wicri Manuel
Révision datée du 23 juin 2020 à 14:28 par imported>Jacques Ducloy (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.

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=SxmlInputNextDocumentElement())
    {
       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=SxmlInputNextDocumentElement())
    {
       if (abstract=SxmlGetFirstDescendantByTagName(docu, "Abstract"))
                 {SxmlPrint(abstract);putchar('\n');
    };
}

Accès aux données textuelles

Fonction SxmlLeafText

Points particuliers à Dilib

Le type Buffer

Un type Buffer a été introduit pour gérer les chaînes de longueur variables qui sont difficiles à gérer en langage C.

Accès à la clé d'un document dans un flot de données