italia / ckan-it

This project provides everything you need to run CKAN plus a set of extensions for supporting Italian open data in a set of Docker images.
Other
17 stars 19 forks source link

API per associare licenze a risorse #53

Closed aborruso closed 4 years ago

aborruso commented 4 years ago

Buongiorno, nelle API "standard" di CKAN non sembra prevista la possibilità di associare una licenza a una risorsa https://docs.ckan.org/en/2.8/api/#ckan.logic.action.create.resource_create

La licenza è però un elemento obbligatorio del profilo DCAT-AP_IT.

In questa versione di CKAN del Team Digitale/AgID è stata aggiunta la possibilità di associare via API una licenza a una risorsa?

Lo chiedo perché un comando come

curl -H'Authorization: xxxx' \
'http://mysite/api/3/action/resource_create' \
--form package_id=testpackage \
--form description="descrizione" \
--form format=csv \
--form name="test" \
--form created="2019-06-27T09:27:03.840700" \
--form last_modified="2019-10-29T14:48:02.422579" \
--form upload=@myfile.csv \
--form distribution_format="CSV" \
--form license_id=cc-by

non associa la licenza cc-by alla risorsa; quella associata è la licenza di default (che credo sia una generica "dominio pubblico").

Grazie

jenkin commented 4 years ago

@giorgialodi hai suggerimenti?

giorgialodi commented 4 years ago

Ci sono tre elementi di attenzione sul tema licenze:

1) la licenza non è associata alla risorsa in CKAN perché il modello alla base di CKAN assegna la licenza al dataset non alla risorsa

2) per ovviare al punto 1 abbiamo affrontato il tema in questo modo. Nel nostro modello intermedio la licenza dovrebbe essere assegnata alla risorsa anche perché nella serializzazione RDF la licenza è attribuita correttamente alle risorse, a meno di un piccolo errore nella serializzazione documentato in un issue che ho aperto. C'è anche una licenza che viene associata al dataset e che sarebbe quella delle risorse se tutte le risorse hanno uguale licenza. Se le risorse hanno licenza diversa (e dovrebbe essere caso remoto) non potevamo concludere quale licenza fosse complessivamente assegnata al dataset e se non ricordo male dovrebbe essere stata messa unknown, seguendo il vocabolario controllato delle licenze.

3) nel campo extras di CKAN sono inserite tutte le indicazioni del profilo DCAT-AP_IT che non sono parte del modello base di CKAN. Detta in altri termini, è nel campo extras che ci sono coppie chiave-valore di tutti gli elementi di estensione di CKAN. Il campo extras è quindi diventato qualcosa di complesso :) Quindi per il discorso API forse conviene vedere come agire in questo elemento. Potrebbe essere utile prendere un dataset di esempio e da lì vedere il tutto e capire a valle come agire poi con le API di base di CKAN che noi non abbiamo toccato.

aborruso commented 4 years ago

Grazie @giorgialodi e @jenkin .

Quindi mi confermate che con le API attuali, non è possibile creare una risorsa con i parametri obbligatori per il modello DCAT-AP_IT (come la licenza). Corretto??

Vi chiedo una risposta "booleana", per capire la strada da prendere. Perché devo gestire dei cataloghi non in modo visuale, ma via API.

Un caro saluto a entrambi

aborruso commented 4 years ago

Solved!

Questo uno dei modi possibile:

curl -H 'Authorization: xxxx' 'http://mysite.com/api/3/action/resource_update' \
--form id=9c18efad-d854-40a4-9f3d-7eac6a0b3115 \
--form license_type="https://w3id.org/italia/controlled-vocabulary/licences/A21_CCBY40" 

@giorgialodi qual è l'endpoint da cui posso estrarre l'elenco degli URI delle licenze? Non vorrei puntare a roba non aggiornata.

Te lo chiedo perché mi sto occupando di una migrazione, ho licenze associate a dataset, e voglio crearmi i corrispettivi da passare via API alle risorse.

Grazie

giorgialodi commented 4 years ago

ciao @aborruso ti stavo scrivendo questo messaggio e poi ho visto che hai risolto. Bene :) L'endpoint dove trovare il vocabolario controllato delle licenze è questo: https://ontopia-virtuoso.pdnd.italia.it/sparql Da qui con una query sparql ti tiri fuori tutte gli URI delle licenze (che stanno a livello 3 - il primo livello ti dice se la licenza è open o meno o è sconosciuta, e il secondo ti dice il tipo di licenza). Chiaramente, la stessa query la puoi invocare machine-to-machine

aborruso commented 4 years ago

@giorgialodi ottimo, è sempre un piacere.

@jenkin forse una nota su questa cosa si potrebbe mettere nella documentazione, visto che questo CKAN non è "standard", e che su aspetti come questo (giustamente) non si trovano tracce nella documentazione ufficiale.

Grazie ancora a entrambi

jenkin commented 4 years ago

@aborruso quindi se ho capito bene, prima crei la risorsa usando l'endpoint resource_create, ricavi l'id e poi l'aggiorni aggiungendo la licenza usando resource_update. Corretto?

aborruso commented 4 years ago

Caro @jenkin, corretto.

Lo puoi fare anche in fase di creazione usando resource_create. Con ad esempio

curl -H'Authorization: xxxxxx' \
'http://mysite.com/api/3/action/resource_create' \
--form package_id=test \
--form description="lorem ipsum" \
--form format=csv \
--form name="temperatura-aria" \
--form created="2019-06-27T09:27:03.840700" \
--form last_modified="2019-10-29T14:48:02.422579" \
--form upload=@01_sias_01-12.csv \
--form distribution_format="CSV" \
--form license_type="https://w3id.org/italia/controlled-vocabulary/licences/A21_CCBY40"