16-03-2022 Opinionated Meta model
Cosa ho fatto
Ho integrato time-agnostic-library in Meta:
Se un MetaId non è presente sul triplestore, ora viene cercato anche nella provenance. In particolare, il nuovo metodo retrieve_metaid_from_merged_entity controlla se l’entità corrispondente sia stata cancellata a seguito di una fusione. Se sì, il MetaId dell’entità risultante dalla fusione viene sostituito al MetaId dell’entità in input cancellata a seguito della fusione. Come?
- Viene ricostruita la storia dell’entità in input.
- Vengono cercati tutti gli snapshot derivanti dal penultimo snapshot della storia ricostruita.
- Se c’è uno snapshot relativo a un MetaId diverso da quello in input, quello snapshot è una specializzazione dell’entità risultante dalla fusione.
Il metodo retrieve_metaid_from_merged_entity è stato testato e documentato.
Un MetaID coinvolto in un merge viene trovato indipendentemente dal campo in cui compare il MetaID (’id’, ‘author’, ‘editor’, ‘venue’, ‘volume’, ‘issue’, ‘publisher’).
Nuovi parametri di configurazione:
1
2
3
4
5
6
7
8# Specify a list of triplestore URLs containing provenance metadata
provenance_endpoints: []
# Specify a list of directories containing provenance metadata
provenance_dirs: []
# True if Blazegraph was used as a triplestore, and a textual index was built to speed up queries. For more information, see https://github.com/blazegraph/database/wiki/Rebuild_Text_Index_Procedure
blazegraph_full_text_search: False
# Specifies the triplestore URL to use as a cache to make queries on provenance faster
cache_triplestore_url: ''Nuovo metodo di supporto in time-agnostic-library, generate_config_file, che dati i parametri di configurazione genera un file aderente alla sintassi dei file di configurazione di time-agnostic-library.
- Questo metodo è utile per avere tutti i parametri di configurazione in un unico file, quello di Meta, e per generare al volo automaticamente quello di time-agnostic-library nella stessa directory di quello di Meta.
- Se il file di configurazione di time-agnostic-library è già presente, non viene rigenerato.
Ho riflettuto su quali campi del CSV in input di Meta rendere obbligatori in assenza di id. Ecco le mie proposte:
- Sono obbligatori i campi “title” e “author” (o “editor”) per le risorse di tipo book, dataset, dissertation, edited book, journal article, monograph, other, peer review, posted content, proceedings article, report, reference book. Anche pub_date
Il campo “author” è obbligatorio perché senza autori non ci sono citazioni.
- Sono obbligatori i campi “title” e “venue” per le risorse di tipo book chapter, book part, book section, book track, reference entry.
- Per quanto riguarda le risorse che possono contenerne altre e che non possono essere contenute a loro volta è obbligatorio solo il campo “title”.
- book series, book set, journal, proceedings series, report series, standard series.
- Eccezioni che seguono la stessa regola: component, proceedings e standard.
- Forzare venue per component.
- Per le risorse di tipo journal volume sono obbligatori i campi “venue” e “volume” o “venue” e “title”, per quelle di tipo journal issue sono obbligatori i campi “venue” e “issue” o “venue” e “title”.
id type title author pub_date venue volume issue page publisher editor book M O M O dataset (or data file) M O M O dissertation M O M O edited book M O M O journal article M O M O monograph M O M O other M O M O peer review M O M O posted content (or web content) M O M O proceedings article M O M O report M O M O reference book M O M O book chapter M M book part M M book section M M book track M M component M M reference entry M M book series M book set M journal M proceedings M proceedings series M report series M standard M standard series M journal issue O M O journal volume O M O - Ho implementato queste regole nel metodo is_a_valid_row. Se una riga risulta invalida viene scartata a monte dal Curator. Vengono eliminate anche le righe vuote.
- is_a_valid_row è stato testato e documentato.
- Sono obbligatori i campi “title” e “author” (o “editor”) per le risorse di tipo book, dataset, dissertation, edited book, journal article, monograph, other, peer review, posted content, proceedings article, report, reference book. Anche pub_date
Su suggerimento di Ivan, il tipo della venue viene validato sulla base dello schema dell’identificativo.
- Questo comportamento ha rotto un gran numero di test preesistenti. Correggerli è equivalso a testare il nuovo sistema di validazione.
Il file di cache viene ora cancellato al termine del processo, per tre motivi:
- Se non eliminato, i successivi processi di Meta lanciati con lo stesso file di configurazione ignorano erroneamente i nuovi file con nome identico a file registrati in cache.
- Eliminare la cache permette di capire rapidamente se il processo è giusto a termine, nel caso il sistema crashi dopo la fine del processo.
- Terminato il processo, il file di cache non ha alcuna utilità.
Novità relativa a CrossrefProcessing: se la risorsa è di tipo report-series ed è presente un ISSN, se il container-title è vuoto l’ISSN si riferisce alla risorsa stessa, altrimenti si riferisce alla venue.
- Questo comportamento è stato testato.
Novità relative all’articolo sulle time-traversal queries:
Ho modificato il codice dei benchmark perché tenga in considerazione le 20 entità precedentemente individuate.
Dato che ogni benchmark su ognuna delle 20 entità viene ripetuto 10 volte, vengono effettuate 200 iterazioni per ogni tipologia di query con soggetto noto.
Ho lanciato i benchmark usando Blazegraph come triplestore.
La nuova batteria di benchmark su time-agnostic-library ha due differenze con la prima:
- La macchina su cui vengono eseguiti è notevolmente più potente (i5 8500 → i9 12900k).
- Il numero di snapshot delle entità prese in considerazione e di quelle collegate è notevolmente incrementato (max 2 → max 35).
Pertanto, le query con soggetti noti durano di più e quelle con soggetti ignoti durano di meno.
Riporto i risultati parziali finora ottenuti dei nuovi benchmark (v2) e i risultati dei precedenti benchmark (v1).
Benchmark v1
Benchmark v2
Domande
Quali campi di un CSV per Meta dovrebbero essere obbligatori in assenza di id e di tipo?
- Titolo, autore o editor, e data.
Alla luce del modello di provenance di OpenCitations, è possibile che uno snapshot sia derivato (prov:wasDerivedFrom) da più di due snapshot?
Se un MetaId non è nel triplestore perché l’entità corrispondente è stata fusa a un’altra, penso che il MetaId da considerare sia quello dell’entità sopravvissuta al merge e che non si debba resuscitare l’entità cancellata. Cosa ne pensate?
Poniamo di volere scoprire se l’entità con MetaID ‘meta:ra/4321’ sia stata cancellata in seguito a una fusione. La query per scoprirlo è la seguente.
1
2
3
4
5
6
7
query = f'''
PREFIX prov: <http://www.w3.org/ns/prov#>
SELECT DISTINCT ?se
WHERE {{
?se prov:wasDerivedFrom <https://w3id.org/oc/meta/ra/4321/prov/se/2>.
}}'''Se c’è uno snapshot relativo a un MetaId diverso da meta:ra/4321, quello snapshot è una specializzazione dell’entità risultante dalla fusione.
Se la provenance è su file non ho modo di trovare il file o i file su cui eseguire questa query, perché il soggetto è ignoto. Infatti, l’informazione sul merge è presente solo nello snapshot dell’entità risultante dal merge e non nello snapshot dell’entità cancellata. Mi sfugge qualcosa?