[{"cw_etype": "BlogEntry", "eid": 26106200, "title": "Le Web S\u00e9mantique des objets", "content": "380 mots - 2 minutes de lecture\r\n\r\nNous collaborons avec Siemens sur un projet relatif au Web s\u00e9mantique des objets (Semantic Web of Things ou SWoT en anglais).\r\n\r\n## Semantic Web of Things\r\n\r\nLe [Web des objets](https://www.w3.org/WoT/) (Web of Things, WoT), a pour objectif de standardiser l'utilisation des technologies du Web (HTTP, URI, etc.) pour contrer la fragmentation de l'Internet des objets.\r\n\r\nCette standardisation est men\u00e9e par un groupe de travail du W3C.\r\n\r\nLe Web des objets profite notamment de l'interop\u00e9rabilit\u00e9 offerte par le Web s\u00e9mantique via la r\u00e9utilisation de ses standards de repr\u00e9sentation de donn\u00e9es (RDF, ontologies OWL/RDFS, etc.).\r\n\r\n## WoT - Thing Description\r\n\r\nLa sp\u00e9cification [WoT-Thing Description](https://github.com/w3c/wot-thing-description) (WOT-TD) permet de d\u00e9crire l'API de chaque objet connect\u00e9 : quelles propri\u00e9t\u00e9s, actions, \u00e9v\u00e9nements et interactions sont propres \u00e0 l'objet.\r\nToutes ces informations sont exprim\u00e9es \u00e0 la fois dans un JSON normalis\u00e9 et en RDF avec une ontologie d\u00e9di\u00e9e.\r\nLe document num\u00e9rique d\u00e9crivant l'objet est nomm\u00e9 *Thing Description* (TD).\r\n\r\n## WoT - Thing Description Directory\r\n\r\nUne fois que les TD sont cr\u00e9\u00e9es, il faut les rendre accessibles et d\u00e9couvrables. La sp\u00e9cification [WoT-Discovery](https://www.w3.org/TR/wot-discovery/) d\u00e9crit les diff\u00e9rentes mani\u00e8res de publier et de centraliser les TD.\r\nUn *Thing Description Directory*, d\u00e9crit dans WoT-Discovery, est entrep\u00f4t de TD ayant une API en JSON, RDF et SPARQL.\r\nNous avons developp\u00e9 un prototype de Thing Description Directory (SparTDD) en Flask et SPARQL, que nous avons [pr\u00e9sent\u00e9 \u00e0 la conf\u00e9rence ESWC2022](https://hal.archives-ouvertes.fr/hal-03830765).\r\n\r\n## Asset Administration Shell\r\n\r\n*Asset Administration Shell* est une sp\u00e9cification issue du projet allemand [Platform Industry 4.0](https://www.plattform-i40.de/IP/Navigation/EN/Home/home.html), qui a pour but de num\u00e9riser les donn\u00e9es de l'industrie et de permettre la cr\u00e9ation de jumeaux num\u00e9riques.\r\n\r\nUn *Asset Administration Shell* (AAS) caract\u00e9rise une ressource (*asset*) en donnant sa description, ses fonctionnalit\u00e9s, la documentation des objets \u00e9lectroniques, etc.\r\n\r\nLa sp\u00e9cification se veut tr\u00e8s g\u00e9n\u00e9rique pour couvrir un maximum de cas d'usages ; c'est de fait une sorte de m\u00e9ta-mod\u00e8le. Elle comprend un JSON-Schema et une ontologie OWL g\u00e9n\u00e9r\u00e9e \u00e0 partir de ce JSON-Schema.\r\n\r\nAvec Siemens, nous avons \u00e9tendu SparTDD pour qu'il puisse ing\u00e9rer et servir des AAS en plus des TD. Nous avons \u00e9galement cr\u00e9\u00e9 un module de traduction d'une TD vers un AAS pour, lors de l'import d'une TD cr\u00e9er son pendant en AAS. Les AAS obtenus de SparTDD peuvent ensuite \u00eatre ing\u00e9r\u00e9s par les outils existants qui savent manipuler des AAS.", "content_format": "text/markdown", "heading": "D\u00e9couvrez le web des objets et notamment les int\u00e9rop\u00e9rabilit\u00e9 offertes par le Web s\u00e9mantique via l'utilisation de ses standards.", "word_count": 375, "creation_date": "2023/03/24 10:41:28", "modification_date": "2023/04/13 16:30:50", "cwuri": "https://www.logilab.fr/26106200"}, {"cw_etype": "BlogEntry", "eid": 4716152, "title": "France Archives et le Web S\u00e9mantique", "content": "Chlo\u00eb Fize (Service interminist\u00e9riel des Archives de France), Elodie\r\nThi\u00e9blin (Logilab)\r\n\r\n# Pr\u00e9sentation g\u00e9n\u00e9rale de FranceArchives\r\n\r\n## Qu'est-ce que c'est les archives?\r\n\r\nSelon le code du patrimoine, les archives sont *l'ensemble des\r\ndocuments, y compris les donn\u00e9es, quels que soient leur date, leur forme\r\net leur support mat\u00e9riel, **produits ou re\u00e7us** par toute personne\r\nphysique ou morale, et par tout organisme public ou priv\u00e9, **dans\r\nl'exercice de leur activit\u00e9**. Ces documents sont soit conserv\u00e9s par\r\nleurs cr\u00e9ateurs ou leurs successeurs pour faire la preuve d'un droit ou\r\nd'un \u00e9v\u00e9nement, soit transmis \u00e0 l'institution d'archives comp\u00e9tente en\r\nraison de leur valeur\r\nhistorique*...\r\n\r\n![](https://www.logilab.fr/file/4716050/raw/upload_a1da9a1855a2eb87eaebea9d334ef3de.png)\r\n\r\nElementaire non ?\r\n\r\n## Les archives sont plus simplement des documents, divers et vari\u00e9s !\r\n\r\n![](https://www.logilab.fr/file/4715813/raw/upload_a3366da4a3ab0f51c109cb4802d708db.png)\r\n![](https://www.logilab.fr/file/4716059/raw/upload_8126e2310bb48b17ec131e1912b79d80.PNG)\r\n![](https://www.logilab.fr/file/4716074/raw/upload_3a6685c648e4d82887dd70e388a552a8.png)\r\n![](https://www.logilab.fr/file/4716085/raw/upload_c2a6040027233f2cb3cb6c63e6251593.png)\r\n![](https://www.logilab.fr/file/4716094/raw/upload_d3bc28b06c0bcba54665819967461166.png)\r\n\r\nDans notre imaginaire, en g\u00e9n\u00e9ral, les archives ne sont que de vieux\r\npapiers poussi\u00e9reux, r\u00e9dig\u00e9s dans des langues obscures et \u00e0 premi\u00e8re vue\r\nind\u00e9chiffrables, jalousement cach\u00e9s au fond de sombres et froids\r\nplacards... Et dans le pire des cas, elles sont cach\u00e9es dans les\r\nsous-sols ou les greniers... Un petit peu comme \u00e7a :\r\n\r\n![Image libre de droit *Pixabay*](https://www.logilab.fr/file/4715846/raw/upload_e50c35a6e05e3829de386a38dff624d6.jpg)\r\n\r\nMais d\u00e9trompez-vous, les documents d'archives sont partout et peuvent\r\n\u00eatre bien plus agr\u00e9ables \u00e0 admirer que vous ne l'imaginez. En France,\r\nplus de **4 000 kilom\u00e8tres lin\u00e9aires** d'archives sont conserv\u00e9s dans\r\nplus de **500 services** d'archives nationales, r\u00e9gionales,\r\nd\u00e9partementales et municipales sans compter les services d'archives\r\npriv\u00e9s (entreprises, associations, etc). On regroupe les documents en\r\n**fonds**.\\\r\nVoici des fonds, bien proprement rang\u00e9s dans leurs cartons... C'est\r\nquand m\u00eame plus sympathique ?\r\n\r\n![Photographie des grands d\u00e9p\u00f4ts des Archives nationales, site de Paris,\r\nmagasin du Tr\u00e9sor des Chartes (s\u00e9rie J) \u00a9Chloe FIZE, 2017](https://www.logilab.fr/file/4715882/raw/upload_769f7265317495be9646e1f5a74194af.JPG)\r\n\r\nMais comment s'y retrouver ? Comment savoir que LE document que je\r\nrecherche est bien dans cette boite nomm\u00e9e simplement par des lettres et\r\ndes chiffres ? Pour cela, il faut les d\u00e9crire et ensuite les communiquer\r\n\u00e0 qui veut les consulter. Car la vocation premi\u00e8re des archives, c'est\r\nque tout le monde puisse en effet les consulter... **Oui, oui, y compris\r\nvous !**\r\n\r\n## Ressources en ligne des archives\r\n\r\nLes archivistes ont toujours cherch\u00e9 \u00e0 exploiter les technologies les\r\nplus en pointe pour communiquer \u00e0 tous les publics les documents qu'ils\r\nconservent : microfilms, num\u00e9risation, site web... Et de fait, depuis\r\nplus de **20 ans**, les services d'archives mettent \u00e0 disposition de\r\ntous des inventaires avec ou sans documents num\u00e9ris\u00e9s, consultables\r\ndirectement en ligne sur plus de **300 sites internet**.\r\n\r\n![Copie d'\u00e9cran du site des archives d\u00e9partementales des Vosges, mars\r\n2021.\r\n](https://www.logilab.fr/file/4715901/raw/upload_c31fab384e283564cd97874131967e6d.png)\r\n\r\nLa raison? Que tout le monde puisse y avoir **acc\u00e8s** ! Eh oui, les\r\narchives c'est comme la bonne humeur, \u00e7a se commmunique, et par tous les\r\nmoyens !\r\n![:sunny:](https://cdn.jsdelivr.net/npm/@hackmd/emojify.js@2.1.0/dist/images/basic/sunny.png)\r\n\r\nC'est l\u00e0 toute la vocation du **portail FranceArchives** :\r\n\r\n-   Permettre aux chercheurs, \u00e9tudiants, curieux, amateurs de g\u00e9n\u00e9alogie\r\n    ou qui que vous soyez, de rep\u00e9rer les ressources de nombreux\r\n    services d'archives publics et priv\u00e9s pour, dans un second temps,\r\n    les consulter sur les sites web ou dans les salles de lecture de ces\r\n    services.\r\n\r\n-   Valoriser les fonds et services d'archives des quatre coins de la\r\n    France.\r\n\r\n-   Mettre \u00e0 disposition des ressources archivistiques professionnelles\r\n    ou des textes de loi.\r\n\r\n## Comment y acc\u00e9der?\r\n\r\nL'acc\u00e8s et la recherche sur le portail sont construits pour \u00eatre les\r\nplus intuitifs possible et pour mener le chercheur, amateur ou expert \u00e0\r\ntrouver son bonheur dans cette caverne aux merveilles... Suivez le guide\r\n!\r\n\r\n# FranceArchives\r\n\r\n\r\n## FranceArchives : qu'est-ce que c'est ?\r\n\r\nLe portail est port\u00e9 par le Minist\u00e8re de la Culture et a \u00e9t\u00e9 mis en\r\nligne au mois de **mars 2017**. Il est g\u00e9r\u00e9 et maintenu par le service\r\ninterminist\u00e9riel des archives de France (SIAF).\r\n\r\n**FranceArchives en chiffres :**\\\r\nAu mois de **mars 2021**, la **105\u00e8me** convention d\\'adh\u00e9sion au\r\nportail FranceArchives a \u00e9t\u00e9 sign\u00e9e. Vous pouvez donc consulter les\r\nfonds de 2 minist\u00e8res, 4 services \u00e0 comp\u00e9tences nationales (Archives\r\nnationales, Archives nationales du monde du travail, Archives nationales\r\nd\\'Outre-Mer et la M\u00e9diath\u00e8que de l\\'architecture et du patrimoine), 63\r\narchives d\u00e9partementals, 19 archives municipales, 13 \u00e9tablissements\r\npublics, 4 associations ou entreprises.\r\n\r\nPlus de **57 000** instruments de recherche sont consultables et\r\nr\u00e9utilisables. Ils contiennent pr\u00e8s de **13 000 000** de descriptions.\r\n\r\n## FranceArchives : comment \u00e7a fonctionne ?\r\n\r\n### Effectuer une requ\u00eate simple\r\n\r\n![](https://www.logilab.fr/file/4715908/raw/upload_0a0a33aa1d4a6c2be711286423d2c19f.png)\r\n\r\n### Tout en s'aidant de l'autocompl\u00e9tion\r\n\r\n![](https://www.logilab.fr/file/4715915/raw/upload_f6b700b5ce603bdb7bbdc157b776108f.png)\r\n\r\n### Et enfin affiner sa recherche gr\u00e2ce aux facettes\r\n\r\n![](https://www.logilab.fr/file/4715924/raw/upload_eb059235d12f746072243157a1612889.png)\r\n\r\n# Les archives et leurs m\u00e9tadonn\u00e9es\r\n\r\nVous avez r\u00e9ussi \u00e0 trouver votre bonheur ? Parfait ! Mais vous n'avez\r\npas trouv\u00e9 de documents d'archives num\u00e9ris\u00e9s ? C'est normal, seulement\r\n5% des archives conserv\u00e9es en France sont num\u00e9ris\u00e9es. Le reste est\r\naccessible en ligne uniquement gr\u00e2ce aux descriptions ou m\u00e9tadonn\u00e9es et\r\ndoit \u00eatre consult\u00e9 dans les salles de lecture des services qui les\r\nconservent.\r\n\r\nLe document d'archives num\u00e9ris\u00e9 est une photographie du document. Sur\r\nFranceArchives, vous pourrez trouver certains documents num\u00e9ris\u00e9s, \u00e0\r\nl'image du c\u00e9l\u00e8bre exemple qui suit :\r\n\r\n![*Lettre crypt\u00e9e \u00e9chang\u00e9e entre la reine Marie-Antoinette et le comte\r\nAxel de Fersen,\\\r\ndat\u00e9e du 28 juin 1791 - AN440AP/1, dossier 1, pi\u00e8ce 6, page 1*.](https://www.logilab.fr/file/4715934/raw/upload_9a9ed8ef4981fbf137a08c8b154f5448.jpg)\r\n\r\nMais vous ne trouverez la plupart du temps que des m\u00e9tadonn\u00e9es, \u00e0 savoir\r\nle contenu de la lettre, son auteur, son destinataire, sa date, des\r\nremarques sur sa forme et/ou son fond. C'est l\u00e0 qu'est la diff\u00e9rence\r\nentre un document num\u00e9ris\u00e9 et une m\u00e9tadonn\u00e9e num\u00e9rique.\r\n\r\nVous voulez un exemple? Tr\u00e8s bien, les m\u00e9tadonn\u00e9es num\u00e9riques c'est...\r\n\u00e7a :\r\n\r\n![](https://www.logilab.fr/file/4715962/raw/upload_cca0bcbde6781e3d50978745459ac7ef.png)\r\n\r\nAvouez que \u00e7a vous fait r\u00eaver ! Eh bien cette belle lettre que vous avez\r\nvu pr\u00e9c\u00e9demment peut \u00eatre transform\u00e9e en donn\u00e9es et donc ressembler \u00e0...\r\nces lignes en couleurs et comportant plein d'informations pouvant\r\nparaitre incompr\u00e9hensibles. N'ayez pas peur on va tout vous expliquer.\r\n\r\n\r\n## Mais alors d'o\u00f9 viennent les m\u00e9tadonn\u00e9es et \u00e0 quoi ressemblent-elles?\r\n\r\nLes services d'archives d\u00e9crivent leurs fonds dans des *instruments de\r\nrecherche*. Ce sont ces instruments qui sont mis en ligne sur\r\nFranceArchives et consultables par tout un chacun. Ils ne donnent pas\r\nacc\u00e8s au document num\u00e9ris\u00e9, comme nous l'\u00e9voquions plus haut, mais \u00e0 sa\r\n*description*. Ces \u00e9l\u00e9ments permettent de d\u00e9crire avec pr\u00e9cision les\r\ndocuments que l'on va retrouver dans le fonds et donc de r\u00e9pondre \u00e0 vos\r\nmultiples questionnements sans sortir le document de son joli carton de\r\nprotection. Quand vous consultez une notice sur le portail, il vous est\r\nensuite possible d'acc\u00e8der directement au site web du service qui\r\nconserve le document d\u00e9crit gr\u00e2ce au bouton *Acc\u00e9der au site*.\r\n\r\nAlors o\u00f9 sont pass\u00e9es les donn\u00e9es que nous avons vu plus haut ? Elles\r\nsont l\u00e0, partout, juste sous vos yeux. Vous les voyez ? Regardez...\r\n\r\n### Voici ce que vous voyez lorsque vous requ\u00eatez FranceArchives:\r\n\r\n![](https://www.logilab.fr/file/4715970/raw/upload_a4f5919e2f4332891fecb2bcbbb7dd99.png)\r\n\r\n### Voici ce que nous traitons :\r\n\r\n![](https://www.logilab.fr/file/4715977/raw/upload_a1fdf6b29b1ef79028c81cd9216f6c51.png)\r\n\r\nLes m\u00e9tadonn\u00e9es sont bien l\u00e0. Cet interm\u00e9diaire invisible pour\r\nl'utilisateur permet de mettre en forme de fa\u00e7on lisible les\r\ninformations.\r\n\r\nMais alors comment \u00eates-vous parvenu jusqu'\u00e0 ce r\u00e9sultat ? Comment,\r\nparmi les milliers de r\u00e9sultats, les seuls qui vous ont \u00e9t\u00e9 propos\u00e9s\r\nont-ils \u00e9t\u00e9 choisis ?\r\n\r\nVous avez vu les nombreux liens cliquables en bleu et soulign\u00e9s que vous\r\ntrouvez un peu partout... Ce souvent des noms de lieux, de personnes ou\r\ndes th\u00e8mes, eh bien tous ces termes sont des **autorit\u00e9s** qui sont\r\nextraites des instruments de recherche pour \u00eatre group\u00e9es avec leurs\r\nsemblables et align\u00e9es sur de plus gros portails de donn\u00e9es tels que\r\nData.BnF ou Wikidata.\r\n\r\n## Quelle en est l'utilit\u00e9 ?\r\n\r\nL'identification de ces ressources permet de lever l'ambigu\u00eft\u00e9 sur un\r\nnom : \u00eatre s\u00fbr qu'on parle bien de la m\u00eame personne ; ou relier\r\nplusieurs noms \u00e0 une m\u00eame ressource.\r\n\r\nPrenons un exemple : \"**Paris**\" c'est \u00e0 la fois le nom de la capitale\r\nfran\u00e7aise, d'un genre de plante et d'une figure mythologique : 3\r\nressources diff\u00e9rentes (donc 3 URI) portent le m\u00eame nom. Paris a beau\r\n\u00eatre une ville fleurie et mythique, il est tout de m\u00eame important de\r\npouvoir diff\u00e9rencier tous ces \u00e9l\u00e9ments lors d'une requ\u00eate.\r\n\r\nMais certains \u00e9l\u00e9ments peuvent pr\u00e9senter un cas inverse : l'autrice\r\nDominique Aury est \u00e9galement connue sous plusieurs pseudonymes tr\u00e8s\r\ndiff\u00e9rents les uns des autres : Anne C\u00e9cile Desclos et Pauline R\u00e9age.\r\nIci il y a donc une seule ressource (1 URI) qui porte ces 3 noms. Pour\r\nque vous trouviez toujours le m\u00eame r\u00e9sultat, ces 3 noms doivent \u00eatre\r\ntous rattach\u00e9s \u00e0 la m\u00eame personne et ne pas figurer comme \u00e9tant 3\r\n\u00e9l\u00e9ments diff\u00e9rents et distincts.\r\n\r\n![](https://www.logilab.fr/file/4715984/raw/upload_65e895ac550be1012277f7a34ab226dc.png)\r\n\r\nCette diff\u00e9rentiation ou ce regroupement est r\u00e9alis\u00e9 grace \u00e0 l'URL (vous\r\nsavez les liens incompr\u00e9hensibles \u00e9crits dans votre barre de\r\nnavigation...Eh bien en r\u00e9alit\u00e9 ils ont un sens !)\\\r\nL'utilisation d'URL pour identifier les ressources est la base du Web\r\ns\u00e9mantique (ou Web de donn\u00e9es).\r\n\r\n--\\> <https://www.wikidata.org/wiki/Q90> (Capitale de France)\\\r\n--\\> <https://www.wikidata.org/wiki/Q162121> (Genre de Plante)\\\r\n--\\> <https://www.wikidata.org/wiki/Q167646> (Figure mythologique)\r\n\r\n3 \"liens\" diff\u00e9rents, pour 3 th\u00e8mes compl\u00e8tement diff\u00e9rents, mais qui\r\nsont tous requ\u00eatables avec le m\u00eame mot.\r\n\r\n# Le Web s\u00e9mantique\r\n\r\nLe Web s\u00e9mantique a \u00e9t\u00e9 invent\u00e9 par Tim Berners-Lee, le fondateur du\r\nWeb.\r\nSon id\u00e9e est d'utiliser les technologies du Web pour y faire transiter\r\nnon seulement des documents (pages Web, comme c'est le cas aujourd'hui)\r\nmais aussi des donn\u00e9es.\r\n\r\nComme dans le Web que nous connaissons tous, le protocole HTTP visible\r\ndans l'URL (on vous avait dit que \u00e7a avait un sens!) est utilis\u00e9 pour\r\nfaire voyager les donn\u00e9es. Les ressources quant \u00e0 elles sont identifi\u00e9es\r\npar des URL (*Uniform Resource Location*) appel\u00e9es aussi URI pour mettre\r\nl'accent sur le c\u00f4t\u00e9 identification (*Uniform Resource Identifier*).\r\n\r\nAlors, cela \u00e9tant dit, qu'est-ce que cela implique concr\u00e8tement ? Nous y\r\nvenons.\r\n\r\n## Pourquoi \"s\u00e9mantique\" ?\r\n\r\nLe Web s\u00e9mantique, aussi appel\u00e9 Web de donn\u00e9es, porte ce nom car il\r\npermet aux machines de \"comprendre\" le contenu du Web (s\u00e9mantique \\<--\\>\r\nsens).\r\n\r\nDans le Web de documents, nous (les humains) voyons et comprenons les\r\ninformations suivantes :\r\n\r\nen HTML\r\n\r\n```html\r\n<h1>Les berlingots Eyss\u00e9ric</h1>\r\n\r\n<p>La fabrique Eyss\u00e9ric produit des berlingots dans le\r\n<a href=\"https://www.vaucluse.fr/\">Vaucluse</a>.\r\n</p>\r\n```\r\n\r\nl'ordinateur, lui, comprend :\r\n\r\n```html\r\n<h1>??? ??????????</h1>\r\n\r\n<p>?? ???????? ???????? ??????? ??? ?????????? ???? ??\r\n<a href=\"https://www.vaucluse.fr/\">????????</a>.\r\n</p>\r\n```\r\n\r\nNous aimerions qu'il puisse comprendre:\r\n\r\n  Nom                 Produit      Localisation\r\n  ------------------- ------------ --------------\r\n  Fabrique Eyss\u00e9ric   berlingots   Vaucluse\r\n\r\nNous souhaiterions que l'ordinateur comprenne les relations entre les\r\n\u00e9l\u00e9ments et la nature de ces \u00e9l\u00e9ments, comme nous en somme.\r\n\r\nPour cela, les donn\u00e9es transmises doivent \u00eatre structur\u00e9es et\r\nidentifi\u00e9es (nous l'avons vu plus haut, gr\u00e2ce aux URI).\r\n\r\n## Donn\u00e9es structur\u00e9es\r\n\r\n![](https://www.logilab.fr/file/4715989/raw/upload_e057d3ddc4d7fac78cd34173241f3da5.png)\r\nLe W3C (*World Wide Web Consortium*) d\u00e9finit des standards pour le Web\r\n(encore un morceau de votre barre de navigation d\u00e9crypt\u00e9 !).\r\n\r\nPour repr\u00e9senter les donn\u00e9es dans le Web s\u00e9mantique, on utilise ces\r\nstandards et le *Resource Description Format* (RDF). Ce dernier consiste\r\n\u00e0 repr\u00e9senter les donn\u00e9es sous forme de **triplets** utilisant des URI,\r\ncomme des phrases tr\u00e8s simples : sujet - pr\u00e9dicat (verbe) - objet.\r\n\r\nLes donn\u00e9es structur\u00e9es de notre exemple deviennent alors :\r\n\r\n    https://monUrl.fr/FabriqueEysseric https://monUrl.fr/produit https://monUrl.fr/Berlingot.\r\n\r\n    https://monUrl.fr/FabriqueEysseric https://monUrl.fr/localisation https://monUrl.fr/Vaucluse.\r\n\r\nEt parce qu'on sait bien qu'un joli dessin vaut mille mots, on peut\r\naussi repr\u00e9senter les triplets bout \u00e0 bout sous forme de graphe.\r\n\r\n![](https://www.logilab.fr/file/4715997/raw/upload_3aac8487ce9785f6cad07e90e4ef31ed.png)\r\n\r\nEn r\u00e9cup\u00e9rant les donn\u00e9es relatives aux autres ressources du Web, on\r\npeut \u00e9tendre le graphe de donn\u00e9es, tant qu'il y a des donn\u00e9es.\\\r\n\u00c0 l'instar du Web de documents o\u00f9 les documents sont interconnect\u00e9s\r\ngr\u00e2ce aux liens hypertexte, les ressources sont reli\u00e9es les unes aux\r\nautres dans le Web de donn\u00e9es.\r\n\r\n![](https://www.logilab.fr/file/4716006/raw/upload_ac80845ddc388889531ac6fb78c92a30.png)\r\n\r\n# Pourquoi utiliser le Web s\u00e9mantique dans FranceArchives ?\r\n\r\n  Besoin FranceArchives                                  R\u00e9ponse Web s\u00e9mantique\r\n  ------------------------------------------------------ ---------------------------------------\r\n  D\u00e9sambigu\u00efser les autorit\u00e9s                            Utilisations d'URI comme identifiants\r\n  Donn\u00e9es accessibles                                    Protocole HTTP\r\n  R\u00e9f\u00e9rencement par moteurs g\u00e9n\u00e9ralistes                 Contribution au google graph\r\n  Alignements r\u00e9f\u00e9rentiels nationaux                     Ontologies, alignements\r\n  Enrichissement des donn\u00e9es propres \u00e0 FA                Geonames, data.bnf, wikidata\r\n  Limiter la responsabilit\u00e9 de maintenance des donn\u00e9es   D\u00e9centralisation\r\n\r\nParmi les besoins de FranceArchives, nous avons d\u00e9j\u00e0 vu que\r\nl'utilisation d'URL comme identifiants (ce qui en fait des URI) r\u00e9pond\r\nau probl\u00e8me de d\u00e9sambigu\u00efsation des autorit\u00e9s.\r\n\r\nDe m\u00eame, le protocole HTTP, base du Web, permet de rendre les donn\u00e9es\r\ndisponibles sur le Web sans application tierce.\r\n\r\nMaintenant que nous avons tous ces \u00e9l\u00e9ments, il ne reste plus qu'\u00e0\r\nchercher !\r\n\r\n## R\u00e9f\u00e9rencement par les moteurs de recherche g\u00e9n\u00e9ralistes\r\n\r\nCertains moteurs de recherche (dont le plus connu de tous) se mettent au\r\nRDF !\r\n\r\nIls utilisent des donn\u00e9es en RDF ins\u00e9r\u00e9es dans le code d'une page Web\r\npour mieux comprendre de quel sujet elle traite.\r\n\r\nGr\u00e2ce \u00e0 cette compr\u00e9hension, ils peuvent afficher certains r\u00e9sultats\r\nsous des formes personnalis\u00e9es... Exemple !\r\n\r\nLe moteur de recherche utilise les triplets RDF pour afficher les\r\nrecettes de p\u00e2te \u00e0 cr\u00eapes sous forme de petites cartes :\\\r\n![](https://www.logilab.fr/file/4716017/raw/upload_4aa3b1170d2bd679a327c2917cc71698.png)\r\n\r\nAinsi, vous n'avez m\u00eame pas besoin de chercher LA meilleure recette de\r\np\u00e2te \u00e0 cr\u00eapes, votre ami le moteur de recherche l'a fait pour vous. Et\r\ncomme il sait que vous n'aimez pas perdre votre temps et que vous aimez\r\nquand m\u00eame bien quand il y a de jolies images qui vous mettent l'eau \u00e0\r\nla bouche, il vous propose de ne pas utiliser la molette de votre souris\r\net de cliquer directement sur la carte que vous pr\u00e9f\u00e9rez.\r\n\r\n## Alignement vers des r\u00e9f\u00e9rentiels\r\n\r\nIl y a plusieurs avantages \u00e0 lier les donn\u00e9es que nous publions sur le\r\nWeb de donn\u00e9es \u00e0 des r\u00e9f\u00e9rentiels nationaux (ou internationaux).\r\n\r\n### Ontologie de r\u00e9f\u00e9rence\r\n\r\nUne ontologie (ou un vocabulaire) est un ensemble d'URI que l'on va\r\nutiliser pour repr\u00e9senter les pr\u00e9dicats (ou fl\u00e8ches en version graphe)\r\ndu RDF. L'ontologie d\u00e9finit les types de ressources pr\u00e9sentes dans les\r\ndonn\u00e9es et les relations qui peuvent exister entre elles.\r\n\r\nC'est un peu le sch\u00e9ma d'une base de donn\u00e9es relationnelle ou la liste\r\ndes noms de colonnes d'un tableur.\r\n\r\nSi on compare les donn\u00e9es au langage, l'ontologie serait la grammaire\r\nainsi qu'une partie du vocabulaire.\r\n\r\nLe fait d'utiliser des ontologies standards dans ces donn\u00e9es RDF permet\r\nde se \"brancher\" plus facilement avec d'autres graphes de donn\u00e9es.\r\n\r\n### Sources de donn\u00e9es de r\u00e9f\u00e9rence\r\n\r\nEn liant ses donn\u00e9es \u00e0 d'autres bases de donn\u00e9es sur le Web,\r\nFranceArchives y trouve plusieurs avantages.\r\n\r\nTout d'abord, cela lui permet d'**enrichir ses propres donn\u00e9es**.\\\r\nEn effet, un document d'archives implique toujours des lieux et/ou des\r\npersonnes. On tente de normaliser les pratiques de nommage de ces\r\nentit\u00e9s (dans quel sens on met quelle information) afin d'aider\r\ndavantage au liage des donn\u00e9es : **Charles, de Gaulle (1890-1970)** ou\r\n**de Gaulle, Charles** ou **G\u00e9n\u00e9ral de Gaulle (Charles, 1890-1970)**. De\r\nm\u00eame pour les noms de lieux : **Sum\u00e8ne**, **Sum\u00e8ne (Gard - 30)**,\r\n**Sum\u00e8ne (Gard)**, etc.\r\n\r\nDans les notices, seuls figurent g\u00e9n\u00e9ralement le nom du lieu (avec son\r\nd\u00e9partement) et le nom de la personne. En liant les donn\u00e9es de\r\nFranceArchives \u00e0 d'autres bases, on peut ainsi \u00e9tendre le graphe de\r\ndonn\u00e9es et enrichir les informations que nous avions au d\u00e9part. Comme\r\nnous l'avons vu, plus il y a de mentions permettant de d\u00e9sambiguiser un\r\nterme (\u00e0 placer au Scrabble), meilleure sera la qualit\u00e9 de la donn\u00e9e et\r\ndonc plus performant sera le sch\u00e9ma RDF et au final les r\u00e9sultats de\r\nrecherche.\r\n\r\nCe sch\u00e9ma montre l'exemple de la notice [Sur la plage de\r\nSaint-Vincent-sur-Jard...](https://francearchives.fr/fr/facomponent/e6c3ff90ff8dc0578c3fed6909b5e9968965913b)\r\ndont la [description\r\nRDF](https://francearchives.fr/fr/facomponent/e6c3ff90ff8dc0578c3fed6909b5e9968965913b/rdf.xml)\r\npeut \u00eatre obtenue en ajoutant \u00e0 l'url le suffixe `/rdf.xml` ou\r\n`/rdf.ttl`.\r\n\r\nCette notice parle notamment de Georges Clemenceau et de la commune de\r\nSaint-Vincent-Sur-Jard. Initialement, il y avait peu d'informations sur\r\nces deux ressources. En liant Saint-Vincent-sur-Jard \u00e0 [son pendant dans\r\nGeonames](https://www.geonames.org/2976583/saint-vincent-sur-jard.html),\r\nune base de donn\u00e9es regroupant des lieux, nous avons pu enrichir les\r\ndonn\u00e9es en r\u00e9cup\u00e9rant notamment le code postal et la population. De la\r\nm\u00eame mani\u00e8re, en liant Georges Clemenceau \u00e0 [son pendant dans\r\nDataBnF](https://data.bnf.fr/fr/11897013/georges_clemenceau/), nous\r\navons pu enrichir les donn\u00e9es en r\u00e9cup\u00e9rant notamment sa date de\r\nnaissance et quelques \u00e9l\u00e9ments biographiques notables.\r\n\r\n![](https://www.logilab.fr/file/4716024/raw/upload_d7d425e7f28ac146418e70bc47761bbc.png)\r\n\r\nLe second avantage qu'apporte l'alignement (c'est-\u00e0-dire le fait de lier\r\nsa base avec une autre) est de **limiter la maintenance des donn\u00e9es** :\r\nmoins on les manipule, mieux elles se portent.\r\n\r\nFranceArchives peut profiter d'informations libres et ouvertes sur les\r\npersonnes, les th\u00e8mes, les lieux pour valoriser ses donn\u00e9es tout en se\r\nconcentrant sur la publication et la maintenance des donn\u00e9es d'archives\r\nuniquement.\r\n\r\n## data.bnf\r\n\r\nLe projet [data.bnf](https://data.bnf.fr/fr/about) a pour but de rendre\r\nles donn\u00e9es de la BnF **utiles et exploitables sur le web**. Elles\r\npermettent notamment de rassembler des informations sur les ressources\r\nconserv\u00e9es au sein de la BnF : **documents, ouvrages, auteurs, th\u00e8mes,\r\netc.** Les pages sont index\u00e9es par les moteurs de recherche : les\r\n**donn\u00e9es disponibles et requ\u00eatables sont souvent invisibles lors d'une\r\nrecherche classique** car [enfouies dans les donn\u00e9es et\r\nm\u00e9tadonn\u00e9es]{.underline} des ressources BnF.\r\n\r\nSur FranceArchives, ces liens permettent d'ajouter des informations sur\r\nun sujet donn\u00e9.\r\n\r\n## Wikidata\r\n\r\n[Wikidata]() est une base **open source**, **gratuite**,\r\n**collaborative** et qui, de la m\u00eame mani\u00e8re que DataBnF, met \u00e0\r\ndisposition des [donn\u00e9es compr\u00e9hensibles aussi bien par les **humains\r\nque par les machines**]{.underline}. Cette base de donn\u00e9es aide\r\nWikip\u00e9dia en facilitant la maintenance des fameuses boites\r\nd'informations que nous consultons tous d\u00e8s que nous cherchons des\r\ninformations sur la c\u00e9l\u00e9bre encyclop\u00e9die.\r\n\r\nDe la m\u00eame mani\u00e8re que la pr\u00e9c\u00e9dente, les renvois vers Wikidata ajoutent\r\nune plus-value aux donn\u00e9es consultables sur FranceArchives.\r\n\r\n![](https://www.logilab.fr/file/4716039/raw/upload_6dc801b8f4e41c72276459a416931f1f.png)\r\nheight=\"350\"}\r\n\r\n## Geonames\r\n\r\n[Geonames](https://www.geonames.org/about.html) est une base de donn\u00e9es\r\nlibres et ouvertes sur les donn\u00e9es g\u00e9ographiques.\r\n\r\n## DataCulture\r\n\r\n[DataCulture](http://data.culture.fr/thesaurus/) : le Minist\u00e8re de la\r\nCulture publie un r\u00e9f\u00e9rentiels de sujets class\u00e9s hi\u00e9rarchiquement (en\r\nth\u00e9saurus). Les th\u00e8mes de FranceArchives sont align\u00e9s sur les ressources\r\nde DataCulture.\r\n\r\n# Axes futurs d'am\u00e9lioration \r\n\r\nFranceArchives utilise d\u00e9j\u00e0 des technologies du Web s\u00e9mantique. Pour\r\naller plus loin, les chantiers suivants sont envisag\u00e9s.\r\n\r\n**Interrogation en SPARQL** : SPARQL (oui il faut le lire comme un mot\r\nprononc\u00e9 *SparKeul* et ne pas le jouer au scrabble celui-l\u00e0 sauf si on\r\njoue en anglais, car \u00e7a fait un jeu de mot p\u00e9tillant avec *to sparkle*)\r\nest le langage d'interrogation du RDF. Rendre possible l'interrogation\r\ndes donn\u00e9es produites dans ce langage permet aux utilisateurs et\r\nutilisatrices de rechercher tr\u00e8s pr\u00e9cis\u00e9ment les informations voulues.\r\n\r\n**Utilisation de l'ontologie\r\n[RiC-O](https://www.ica.org/standards/RiC/ontology.html)** : cette\r\nontologie (Records in Contexts - Ontology) est d\u00e9velopp\u00e9e et maintenue\r\npar le Conseil International des Archives. Elle est en passe de devenir\r\nun standard pour le monde archivistique. L'utiliser pour d\u00e9crire les\r\ndonn\u00e9es de FranceArchives permettra de se brancher plus facilement aux\r\ndonn\u00e9es d'autres services d'archives qui en font aussi usage.\r\n\r\n# *I have a dream...*\r\n\r\n... *that one day* tout le monde pourra rechercher simplement et\r\ntrouvera du premier coup toutes les informations d\u00e9sir\u00e9es !\r\n\r\nDans le monde num\u00e9rique, ce qui est bien c'est qu'on peut r\u00eaver, et\r\nr\u00eaver grand ! Alors que diriez-vous de pouvoir faire une requ\u00eate telle\r\nque : *Je cherche les archives concernant le village de naissance du\r\ng\u00e9n\u00e9ral de Gaulle et la p\u00e9riode 1945-1962* et que le moteur de recherche\r\nvous remonte directement les documents qui traitent exactement de ce\r\ndont vous, humain, vous parlez ? Imaginez un monde o\u00f9 l'on pourrait\r\ninterroger les bases de donn\u00e9es en langage naturel.\r\n\r\nNous pouvons conclure cet article r\u00e9dig\u00e9 \u00e0 l'occasion des Journ\u00e9es du\r\nLogiciel Libre 2021, sur le th\u00e8me des *Utopies concr\u00e8tes et accessibles*\r\npar cette proposition d'am\u00e9lioration : un acc\u00e8s unique \u00e0 toutes les\r\ndonn\u00e9es du web, requ\u00eatables en langage naturel et sans bruit\r\ndocumentaire... Un *International Knowledge Portal* !", "content_format": "text/markdown", "heading": "FranceArchives est un portail du service interminist\u00e9riel des archives de France d\u00e9velopp\u00e9 par Logilab. Il utilise des technologies du Web s\u00e9mantique.", "word_count": 2954, "creation_date": "2021/04/01 07:27:03", "modification_date": "2021/10/07 14:32:21", "cwuri": "https://www.logilab.fr/4716152"}, {"cw_etype": "BlogEntry", "eid": 3873776, "title": "R\u00e9sum\u00e9 de la conf\u00e9rence ISWC 2020", "content": "*Elodie Thi\u00e9blin, d\u00e9veloppeuse chez Logilab et sp\u00e9cialiste du Web s\u00e9mantique*\r\n\r\nDu 3 au 6 novembre, j'ai particip\u00e9 \u00e0 la conf\u00e9rence [ISWC (International Semantic\r\nWeb Conference)](https://iswc2020.semanticweb.org/), qui est une\r\ndes r\u00e9f\u00e9rences internationales dans le domaine du Web S\u00e9mantique. On y parle\r\ndes probl\u00e9matiques du web de donn\u00e9es li\u00e9es et de r\u00e9pr\u00e9sentation des\r\nconnaissances. Je partage ici mes notes sur les sujets qui m'ont le plus marqu\u00e9e.\r\n\r\n## D\u00e9briefing g\u00e9n\u00e9ral de la conf\u00e9rence\r\n\r\nCette ann\u00e9e, il y a eu de nombreux articles\r\nconsacr\u00e9s \u00e0 [SHACL (Shape Constraint Language)](https://www.w3.org/TR/shacl/).\r\n\r\nL'id\u00e9e de remettre l'utilisateur des donn\u00e9es et technologies du Web s\u00e9mantique\r\nau centre des innovations \u00e0 venir a \u00e9t\u00e9 r\u00e9p\u00e9t\u00e9e \u00e0 plusieurs reprises.\r\n\r\nL'intervention de Miriam Fernandez sur la diversit\u00e9 des donn\u00e9es \u00e9tait\r\nenrichissante. Elle invite les producteurs de donn\u00e9es \u00e0 se poser la question du\r\nbiais de leurs donn\u00e9es et de la repr\u00e9sentation du monde qu'elles renferment.\r\n\r\n> Des donn\u00e9es biais\u00e9es peuvent provoquer de d\u00e9sastreux effets sociaux.\r\n\r\nElle cite notamment [cet\r\narticle](https://ajph.aphapublications.org/doi/abs/10.2105/AJPH.2011.300275)\r\nqui pr\u00e9sente les r\u00e9sultats d'une \u00e9tude comparant les blessures des femmes et des\r\nhommes avec une ceinture de s\u00e9curit\u00e9 lors d'accidents de la route entre 1998\r\net 2008. La diff\u00e9rence de 47% entre les deux sexes serait imputable\r\naux mannequins de test de l'industrie automobile dimensionn\u00e9s sur des hommes.\r\n\r\n## R\u00e9sum\u00e9 de pr\u00e9sentations\r\n\r\nDeux papiers ont retenu mon attention pour faciliter l'utilisation des\r\ntechnologies du Web s\u00e9mantique par les d\u00e9veloppeuses et les d\u00e9veloppeurs Web.\r\n\r\n### ON2TS: Typescript generation from OWL ontologies and SHACL\r\n\r\n[ON2TS](https://github.com/jeswr/on2ts) est un prototype permettant de g\u00e9n\u00e9rer des classes et interfaces\r\nTypeScript \u00e0 partir d'ontologies OWL et de r\u00e8gles en SHACL.  Les d\u00e9veloppeurs\r\npeuvent donc utiliser directement les classes et interfaces g\u00e9n\u00e9r\u00e9es pour\r\nvalider la structure et la forme de leurs donn\u00e9es lors de l'ex\u00e9cution.\r\n\r\nCe prototype utilise la biblioth\u00e8que `@ldflex/comunica`, le moteur de requ\u00eates\r\npour langage LDflex, qui est d\u00e9crit ci-dessous.\r\n\r\nPour plus de d\u00e9tails, lisez l'[article](http://ceur-ws.org/Vol-2721/paper590.pdf).\r\n\r\n### LDflex: a Read/Write Linked Data Abstraction for Front-End Web Developers\r\n\r\n[LDflex](https://github.com/LDflex/LDflex) est un langage d\u00e9di\u00e9 qui fait\r\nappara\u00eetr les donn\u00e9es li\u00e9es du Web comme des structures de donn\u00e9es en\r\nJavaScript. La [vid\u00e9o de la pr\u00e9sentation](https://www.youtube.com/watch?v=2BHV1p2QzNw)\r\nest en ligne et il est possible d'exp\u00e9rimentation dans un\r\n[bac \u00e0 sable](https://solid.github.io/ldflex-playground/).\r\n\r\nSelon Ruben Verborgh, une des grandes diff\u00e9rences entre les applications Web et\r\nle Web s\u00e9mantique est la \"pr\u00e9dicabilit\u00e9\" : la structure et l'emplacement des donn\u00e9es\r\nsont pr\u00e9d\u00e9finis dans une application Web (souvent choisie par les d\u00e9veloppeurs\r\nde ladite application), tandis que dans le cas du Web s\u00e9mantique, les ontologies\r\nsont h\u00e9t\u00e9rog\u00e8nes et les donn\u00e9es sont distribu\u00e9es.\r\n\r\nLe but de LDflex est de simplifier la gestion des diff\u00e9rents formats\r\net modes d'interrogation des serveurs de Web de donn\u00e9es li\u00e9es: des donn\u00e9es\r\nen RDF peuvent \u00eatre r\u00e9cup\u00e9r\u00e9es depuis le Web puis interrog\u00e9es localement en SPARQL.\r\n\r\nAvec LDflex il est possible de manipuler une structure de donn\u00e9es locale, qui\r\nest mise en correspondance avec les donn\u00e9es RDF d'origine au moyen d'un contexte.\r\nPar exemple, le contexte suivant permet d'\u00e9crire `user.friends` pour\r\nr\u00e9cup\u00e9rer les individus ayant un lien `foaf:knows` vers user.\r\n\r\n```json\r\n \"@context\": {\r\n    \"@vocab\": \"http://xmlns.com/foaf/0.1/\",\r\n    \"friends\": \"knows\",\r\n    \"label\": \"http://www.w3.org/2000/01/rdf-schema#label\",\r\n  }\r\n```\r\n\r\nSi le mod\u00e8le \u00e9volue, il peut suffire de modifier le contexte pour adapter\r\nl'application, ce qui en simplifie la maintenance.\r\n\r\nLDflex semble donc \u00e0 premi\u00e8re vue une bonne alternative \u00e0 rdflib.js. Comme\r\ncette derni\u00e8re, elle d\u00e9pend toutefois des biblioth\u00e8ques d'authentification Solid\r\nqui prennent une [taille non n\u00e9gligeable\r\n(~500ko)](https://bundlephobia.com/result?p=@ldflex/comunica@3.4.2) dans le\r\nbundle final.\r\n\r\nLa biblioth\u00e8que `ldflex` inclut le langage LDflex et doit \u00eatre accompagn\u00e9e de\r\n`@ldflex/comunica`, son moteur de requ\u00eates sur le Web.\r\n\r\nUn rapide test sur logilab.fr (avec l'extension CORS Everywhere\r\nactiv\u00e9e) a suffit \u00e0 montrer qu'on peut utiliser [LDflex pour interroger les\r\ninstances de Cubicweb en version 3.28](https://solid.github.io/ldflex-playground/#%5B'https%3A%2F%2Fwww.logilab.fr%2F2474699'%5D.type)\r\n\r\nAutres tests et remarques :\r\n- Test sur http://dbpedia.org/resource/Paris\r\n    &rarr; *Mixed Blocked* depuis le bac \u00e0 sable en HTTPS\r\n- Test sur https://aims.fao.org/aos/agrovoc/c_30969\r\n     &rarr; *301 Moved Temporarily* mais pas de requ\u00eate sur l'URL cible (en HTTP)\r\n- Test sur https://www.wikidata.org/entity/Q535\r\n    &rarr; redirection \u00e0 travers les diff\u00e9rentes URL pour obtenir le RDF est g\u00e9r\u00e9e et fonctionne\r\n    &rarr; requ\u00eatage en SPARQL ne fonctionne pas car l'entit\u00e9 est d\u00e9crite en HTTP et non HTTPS dans le RDF\r\n\r\nIl sera int\u00e9ressant de suivre l'\u00e9volution de ce projet pour r\u00e9pondre aux\r\nquestions suivantes:\r\n\r\n- Comment g\u00e9rer plusieurs contextes simultan\u00e9ment (r\u00e9cup\u00e9rer `foaf:name` et\r\n  `schema:name` \u00e0 la fois par exemple) ?\r\n- Comment contourner le probl\u00e8me des requ\u00eates *Mixed Blocked* en gardant les\r\n  donn\u00e9es distribu\u00e9es sur le Web ?\r\n\r\n## Conclusion\r\n\r\nCette exp\u00e9rience a \u00e9t\u00e9 tr\u00e8s enrichissante, comme chaque ann\u00e9e. Je suis contente\r\nqu'il y ait de plus en plus d'initiatives pour rendre le Web s\u00e9mantique agr\u00e9able\r\net accessible aux d\u00e9veloppeuses et aux d\u00e9veloppeurs Web. Cela va peut-\u00eatre encourager\r\nla valorisation des entrep\u00f4ts de donn\u00e9es li\u00e9es dans des applications en production.\r\n\r\nUn des sujets rest\u00e9 sans r\u00e9ponse est la gestion des configurations des serveurs\r\nsur le Web de donn\u00e9es li\u00e9es pour notamment la gestion des erreurs\r\n[CORS](https://developer.mozilla.org/fr/docs/Web/HTTP/CORS), [Mixed\r\nBlocked](https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content),\r\netc.\r\n\r\nRendez-vous l'ann\u00e9e prochaine pour v\u00e9rifier ces hypoth\u00e8ses.", "content_format": "text/markdown", "heading": "*Elodie Thi\u00e9blin, d\u00e9veloppeuse chez Logilab et sp\u00e9cialiste du Web s\u00e9mantique*\r\n\r\nDu 3 au 6 novembre, j'ai particip\u00e9 \u00e0 la conf\u00e9rence [ISWC (International Semantic\r\nWeb Conference)](https://iswc2020.semanticweb.org/), qui est une\r\ndes r\u00e9f\u00e9rences internationales dans le domaine du Web S\u00e9manti...", "word_count": 798, "creation_date": "2021/01/20 00:02:14", "modification_date": "2021/01/20 00:04:54", "cwuri": "https://www.logilab.fr/3873776"}, {"cw_etype": "BlogEntry", "eid": 2474699, "title": "N\u00e9gociation de contenu dans CubicWeb", "content": "[CubicWeb](https://cubicweb.readthedocs.io) est un cadriciel libre de gestion de\r\ndonn\u00e9es sur le Web d\u00e9velopp\u00e9 et maintenu par [Logilab](https://logilab.fr)\r\ndepuis 15 ans. Il est utilis\u00e9 depuis 2010 dans des applications d'envergure\r\ntelles que [DataBnF](https://data.bnf.fr) ou\r\n[FranceArchives](https://francearchives.fr/). Bas\u00e9 sur les principes du web\r\ns\u00e9mantique depuis sa cr\u00e9ation, il adopte \u00e0 son rythme les standards du W3C pour\r\nfaciliter la publication de donn\u00e9es sur le [Web de donn\u00e9es li\u00e9es\r\n(LOD)](https://www.lod-cloud.net/).\r\n\r\nCubicWeb vient de franchir une nouvelle \u00e9tape avec la version 3.28 sortie le 24\r\njuin 2020, qui met \u00e0 disposition la n\u00e9gociation de contenu HTML / RDF.\r\n\r\nCette fonctionnalit\u00e9 a fait l'objet d'un [article\r\nscientifique](http://pfia2020.fr/wp-content/uploads/2020/06/actes_IC_CH_PFIA2020.pdf)\r\net d'une d\u00e9monstration lors de la conf\u00e9rence d'Ing\u00e9nierie de Connaissance de la Plateforme Fran\u00e7aise d'Intelligence Artificielle.\r\n\r\nNous allons maintenant pr\u00e9senter CubicWeb, les principes de la n\u00e9gociation de\r\ncontenu en g\u00e9n\u00e9ral, les choix faits pour la mettre en oeuvre dans CubicWeb et\r\ncomment personnaliser le RDF g\u00e9n\u00e9r\u00e9.\r\n\r\n# Pr\u00e9sentation de CubicWeb\r\n\r\nCubicWeb fonctionne par composants, appel\u00e9s\r\n[cubes](https://www.cubicweb.org/project), qui peuvent \u00eatre combin\u00e9s pour cr\u00e9er\r\nune application (qui est elle-m\u00eame un cube r\u00e9utilisable).\r\nUn cube est compos\u00e9:\r\n\r\n1. 1- d'un sch\u00e9ma (ou mod\u00e8le donn\u00e9es) exprim\u00e9 en\r\n   [YAMS](https://cubicweb.readthedocs.io/en/latest/book/devrepo/datamodel/definition/),\r\n   un langage qui permet d'exprimer un mod\u00e8le entit\u00e9-association et les\r\n   permissions associ\u00e9es en python ;\r\n\r\n2. 2- d'une logique applicative ;\r\n\r\n3. 3- de vues (interfaces graphiques ou fonctions d'export de donn\u00e9es).\r\n\r\nLorsqu'une application est \"instanci\u00e9e\", le sch\u00e9ma YAMS est compil\u00e9 en un sch\u00e9ma\r\nSQL et une base de donn\u00e9es Postgresql est initialis\u00e9e pour stocker le mod\u00e8le et\r\nles donn\u00e9es de l'application.\r\n\r\n![Sch\u00e9ma YAMS du cube Blog](https://www.logilab.fr/file/2474706/raw/schema_yams_blog.png)  \r\n\r\n\r\nLa logique de l'application, \u00e9crite en Python, interagit\r\navec la base de donn\u00e9es par le biais du sch\u00e9ma YAMS et du langage de requ\u00eate\r\n[RQL](https://cubicweb.readthedocs.io/en/3.28/book/annexes/rql/language/). Il\r\nn'y a donc pas besoin d'\u00e9crire des requ\u00eates SQL et de se pr\u00e9occuper du sch\u00e9ma\r\nphysique de la base relationnelle sous-jacente.\r\n\r\n\r\nL'introduction d'une s\u00e9paration nette entre l'obtention des donn\u00e9es via une\r\nrequ\u00eate RQL et leur mise en forme par une vue permet d'offrir \u00e0 l'utilisateur\r\nune grande libert\u00e9 dans son exploration de la base.\r\n\r\nS'il n'y a pas de vue personnalis\u00e9e pr\u00e9vue pour une entit\u00e9 du mod\u00e8le YAMS, une\r\nvue est g\u00e9n\u00e9r\u00e9e automatiquement, ce qui assure que toutes les donn\u00e9es sont\r\nvisibles et manipulables, ne serait-ce qu'au travers d'une interface minimale\r\nqui permet aux utilisateurs autoris\u00e9s d'ajouter, \u00e9diter et supprimer les entit\u00e9s\r\nde l'application.\r\n\r\nDans cette architecture, offrir une repr\u00e9sentation RDF d'une ressource/entit\u00e9\r\nconsiste \u00e0 d\u00e9finir une vue sp\u00e9cifique, qui traduira dans le vocabulaire RDF\r\nchoisi les entit\u00e9s d\u00e9finies par le mod\u00e8le YAMS.\r\n\r\n\r\n# Pr\u00e9sentation de la n\u00e9gociation de contenu\r\n\r\nLa n\u00e9gociation de contenu permet d'obtenir plusieurs repr\u00e9sentations d'une m\u00eame ressource \u00e0 partir d'une m\u00eame URL[^1].\r\n\r\nUne personne visitant la ressource `http://cubicweb.example.com/person/123` avec\r\nson navigateur souhaite g\u00e9n\u00e9ralement obtenir la version HTML pour la lire.\r\nDans le Web de donn\u00e9es, un robot ou un programme sera plus int\u00e9ress\u00e9 par la\r\nrepr\u00e9sentation RDF de cette ressource pour en traiter les donn\u00e9es.\r\n\r\n![Sch\u00e9ma d'un serveur retournant pour la m\u00eame URL `http://cubicweb.example.com/person/123` soit la repr\u00e9sentation RDF \u00e0 un robot, soit la repr\u00e9sentation HTML \u00e0 un humain.](https://www.logilab.fr/file/2474735/raw/upload_597d058f2da500daa9780c1617a9a2bc.png)\r\n\r\n\r\nLa m\u00eame ressource abstraite est donc mise \u00e0 disposition par le serveur sous deux repr\u00e9sentations distinctes : le RDF et le HTML.\r\nLe m\u00e9canisme de n\u00e9gociation de contenu permet de servir ces repr\u00e9sentations\r\ndepuis la m\u00eame URL, qui pourra ainsi \u00eatre partag\u00e9e entre ces deux mondes : humain\r\net robot.\r\n\r\n# Impl\u00e9mentation de la n\u00e9gociation de contenu\r\n\r\nLa n\u00e9gociation de contenu passe par les diff\u00e9rents en-t\u00eates `Accept*` d'une\r\nrequ\u00eate HTTP. Elle peut concerner la langue avec `Accept-Language`, le jeu de\r\ncaract\u00e8res avec `Accept-Charset`, l'encodage avec `Accept-Encoding` ou encore le\r\nformat avec `Accept`.\r\n\r\nC'est l'en-t\u00eate `Accept` qui est utilis\u00e9e par le client pour sp\u00e9cifier qu'il\r\nsouhaite la repr\u00e9sentation RDF d'une ressource dans un format donn\u00e9, en\r\nutilisant l'un des types\r\n[MIME](https://fr.wikipedia.org/wiki/Multipurpose_Internet_Mail_Extensions)\r\nsuivants :\r\n\r\n- \u00b7 application/rdf+xml\r\n\r\n- \u00b7\u00a0text/turtle\r\n\r\n- \u00b7 text/n3\r\n\r\n- \u00b7 application/n-quads\r\n\r\n- \u00b7 application/n-triples\r\n\r\n- \u00b7 application/trig\r\n\r\n- \u00b7 application/ld+json\r\n\r\nLorsqu'une requ\u00eate est envoy\u00e9e au serveur avec l'en-t\u00eate `Accept` et un type MIME de la liste ci-dessus, le serveur peut r\u00e9pondre de plusieurs fa\u00e7ons.\r\n\r\nIl peut indiquer au client, via une redirection interm\u00e9diaire (303 See Other), l'URL o\u00f9 se trouve la ressource dans la bonne repr\u00e9sentation. C'est le choix fait par [Virtuoso](https://virtuoso.openlinksw.com/).\r\n\r\n![N\u00e9gociation de contenu avec r\u00e9ponse 303 See Other](https://www.logilab.fr/file/2474731/raw/upload_25c53ea2a8f280961bef97a2e7aec75a.png)\r\n\r\nIl peut \u00e9galement r\u00e9pondre en envoyant directement la description RDF dans le format correspondant au type MIME de la requ\u00eate.\r\n\r\n![N\u00e9gociation de contenu directe](https://www.logilab.fr/file/2474720/raw/upload_faee9e7c2218369a1e9912f8e74e680e.png)\r\n\r\nC'est le choix que nous avons fait dans CubicWeb, pour \u00e9viter une seconde\r\nrequ\u00eate et gagner en efficacit\u00e9.\r\n\r\n# Description RDF des entit\u00e9s CubicWeb\r\n\r\nDans la version 3.28, CubicWeb fournit une repr\u00e9sentation en RDF par d\u00e9faut de\r\nses entit\u00e9s, qui contient deux \u00abtypes\u00bb de triplets :\r\n\r\n- \u00b7 ceux qui d\u00e9crivent les relations et attributs du sch\u00e9ma [YAMS](https://cubicweb.readthedocs.io/en/latest/book/devrepo/datamodel/definition/). Ils utilisent le pr\u00e9fixe `http://ns.cubicweb.org/cubicweb/0.0/`, abr\u00e9g\u00e9 en `cubicweb`.\r\n\r\n- \u00b7 ceux qui d\u00e9crivent des relations [Dublin Core](http://dublincore.org).\r\n\r\nPar exemple, si vous avez une instance qui h\u00e9berge des articles de blog\r\n(`CustomBlogEntry`), vous pourrez ex\u00e9cuter\u00a0:\r\n\r\n    curl -iH \"Accept: text/turtle\" http://cubicweb.example.com/customblogentry/2872\r\n\r\nqui retournera\u00a0:\r\n\r\n\r\n    @prefix cubicweb: <http://ns.cubicweb.org/cubicweb/0.0/> .\r\n    @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\r\n    @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .\r\n    @prefix dc: <http://purl.org/dc/elements/1.1/> .\r\n\r\n    # triplets Cubicweb (g\u00e9n\u00e9r\u00e9s par cw_triples())\r\n    <http://cubicweb.example.com/902> cubicweb:wf_info_for <http://cubicweb.example.com/901> .\r\n\r\n    <http://cubicweb.example.com/901> a cubicweb:CustomBlogEntry ;\r\n        cubicweb:content \"Ceci est le contenu de mon billet de blog\" ;\r\n        cubicweb:content_format \"text/plain\" ;\r\n        cubicweb:creation_date \"2020-07-09T07:59:09.339052+00:00\"^^xsd:dateTime ;\r\n        cubicweb:entry_of <http://cubicweb.example.com/900> ;\r\n        cubicweb:modification_date \"2020-07-09T07:59:29.300045+00:00\"^^xsd:dateTime ;\r\n        cubicweb:title \"Mon billet de blog\" .\r\n\r\n    # triplets Dublin Core (g\u00e9n\u00e9r\u00e9 par dc_triples())\r\n        dc:language \"en\" ;\r\n        dc:title \"Mon billet de blog\" ;\r\n        dc:type \"Blog entry\" .\r\n        \r\n\r\n\r\n# Personnaliser le RDF g\u00e9n\u00e9r\u00e9\r\n\r\nPour personnaliser la repr\u00e9sentation RDF d'un type d'entit\u00e9, il faut cr\u00e9er une\r\nclasse h\u00e9ritant de `EntityRDFAdapter`, puis red\u00e9finir sa m\u00e9thode `triples` qui\r\ndoit, comme son nom l'indique, renvoyer un ensemble de triplets. Les triplets\r\nsont form\u00e9s avec [rdflib](https://github.com/RDFLib/rdflib).\r\n\r\nPar d\u00e9faut, la m\u00e9thode `triples` appelle les m\u00e9thodes `cw_triples` et\r\n`dc_triples` de `EntityRDFAdapter` pour r\u00e9cup\u00e9rer respectivement les triplets\r\nCubicWeb et les triplets Dublin Core. Ces m\u00e9thodes peuvent \u00eatre surcharg\u00e9es si\r\nn\u00e9cessaire.\r\n\r\nLe code ci-dessous montre un exemple d'adaptateur RDF pour la classe `BlogEntry`.\r\nLa fonction `_use_namespace` permet de relier un pr\u00e9fixe \u00e0 son *namespace* dans\r\nle graphe RDF g\u00e9n\u00e9r\u00e9, en l'ajoutant au dictionnaire `NAMESPACES` du module `cubicweb.rdf`.\r\n\r\n\r\n\r\n    from rdflib import URIRef, Namespace\r\n    from cubicweb.entities.adapters import EntityRDFAdapter\r\n    from cubicweb.rdf import NAMESPACES\r\n\r\n    NAMESPACES[\"sioct\"] = Namespace(\"http://rdfs.org/sioc/types#\")\r\n\r\n    class BlogEntryRDFAdapter(EntityRDFAdapter):\r\n        __select__ = is_instance(\"BlogEntry\")\r\n\r\n        def triples(self):\r\n            SIOCT = self._use_namespace(\"sioct\")\r\n            RDF = self._use_namespace(\"rdf\")\r\n            yield (URIRef(self.uri), RDF.type, SIOCT.BlogPost)\r\n \r\n\r\n\r\n## Exemple de triplets personnalis\u00e9s\r\n\r\nDans la version 1.14.0 du cube _blog_ sortie le 24 juin 2020, l'ontologie [SIOC](http://sioc-project.org/) (Semantically-Interlinked Online Communities) a \u00e9t\u00e9 utilis\u00e9e pour d\u00e9crire les entit\u00e9s relatives aux blogs.\r\n\r\nVoici le r\u00e9sultat obtenu pour un billet de blog\u00a0:\r\n\r\n\r\n    curl -iH \"Accept: text/turtle\" https://www.logilab.fr/blogentry/2872\r\n\r\n\r\nqui renverra:\r\n\r\n\r\n    @prefix dcterms: <http://purl.org/dc/terms/> .\r\n    @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\r\n    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\r\n    @prefix sioc: <http://rdfs.org/sioc/ns#> .\r\n    @prefix sioct: <http://rdfs.org/sioc/types#> .\r\n    @prefix xml: <http://www.w3.org/XML/1998/namespace> .\r\n    @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .\r\n\r\n    <http://www.logilab.fr/2872> a sioct:BlogPost ;\r\n        dcterms:date \"2019-06-28T15:28:31.852530+00:00\"^^xsd:dateTime ;\r\n        dcterms:format \"text/markdown\" ;\r\n        dcterms:modified \"2020-06-19T13:26:20.750747+00:00\"^^xsd:dateTime ;\r\n        dcterms:title \"SemWeb.Pro 2019 : envoyez votre proposition avant samedi 31 ao\u00fbt !\" ;\r\n        sioc:container <http://beta.logilab.fr1377> ;\r\n        sioc:content \"\"\"La prochaine \u00e9dition de SemWeb.Pro aura lieu mardi 3 d\u00e9cembre \u00e0 Paris.\\r\r\n    \\r\r\n    ![image](<https://www.logilab.fr/file/2873/raw>)\\r\r\n    \\r\r\n    Nous vous invitons \u00e0 soumettre vos propositions de pr\u00e9sentation en [r\u00e9pondant \u00e0 l'appel \u00e0 communication](<http://www.semweb.pro/semwebpro-2019.html>) **avant le 31 ao\u00fbt 2019**.\\r\r\n    \\r\r\n    Pour \u00eatre tenu inform\u00e9 de l'ouverture de la billetterie, envoyez un courriel \u00e0 contact at semweb.pro en demandant \u00e0 \u00eatre inscrit \u00e0 la liste d'information.\"\"\" .\r\n    \r\n\r\n\r\n# Les prochaines \u00e9tapes pour CubicWeb\r\n\r\nPermettre la n\u00e9gociation de contenu est une \u00e9tape de nos travaux actuels pour faire de CubicWeb une brique \u00e0 part enti\u00e8re du [LOD](https://fr.wikipedia.org/wiki/Linked_Open_Data).\r\nNous travaillons d\u00e9j\u00e0 \u00e0 la g\u00e9n\u00e9ration d'archive RDF pour faciliter l'export, mais \u00e9galement \u00e0 la possibilit\u00e9 d'interroger la base en SPARQL, en plus du [RQL](https://cubicweb.readthedocs.io/en/3.28/book/annexes/rql/language/#rql).\r\n\r\n[^1]: https://developer.mozilla.org/en-US/docs/Web/HTTP/Content_negotiation", "content_format": "text/markdown", "heading": "[CubicWeb](https://cubicweb.readthedocs.io) est un cadriciel libre de gestion de\r\ndonn\u00e9es sur le Web d\u00e9velopp\u00e9 et maintenu par [Logilab](https://logilab.fr)\r\ndepuis 15 ans. Il est utilis\u00e9 depuis 2010 dans des applications d'envergure\r\ntelles que [DataBnF](https://data.bnf.fr) ou\r\n[FranceAr...", "word_count": 1170, "creation_date": "2020/09/30 09:23:08", "modification_date": "2020/09/30 11:06:48", "cwuri": "https://www.logilab.fr/2474699"}]