assemblee-virtuelle / archipelago

Fostering interconnections between communities by creating synergies between their platforms
Apache License 2.0
14 stars 6 forks source link

[next] La carte des organisations ne fonctionne plus #140

Closed mguihal closed 9 months ago

mguihal commented 9 months ago

Décrivez le bug Les organisations ne s'affichent plus en basculant la vue Organisation vers la carte.

D'après mes investigations, dans cette vue, les ressources ont un objet vide dans l'attribut hasLocation, requis ici côté front : https://github.com/assemblee-virtuelle/archipelago/blob/master/frontend/src/resources/Agent/Actor/Organization/OrganizationList.js#L42-L43

Sur la branche master, il y avait auparavant cette ligne : https://github.com/assemblee-virtuelle/archipelago/blob/master/middleware/config/containers.js#L12 pour déréférencer les locations justement, mais si je comprends bien elle est sensée ne plus être nécessaire depuis la version 0.6.0-alpha.0 du middleware...

Est-ce que ça pourrait être dû à tes modifications sur les blankNodes @srosset81 ? La suite des investigations dépasse un peu mes compétences si le bug se situe à ce niveau

Comment peut-on corriger ça ? Ca parait plutôt impactant sur l'application comme souci :/

srosset81 commented 9 months ago

Théorétiquement, depuis https://github.com/assemblee-virtuelle/semapps/pull/1160 les requêtes SPARQL faites depuis le frontend devraient automatiquement déréférencer les blank nodes. Tu devais pouvoir vérifier ça en regardant la requête SPARQL envoyée au serveur ? Tu as bien mis aussi à jour le frontend vers la v0.6, pas seulement le backend ?

(@BastienSig devrait déployer très prochainement la version next sur https://archipel.assemblee-virtuelle.org, ça permettra de vérifier ça.)

mguihal commented 9 months ago

Oui, les versions étaient concordantes. Je préconiserais de ne pas attendre de déployer l'application en production pour vérifier la présence de ce bug (j'ai d'ailleurs déjà testé sur l'instance de Nantes et j'ai dû rollback)

Voici un scénario de reproduction en local :

La réponse de la requête Sparql est la suivante.

{
    "@graph": [
        {
            "@id": "_:b0",
            "@type": "http://virtual-assembly.org/ontologies/pair#PostalAddress",
            "addressCountry": "France",
            "addressLocality": "Nantes",
            "addressStreet": "8 Rue Lekain",
            "addressZipCode": "44000"
        },
        {
            "@id": "_:b1",
            "@type": "http://virtual-assembly.org/ontologies/pair#Place",
            "hasPostalAddress": "_:b0",
            "label": "8 Rue Lekain, 44000 Nantes, France",
            "http://virtual-assembly.org/ontologies/pair#latitude": 47.214577,
            "http://virtual-assembly.org/ontologies/pair#longitude": -1.562779
        },
        {
            "@id": "http://localhost:3000/organizations/organisation-test",
            "@type": "http://virtual-assembly.org/ontologies/pair#Organization",
            "created": "2023-11-01T16:27:25.133Z",
            "creator": "http://localhost:3000/users/0828fa12-fd5e-4c1e-9932-7712d6ead9d4",
            "modified": "2023-11-01T16:27:57.563Z",
            "hasLocation": "_:b1",
            "label": "Organisation test"
        }
    ],
    "@context": {
        "addressStreet": {
            "@id": "http://virtual-assembly.org/ontologies/pair#addressStreet"
        },
        "addressZipCode": {
            "@id": "http://virtual-assembly.org/ontologies/pair#addressZipCode"
        },
        "addressLocality": {
            "@id": "http://virtual-assembly.org/ontologies/pair#addressLocality"
        },
        "addressCountry": {
            "@id": "http://virtual-assembly.org/ontologies/pair#addressCountry"
        },
        "hasLocation": {
            "@id": "http://virtual-assembly.org/ontologies/pair#hasLocation",
            "@type": "@id"
        },
        "creator": {
            "@id": "http://purl.org/dc/terms/creator",
            "@type": "@id"
        },
        "label": {
            "@id": "http://virtual-assembly.org/ontologies/pair#label"
        },
        "modified": {
            "@id": "http://purl.org/dc/terms/modified",
            "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
        },
        "created": {
            "@id": "http://purl.org/dc/terms/created",
            "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
        },
        "longitude": {
            "@id": "http://virtual-assembly.org/ontologies/pair#longitude",
            "@type": "http://www.w3.org/2001/XMLSchema#double"
        },
        "latitude": {
            "@id": "http://virtual-assembly.org/ontologies/pair#latitude",
            "@type": "http://www.w3.org/2001/XMLSchema#double"
        },
        "hasPostalAddress": {
            "@id": "http://virtual-assembly.org/ontologies/pair#hasPostalAddress",
            "@type": "@id"
        },
        "ldp": "http://www.w3.org/ns/ldp#"
    }
}

En comparaison, celle sur la branche master est la suivante :

{
    "@graph": [
        {
            "@id": "_:b0",
            "@type": "pair:PostalAddress",
            "addressCountry": "France",
            "addressLocality": "Nantes",
            "addressStreet": "8 Rue Lekain",
            "addressZipCode": "44000"
        },
        {
            "@id": "_:b1",
            "@type": "pair:Place",
            "hasPostalAddress": "_:b0",
            "label": "8 Rue Lekain, 44000 Nantes, France",
            "pair:latitude": 47.214577,
            "pair:longitude": -1.562779
        },
        {
            "@id": "http://localhost:3000/organizations/organisation-test",
            "@type": "pair:Organization",
            "created": "2023-11-01T16:27:25.133Z",
            "creator": "http://localhost:3000/users/0828fa12-fd5e-4c1e-9932-7712d6ead9d4",
            "modified": "2023-11-01T16:27:57.563Z",
            "hasLocation": "_:b1",
            "label": "Organisation test"
        }
    ],
    "@context": {
        "addressStreet": {
            "@id": "http://virtual-assembly.org/ontologies/pair#addressStreet"
        },
        "addressZipCode": {
            "@id": "http://virtual-assembly.org/ontologies/pair#addressZipCode"
        },
        "addressLocality": {
            "@id": "http://virtual-assembly.org/ontologies/pair#addressLocality"
        },
        "addressCountry": {
            "@id": "http://virtual-assembly.org/ontologies/pair#addressCountry"
        },
        "hasLocation": {
            "@id": "http://virtual-assembly.org/ontologies/pair#hasLocation",
            "@type": "@id"
        },
        "creator": {
            "@id": "http://purl.org/dc/terms/creator",
            "@type": "@id"
        },
        "label": {
            "@id": "http://virtual-assembly.org/ontologies/pair#label"
        },
        "modified": {
            "@id": "http://purl.org/dc/terms/modified",
            "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
        },
        "created": {
            "@id": "http://purl.org/dc/terms/created",
            "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
        },
        "longitude": {
            "@id": "http://virtual-assembly.org/ontologies/pair#longitude",
            "@type": "http://www.w3.org/2001/XMLSchema#double"
        },
        "latitude": {
            "@id": "http://virtual-assembly.org/ontologies/pair#latitude",
            "@type": "http://www.w3.org/2001/XMLSchema#double"
        },
        "hasPostalAddress": {
            "@id": "http://virtual-assembly.org/ontologies/pair#hasPostalAddress",
            "@type": "@id"
        },
        "sec": "https://w3id.org/security#",
        "ldp": "http://www.w3.org/ns/ldp#",
        "pair": "http://virtual-assembly.org/ontologies/pair#"
    }
}

La différence visible entre les deux branches sont le nommage des attributs géographiques http://virtual-assembly.org/ontologies/pair#latitude sur next, contre pair:latitude sur master, mais je ne sais pas si ça peut avoir un impact.

Par contre, côté front, l'objet récupéré via useListContext contient un objet vide pour le champ hasLocation. Le bug serait alors côté semantic-data-provider ?

mguihal commented 9 months ago

Le bug peut être résolu en ajoutant :

blankNodes: ['pair:hasLocation', 'pair:hasLocation/pair:hasPostalAddress'],

dans le dataModel.list de la ressource Organization, mais ça semble plus palliatif qu'autre chose si les blankNodes sont sensés être trouvés automatiquement :/

Je ferai une PR demain pour proposer cette correction si on n'a pas d'autre piste.

srosset81 commented 9 months ago

C'est lié à la fonction getEmbedFramequi est appellée par fetchSparqlEndpoints lors du compactage des données. Si on passe l'option list.explicitEmbedOnFraming = false, ça marche. Je regarde plus précisément.

srosset81 commented 9 months ago

Fixé https://github.com/assemblee-virtuelle/semapps/commit/c3beda1af671c96affe2ce2757c5d92c41caf42b#diff-b739929b6e96b3ef47f22183465b1e9c4c49c2a057f27002bad241af3e23716e

Tu peux t'occuper de faire une release de la branche next (en alpha) si le besoin de déployer est urgent @mguihal ? (Pour publier sur NPM, il faut que tu te crée un compte sur https://npmjs.com et que tu m'indiques ton username.)

mguihal commented 9 months ago

Merci de la correction. Mon username sur npmjs c'est mguihal aussi.