27-09-2024 SHACL Advanced Features
La Novitade
HERITRACE
- Se un valore ha tra i datatype, xsd:date, xsd:gYearMonth o xsd:gYear
- Di dault c’è il selettore per la data, ma è possibile selezionare anche gli altri formati.
- Rimane la possibilità di inserire il valore a mano per gli utenti sgamati
- Di default vengono mostrati solo i campi obbligatori. Gli altri devono essere aggiunti a mano.
- Gestione dinamica del required
- Validazione
Ci vuole coraggio per riuscire a inserire dati invalidi con un form che ti forza in ogni modo a inserirne di validi, comunque è buona pratica validare sia frontend che backend, quindi famolo
Frontend
- Bisogna specificare almeno una proprietà
- I campi obbligatorio vanno compilati
- Validazione url
- Validazione datatype
- Validazione condizioni (regex)
Backend
- Se c’è shacl,
- il tipo è obbligatorio e dev’essere tra i tipi previsti
- Le proprietà devono essere previste per quel tipo
- Il minimo e il massimo di proprietà per un campo devono corrispondere a quelle attese
- I datatype devono essere quelli attesi
- Se ci sono valori opzionali, il valore deve rientrare in quelli opzionali
- Se non c’è shacl
- Gli URI devono essere URI
- Se c’è shacl,
https://www.w3.org/TR/shacl-af/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61schema:JournalArticleIdentifierShape
a sh:NodeShape ;
sh:targetClass datacite:Identifier ;
sh:property [
sh:path rdf:type ;
sh:hasValue datacite:Identifier ;
sh:minCount 1 ;
sh:maxCount 1 ;
] ;
sh:property [
sh:path literal:hasLiteralValue ;
sh:datatype xsd:string ;
sh:minCount 1 ;
sh:maxCount 1 ;
] ;
sh:property [
sh:path datacite:usesIdentifierScheme ;
sh:minCount 1 ;
sh:maxCount 1 ;
] ;
sh:property [
sh:path literal:hasLiteralValue ;
sh:condition [
sh:path datacite:usesIdentifierScheme ;
sh:hasValue datacite:doi ;
] ;
sh:pattern "^10\\.\\d{4,9}/[-._;()/:A-Z0-9]+$" ;
sh:message "DOI must start with '10.' followed by a prefix and a suffix" ;
] ;
sh:property [
sh:path literal:hasLiteralValue ;
sh:condition [
sh:path datacite:usesIdentifierScheme ;
sh:hasValue datacite:pmid ;
] ;
sh:pattern "^\\d+$" ;
sh:message "PMID must contain only numbers" ;
] ;
sh:property [
sh:path literal:hasLiteralValue ;
sh:condition [
sh:path datacite:usesIdentifierScheme ;
sh:hasValue datacite:pmcid ;
] ;
sh:pattern "^PMC\\d+$" ;
sh:message "PMCID must start with 'PMC' followed by numbers" ;
] ;
sh:property [
sh:path literal:hasLiteralValue ;
sh:condition [
sh:path datacite:usesIdentifierScheme ;
sh:hasValue datacite:openalex ;
] ;
sh:pattern "^W\\d+$" ;
sh:message "OpenAlex work ID must start with 'W' followed by numbers" ;
] ;
sh:property [
sh:path [sh:inversePath datacite:hasIdentifier] ;
sh:node schema:JournalArticleShape ;
] .- I pattern li ho presi da oc_idmanager
- OpenAlex Journal Id ≠ work id (W, S)
DSH
- Ho scritto all’EIC e ho aggiornato la versione presente su arxiv, che mi sono accorto essere ancora quella della conferenza
- Pare che non abbiamo ancora dei revisori sigh
Francesca
- Ho caricato i suoi dati su un’istanza di Meta su Virtuoso sul container creto da Vitale
- Ho configurato Heritrace per funzionare su quei dati
- Senza un interfaccia di ricerca semplice e avanzata è chiaramente inutilizzabile
Meta
- Fine fusione id
- Ho controllato che
- Gli id fusi non fossero nei dati e quelli sopravvissuti ci fossero
- Che gli id sopravvissuti avessero
- 1 literal value Literal
- 1 identifier scheme URIRef
- Sia nei dati che sull’endpoint
- Sull’endpoint ho controllato che le entità fuse non siano referenziate da nessun’entità
- Ho controllato che
API
- Unittest
- esempi + casi eliaci
- https://github.com/opencitations/api/issues/15
- https://github.com/opencitations/api/issues/14
- https://github.com/opencitations/api/issues/13
- Misteriosamente la query SPARQL con con Blazegraph ritornava gli autori nel giusto ordine, con Virtuoso li ritorna nell’ordina sbagliato. Ci ho riflettuto a lungo, ho constatato che prima dell’aggregazione i risultati sono correttamente ordinati in ordine discendente per numero di salti fatti tramite oco:hasNext, ma dopo l’aggregazione l’ordine va perso, come se l’aggregazione ignorasse l’ordine.
- L’unica soluzione che ho trovato è ordinare in Python 😢
- https://github.com/opencitations/api/issues/12
- Aggiornato gli esempi
- Tutte le modifiche sono in master. Sto completamente ignorando il branch di test. Per me possiamo anche toglierlo.
- https://github.com/opencitations/api/issues/16
1 |
|
RML
- Estrazione automatica di eventuali stringhe di connesione al db dalla configurazione di Morph KGC
- La query sql viene generata tramite sqlalchemy
- Uso sqlalchemy anche per eseguire la query, in modo da essere agnostico sull’rdb. Per quanto in realtà tutti i test verranno fatti solo su Postgres.
- I risultati della query di inversione non vengono salvati e poi recuperati da CSV, ma tenuti in memoria
- I dati ottenuti tramite morphkgc non vengono salvati su graphdb, ma tenuti in memoria
- Rimossa la possibilità di fare test con mysql. Solo postgresql
- Vengono preservati i datatype recuperati con la query inversa
- Se il nome della tabella è una query sql, la creazione della tabella viene saltata
- Allineamenti tra schema tabella esistente e schema rml. Prevale quello RML.
- Le query sparql di tijs sopprimono il datatype. Le devo riguardare
Domande
- https://github.com/opencitations/oc_ds_converter/blob/main/oc_ds_converter/oc_idmanager/ror.py URL opzionale in ROR? Perché non come ORCID?
- In fase di merge prefero il self su tutto?
- In fase di test come gestisco creazione di tabelle che sono query SQL?
- Che fare se lo schema della tabella non coincide con quello rml?
- Ha senso guardarsi la rappresnetazione interna di morph dal momento in cui alla fine io voglio comunque avere come punto di partenza un rdf e un mapping e un rdb?
27-09-2024 SHACL Advanced Features
https://arcangelo7.github.io/p/8db4b73a3b5048e2a70055cc693061a1/