SPW-DIG / metawal-core-geonetwork

Metawal - Catalogue pour l'information géographique de Wallonie
http://metawal.wallonie.be
GNU General Public License v2.0
3 stars 1 forks source link

Requête API "open data" #834

Closed vbombaerts closed 7 months ago

vbombaerts commented 1 year ago

Demande de requête de la part de Dominique pour obtenir l'id, la date de mise à jour de la ressource, les formats et les EPSG des données considérées comme "open". L'objectif est de vérifier, en routine, si le prézip existant contient bien la dernière version de la donnée. Egalement d'éliminer les prezip sur les donnée obsolètes/plus distribuées.

Sont considérés comme open data dans ce use case :

Exclure :

fxprunayre commented 1 year ago

Exemple de requête via l'interface https://metawal.wallonie.be/geonetwork/srv/eng/catalog.search#/search?any=q(%2BMD_LegalConstraintsOtherConstraintsObject.link:%22https:%2F%2Fgeoportail.wallonie.be%2Ffiles%2Fdocuments%2FConditionsSPW%2FDataSPW-CGA.pdf%22)

Exclure :

A préciser avec un exemple de fiche ?

vbombaerts commented 1 year ago

La requête de ce qu'il me faudrait serait qqch comme ça :

En français :

Il faut que ce soit une ressource de type donnée, jeu de données, serie, donnée non géo, document ET qu'elle soit publiée pour tous ET qu'elle soit publiée dans le groupe GeoportailWal ET qu'elle soit considérée comme Open data.

Pour être considérée comme open data, il faut soit qu'elle ait le mot-clé InfraSIG Open Data OU qu'elle ait la combinaison des licences CGA+CPU-TypeC OU qu'elle soit une des licences creative commons

En pseudo Elastic

+resourceType:(data OR dataset OR document OR nonGeographicDataset OR series) AND +isPublishedToAll:true AND +groupPublished:"GeoportailWal" AND [
+th_infraSIG.default:"Open Data" OR +mw-gp-constraintsObject.link: ("https://geoportail.wallonie.be/files/documents/ConditionsSPW/DataSPW-CGA.pdf" AND "https://geoportail.wallonie.be/files/documents/ConditionsSPW/DataSPW-CPU-TypeC.pdf") OR +mw-gp-constraintsObject.link:("https://creativecommons.org/licenses/by-sa/3.0/" OR "https://creativecommons.org/licenses/by-nc/4.0/legalcode" OR "https://creativecommons.org/licenses/by/4.0/deed.fr" OR "https://creativecommons.org/licenses/by-nc/3.0/fr/" OR "https://creativecommons.org/licenses/by-sa/2.0/be") ]

Mais en plus, il faudrait que ce soit en query DSL pour pouvoir en faire une requête qui sera envoyée de FME vers l'API Metawal _search.

😃

vbombaerts commented 1 year ago

On peut éviter le

AND +groupPublished:"GeoportailWal"

si ils font la requête directement sur le point d'accès GeoportailWal

On peut aussi simplifier le

OR +mw-gp-constraintsObject.link:("https://creativecommons.org/licenses/by-sa/3.0/" OR "https://creativecommons.org/licenses/by-nc/4.0/legalcode" OR "https://creativecommons.org/licenses/by/4.0/deed.fr" OR "https://creativecommons.org/licenses/by-nc/3.0/fr/" OR "https://creativecommons.org/licenses/by-sa/2.0/be")

puisque toutes les adresses commencent par https://creativecommons.org/licenses

Autre point : peut-on indiquer dans la requête de ne renvoyer en réponse que

fxprunayre commented 1 year ago

Pour la sélection des champs on peut utiliser _source

{
  "_source": {
    "includes": [ "resourceIdentifier.code", "revisionDateForResource", "format", "crsDetails.code" ]
  },
  "query": {
    "query_string": {
      "query": "+isPublishedToAll:true +resourceType:(data OR dataset OR document OR nonGeographicDataset OR series)
"
    }
  }
}

eg.

curl 'https://metawal.wallonie.be/geonetwork/srv/api/search/records/_search' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: eng' \
  -H 'Content-Type: application/json;charset=UTF-8' \
  -H 'Cookie: XSRF-TOKEN=d911162a-e35b-4aec-bd09-510a8b990c08; JSESSIONID=08C609A60169C6FF9709FB2F06F67DB7; serverTime=1686227744514; sessionExpiry=1686227744514; _gid=GA1.2.1573378445.1686202625; _gat=1; _ga_LSCTPKPSGL=GS1.1.1686227738.9.0.1686227738.0.0.0; _ga=GA1.1.1211503249.1682583678' \
  -H 'X-XSRF-TOKEN: d911162a-e35b-4aec-bd09-510a8b990c08' \
  --data-raw $'{"_source": {"includes": [ "resourceIdentifier.code", "revisionDateForResource", "format", "crsDetails.code" ]},"query": {"query_string": {"query": "+isPublishedToAll:true +resourceType:(data OR dataset OR document OR nonGeographicDataset OR series)"}}}'
fxprunayre commented 1 year ago

Si on y va par étape:

q(+isPublishedToAll:true +resourceType:(data OR dataset OR document OR nonGeographicDataset OR series)) = 736 
q(mw-gp-constraintsObject.link:/https:\/\/creativecommons.org\/licenses.*/) = 17
q(mw-gp-constraintsObject.link:("https://geoportail.wallonie.be/files/documents/ConditionsSPW/DataSPW-CGA.pdf" AND "https://geoportail.wallonie.be/files/documents/ConditionsSPW/DataSPW-CPU-TypeC.pdf")) = 134
q(th_infraSIG.default:"Open Data") = 414
q(th_infraSIG.default:"Open Data" OR mw-gp-constraintsObject.link:("https://geoportail.wallonie.be/files/documents/ConditionsSPW/DataSPW-CGA.pdf" AND "https://geoportail.wallonie.be/files/documents/ConditionsSPW/DataSPW-CPU-TypeC.pdf") OR mw-gp-constraintsObject.link:/https:\/\/creativecommons.org\/licenses.*/) = 439

q(+isPublishedToAll:true +resourceType:(data OR dataset OR document OR nonGeographicDataset OR series) +(th_infraSIG.default:"Open Data" OR mw-gp-constraintsObject.link:("https://geoportail.wallonie.be/files/documents/ConditionsSPW/DataSPW-CGA.pdf" AND "https://geoportail.wallonie.be/files/documents/ConditionsSPW/DataSPW-CPU-TypeC.pdf") OR mw-gp-constraintsObject.link:/https:\/\/creativecommons.org\/licenses.*/)) = 429

Ca semble correct ?

vbombaerts commented 1 year ago

oui, très correct

vbombaerts commented 1 year ago

Finalement, c'était pas si compliqué :

{
   "from": 0,
  "size": 100,
 "_source": {
    "includes": [ "mw-gp-globalIdentifier", "revisionDateForResource", "format", "crsDetails.code", "status"]
  },
"query": {
  "bool": {
  "must": [
    {"terms": {"resourceType": ["data","dataset","series","document","nonGeographicDataset"]}},
    {"term":  {"isPublishedToAll": {"value": "true"}}},
    {"term":  {"groupPublished": {"value": "GeoportailWal"}}},
    {"bool": {
      "should": [
        {"term":  {"th_infraSIG.default": {"value": "Open Data"}}},
        {"term":  {"mw-gp-constraintsObject.link": {"value": "https://creativecommons.org/licenses"}}},
        {"bool": {
          "must": [
            {"term": {"mw-gp-constraintsObject.link": {"value": "https://geoportail.wallonie.be/files/documents/ConditionsSPW/DataSPW-CPU-TypeC.pdf"}}},
            {"term": {"mw-gp-constraintsObject.link": {"value": "https://geoportail.wallonie.be/files/documents/ConditionsSPW/DataSPW-CGA.pdf"}}}
          ]
        }}
      ]
    }}
]
}
}
}

Le "bool" permet d'introduire les AND, les OR et les NOT https://www.elastic.co/guide/en/elasticsearch/guide/2.x/combining-filters.html

curl -X POST "https://metawal.wallonie.be/geonetwork/srv/api/search/records/_search?bucket=metadata" -H "accept: application/json" -H "Content-Type: application/json" -H "X-XSRF-TOKEN: cdd82d72-7311-4a21-bcee-01cc92a286df" -d "{\"from\":0,\"size\":100,\"_source\":{\"includes\":[\"mw-gp-globalIdentifier\",\"revisionDateForResource\",\"format\",\"crsDetails.code\",\"status\"]},\"query\":{\"bool\":{\"must\":[{\"terms\":{\"resourceType\":[\"data\",\"dataset\",\"series\",\"document\",\"nonGeographicDataset\"]}},{\"term\":{\"isPublishedToAll\":{\"value\":\"true\"}}},{\"term\":{\"groupPublished\":{\"value\":\"GeoportailWal\"}}},{\"bool\":{\"should\":[{\"term\":{\"th_infraSIG.default\":{\"value\":\"Open Data\"}}},{\"term\":{\"mw-gp-constraintsObject.link\":{\"value\":\"https://creativecommons.org/licenses\"}}},{\"bool\":{\"must\":[{\"term\":{\"mw-gp-constraintsObject.link\":{\"value\":\"https://geoportail.wallonie.be/files/documents/ConditionsSPW/DataSPW-CPU-TypeC.pdf\"}}},{\"term\":{\"mw-gp-constraintsObject.link\":{\"value\":\"https://geoportail.wallonie.be/files/documents/ConditionsSPW/DataSPW-CGA.pdf\"}}}]}}]}}]}}}"