[{"cw_etype": "BlogEntry", "eid": 27573060, "title": "Hackathon \"Des archives aux donn\u00e9es\" 2023", "content": "1500 mots: ~7min\r\n\r\n\r\n\r\nDu 1er au 3 juin 2023 a eu lieu le colloque \"Des archives aux donn\u00e9es\" au cours duquel deux jours de hackathon ont permis de s'interroger sur l'interop\u00e9rabilit\u00e9 des donn\u00e9es entre diff\u00e9rentes institutions culturelles.\r\n\r\nLes donn\u00e9es pr\u00e9sent\u00e9es concernaient les repr\u00e9sentations th\u00e9\u00e2trales de la Com\u00e9die Fran\u00e7aise ([Base RCF](https://www.cfregisters.org/)), de la Com\u00e9die Italienne, du th\u00e9\u00e2tre d'Amsterdam ([Base On Stage](https://lod.uba.uva.nl/CREATE/ONSTAGE/))  et du th\u00e9\u00e2tre fran\u00e7ais des XVIIe et XVIIIe si\u00e8cles ([Base CESAR](https://cesar.huma-num.fr/cesar2/)).\r\n\r\nCe fut l'occasion d'\u00e9prouver dans un contexte concret les avantages des technologies du Web S\u00e9mantique. Les requ\u00eates f\u00e9d\u00e9r\u00e9es ont en effet permis d'assembler et de manipuler des donn\u00e9es publi\u00e9es sans concertation pr\u00e9alable par les diff\u00e9rents participants.\r\n\r\n## Temp\u00eate de cerveaux sur les besoins en interop\u00e9rabilit\u00e9\r\n\r\nLors de la premi\u00e8re journ\u00e9e nous avons commenc\u00e9 par faire \u00e9merger des id\u00e9es de traitements qui n\u00e9cessitent une interop\u00e9rabilit\u00e9 des donn\u00e9es. Cette session a \u00e9t\u00e9 tr\u00e8s riche et il nous a fallu quelques efforts pour r\u00e9sum\u00e9r les diverses id\u00e9es et choisir vers quoi nous diriger.\r\n\r\nNos sources de donn\u00e9es divergent principalement sur le p\u00e9rim\u00e8tre \u00e9tudi\u00e9: les registres de la Com\u00e9die Fran\u00e7aise concernent une unique troupe, la base \"ON_Stage\" se focalise sur le th\u00e9\u00e2tre d'Amsterdam et la base CESAR se limite \u00e0 une p\u00e9riode de temps.\r\n\r\nLa date des repr\u00e9sentation th\u00e9\u00e2trales a \u00e9t\u00e9 clairement identifi\u00e9e comme centrale puisqu'elle permet de les aligner de mani\u00e8re non ambig\u00fce. Chaque source de donn\u00e9es d\u00e9crit diff\u00e9remment les repr\u00e9sentations, mais toutes ont renseign\u00e9 la date.\r\n\r\nLes lieux des repr\u00e9sentations constituent un autre point de contact, pour autant que les p\u00e9riodes temporelles soient les m\u00eames.\r\n\r\nPartant de ces deux constats, nous nous sommes demand\u00e9 s'il serait possible d'afficher un graphique qui rendrait compte de l'\u00e9volution g\u00e9ographique d'une pi\u00e8ce dans une p\u00e9riode de temps donn\u00e9e.\r\n\r\n## Maquette d'une potentielle application\r\n\r\nDans la maquette ci-dessous, nous pouvons observer l'\u00e9volution dans le temps d'une pi\u00e8ce donn\u00e9e. Au centre on voit l'encha\u00eenement des villes o\u00f9 la pi\u00e8ce a \u00e9t\u00e9 jou\u00e9e. Une ville peut appara\u00eetre plusieurs fois si la pi\u00e8ce y a \u00e9t\u00e9 rejou\u00e9e apr\u00e8s avoir tourn\u00e9 ailleurs. En bas figure la ligne de temps, qui est sous-divis\u00e9e par ann\u00e9e. A droite, on trouve un cadre avec des boutons qui permettent de choisir le mode de repr\u00e9sentation.\r\n\r\nDans la premi\u00e8re figure, la taille des cercles qui repr\u00e9sentent les villes est li\u00e9e au nombre de repr\u00e9sentations.\r\n\r\n![](https://www.logilab.fr/file/27573054/raw/rcf_hackathon_1.png)\r\n\r\nDans la deuxi\u00e8me figure, la taille des cercles qui repr\u00e9sentent les villes est li\u00e9e au revenu g\u00e9n\u00e9r\u00e9.\r\n\r\n![](https://www.logilab.fr/file/27573055/raw/rcf_hackathon_2.png)\r\n\r\nDans la troisi\u00e8me figure, les donn\u00e9es sont affich\u00e9es sur une carte plut\u00f4t qu'avec un graphe.\r\n\r\n![](https://www.logilab.fr/file/27573056/raw/rcf_hackathon_3.png)\r\n\r\n\r\n## Analyse des sources de donn\u00e9es\r\n\r\nNous avons choisi de nous focaliser sur les sources d\u00e9j\u00e0 publi\u00e9es dans des entrep\u00f4ts SPARQL pour deux raisons. D'une part le hackathon \u00e9tait court, donc il fallait \u00e9viter de onsacrer du temps \u00e0 des questions de lecture de formats de fichiers qui ne produiraient aucun r\u00e9sultat visible. D'autre part les gens autour de la table connaissaient d\u00e9j\u00e0 bien ces jeux de donn\u00e9es. \r\n\r\nNous avons donc privil\u00e9gi\u00e9 l'utilisation de ces trois sources de donn\u00e9es: \r\n* Les registres de la Com\u00e9die Fran\u00e7aise / [acc\u00e8s sparql](https://rcf-sparql.demo.logilab.fr/)\r\n* La base CESAR / [acc\u00e8s sparql](https://cesar2.huma-num.fr/)\r\n* La base ON-STAGE / [acc\u00e8s sparql](https://lod.uba.uva.nl/CREATE/ONSTAGE/sparql/ONSTAGE#)\r\n\r\nNous avons tout d'abord \u00e9crit des [requ\u00eates SPARQL f\u00e9d\u00e9r\u00e9es](https://www.w3.org/TR/2013/REC-sparql11-federated-query-20130321/) afin de pouvoir joindre avec une seule requ\u00eate des donn\u00e9es de plusieurs bases.\r\n\r\nCe faisant, nous avons rencontr\u00e9 un premier probl\u00e8me technique, \u00e0 savoir que l'entrep\u00f4t qui h\u00e9berge les donn\u00e9es de la Com\u00e9die Fran\u00e7aise n'\u00e9tait pas configur\u00e9 pour accepter les requ\u00eates f\u00e9d\u00e9r\u00e9es. Nous avons donc essay\u00e9 l'inverse, \u00e0 savoir interroger l'entrep\u00f4t de la base CESAR, mais ce dernier repose sur Ontop, qui ne permet pas non plus les requ\u00eates f\u00e9d\u00e9r\u00e9es. Nous avons finalement utilis\u00e9 l'entrep\u00f4t de la base ONSTAGE, d\u00e9ploy\u00e9 avec TriplyDB, pour ex\u00e9cuter une requ\u00eate f\u00e9d\u00e9r\u00e9e assemblant des donn\u00e9es de RCF et CESAR... mais aucune de ONSTAGE. Ceci nous a rappel\u00e9 que la f\u00e9d\u00e9ration de requ\u00eates, s\u00e9duisante sur le papier, est parfois plus compliqu\u00e9e qu'il n'y para\u00eet.\r\n\r\n## Alignement des mod\u00e8les\r\n\r\nNous avons ensuite cherch\u00e9 quel mod\u00e8le utiliser pour assembler les donn\u00e9es obtenues avec ces requ\u00eates.\r\n\r\nLa base CESAR d\u00e9crit des \"S\u00e9ances\", qui peuvent \u00eatre d\u00e9finies comme des ensembles de repr\u00e9sentations contig\u00fces. Cette notion peut \u00eatre rapproch\u00e9e de celle de  \"Journ\u00e9e\" dans le mod\u00e8le RCF, mais cet alignement n'est pas tout \u00e0 fait exact puisqu'il est possible qu'il y ait plusieurs \"S\u00e9ances\" \u00e0 la m\u00eame date, donc plusieurs \"S\u00e9ances\" dans une \"Journ\u00e9e\". Les registres de la Com\u00e9die Fran\u00e7aise ne d\u00e9tiennent pas cette information de \"S\u00e9ance\" sp\u00e9cifique et se contentent de consid\u00e9rer uniquement la \"Journ\u00e9e\".\r\n\r\nCes diff\u00e9rences de mod\u00e9lisation sont monnaie courante et nous avons d\u00fb, sans surprise, d\u00e9finir un mod\u00e8le interm\u00e9diaire adapt\u00e9 \u00e0 notre objectif et des op\u00e9rations de transformation des donn\u00e9es pour les convertir de leur mod\u00e8le d'origine vers ce mod\u00e8le afin de les fusionner. \r\n\r\nNous avons retenu les notions de Pi\u00e8ce, de Repr\u00e9sentation, de S\u00e9ance et de Lieu.\r\n\r\n![](https://www.logilab.fr/file/27573057/raw/rcf_hackathon_4.png)\r\n\r\n## Alignement des donn\u00e9es\r\n\r\nL'objectif de notre maquette \u00e9tant de rendre visible les \u00e9volutions des pi\u00e8ces qui apparaissent quand on fusionne les donn\u00e9es compl\u00e9mentaires issues des diff\u00e9rentes sources, nous avons ensuite align\u00e9 les pi\u00e8ces.\r\n\r\nPour cela, nous avons utilis\u00e9 la date de repr\u00e9sentation pour restreindre les candidats \u00e0 l'alignement, puis le nom de la pi\u00e8ce. Par exemple, nous savons que le 30 septembre 1681 on a jou\u00e9 d'apr\u00e8s la base CESAR une pi\u00e8ce 123303 intitul\u00e9e \"Ph\u00e8dre et Hippolyte\" et une pi\u00e8ce 23287 intitul\u00e9e \"Les Fragments de Moli\u00e8re\". A la m\u00eame date, d'apr\u00e8s la base RCF, on a jou\u00e9 une pi\u00e8ce 5772 intitul\u00e9e \"Ph\u00e8dre et Hippolyte ou Ph\u00e8dre\"  et une pi\u00e8ce 5396 intitul\u00e9e \"Fragments de Moli\u00e8re (Les)\". Avec une simple [distance de Levenshtein](https://fr.wikipedia.org/wiki/Distance_de_Levenshtein) entre cha\u00eenes de caract\u00e8res, nous pouvons aligner les pi\u00e8ces et affimer que 123303 chez CESAR correspond \u00e0 5396 chez RCF.\r\n\r\nEn appliquant ce traitement sur l'ensemble des dates, nous avons obtenu un alignement entre les 49 pi\u00e8ces de CESAR et RCF.\r\n\r\n![](https://www.logilab.fr/file/27573058/raw/rcf_hackathon_5.png)\r\n\r\nVu le temps imparti, nous nous sommes limit\u00e9 aux pi\u00e8ces, mais on pourrait pousser plus loin et par exemple inclure dans le mod\u00e8le les personnes, puis les aligner en utilisant des crit\u00e8res appropri\u00e9s.\r\n\r\n## Exploitation des donn\u00e9es\r\n\r\nUne fois les donn\u00e9es import\u00e9es depuis les diff\u00e9rentes sources, converties dans le m\u00eame mod\u00e8le et align\u00e9es automatiquement entre CESAR et RCR ou une par une pour quelques pi\u00e8ces de ONSTAGE, il devient possible de les exploiter.\r\n\r\nLes bases RCF et ONSTAGE ne contenant pas de lieux, nous avons suppos\u00e9 que toutes les repr\u00e9sentations RCF \u00e9taient \u00e0 Paris et toutes celles d'ONSTAGE \u00e0 Amsterdam. C'est probablement faux, donc pour am\u00e9liorer la qualit\u00e9 du r\u00e9sultat il faudrait trouver des sources compl\u00e9mentaires \u00e0 partir desquelles importer les lieux exacts des repr\u00e9sentations.\r\n\r\nDans le calepin Jupyter qui nous a servi pour consigner nos exp\u00e9rimentations de mani\u00e8re reproductible, nous avons finalement produit le graphique ci-dessous:\r\n\r\n![](https://www.logilab.fr/file/27573059/raw/rcf_hackathon_6.png)\r\n\r\nLe menu d\u00e9roulant en haut \u00e0 gauche permet de choisir une pi\u00e8ce.\r\n\r\nNous voyons au centre un nuage de points, avec l'ann\u00e9e en abscisse et la ville en ordonn\u00e9e. La couleur des points refl\u00e8te la source de donn\u00e9es et leur taille d\u00e9pend du nombre de repr\u00e9sentations.\r\n\r\nL'histogramme au-dessus du graphique est l'aggr\u00e9gation des donn\u00e9es par an pour toutes les villes. L'histogramme de droite est l'agr\u00e9gation par ville pour toutes les ann\u00e9es.\r\n\r\nCe graphique d\u00e9montre que nous avons produit les donn\u00e9es souhait\u00e9es, mais il aurait fallu plus de temps pour les repr\u00e9senter comme imagin\u00e9 en d\u00e9but de hackathon lorsque nous avons dessin\u00e9 les maquettes graphiques.\r\n\r\n## Conditions de l'interop\u00e9rabilit\u00e9 et gouvernance\r\n\r\nCe hackathon a mis en lumi\u00e8re pour tous les participants des questions bien connues de ceux qui ont l'habitude de ce genre d'exercice:\r\n\r\n1. un mod\u00e8le commun est n\u00e9cessaire pour communiquer entre les bases et celles et ceux qui administrent ces bases\r\n2. la qualit\u00e9 des donn\u00e9es d'entr\u00e9e d\u00e9termine l'efficacit\u00e9 du traitement, c'est \u00e0 dire le rapport entre la qualit\u00e9 du r\u00e9sultat et l'effort n\u00e9cessaire pour le produire\r\n3. l'alignement est une \u00e9tape cruciale de la fusion des donn\u00e9es issues de plusieurs sources\r\n4. les standards du Web S\u00e9mantique, et particuli\u00e8rement le RDF et le SPARQL sont des atouts ind\u00e9niables pour faire interop\u00e9rer plusieurs sources de donn\u00e9es\r\n\r\nCes constats ont fait \u00e9merger, au sein de la communaut\u00e9 pr\u00e9sente \u00e0 ce colloque, la question du partage des bonnes pratiques de publication de donn\u00e9es. Effectivement, maintenir un mod\u00e8le commun d'\u00e9change,  r\u00e9diger une guide de bonnes pratiques pour la publication, accompagner les institutions dans leur parcours d'apprentissage, tout cela est un travail long, mais primordial pour supprimer les obstacles \u00e0 l'interop\u00e9rabilit\u00e9.\r\n\r\nIl a \u00e9t\u00e9 discut\u00e9 de cr\u00e9er un consortium Huma-Num consacr\u00e9 \u00e0 la gestion des donn\u00e9es du spectacle vivant et \u00e0 l'expression de ces bonnes pratiques, pour orienter la suite des travaux vers des solutions communes et faciliter les interactions entre les donn\u00e9es de diff\u00e9rentes institutions.\r\n\r\nA Logilab, nous appr\u00e9cions le travail que nous r\u00e9alisons depuis plusieurs ann\u00e9es pour le projet des Registres de la Com\u00e9die Fran\u00e7ois et nous avons \u00e9t\u00e9 honor\u00e9s d'\u00eatre invit\u00e9s \u00e0 ce colloque. Ce hackathon nous a permis de relier les donn\u00e9es de RCF, que nous connaissons bien, \u00e0 d'autres jeux de donn\u00e9es, que nous avons d\u00e9couverts, mais aussi de prendre part aux d\u00e9bats sur leur gouvernance future. Nous esp\u00e9rons pouvoir continuer \u00e0 apporter nos comp\u00e9tences techniques \u00e0 ces projets, pour faciliter le travail de recherche sur le th\u00e9\u00e2tre et son histoire.", "content_format": "text/markdown", "heading": "Logilab a particip\u00e9 au hackathon \"Des archives aux donn\u00e9es\" organis\u00e9 par la Com\u00e9die Fran\u00e7aise autour des questions de l'interop\u00e9rabilit\u00e9 des donn\u00e9es du spectacle vivant. Cet article regroupe les r\u00e9flexions et conclusions autour de cet hackathon.", "word_count": 1500, "creation_date": "2023/06/26 12:11:52", "modification_date": "2023/06/26 12:12:04", "cwuri": "https://www.logilab.fr/27573060"}, {"cw_etype": "BlogEntry", "eid": 27435087, "title": "CubicWeb 4 est disponible !", "content": "480 mots - 3 minutes de lecture\r\n\r\nLogilab est sp\u00e9cialis\u00e9e dans le d\u00e9veloppement d\u2019applications Web pour la publication de donn\u00e9es ouvertes et dans la gestion de connaissances. Pour cela, nous maintenons, depuis maintenant pr\u00e8s de 20 ans, le cadriciel de d\u00e9veloppement CubicWeb. Nous utilisons ce cadriciel comme base dans la majorit\u00e9 de nos projets, car il nous permet d\u2019avoir acc\u00e8s \u00e0 un grand nombre de fonctionnalit\u00e9s bien int\u00e9gr\u00e9es entre elles et nous \u00e9vite une continuelle r\u00e9invention de la roue.\r\n\r\nDepuis les premi\u00e8res versions de CubicWeb, nous avons voulu permettre la g\u00e9n\u00e9ration de l\u2019interface utilisateur \u00e0 partir du mod\u00e8le de donn\u00e9es pour que les modifications apport\u00e9es \u00e0 ce dernier soient facilement report\u00e9es dans les affichages qui n\u2019ont pas besoin d\u2019\u00eatre faits sur-mesure.\r\n\r\nCette pratique \u00e9tait depuis quelques ann\u00e9es d\u00e9pass\u00e9e, puisque les interfaces utilisateurs du web sont maintenant tr\u00e8s souvent de v\u00e9ritables applications ex\u00e9cut\u00e9es dans le navigateur plut\u00f4t que des pages produites par le serveur.\r\n\r\nAfin de suivre cet \u00e9lan et de permettre aux d\u00e9veloppeurs et d\u00e9veloppeuses utilisant CubicWeb de b\u00e9n\u00e9ficier des outils devenus standards pour les interfaces utilisateurs dynamiques, nous avons produit cette version majeure de CubicWeb qui extrait dans un composant (le cube web) la partie en charge de la g\u00e9n\u00e9ration des pages \u00e0 partir du mod\u00e8le de donn\u00e9es. CubicWeb devient ainsi ce que l\u2019on appelle un syst\u00e8me de gestion de donn\u00e9es \u201csans t\u00eate\u201d.\r\n\r\nChacun peut donc d\u00e9velopper une ou plusieurs interfaces graphiques en utilisant la technologie qui lui convient (React, Angular, Vue.JS, etc.) et profiter des derni\u00e8res \u00e9volutions techniques c\u00f4t\u00e9 client, tout en conservant les avantages de CubicWeb c\u00f4t\u00e9 serveur.\r\n\r\nPour exposer les fonctionnalit\u00e9s du serveur, un cube API a \u00e9t\u00e9 d\u00e9velopp\u00e9. Ce cube offre une API HTTP publique, qui respecte OpenAPI et permet d\u2019acc\u00e9der \u00e0 toutes les fonctionnalit\u00e9s de CubicWeb. La route principale est l\u2019acc\u00e8s \u00e0 l\u2019interrogation en RQL.\r\n\r\nAfin de faciliter encore plus le d\u00e9veloppement de la partie cliente, nous d\u00e9veloppons des biblioth\u00e8ques JavaScript qui impl\u00e9mentent la partie g\u00e9n\u00e9rique des interactions avec un serveur CubicWeb. La biblioth\u00e8que @cubicweb/client permet d\u2019\u00e9tablir une connexion avec une instance CubicWeb et @cubicweb/react-form-utils facilite l\u2019\u00e9criture de formulaire s\u2019appuyant sur React Hook Form et rendent accessible c\u00f4t\u00e9 client le mod\u00e8le de donn\u00e9es du serveur et ses types. D\u2019autres outils arriveront dans les prochains mois. Par exemple CubicWeb React Admin peut \u00eatre utilis\u00e9 pour avoir une interface d\u2019administration g\u00e9n\u00e9rique sur toute instance de CubicWeb, un peu comme ce que fournissait le cube web en CubicWeb 3.\r\n\r\nL\u2019objectif de CubicWeb \u00e9tant de favoriser la publication de donn\u00e9es ouvertes, nous avons profit\u00e9 de la version 4 pour rapprocher encore plus ce cadriciel des technologies du Web S\u00e9mantique qui l\u2019ont inspir\u00e9, en utilisant notamment la notion de n\u00e9gociation de contenu pour publier du RDF. L\u2019URL d\u2019une entit\u00e9 donne acc\u00e8s soit \u00e0 une page HTML de base qui affiche les donn\u00e9es avec tr\u00e8s peu de mise en page, soit aux donn\u00e9es en RDF dans l\u2019un des diff\u00e9rents formats de s\u00e9rialisation disponibles.\r\n\r\nLa liste compl\u00e8te des changements apport\u00e9s \u00e0 cette version se trouve dans la documentation. Bon d\u00e9veloppement !", "content_format": "text/markdown", "heading": "Apr\u00e8s plusieurs mois de d\u00e9veloppement, nous sommes heureux de vous annoncer la sortie de CubicWeb version 4 ! Venez d\u00e9couvrir toutes les nouveaut\u00e9s pr\u00e9sentes dans cette version", "word_count": 498, "creation_date": "2023/06/07 15:13:52", "modification_date": "2023/06/07 15:16:47", "cwuri": "https://www.logilab.fr/27435087"}]