ontoportal / ontoportal-project

OntoPortal Alliance centralized repository for the management of the OntoPortal project
https://ontoportal.org/
3 stars 1 forks source link

Implement mechanism to support integration with Dataverse #16

Open jonquet opened 1 year ago

jonquet commented 1 year ago

Is your feature request related to a problem? Please describe.

We need a way to ease the selection of vocabulary/ontology term in Dataverse using OntoPortal instances. For the moment the current intefcae requires 4 fields

image

In Data INRAE we can replace the fields above with only one, the concept search below:

image

Describe the solution you'd like

The plan is to :

Describe alternatives you've considered

Something similar has been done for SKOSMOS already. Lesson to be learned: https://osf.io/5af9q Also in video : https://www.youtube.com/watch?v=mWMPxCwB2ys&t=1825s

Additional context

This is being done in the context of FAIR-IMPACT T4.5 CC @DS-INRA @xeniacs @IlariaRosati @saubin78

syphax-bouazzouni commented 1 year ago

Context

This is a Technical update, addinng details after discussing with the team at INRAE Dataverse.

Goal

Extend the dataverse-external-vocab-support interface to work with Ontoportal repositories, which mean in summary two thing: 1- Add a configuration file for ontoportal (as already done for authors, affiliations, or, skosmos,...) 2- Add a JS/Jquery script to render the results got from Ontoportal from JSON to HTML

Roadmap

1- Get a API key

In both cases you will need to have an apikey, (having anonymous can be discussed in the future https://github.com/ncbo/bioportal_web_ui/issues/112) Here is a doc, to how to get an API key

2- Use our search API, to have an autocomplete

GET "https://data.agroportal.lirmm.fr/search?q=<pattern_to_search>&include_properties=true&include_views=true&apikey=<your_apikey>&display_context=false"

example of a result

    {
    "prefLabel": "plant",
    "definition": [
    "Any living organism that typically synthesizes its food from inorganic substances, possesses cellulose cell walls, responds slowly and often permanently to a stimulus, lacks specialized sense organs and nervous system, and has no powers of locomotion. (Source: CED)",
    "http://opendata.inra.fr/anaeeThes/i_def_24509784-142a-4d0d-9deb-2c7c5869ebde"
    ],
    "obsolete": false,
    "matchType": "prefLabel",
    "ontologyType": "ONTOLOGY",
    "provisional": false,
    "@id": "http://opendata.inra.fr/anaeeThes/c2_225",
    "@type": "http://www.w3.org/2002/07/owl#Class",
    "links": {
                "self": "https://data.agroportal.lirmm.fr/ontologies/ANAEETHES/classes/http%3A%2F%2Fopendata.inra.fr%2FanaeeThes%2Fc2_225",
                "ontology": "https://data.agroportal.lirmm.fr/ontologies/ANAEETHES",
                "children": "https://data.agroportal.lirmm.fr/ontologies/ANAEETHES/classes/http%3A%2F%2Fopendata.inra.fr%2FanaeeThes%2Fc2_225/children",
                "parents": "https://data.agroportal.lirmm.fr/ontologies/ANAEETHES/classes/http%3A%2F%2Fopendata.inra.fr%2FanaeeThes%2Fc2_225/parents",
                "descendants": "https://data.agroportal.lirmm.fr/ontologies/ANAEETHES/classes/http%3A%2F%2Fopendata.inra.fr%2FanaeeThes%2Fc2_225/descendants",
                "ancestors": "https://data.agroportal.lirmm.fr/ontologies/ANAEETHES/classes/http%3A%2F%2Fopendata.inra.fr%2FanaeeThes%2Fc2_225/ancestors",
                "instances": "https://data.agroportal.lirmm.fr/ontologies/ANAEETHES/classes/http%3A%2F%2Fopendata.inra.fr%2FanaeeThes%2Fc2_225/instances",
                "tree": "https://data.agroportal.lirmm.fr/ontologies/ANAEETHES/classes/http%3A%2F%2Fopendata.inra.fr%2FanaeeThes%2Fc2_225/tree",
                "notes": "https://data.agroportal.lirmm.fr/ontologies/ANAEETHES/classes/http%3A%2F%2Fopendata.inra.fr%2FanaeeThes%2Fc2_225/notes",
                "mappings": "https://data.agroportal.lirmm.fr/ontologies/ANAEETHES/classes/http%3A%2F%2Fopendata.inra.fr%2FanaeeThes%2Fc2_225/mappings",
                "ui": "http://agroportal.lirmm.fr/ontologies/ANAEETHES?p=classes&conceptid=http%3A%2F%2Fopendata.inra.fr%2FanaeeThes%2Fc2_225"
        }
}

From it you can extract two main information:

3- Use the dataverse-external-vocab-support plugin to retrieve concept details

The dataverse external vocab support plugin, need one main field in its configuration file, the retrieval-uri, in the case of skosmos they use https://skosmos.dev.finto.fi/rest/v1/data?uri={0}, with {0} equal to the URI of a concept in skosmos.

In our case, as we don't identify elements not only by URI but also with its Òntoloy. The retrieval-uri will be tricky:

 "retrieval-uri": "https://data.agroportal.lirmm.fr/ontologies/{0}"

with {0}equal to ${ontology_acronym}/classes/${concept_id}?display=all&display_context=false&display_links=false&apikey=${your_apikey}

here is an a example of a result

{
    "id": "http://opendata.inra.fr/anaeeThes/c2_225",
    "synonym": [ ],
    "prefLabel": "plant",
    "definition": [
            "Any living organism that typically synthesizes its food from inorganic substances, possesses cellulose cell walls, responds slowly and often permanently to a stimulus, lacks specialized sense organs and nervous system, and has no powers of locomotion. (Source: CED)",
    ],
    "obsolete": false,
    "inScheme": [
            "http://opendata.inra.fr/anaeeThes/"
    ],
    "memberOf": [ ],
    "isInActiveScheme": [
            "http://opendata.inra.fr/anaeeThes/"
    ],
    "isInActiveCollection": [ ],
    "created": null,
    "parents": [
            {
                "id": "http://opendata.inra.fr/anaeeThes/c2_2758",
                "synonym": [
                    "eukaryotes",
                    "eukaryota"
                ],
                "prefLabel": "eukaryote",
                "definition": [ ],
                "obsolete": false,
                "inScheme": [
                    "http://opendata.inra.fr/anaeeThes/"
                ],
                "created": null,
                "modified": "2020-04-17T09:38:53+02:00",
                "notation": null,
                "label": [ ],
                "prefLabelXl": [ ],
                "altLabelXl": [ ],
                "hiddenLabelXl": [ ],
                "prefixIRI": null,
                "subClassOf": [ ],
                "semanticType": [ ],
                "cui": [ ],
                "xref": null,
                "@id": "http://opendata.inra.fr/anaeeThes/c2_2758",
                "@type": "http://www.w3.org/2004/02/skos/core#Concept"
            }
    ],
    "modified": "2018-06-26T14:47:36+00:00",
    "notation": null,
    "label": [ ],
    "prefLabelXl": [ ],
    "altLabelXl": [ ],
    "hiddenLabelXl": [ ],
    "prefixIRI": null,
    "subClassOf": [ ],
    "semanticType": [ ],
    "cui": [ ],
    "xref": null,
    "properties": {
            "http://www.w3.org/2004/02/skos/core#narrower": [
                    "http://opendata.inra.fr/anaeeThes/c2_226",
                    "http://opendata.inra.fr/anaeeThes/c2_243",
                    "http://opendata.inra.fr/anaeeThes/c_4d1cf953",
                    "http://opendata.inra.fr/anaeeThes/c2_2440"
            ],
            "http://www.w3.org/2004/02/skos/core#definition": [
                    "Any living organism that typically synthesizes its food from inorganic substances, possesses cellulose cell walls, responds slowly and often permanently to a stimulus, lacks specialized sense organs and nervous system, and has no powers of locomotion. (Source: CED)",
                    "http://opendata.inra.fr/anaeeThes/i_def_24509784-142a-4d0d-9deb-2c7c5869ebde"
            ],
            "http://www.w3.org/2004/02/skos/core#prefLabel": [
                    "plante",
                    "plant"
            ],
            "http://www.w3.org/2004/02/skos/core#inScheme": [
                    "http://opendata.inra.fr/anaeeThes/"
            ],
            "http://www.w3.org/2004/02/skos/core#broader": [
                    "http://opendata.inra.fr/anaeeThes/c2_2758"
            ],
            "http://art.uniroma2.it/ontologies/vocbench#hasStatus": [
                    "Published"
            ],
            "http://www.w3.org/1999/02/22-rdf-syntax-ns#type": [
                    "http://www.w3.org/2004/02/skos/core#Concept",
                    "http://www.w3.org/2002/07/owl#NamedIndividual"
            ],
            "http://purl.org/dc/terms/modified": [
                    "2018-06-26T14:47:36Z"
            ],
            "http://www.w3.org/2004/02/skos/core#exactMatch": [
                    "http://aims.fao.org/aos/agrovoc/c_5993"
            ]
    },
    "@id": "http://opendata.inra.fr/anaeeThes/c2_225",
    "@type": "http://www.w3.org/2004/02/skos/core#Concept"
}
jonquet commented 1 year ago

Note that the config file must allow to specify a list of ontologies to deal with. If empty then all ontologies shall be used. Then such a list can be used into the /search call at step 2 to avoid getting back results that we know will be filter out after.