*Elodie Thiéblin, développeuse chez Logilab et spécialiste du Web sémantique*
Du 3 au 6 novembre, j'ai participé à la conférence [ISWC (International Semantic
Web Conference)](https://iswc2020.semanticweb.org/), qui est une
des références internationales dans le domaine du Web Sémantique. On y parle
des problématiques du web de données liées et de réprésentation des
connaissances. Je partage ici mes notes sur les sujets qui m'ont le plus marquée.
## Débriefing général de la conférence
Cette année, il y a eu de nombreux articles
consacrés à [SHACL (Shape Constraint Language)](https://www.w3.org/TR/shacl/).
L'idée de remettre l'utilisateur des données et technologies du Web sémantique
au centre des innovations à venir a été répétée à plusieurs reprises.
L'intervention de Miriam Fernandez sur la diversité des données était
enrichissante. Elle invite les producteurs de données à se poser la question du
biais de leurs données et de la représentation du monde qu'elles renferment.
> Des données biaisées peuvent provoquer de désastreux effets sociaux.
Elle cite notamment [cet
article](https://ajph.aphapublications.org/doi/abs/10.2105/AJPH.2011.300275)
qui présente les résultats d'une étude comparant les blessures des femmes et des
hommes avec une ceinture de sécurité lors d'accidents de la route entre 1998
et 2008. La différence de 47% entre les deux sexes serait imputable
aux mannequins de test de l'industrie automobile dimensionnés sur des hommes.
## Résumé de présentations
Deux papiers ont retenu mon attention pour faciliter l'utilisation des
technologies du Web sémantique par les développeuses et les développeurs Web.
### ON2TS: Typescript generation from OWL ontologies and SHACL
[ON2TS](https://github.com/jeswr/on2ts) est un prototype permettant de générer des classes et interfaces
TypeScript à partir d'ontologies OWL et de règles en SHACL. Les développeurs
peuvent donc utiliser directement les classes et interfaces générées pour
valider la structure et la forme de leurs données lors de l'exécution.
Ce prototype utilise la bibliothèque `@ldflex/comunica`, le moteur de requêtes
pour langage LDflex, qui est décrit ci-dessous.
Pour plus de détails, lisez l'[article](http://ceur-ws.org/Vol-2721/paper590.pdf).
### LDflex: a Read/Write Linked Data Abstraction for Front-End Web Developers
[LDflex](https://github.com/LDflex/LDflex) est un langage dédié qui fait
apparaîtr les données liées du Web comme des structures de données en
JavaScript. La [vidéo de la présentation](https://www.youtube.com/watch?v=2BHV1p2QzNw)
est en ligne et il est possible d'expérimentation dans un
[bac à sable](https://solid.github.io/ldflex-playground/).
Selon Ruben Verborgh, une des grandes différences entre les applications Web et
le Web sémantique est la "prédicabilité" : la structure et l'emplacement des données
sont prédéfinis dans une application Web (souvent choisie par les développeurs
de ladite application), tandis que dans le cas du Web sémantique, les ontologies
sont hétérogènes et les données sont distribuées.
Le but de LDflex est de simplifier la gestion des différents formats
et modes d'interrogation des serveurs de Web de données liées: des données
en RDF peuvent être récupérées depuis le Web puis interrogées localement en SPARQL.
Avec LDflex il est possible de manipuler une structure de données locale, qui
est mise en correspondance avec les données RDF d'origine au moyen d'un contexte.
Par exemple, le contexte suivant permet d'écrire `user.friends` pour
récupérer les individus ayant un lien `foaf:knows` vers user.
```json
"@context": {
"@vocab": "http://xmlns.com/foaf/0.1/",
"friends": "knows",
"label": "http://www.w3.org/2000/01/rdf-schema#label",
}
```
Si le modèle évolue, il peut suffire de modifier le contexte pour adapter
l'application, ce qui en simplifie la maintenance.
LDflex semble donc à première vue une bonne alternative à rdflib.js. Comme
cette dernière, elle dépend toutefois des bibliothèques d'authentification Solid
qui prennent une [taille non négligeable
(~500ko)](https://bundlephobia.com/result?p=@ldflex/comunica@3.4.2) dans le
bundle final.
La bibliothèque `ldflex` inclut le langage LDflex et doit être accompagnée de
`@ldflex/comunica`, son moteur de requêtes sur le Web.
Un rapide test sur logilab.fr (avec l'extension CORS Everywhere
activée) a suffit à montrer qu'on peut utiliser [LDflex pour interroger les
instances de Cubicweb en version 3.28](https://solid.github.io/ldflex-playground/#%5B'https%3A%2F%2Fwww.logilab.fr%2F2474699'%5D.type)
Autres tests et remarques :
- Test sur http://dbpedia.org/resource/Paris
→ *Mixed Blocked* depuis le bac à sable en HTTPS
- Test sur https://aims.fao.org/aos/agrovoc/c_30969
→ *301 Moved Temporarily* mais pas de requête sur l'URL cible (en HTTP)
- Test sur https://www.wikidata.org/entity/Q535
→ redirection à travers les différentes URL pour obtenir le RDF est gérée et fonctionne
→ requêtage en SPARQL ne fonctionne pas car l'entité est décrite en HTTP et non HTTPS dans le RDF
Il sera intéressant de suivre l'évolution de ce projet pour répondre aux
questions suivantes:
- Comment gérer plusieurs contextes simultanément (récupérer `foaf:name` et
`schema:name` à la fois par exemple) ?
- Comment contourner le problème des requêtes *Mixed Blocked* en gardant les
données distribuées sur le Web ?
## Conclusion
Cette expérience a été très enrichissante, comme chaque année. Je suis contente
qu'il y ait de plus en plus d'initiatives pour rendre le Web sémantique agréable
et accessible aux développeuses et aux développeurs Web. Cela va peut-être encourager
la valorisation des entrepôts de données liées dans des applications en production.
Un des sujets resté sans réponse est la gestion des configurations des serveurs
sur le Web de données liées pour notamment la gestion des erreurs
[CORS](https://developer.mozilla.org/fr/docs/Web/HTTP/CORS), [Mixed
Blocked](https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content),
etc.
Rendez-vous l'année prochaine pour vérifier ces hypothèses.
text/markdown
2021-01-20 00:02:14
*Elodie Thiéblin, développeuse chez Logilab et spécialiste du Web sémantique*
Du 3 au 6 novembre, j'ai participé à la conférence [ISWC (International Semantic
Web Conference)](https://iswc2020.semanticweb.org/), qui est une
des références internationales dans le domaine du Web Sémanti...
2021-01-20 00:04:54
Résumé de la conférence ISWC 2020
A Logilab, dans un esprit d\'amélioration continue, nous consacrons du
temps à développer des projets qui facilitent notre travail au
quotidien. Dernièrement le projet
[AssignBot](https://forge.extranet.logilab.fr/open-source/assignbot) a
été développé par Simon Chabot. Afin d\'en savoir plus sur sa création
nous lui avons posé quelques questions :
- Bonjour Simon, peux-tu tout d\'abord te présenter en quelques mots ?
En quelques mots : j'ai étudié l'informatique à l'Université de
Technologie de Compiègne, puis je suis allé à Nice, entre autre, faire
une thèse sur la simulation numérique des séismes, avant de rejoindre
Logilab fin 2018.
- Peux-tu nous expliquer ce qu\'est AssignBot et à quel besoin il
répond ?
Lorsqu'on écrit du code, une des bonnes pratiques (peut être l'une des
plus importante ?), est la relecture par les pairs. L'objectif de la
relecture est d'améliorer la qualité du code produit, de favoriser la
collaboration et de faire en sorte que les connaissances soient
partagées.
À Logilab, nous avons plusieurs centaines de projets dans notre forge.
Certains sont des logiciels écrits spécifiquement pour nos clients,
généralement avec une équipe dédiée, et d'autres sont « communs ». Il
peut s\'agir de briques de base utiles à différents projets, d\'outils
internes (intranet, des tableaux de bords), ou de logiciels libres
développés avec des tiers (comme CubicWeb et ses nombreux cubes).
AssignBot est un petit robot dont la mission est d'organiser cette
relecture, notamment pour nos projets « communs ». Lorsqu'une personne
propose un changement elle envoie sur notre forge une *merge request*.
AssignBot va alors choisir une personne volontaire pour s'occuper de
cette *merge request*. Je dis "volontaire", parce qu\'un des objectifs
d'AssignBot est de laisser aux relecteurs la possibilité de régler le
nombre de relectures qu'ils veulent bien faire par jour / semaine, afin
de permettre aux personnes qui le souhaitent de participer, même si leur
emploi du temps est chargé.
- N\'existait-il pas des solutions équivalentes que tu aurais pu
utiliser ?
Pour être honnête, je n'ai pas vraiment cherché avant d\'écrire
AssignBot. Suite à diverses discussions avec des collègues, nous sommes
arrivés à la conclusion que ce petit outil pourrait nous aider, et... je
trouvais ça rigolo. Un soir, ça m'a démangé et AssignBot est né. Dans
l'histoire de Logilab, un tel logiciel a déjà existé, mais il a été
petit à petit abandonné car il était trop rigide je crois.
- Avec quelle(s) technologie(s) l\'as-tu fait et pourquoi celle(s)-ci
?
AssignBot est écrit en Python. C'est le langage qui accompagne Logilab
depuis ses débuts et qui est connu par toute l'équipe. Pour trouver les
nouvelles *merge requests*, AssignBot utilise la bibliothèque Python
gitlab, qui permet d'interagir avec notre forge, basée sur Heptapod (un
*fork* de Gitlab qui permet de gérer des entrepôts Mercurial). Le code
est en réalité très court grâce à cette bibliothèque. Il suffit
simplement de demander les *merge requests* non-assignées, et de choisir
une personne dans la liste en fonction des préférences qu'elle a
définies (en terme de nombre de relectures par jour/semaine).
AssignBot utilise également un petit fichier d'historique, pour pouvoir
respecter ces préférences. Ce fichier est quand à lui placé sur notre
serveur de stockage S3.
- Est-il actuellement utilisé ? As-tu eu des retours des personnes
utilisatrices ?
AssignBot est utilisé aujourd'hui par une dizaine de personnes à Logilab
(j'espère d'ailleurs que cet article permettra d'augmenter ce nombre
:smile:)
Oui, j'ai eu quelques retours. Principalement positifs, les *merge
requests* restent moins longtemps en attente dans un coin sur la forge,
car il y a une personne qui est en charge de sa publication. AssignBot
ne connait pas les domaines avec lesquels les gens ont plus ou moins
d'affinité. Donc il arrive des fois que l'on se retrouve assigné une
*merge request* qui est assez loin de ce qu'on maîtrise. Ce qui a été un
peu déroutant au début. Mais je pense qu'il faut voir cela du bon côté,
ça permet de découvrir de nouvelles choses, d'être informé de ce qui est
fait par l'équipe. Et il faut voir la mission comme « je dois faire en
sorte que ce travail avance » et non pas comme « je dois relire et
trouver les erreurs potentielles de ce code », ça peut donc vouloir
dire, aller voir un·e collègue et poser des questions, ou demander si
quelqu'un veut bien jeter un œil en parallèle. Voilà... en fait
l'objectif d'AssignBot, pour revenir à la question du début, c'est ça :
« faire en sorte que les choses avancent ».
- AssignBot est-il publié sous licence libre ? Est-il utilisable dans
un autre contexte que Logilab ?
Oui, tout à fait, AssignBot est libre, publié sous licence LGPL. Le
code-source est disponible sur notre forge:
<https://forge.extranet.logilab.fr/open-source/assignbot> et un paquet
python est disponible sur pipy: <https://pypi.org/project/assignbot/>.
AssignBot est utilisable − normalement :) − sur toutes les forges
Heptapod ou Gitlab, à partir du moment où un service d'intégration
continue est disponible et qu'un compte applicatif pour AssignBot a été
crée.
- Quelles sont les perspectives d\'évolution de cet outil (s\'il y
en a) ?
Il y a deux évolutions possibles qui me viennent en tête.
La première serait d'avoir une fonctionnalité pour publier
automatiquement les *merge requests* qui ont été validées depuis un
certain temps. Il est courant dans nos pratiques à Logilab, de mettre un
tag « To Publish » ou simplement d'approuver une *merge request* pour
que l'auteur publie ensuite. Dès fois, ça nous sort de la tête, on a
oublié qu'il y avait du code à publier. AssignBot pourrait peut être
s'en charger, en disant « si les tests passent et que quelqu'un a
approuvé il y a plus de XXX jours alors je publie », ce qui est aligné
avec l'objectif « faire en sorte que les choses avancent ».
L'autre idée est qu'actuellement AssignBot sauvegarde un historique sur
un serveur S3. Donc il est nécessaire d'avoir un tel serveur pour
utiliser AssignBot. Une évolution sans doute intéressante serait
d'utiliser tout simplement un artifact Gitlab. Ça permettrait de
supprimer cette dépendance et d'avoir un robot "tout en un".
text/markdown
2021-01-13 21:55:51
A Logilab, dans un esprit d'amélioration continue, nous consacrons du temps à développer des projets qui facilitent notre travail au
quotidien. Dernièrement le projet AssignBot a été développé par Simon Chabot.
2021-09-30 18:34:33
AssignBot facilite la relecture de code