feat(library): ricerca vera per Vaticana, Gallica ed e-codices - #453
Conversation
644d258 to
a8628e1
Compare
There was a problem hiding this comment.
🟡 Changes recommended
Ci sono bug bloccanti/di correttezza (es. e-codices configurata SearchMode::Direct quindi la keyword search non parte, parsing ARK/thumbnail e unescape SRU) che possono impedire o degradare la ricerca reale descritta nella PR.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Questa PR completa il lavoro di “discovery” IIIF aggiungendo riconoscimento offline (segnature/ID/URL → manifest) e ricerca reale (keyword → risultati) per Vaticana, Gallica ed e-codices nel backend Tauri/Rust, con aggiornamenti di documentazione e architettura per riflettere il nuovo comportamento.
Changes:
- Introdotti nuovi moduli Rust per resolver offline (strength strong/weak) e search per-provider (Gallica SRU XML; Vaticana/e-codices via pagine HTML).
- Aggiornata la pipeline di discovery per usare riconoscimento + ricerca in base a
SearchMode, con caching e gating già esistenti. - Aggiornate guide utente (IT/EN) e documentazione dev (ARCHITECTURE/ROADMAP) per descrivere input accettati e strategia “SearchFirst”.
File summaries
| File | Description |
|---|---|
| src-tauri/src/iiif/search.rs | Nuova implementazione ricerca per Gallica/Vaticana/e-codices con parsing XML/HTML e test mirati offline. |
| src-tauri/src/iiif/resolvers.rs | Nuovo resolver offline per Vaticana/Gallica/e-codices + Internet Archive, con strength strong/weak e test. |
| src-tauri/src/iiif/mod.rs | Esporta i nuovi moduli resolvers e search. |
| src-tauri/src/iiif/discovery.rs | Integra resolver+search nella discovery, introduce SearchEndpoints iniettabili e nuovi test. |
| docs/guides/library-discovery.md | Guida IT aggiornata: cosa accetta ciascuna biblioteca e comportamento della ricerca. |
| docs/en/guides/library-discovery.md | Guida EN aggiornata in parallelo alla IT. |
| docs-dev/ROADMAP_2_0.md | Aggiornata data e backlog relativo al blocco Biblioteca/discovery. |
| docs-dev/ARCHITECTURE.md | Documentata l’architettura “riconoscimento + ricerca” e la semantica strong/weak. |
Review details
- Files reviewed: 8/8 changed files
- Comments generated: 4
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| let start = value.to_lowercase().find("ark:/")?; | ||
| let rest = &value[start + "ark:/".len()..]; | ||
| let mut parts = rest.split('/'); |
| let identifier = record.identifier?; | ||
| let resolved = resolvers::resolve(ResolverKind::Gallica, &identifier)?; | ||
| let thumbnail = format!( | ||
| "https://gallica.bnf.fr/ark:/12148/{}.thumbnail", | ||
| resolved.doc_id | ||
| ); |
| let value = text.decode().map(|value| value.trim().to_string()); | ||
| let Ok(value) = value else { continue }; | ||
| if value.is_empty() { | ||
| continue; | ||
| } |
| if matches!(provider.search_mode, SearchMode::Direct) { | ||
| return Ok(nothing()); | ||
| } |
b10318f to
4eb87a2
Compare
a8628e1 to
67d3155
Compare
Fino a ora, di dodici biblioteche in elenco, solo Internet Archive cercava davvero: per tutte le altre l'unico modo di arrivare a un'opera era incollare l'indirizzo completo del manifesto, anche se il campo suggeriva una segnatura. Ora tre biblioteche mantengono quella promessa. - Riconoscimento: segnatura, identificativo o indirizzo diventano il manifesto senza toccare la rete. «Urb. lat. 1779», «urb-lat-1779» e «Urblat1779» portano allo stesso manoscritto; di Gallica si riconosce l'ARK ovunque stia nell'indirizzo; di e-codices sia la segnatura composta sia la pagina di lettura. - Ricerca per parole: Gallica dal suo servizio SRU, Vaticana ed e-codices dalle loro pagine di ricerca. Il riconoscimento dichiara anche quanto è sicuro. Su Gallica una parola qualsiasi somiglia a un identificativo: trattarla come tale porterebbe a un manifesto inesistente invece che ai risultati. Perciò le biblioteche che cercano prima usano solo i riconoscimenti inequivocabili, e quello incerto resta come ultima risorsa se la ricerca non trova niente. Riferimento di comportamento: Scriptoria, resolvers e search delle tre biblioteche. Riscritti qui senza aggiungere librerie di regex o di parsing HTML: le forme da riconoscere sono poche e fisse. Le altre nove biblioteche restano come sono: indirizzo completo, come prima.
…opertine sbagliate Quattro osservazioni della review, verificate nel codice: - e-codices si dichiarava «solo riconoscimento»: la sua ricerca esisteva e non veniva mai chiamata, quindi cercare una parola non dava mai niente. Ora la segnatura composta si riconosce come prima e tutto il resto passa dalla ricerca; - il titolo si fermava al primo pezzo: una risposta con una e commerciale arrivava spezzata in più eventi, e «Heures & usages» diventava «Heures». Ora il testo di un campo si accumula e si consegna alla fine, con le entità sciolte come già si fa per i documenti Word; - la copertina dava per scontata la parte numerica dell'identificativo Gallica: con un valore diverso si sarebbe aperta l'opera giusta con la copertina di nessuno. Ora si legge dall'identificativo; - il riconoscimento di Gallica cercava in una stringa e tagliava in un'altra: finché sono lunghe uguali funziona, e smette alla prima lettera accentata nell'indirizzo, con un taglio a metà carattere. Ora si lavora su una sola stringa, con la prova che lo copre.
4eb87a2 to
8b81295
Compare
67d3155 to
029c4c9
Compare
…aggiungibile dal menu Il menu di scoperta filtrava i provider su un elenco scritto a mano che non includeva le tre biblioteche appena collegate alla ricerca vera: la funzione esisteva nel motore ma nessuna interfaccia poteva chiamarla con quel provider.
…i, Vaticana con sessione vera Gallica cercava solo nel titolo (come il riferimento Scriptoria, corretto anche lì): ora usa l'indice generale del sito, trova anche le opere dove il termine compare come autore. Salvati e mostrati tutti i metadati che la risposta della biblioteca porta già e prima si scartavano: altri autori/traduttori, editore, diritti, descrizione fisica, fondo di conservazione, collegamento al catalogo cartaceo — stesso contenitore dati per tutte le fonti, vuoto per chi non li dichiara. La ricerca libera sulla Vaticana falliva sempre: il sito rifiuta le richieste che non sembrano un browser vero e non sono precedute da una visita alla pagina normale del catalogo. Aggiunta l'una e l'altra. I risultati di ricerca della Vaticana, poveri di dati (solo titolo e copertina), si arricchiscono ora leggendo il manifesto di ciascuno — stesso meccanismo che qualunque biblioteca povera di dati potrà riusare. Corretta anche la sovrapposizione visiva nella scheda espansa dei risultati di ricerca quando un'etichetta tradotta era più lunga del previsto. Verificato che l'arricchimento extra non facesse uscire le prove automatiche verso Internet vero (una regressione trovata e corretta durante questo lavoro): l'indirizzo dei manifesti Vaticana è ora configurabile per le prove come già lo erano gli indirizzi di ricerca.
…si come se dipendessero dal workspace attivo Solo Traduzioni era riconosciuta come area globale (#210): entrando nelle altre tre il titolo restava col nome del workspace da cui si veniva, e cliccandoci sopra si tornava lì invece che alla radice dell'area. Ora tutte e quattro le aree globali si comportano allo stesso modo. Una prova esistente registrava il comportamento sbagliato come corretto: corretta, aggiunte tre prove nuove (una per area globale).
Ultima della catena: si appoggia alla PR #452 (che ora contiene anche ordinamento e filtro workspace), che si appoggia alla #451, alla #450 e alla #449.
Cosa cambia
Di dodici biblioteche in elenco, finora solo Internet Archive cercava davvero: per tutte le altre l'unico modo di arrivare a un'opera era incollare l'indirizzo completo del manifesto, anche quando il campo suggeriva una segnatura. Tre biblioteche ora mantengono quella promessa: Vaticana, Gallica ed e-codices.
Riconoscimento (senza toccare la rete):
Urb. lat. 1779,urb lat 1779,urb-lat-1779,Urblat1779,MSS_Urb.lat.1779portano tutte allo stesso manoscritto; funziona anche l'indirizzo della pagina di lettura;bbb-0264), indirizzo di lettura (/en/bbb/0264) e indirizzo del manifesto.Ricerca per parole: Gallica dal suo servizio SRU (interfaccia vera), Vaticana ed e-codices dalle loro pagine di ricerca.
Correzione: le tre biblioteche non erano raggiungibili dal menu
Il motore di ricerca era completo e testato, ma il menu a tendina del pannello di scoperta filtra i provider su un elenco scritto a mano (
READY_DISCOVERY_PROVIDERS) rimasto fermo agenericearchive_orgda prima di questa catena — nessun commit precedente lo toccava. Risultato: Vaticana, Gallica ed e-codices non comparivano mai come opzione selezionabile, quindi la ricerca vera non era raggiungibile da nessuna schermata, a prescindere da quanto fosse corretto il backend.Aggiunte le tre chiavi mancanti all'elenco. Non si è usato il campo
supportsSearchgià esposto dal backend per pilotare il menu, perché è dichiarato vero anche per le nove biblioteche che non cercano ancora (dichiarazione preesistente, fuori scopo di questa PR) — usarlo avrebbe mostrato in menu anche provider che restituiscono sempre zero risultati.Una decisione che vale la pena leggere
Il riconoscimento dichiara quanto è sicuro. Su Gallica una parola qualsiasi di sei lettere somiglia a un identificativo valido: trattarla come tale porterebbe a un manifesto inesistente invece che ai risultati. Perciò le biblioteche che cercano prima usano solo i riconoscimenti inequivocabili, e quello incerto resta come ultima risorsa quando la ricerca non ha trovato niente.
Note tecniche
resolvers/{vatican,gallica,ecodices}.pye i rispettivisearch/. Riscritti in Rust senza aggiungere librerie di regex o di parsing HTML: le forme da riconoscere sono poche e fisse;Da testare
Urb. lat. 1779→ si apre la scheda del manoscritto. Prova ancheurb-lat-1779eUrblat1779: stesso risultato.vergilius→ arrivano risultati dal catalogo della biblioteca, ognuno apribile e aggiungibile.heures→ arrivano risultati, con titolo, autore e data quando la biblioteca li dichiara.bbb-0264e poi una parola comegraduale.Suite backend verde al momento del commit di funzione: 452 test (18 nuovi), clippy e formattazione puliti. Il fix del menu è un cambiamento frontend isolato, verificato con i 6 test esistenti del pannello di scoperta (nessuno richiedeva aggiornamento).
Issue
Parte di #397: copre tre dei provider candidati (Vaticana e Gallica in P2, e-codices in P2, secondo la tabella dell'issue). Gli altri restano da fare, quindi l'issue non si chiude. Non tocca #395 (ricerca simultanea su più biblioteche), che è un lavoro diverso.
Review risolta