Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
scrutaridata:impl:spip [2009/06/02 15:39] vincent |
scrutaridata:impl:spip [2016/07/06 18:33] vincent [Exemple d'un squelette Spip d'exportation au format ScrutariData] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== ScrutariData et Spip ====== | ====== ScrutariData et Spip ====== | ||
- | Dans le cadre de la Coredem, deux sites sous Spip exportent leurs méta-données au format ScrutariData : [[http://www.rinoceros.org|Rinoceros]] et le [[http://www.world-governance.org|forum pour une nouvelle gouvernance mondiale]]. Les squelettes de Spip peuvent effectivement être utilisés pour créer du code XML plutôt que du HTML (les flux RSS créés par Spip sont aussi gérés par des boucles). | + | Dans le cadre de la Coredem, plusieurs sous Spip exportent leurs méta-données au format ScrutariData : par exemple, [[http://www.rinoceros.org|Rinoceros]] et le [[http://www.world-governance.org|forum pour une nouvelle gouvernance mondiale]]. Les squelettes de Spip peuvent effectivement être utilisés pour créer du code XML plutôt que du HTML (les flux RSS créés par Spip sont aussi gérés par des boucles). |
- | Le seul problème rencontré pour le moment est l'impossibilité de transmettre les libellés multilingues des mots-clés (cas du site du Forum pour une nouvelle gouvernance mondiale). | + | L'exemple ci-dessous est du site [[http://eau.d-p-h.info/|Ressources pour une gestion durable de l'eau]] et a été réalisé par Thierry Eraud. Ces boucles doivent être adaptées à chaque site. |
- | **Avis aux spipeurs : insérer ici un exemple de boucle** | + | En effet, il est rare d'inclure tous les articles d'un site Spip dans l'export au format Scrutari (par exemple, on n'exporte pas la page Contacts) : seules les articles correspondant à des ressources sont à exporter. La façon dont ces articles sont distingués des autres articles dépend de l'organisation du site. Cela peut-être par un mot-clé ou une rubrique. Dans le site donné en exemple, c'est la rubrique avec l'identifiant 1 qui sert à regrouper tous les articles correspondant à une ressource. |
+ | |||
+ | Pour les mots-clés, le problème est le même : tous les mots-clés utilisés par un site Spip ne sont pas pertinents (on peut par exemple utiliser des mots-clés dans un but technique de sélection de telle ou telle page). Dans ce cas-là, la solution est de répartir les mots-clés dans des groupes et de ne garder que les groupes concernés. Dans le cas de l'exemple, tous les mots-clés sont exportés sauf ceux du groupe « reserve ». | ||
+ | |||
+ | ===== Exemple d'un squelette Spip d'exportation au format ScrutariData ===== | ||
+ | |||
+ | Ce squelette Spip est enregistré dans le dossier squelettes/ et sera appelé comme n'importe quel autre squelette. Par exemple, s'il est enregistré sous le nom ''scrutari.html'', il sera appelé via ''spip.php?page=scrutari''. | ||
+ | |||
+ | <code xml> | ||
+ | [(#HTTP_HEADER{Content-type: text/xml; charset=UTF-8})]<?xml version="1.0" encoding="UTF-8"?> | ||
+ | <base> | ||
+ | <base-metadata> | ||
+ | [(#REM) | ||
+ | authority permet d'identifier le producteur de la base, il peut s'agir d'un nom de domaine ou, comme ici, d'identifiant universel | ||
+ | base-name est le nom technique de la base (en minuscules sans accent ni espace) | ||
+ | ] | ||
+ | <authority>15f2bd12-f4d0-8314-0800200c9a66</authority> | ||
+ | <base-name>ressouces_eau</base-name> | ||
+ | |||
+ | [(#REM) | ||
+ | Les sites ressources sont multilingues, mais il n'y a pas de secteurs propres a chaques langues. | ||
+ | Les articles de la rubrique ressources peuvent etre dans n'importe quelle langue. | ||
+ | On definit dans un premier temps un tableau des langues utilisees dans la rubrique ressources. | ||
+ | ] | ||
+ | #SET{tab_lang, #ARRAY{''}} | ||
+ | [(#SET{tab_lang, [(#GET{tab_lang}|push{#LANG})]})] | ||
+ | <BOUCLE_langues(ARTICLES){id_rubrique=1}{lang != #LANG}> | ||
+ | [(#SET{tab_lang, [(#GET{tab_lang}|push{#LANG})]})] | ||
+ | </BOUCLE_langues> | ||
+ | [(#SET{tab_lang,[(#GET{tab_lang}|array_unique)]})] | ||
+ | |||
+ | [(#REM) | ||
+ | Definition des intitules courts et des intitules longs dans les differentes langues. | ||
+ | Le titre ainsi que le descriptif du site peuvent etre renseignes dans les differents langues | ||
+ | grace aux balises multi | ||
+ | ] | ||
+ | <intitule-short> | ||
+ | <BOUCLE_intitule_short(ARTICLES){id_rubrique=1}{lang IN #GET{tab_lang}}> | ||
+ | [(#LANG|unique{short}|?{' ',''}) | ||
+ | [<lib xml:lang='#LANG'>(#NOM_SITE_SPIP|texte_backend)</lib>] | ||
+ | ] | ||
+ | </BOUCLE_intitule_short> | ||
+ | </intitule-short> | ||
+ | <intitule-long> | ||
+ | <BOUCLE_intitule_long(ARTICLES){id_rubrique=1}{lang IN #GET{tab_lang}}> | ||
+ | [(#LANG|unique{court}|?{' ',''}) | ||
+ | [<lib xml:lang='#LANG'>(#DESCRIPTIF_SITE_SPIP|supprimer_tags|texte_backend)</lib>] | ||
+ | ] | ||
+ | </BOUCLE_intitule_long> | ||
+ | </intitule-long> | ||
+ | <lang-ui> | ||
+ | <BOUCLE_lang_ui(ARTICLES){id_rubrique=1}{lang IN #GET{tab_lang}}> | ||
+ | [<lang>(#LANG|unique{langue_ui})</lang>] | ||
+ | </BOUCLE_lang_ui> | ||
+ | </lang-ui> | ||
+ | [<base-icon>#URL_SITE_SPIP/(#ENV*{favicon} | ||
+ | |sinon{#CHEMIN{favicon.ico}} | ||
+ | |sinon{#LOGO_SITE_SPIP} | ||
+ | |image_passe_partout{16,16} | ||
+ | |image_recadre{16,16,center} | ||
+ | |image_format{ico}|extraire_attribut{src}) | ||
+ | </base-icon>] | ||
+ | </base-metadata> | ||
+ | |||
+ | [(#REM) | ||
+ | Dans le cas des sites ressources, les articles devant etre indexes par Scrutari sont uniquement | ||
+ | dans la rubrique ressources. Ici la rubrique ressources est la rubrique 1 | ||
+ | ] | ||
+ | <BOUCLE_ressources(RUBRIQUES){id_rubrique=1}> | ||
+ | <corpus corpus-name="ressources"> | ||
+ | <corpus-metadata> | ||
+ | <intitule-corpus> | ||
+ | <lib xml:lang='fr'>Ressources</lib> | ||
+ | </intitule-corpus> | ||
+ | <intitule-fiche> | ||
+ | <lib xml:lang='fr'>Ressource</lib> | ||
+ | </intitule-fiche> | ||
+ | </corpus-metadata> | ||
+ | [(#REM) | ||
+ | On recupere tous les articles de la rubrique et sous-rubriques | ||
+ | ] | ||
+ | <BOUCLE_fiches(ARTICLES){branche}> | ||
+ | <fiche fiche-id="#ID_ARTICLE"> | ||
+ | <titre>[(#TITRE|supprimer_numero|texte_backend)]</titre> | ||
+ | [<soustitre>(#SOUSTITRE|texte_backend)</soustitre>] | ||
+ | <date>[(#DATE|affdate{'Y-m-d'})]</date> | ||
+ | <lang>#LANG</lang> | ||
+ | <href>#URL_SITE_SPIP/#URL_ARTICLE</href> | ||
+ | </fiche> | ||
+ | </BOUCLE_fiches> | ||
+ | </corpus> | ||
+ | |||
+ | [(#REM) | ||
+ | On parcourt tous les mots cles sauf ceux des groupes de mot reserve utilises | ||
+ | a autre chose | ||
+ | ] | ||
+ | <BOUCLE_groupe_mots(GROUPES_MOTS){titre != reserve}> | ||
+ | <thesaurus thesaurus-name="groupe_[(#ID_GROUPE)]"> | ||
+ | <thesaurus-metadata> | ||
+ | <intitule-thesaurus> | ||
+ | <BOUCLE_titre_groupe(ARTICLES){id_rubrique=1}{lang IN #GET{tab_lang}}> | ||
+ | [(#LANG|unique{titre_groupe#_groupe_mots:ID_GROUPE}|?{' ',''}) | ||
+ | [<lib xml:lang='#LANG'>(#_groupe_mots:TITRE|texte_backend)</lib>] | ||
+ | ] | ||
+ | </BOUCLE_titre_groupe> | ||
+ | </intitule-thesaurus> | ||
+ | </thesaurus-metadata> | ||
+ | <BOUCLE_mots_cles(MOTS){id_groupe}> | ||
+ | <motcle motcle-id="#ID_MOT"> | ||
+ | <BOUCLE_titre_mot(ARTICLES){id_rubrique=1}{lang IN #GET{tab_lang}}> | ||
+ | [(#LANG|unique{titre_mot#_mots_cles:ID_MOT}|?{' ',''}) | ||
+ | [<lib xml:lang='#LANG'>(#_mots_cles:TITRE|texte_backend)</lib>] | ||
+ | ] | ||
+ | </BOUCLE_titre_mot> | ||
+ | </motcle> | ||
+ | </BOUCLE_mots_cles> | ||
+ | </thesaurus> | ||
+ | </BOUCLE_groupe_mots> | ||
+ | |||
+ | [(#REM) | ||
+ | On fait le lien entre les articles et les mots cles | ||
+ | ] | ||
+ | |||
+ | <BOUCLE_themes_indexation(GROUPES_MOTS){titre != reserve}> | ||
+ | <indexation-group corpus-path="ressources" thesaurus-path="groupe_[(#ID_GROUPE)]"> | ||
+ | <BOUCLE_sous_themes_indexation(MOTS){id_groupe}> | ||
+ | <BOUCLE_articles_lies_sous_themes(ARTICLES){id_mot}{branche}><indexation fiche-id='#ID_ARTICLE' motcle-id='#ID_MOT'/></BOUCLE_articles_lies_sous_themes> | ||
+ | </BOUCLE_sous_themes_indexation> | ||
+ | </indexation-group> | ||
+ | </BOUCLE_themes_indexation> | ||
+ | |||
+ | </BOUCLE_ressources> | ||
+ | </base> | ||
+ | |||
+ | </code> | ||
+ | |||
+ | ===== Exemple de fichier d'information ===== | ||
+ | |||
+ | Comme il est indiqué à la page sur les [[serveurscrutari:config:scrutariinfo|fichiers d'information]], le serveur Scrutari ne charge pas directement le fichier au format ScrutariData. Il passe par un intermédiaire qui est un fichier de très petite taille qui indique si une mise à jour à eu lieu depuis le dernier passage du robot du serveur Scrutari. | ||
+ | |||
+ | L'exemple suivant, toujours tiré du même site, est un squelette très simple permettant de générer le fichier d'information. | ||
+ | |||
+ | <code xml> | ||
+ | [(#HTTP_HEADER{Content-type: text/xml; charset=UTF-8})]<?xml version="1.0" encoding="UTF-8"?> | ||
+ | <header> | ||
+ | [(#REM) | ||
+ | Seuls les articles de la rubrique ressources sont pris en compte. | ||
+ | On recupere la date du dernier article de la rubrique. | ||
+ | ] | ||
+ | <BOUCLE_date(RUBRIQUES){id_rubrique=1}> | ||
+ | <date>[(#DATE|affdate{'Y-m-d'})]</date> | ||
+ | </BOUCLE_date> | ||
+ | <path>spip.php?page=scrutari</path> | ||
+ | </header> | ||
+ | </code> | ||