Documentazione Salute del corpus

Salute del corpus

Rapporto completo di validazione TEI per le edizioni del corpus. Prodotto da scripts/validate_tei.py (Schematron + controlli Python per le convenzioni di progetto) e formattato da scripts/generate_health_report.py. I dati sono in src/data/_health.json, versionati in git: la data dell'ultima validazione si recupera con git log -1 src/data/_health.json.

6 edizioni controllate
86 errori
2 warning
18 info

Per edizione

cinna-daponte-L98

42 errori · 0 warning · 0 info corpus/cinna_daponte/cinna.xml

  • errore SEX_LOWERCASE ×14 @sex in minuscolo (es. "male", "female").

    Perché: Convenzione del progetto: MAIUSCOLO (MALE / FEMALE / UNKNOWN).

    Come correggere: Trova-e-sostituisci nel file: - sex="male" → sex="MALE" - sex="female" → sex="FEMALE" - sex="unknown" → sex="UNKNOWN"

    <person xml:id="giacinto" sex="male">
    <person xml:id="giacinto" sex="MALE">

    Occorrenze nel file:

    • riga 335 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 338 @sex="female" minuscolo — convenzione: MAIUSCOLO (FEMALE).
    • riga 341 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 344 @sex="female" minuscolo — convenzione: MAIUSCOLO (FEMALE).
    • riga 347 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 350 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 353 @sex="female" minuscolo — convenzione: MAIUSCOLO (FEMALE).
    • riga 356 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 359 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 362 @sex="female" minuscolo — convenzione: MAIUSCOLO (FEMALE).
    • riga 365 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 368 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 371 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 374 @sex="unknown" minuscolo — convenzione: MAIUSCOLO (UNKNOWN).
  • errore REF_NO_HASH_PYTHON ×13 Un attributo @ref o @target non inizia con #.

    Perché: TEI richiede che i riferimenti interni inizino con #. Senza #, il link non viene risolto e i collegamenti tra personaggi (e nelle didascalie) si rompono.

    Come correggere: Aggiungere # davanti al valore.

    <persName ref="murena">MURENA</persName>
    <persName ref="#murena">MURENA</persName>

    Occorrenze nel file:

    • riga 617 @ref="agrippa" senza '#' iniziale — aggiungere '#' davanti.
    • riga 649 @ref="coro_delle_ancelle" senza '#' iniziale — aggiungere '#' davanti.
    • riga 843 @ref="sol" senza '#' iniziale — aggiungere '#' davanti.
    • riga 946 @ref="soldati" senza '#' iniziale — aggiungere '#' davanti.
    • riga 1291 @ref="reg" senza '#' iniziale — aggiungere '#' davanti.
    • riga 1609 @ref="tem" senza '#' iniziale — aggiungere '#' davanti.
    • riga 1611 @ref="tem" senza '#' iniziale — aggiungere '#' davanti.
    • riga 1699 @ref="coro_di_seguaci" senza '#' iniziale — aggiungere '#' davanti.
    • riga 1736 @ref="coro_di_seguaci" senza '#' iniziale — aggiungere '#' davanti.
    • riga 2028 @ref="tem" senza '#' iniziale — aggiungere '#' davanti.
    • riga 2045 @ref="cam" senza '#' iniziale — aggiungere '#' davanti.
    • riga 2053 @ref="cam" senza '#' iniziale — aggiungere '#' davanti.
    • riga 2092 @ref="cam" senza '#' iniziale — aggiungere '#' davanti.
  • errore REF_NO_HASH ×8 Stessa cosa di sopra (rilevato dal Schematron invece che da Python).

    Perché: Vedi REF_NO_HASH_PYTHON.

    Come correggere: Vedi REF_NO_HASH_PYTHON.

    <persName ref="lindoro">
    <persName ref="#lindoro">

    Occorrenze nel file:

    • @ref="agrippa" deve iniziare con '#' (riferimento interno) o con un URI assoluto.
    • @ref="coro_delle_ancelle" deve iniziare con '#' (riferimento interno) o con un URI assoluto.
    • @ref="sol" deve iniziare con '#' o con un URI assoluto.
    • @ref="soldati" deve iniziare con '#' (riferimento interno) o con un URI assoluto.
    • @ref="reg" deve iniziare con '#' o con un URI assoluto.
    • @ref="tem" deve iniziare con '#' o con un URI assoluto.
    • @ref="coro_di_seguaci" deve iniziare con '#' (riferimento interno) o con un URI assoluto.
    • @ref="cam" deve iniziare con '#' o con un URI assoluto.
  • errore REF_BROKEN_FUZZY ×2 Un @ref="#X" punta a un xml:id che non esiste nel file.

    Perché: Riferimento spezzato (probabile typo o ID rinominato senza propagare).

    Come correggere: Confrontare con la lista dei <person>/<personGrp> e correggere. Il validatore suggerisce ID simili quando li trova.

    <sp who="#stettonio">
    <sp who="#strettonio">

    Occorrenze nel file:

    • riga 99 @ref="#LDP" non risolve.
    • riga 604 @ref="#seguaci" non risolve.
  • errore LANG_ISO_639_3 ×2 <language ident="it"> (codice a 2 lettere).

    Perché: Convenzione TEI/del progetto: ISO 639-3 a 3 lettere.

    Come correggere: Sostituire it → ita, en → eng, fr → fre, de → deu, ecc.

    <language ident="it">italiano</language>
    <language ident="ita">italiano</language>

    Occorrenze nel file:

    • Codice lingua "it" deve essere ISO 639-3 a 3 lettere (es. "ita", non "it").
    • Codice lingua "en" deve essere ISO 639-3 a 3 lettere (es. "ita", non "it").
  • errore PERSON_NO_ID ×1 <person> senza xml:id.

    Perché: Senza ID il personaggio non può essere referenziato da @who/@ref.

    Come correggere: Aggiungere xml:id="NOME" (snake_case, breve).

    <person><persName>Carolina</persName></person>
    <person xml:id="carolina"><persName>Carolina</persName></person>

    Occorrenze nel file:

    • Ogni <person> deve avere @xml:id.
  • errore METDECL_NO_ID ×1 <metDecl> senza xml:id.

    Perché: Senza ID il pattern metrico non può essere referenziato da @ana sui versi.

    Come correggere: Aggiungere xml:id="_Np" dove N è il conto sillabico.

    Occorrenze nel file:

    • <metDecl> deve avere @xml:id.
  • errore METDECL_NO_P ×1 <metDecl> senza <p> con il nome del metro.

    Perché: Il pipeline legge il nome leggibile (es. "endecasillabo piano") da <p>.

    Come correggere: Aggiungere <p>nome del metro</p> dentro <metDecl>.

    <metDecl xml:id="_5p"></metDecl>
    <metDecl xml:id="_5p"><p>quinario piano</p></metDecl>

    Occorrenze nel file:

    • <metDecl> deve contenere <p> con il nome del metro (es. "endecasillabo piano").

cinna-anelli-MI92

29 errori · 0 warning · 0 info corpus/cinna_anelli/Cinna-Anelli.xml

  • errore SEX_LOWERCASE ×14 @sex in minuscolo (es. "male", "female").

    Perché: Convenzione del progetto: MAIUSCOLO (MALE / FEMALE / UNKNOWN).

    Come correggere: Trova-e-sostituisci nel file: - sex="male" → sex="MALE" - sex="female" → sex="FEMALE" - sex="unknown" → sex="UNKNOWN"

    <person xml:id="giacinto" sex="male">
    <person xml:id="giacinto" sex="MALE">

    Occorrenze nel file:

    • riga 300 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 303 @sex="female" minuscolo — convenzione: MAIUSCOLO (FEMALE).
    • riga 306 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 309 @sex="female" minuscolo — convenzione: MAIUSCOLO (FEMALE).
    • riga 312 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 315 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 318 @sex="female" minuscolo — convenzione: MAIUSCOLO (FEMALE).
    • riga 321 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 324 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 327 @sex="female" minuscolo — convenzione: MAIUSCOLO (FEMALE).
    • riga 330 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 333 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 336 @sex="male" minuscolo — convenzione: MAIUSCOLO (MALE).
    • riga 339 @sex="unknown" minuscolo — convenzione: MAIUSCOLO (UNKNOWN).
  • errore REF_NO_HASH_PYTHON ×4 Un attributo @ref o @target non inizia con #.

    Perché: TEI richiede che i riferimenti interni inizino con #. Senza #, il link non viene risolto e i collegamenti tra personaggi (e nelle didascalie) si rompono.

    Come correggere: Aggiungere # davanti al valore.

    <persName ref="murena">MURENA</persName>
    <persName ref="#murena">MURENA</persName>

    Occorrenze nel file:

    • riga 730 @ref="pia" senza '#' iniziale — aggiungere '#' davanti.
    • riga 731 @ref="por" senza '#' iniziale — aggiungere '#' davanti.
    • riga 869 @ref="murena" senza '#' iniziale — aggiungere '#' davanti.
    • riga 878 @ref="murena" senza '#' iniziale — aggiungere '#' davanti.
  • errore REF_NO_HASH ×3 Stessa cosa di sopra (rilevato dal Schematron invece che da Python).

    Perché: Vedi REF_NO_HASH_PYTHON.

    Come correggere: Vedi REF_NO_HASH_PYTHON.

    <persName ref="lindoro">
    <persName ref="#lindoro">

    Occorrenze nel file:

    • @ref="pia" deve iniziare con '#' o con un URI assoluto.
    • @ref="por" deve iniziare con '#' o con un URI assoluto.
    • @ref="murena" deve iniziare con '#' (riferimento interno) o con un URI assoluto.
  • errore LANG_ISO_639_3 ×2 <language ident="it"> (codice a 2 lettere).

    Perché: Convenzione TEI/del progetto: ISO 639-3 a 3 lettere.

    Come correggere: Sostituire it → ita, en → eng, fr → fre, de → deu, ecc.

    <language ident="it">italiano</language>
    <language ident="ita">italiano</language>

    Occorrenze nel file:

    • Codice lingua "it" deve essere ISO 639-3 a 3 lettere (es. "ita", non "it").
    • Codice lingua "en" deve essere ISO 639-3 a 3 lettere (es. "ita", non "it").
  • errore REF_BROKEN_FUZZY ×1 Un @ref="#X" punta a un xml:id che non esiste nel file.

    Perché: Riferimento spezzato (probabile typo o ID rinominato senza propagare).

    Come correggere: Confrontare con la lista dei <person>/<personGrp> e correggere. Il validatore suggerisce ID simili quando li trova.

    <sp who="#stettonio">
    <sp who="#strettonio">

    Occorrenze nel file:

    • riga 109 @ref="#LDP" non risolve.
  • errore WHO_BROKEN_FUZZY ×1 Un valore in @who punta a un xml:id che non esiste.

    Perché: Stessa logica di REF_BROKEN_FUZZY ma applicato all'attributo @who di <sp>.

    Come correggere: Verificare l'esistenza dell'ID; correggere typo (es. maiuscole, suffissi _2).

    <sp who="#Cardano">  ← maiuscolo, ma listPerson usa minuscolo
    <sp who="#cardano">

    Occorrenze nel file:

    • riga 2379 @who contiene "#coro" che non risolve. Forse: #por?
  • errore PERSON_NO_ID ×1 <person> senza xml:id.

    Perché: Senza ID il personaggio non può essere referenziato da @who/@ref.

    Come correggere: Aggiungere xml:id="NOME" (snake_case, breve).

    <person><persName>Carolina</persName></person>
    <person xml:id="carolina"><persName>Carolina</persName></person>

    Occorrenze nel file:

    • Ogni <person> deve avere @xml:id.
  • errore METDECL_NO_ID ×1 <metDecl> senza xml:id.

    Perché: Senza ID il pattern metrico non può essere referenziato da @ana sui versi.

    Come correggere: Aggiungere xml:id="_Np" dove N è il conto sillabico.

    Occorrenze nel file:

    • <metDecl> deve avere @xml:id.
  • errore METDECL_NO_P ×1 <metDecl> senza <p> con il nome del metro.

    Perché: Il pipeline legge il nome leggibile (es. "endecasillabo piano") da <p>.

    Come correggere: Aggiungere <p>nome del metro</p> dentro <metDecl>.

    <metDecl xml:id="_5p"></metDecl>
    <metDecl xml:id="_5p"><p>quinario piano</p></metDecl>

    Occorrenze nel file:

    • <metDecl> deve contenere <p> con il nome del metro (es. "endecasillabo piano").
  • errore CHAIN_BROKEN_NEXT ×1

    Occorrenze nel file:

    • @next="#aside-v791b-3" does not resolve to a fragment with that @xml:id. The chain is broken.

talismano-daponte-1788

5 errori · 1 warning · 4 info corpus/talismano_daponte/daponte-1788.xml

  • errore WHO_BROKEN_FUZZY ×3 Un valore in @who punta a un xml:id che non esiste.

    Perché: Stessa logica di REF_BROKEN_FUZZY ma applicato all'attributo @who di <sp>.

    Come correggere: Verificare l'esistenza dell'ID; correggere typo (es. maiuscole, suffissi _2).

    <sp who="#Cardano">  ← maiuscolo, ma listPerson usa minuscolo
    <sp who="#cardano">

    Occorrenze nel file:

    • riga 458 @who contiene "#parte_del_coro" che non risolve.
    • riga 472 @who contiene "#parte_del_coro" che non risolve.
    • riga 634 @who contiene "#parte_del_coro" che non risolve.
  • errore METDECL_NO_ID ×1 <metDecl> senza xml:id.

    Perché: Senza ID il pattern metrico non può essere referenziato da @ana sui versi.

    Come correggere: Aggiungere xml:id="_Np" dove N è il conto sillabico.

    Occorrenze nel file:

    • <metDecl> deve avere @xml:id.
  • errore METDECL_NO_P ×1 <metDecl> senza <p> con il nome del metro.

    Perché: Il pipeline legge il nome leggibile (es. "endecasillabo piano") da <p>.

    Come correggere: Aggiungere <p>nome del metro</p> dentro <metDecl>.

    <metDecl xml:id="_5p"></metDecl>
    <metDecl xml:id="_5p"><p>quinario piano</p></metDecl>

    Occorrenze nel file:

    • <metDecl> deve contenere <p> con il nome del metro (es. "endecasillabo piano").
  • warning MET_BAD_PATTERN ×1 <l @met="..."> non rispetta il pattern del progetto.

    Perché: Convenzione: 1–2 cifre + p/t/s opzionale (es. 7p, 11t, 10). Cattura refusi comuni come 1op, 11pp, 4+1, p8, F, M.

    Come correggere: Verificare il valore: probabilmente un refuso di tasto o un valore di @part (I/M/F) finito in @met per errore.

    <l met="1op">
    <l met="10p">

    Occorrenze nel file:

    • riga 1657 @met="4+1" — convenzione: 1–2 cifre + p/t/s opzionale (es. 7p, 11t, 10). Probabile refuso.
  • info EDITORIAL_TODO ×4 Commento XML editoriale nel corpo del testo (es. <!-- rivedere -->).

    Perché: Sono note che l'editor ha lasciato per sé. Vengono raccolte qui per visibilità.

    Come correggere: Risolvere la questione segnalata e rimuovere il commento. Non blocca la pubblicazione.

    Occorrenze nel file:

    • riga 1545 Commento editoriale nel corpo: «a tre»
    • riga 1867 Commento editoriale nel corpo: «controllare grafia»
    • riga 3839 Commento editoriale nel corpo: «controlla»
    • riga 3936 Commento editoriale nel corpo: «controllare»

ricco-VI84

4 errori · 0 warning · 10 info corpus/ricco_daponte/ricco_dun_giorno.xml

  • errore WHO_BROKEN_FUZZY ×2 Un valore in @who punta a un xml:id che non esiste.

    Perché: Stessa logica di REF_BROKEN_FUZZY ma applicato all'attributo @who di <sp>.

    Come correggere: Verificare l'esistenza dell'ID; correggere typo (es. maiuscole, suffissi _2).

    <sp who="#Cardano">  ← maiuscolo, ma listPerson usa minuscolo
    <sp who="#cardano">

    Occorrenze nel file:

    • riga 2999 @who contiene "#tutti" che non risolve.
    • riga 5671 @who contiene "#tutti" che non risolve.
  • errore METDECL_NO_ID ×1 <metDecl> senza xml:id.

    Perché: Senza ID il pattern metrico non può essere referenziato da @ana sui versi.

    Come correggere: Aggiungere xml:id="_Np" dove N è il conto sillabico.

    Occorrenze nel file:

    • <metDecl> deve avere @xml:id.
  • errore METDECL_NO_P ×1 <metDecl> senza <p> con il nome del metro.

    Perché: Il pipeline legge il nome leggibile (es. "endecasillabo piano") da <p>.

    Come correggere: Aggiungere <p>nome del metro</p> dentro <metDecl>.

    <metDecl xml:id="_5p"></metDecl>
    <metDecl xml:id="_5p"><p>quinario piano</p></metDecl>

    Occorrenze nel file:

    • <metDecl> deve contenere <p> con il nome del metro (es. "endecasillabo piano").
  • info EDITORIAL_TODO ×10 Commento XML editoriale nel corpo del testo (es. <!-- rivedere -->).

    Perché: Sono note che l'editor ha lasciato per sé. Vengono raccolte qui per visibilità.

    Come correggere: Risolvere la questione segnalata e rimuovere il commento. Non blocca la pubblicazione.

    Occorrenze nel file:

    • riga 1128 Commento editoriale nel corpo: «ipermetro: «senz'alchimia»?»
    • riga 1393 Commento editoriale nel corpo: «come trattare questo sarto?»
    • riga 1601 Commento editoriale nel corpo: «occorre rivedere la scansione metrica in questo punto, perché sembrerebbero strani tanti endecasillabi in enj.!»
    • riga 1835 Commento editoriale nel corpo: «o meglio non includere la didascalia in <said>?»
    • riga 2808 Commento editoriale nel corpo: «rivedi numerazione dei versi»
    • riga 3001 Commento editoriale nel corpo: «occorre verificare la bontà di questa soluzione»
    • riga 3844 Commento editoriale nel corpo: «sinalefe»
    • riga 4197 Commento editoriale nel corpo: «errore meccanico, segnalato in nota al testo»
    • riga 4384 Commento editoriale nel corpo: «scansione metrica»
    • riga 5532 Commento editoriale nel corpo: «cfr. cartaceo»

talismano-goldoni-1779-A

3 errori · 1 warning · 2 info corpus/talismano_goldoni/goldoni-1779.xml

  • errore LANG_ISO_639_3 ×1 <language ident="it"> (codice a 2 lettere).

    Perché: Convenzione TEI/del progetto: ISO 639-3 a 3 lettere.

    Come correggere: Sostituire it → ita, en → eng, fr → fre, de → deu, ecc.

    <language ident="it">italiano</language>
    <language ident="ita">italiano</language>

    Occorrenze nel file:

    • Codice lingua "la" deve essere ISO 639-3 a 3 lettere (es. "ita", non "it").
  • errore METDECL_NO_ID ×1 <metDecl> senza xml:id.

    Perché: Senza ID il pattern metrico non può essere referenziato da @ana sui versi.

    Come correggere: Aggiungere xml:id="_Np" dove N è il conto sillabico.

    Occorrenze nel file:

    • <metDecl> deve avere @xml:id.
  • errore METDECL_NO_P ×1 <metDecl> senza <p> con il nome del metro.

    Perché: Il pipeline legge il nome leggibile (es. "endecasillabo piano") da <p>.

    Come correggere: Aggiungere <p>nome del metro</p> dentro <metDecl>.

    <metDecl xml:id="_5p"></metDecl>
    <metDecl xml:id="_5p"><p>quinario piano</p></metDecl>

    Occorrenze nel file:

    • <metDecl> deve contenere <p> con il nome del metro (es. "endecasillabo piano").
  • warning MET_BAD_PATTERN ×1 <l @met="..."> non rispetta il pattern del progetto.

    Perché: Convenzione: 1–2 cifre + p/t/s opzionale (es. 7p, 11t, 10). Cattura refusi comuni come 1op, 11pp, 4+1, p8, F, M.

    Come correggere: Verificare il valore: probabilmente un refuso di tasto o un valore di @part (I/M/F) finito in @met per errore.

    <l met="1op">
    <l met="10p">

    Occorrenze nel file:

    • riga 1589 @met="7+1" — convenzione: 1–2 cifre + p/t/s opzionale (es. 7p, 11t, 10). Probabile refuso.
  • info RESP_ENGLISH_encoding ×1 <resp>encoding</resp> in inglese.

    Perché: Convenzione del progetto: italiano.

    Come correggere: Sostituire con <resp>codifica</resp>.

    <resp>encoding</resp>
    <resp>codifica</resp>

    Occorrenze nel file:

    • <resp>encoding</resp> in inglese; convenzione del progetto: italiano ("codifica").
  • info EDITORIAL_TODO ×1 Commento XML editoriale nel corpo del testo (es. <!-- rivedere -->).

    Perché: Sono note che l'editor ha lasciato per sé. Vengono raccolte qui per visibilità.

    Come correggere: Risolvere la questione segnalata e rimuovere il commento. Non blocca la pubblicazione.

    Occorrenze nel file:

    • riga 1310 Commento editoriale nel corpo: «rimando n. 3 al revisore»

talismano-anonimo-1779

3 errori · 0 warning · 2 info corpus/talismano_anonimo/anonimo-1779.xml

  • errore LANG_ISO_639_3 ×1 <language ident="it"> (codice a 2 lettere).

    Perché: Convenzione TEI/del progetto: ISO 639-3 a 3 lettere.

    Come correggere: Sostituire it → ita, en → eng, fr → fre, de → deu, ecc.

    <language ident="it">italiano</language>
    <language ident="ita">italiano</language>

    Occorrenze nel file:

    • Codice lingua "la" deve essere ISO 639-3 a 3 lettere (es. "ita", non "it").
  • errore METDECL_NO_ID ×1 <metDecl> senza xml:id.

    Perché: Senza ID il pattern metrico non può essere referenziato da @ana sui versi.

    Come correggere: Aggiungere xml:id="_Np" dove N è il conto sillabico.

    Occorrenze nel file:

    • <metDecl> deve avere @xml:id.
  • errore METDECL_NO_P ×1 <metDecl> senza <p> con il nome del metro.

    Perché: Il pipeline legge il nome leggibile (es. "endecasillabo piano") da <p>.

    Come correggere: Aggiungere <p>nome del metro</p> dentro <metDecl>.

    <metDecl xml:id="_5p"></metDecl>
    <metDecl xml:id="_5p"><p>quinario piano</p></metDecl>

    Occorrenze nel file:

    • <metDecl> deve contenere <p> con il nome del metro (es. "endecasillabo piano").
  • info RESP_ENGLISH_encoding ×1 <resp>encoding</resp> in inglese.

    Perché: Convenzione del progetto: italiano.

    Come correggere: Sostituire con <resp>codifica</resp>.

    <resp>encoding</resp>
    <resp>codifica</resp>

    Occorrenze nel file:

    • <resp>encoding</resp> in inglese; convenzione del progetto: italiano ("codifica").
  • info PERSON_UNREFERENCED ×1 <person xml:id="X"> dichiarato in <listPerson> ma mai referenziato (nessun @who="#X", @ref="#X" o @synch="#X").

    Perché: Una persona dichiarata ma muta non compare nel testo della scena, e atterra negli indici con «0 scene». Spesso è una dramatis persona presente in scena ma silenziosa (Guardie, Soldati), o un personaggio storico citato (Catone), per cui il riferimento andrebbe esplicitato.

    Come correggere: Tre possibilità:

    1. Aggiungere <sp who="#X"> se il personaggio in realtà parla.
    2. Aggiungere <persName ref="#X"> nel testo quando è citato.
    3. Se il personaggio è davvero un comparso muto, dichiararlo con <move @onStage who="#X"> nella didascalia d'apertura.
    4. Se l'xml:id non serve a nessuno, rimuovere la dichiarazione da <listPerson>.
    <person xml:id="guardie"><persName>Guardie</persName></person>
    <!-- mai usato: nessun sp/persName ref="#guardie" -->
    <stage type="onStage"><move type="onStage" who="#guardie"/>Guardie restano in scena.</stage>

    Occorrenze nel file:

    • riga 258 Persona «Parte del Coro di zingani, di zingane» (xml:id="parte_del_coro") dichiarato ma mai referenziato nel corpo del testo.

Rigenerare il rapporto

Dopo aver corretto un file TEI o aver modificato le regole di validazione:

npm run health-report

Esegue scripts/validate_tei.py seguito da scripts/generate_health_report.py, aggiornando src/data/_health.json, src/data/_health_rules.json e docs/tei_health_report.md.