Part 5: Validació d'entrades¶
Traducció assistida per IA - més informació i suggeriments
En aquesta cinquena part del curs de formació Hello nf-core, us mostrem com utilitzar el plugin nf-schema per validar les entrades i els paràmetres del pipeline.
Com començar des d'aquesta secció
Aquesta secció assumeix que heu completat la Part 4: Crear un mòdul nf-core i heu actualitzat el mòdul de procés COWPY als estàndards nf-core al vostre pipeline.
Si no heu completat la Part 4 o voleu començar de nou per a aquesta part, podeu utilitzar la solució core-hello-part4 com a punt de partida.
Executeu aquestes comandes des de dins del directori hello-nf-core/:
Això us proporciona un pipeline amb el mòdul COWPY ja actualitzat per seguir els estàndards nf-core.
Podeu comprovar que s'executa correctament executant la comanda següent:
0. Escalfament: Una mica de context¶
0.1. Per què importa la validació¶
Imagineu executar el vostre pipeline durant dues hores, només perquè falli perquè un usuari ha proporcionat un fitxer amb l'extensió incorrecta. O passar hores depurant errors críptics, només per descobrir que un paràmetre estava mal escrit. Sense validació d'entrades, aquests escenaris són comuns.
Considereu aquest exemple:
$ nextflow run my-pipeline --input data.txt --output results
...2 hours later...
ERROR ~ No such file: 'data.fq.gz'
Expected FASTQ format but received TXT
El pipeline va acceptar entrades no vàlides i va executar-se durant hores abans de fallar. Amb validació adequada:
$ nextflow run my-pipeline --input data.txt --output results
ERROR ~ Validation of pipeline parameters failed!
* --input (data.txt): File extension '.txt' does not match required pattern '.fq.gz' or '.fastq.gz'
* --output: required parameter is missing (expected: --outdir)
Pipeline failed before execution - please fix the errors above
El pipeline falla immediatament amb missatges d'error clars i accionables. Això estalvia temps, recursos de càlcul i frustració.
0.2. El plugin nf-schema¶
El plugin nf-schema és un plugin de Nextflow que proporciona capacitats de validació completes per a pipelines de Nextflow. Tot i que nf-schema funciona amb qualsevol workflow de Nextflow, és la solució de validació estàndard per a tots els pipelines nf-core.
nf-schema proporciona diverses funcions clau:
- Validació de paràmetres: Valida els paràmetres del pipeline contra
nextflow_schema.json - Validació de fulls de mostra: Valida els fitxers d'entrada contra
assets/schema_input.json - Conversió de canals: Converteix fulls de mostra validats a canals de Nextflow
- Generació de text d'ajuda: Genera automàticament la sortida
--helpa partir de les definicions de l'esquema - Resum de paràmetres: Mostra quins paràmetres difereixen dels valors per defecte
nf-schema és el successor del plugin nf-validation obsolet i utilitza l'estàndard JSON Schema Draft 2020-12 per a la validació.
Què són els plugins de Nextflow?
Els plugins són extensions que afegeixen funcionalitat nova al llenguatge Nextflow mateix. S'instal·len mitjançant un bloc plugins{} a nextflow.config i poden proporcionar:
- Noves funcions i classes que es poden importar (com
samplesheetToList) - Noves característiques DSL i operadors
- Integració amb serveis externs
El plugin nf-schema s'especifica a nextflow.config:
Un cop instal·lat, podeu importar funcions dels plugins utilitzant la sintaxi include { functionName } from 'plugin/plugin-name'.
0.3. Dos fitxers d'esquema per a dos tipus de validació¶
Un pipeline nf-core utilitzarà dos fitxers d'esquema separats, que corresponen a dos tipus de validació:
| Fitxer d'esquema | Propòsit | Valida |
|---|---|---|
nextflow_schema.json |
Validació de paràmetres | Indicadors de línia de comandes: --input, --outdir, --batch |
assets/schema_input.json |
Validació de dades d'entrada | Continguts de fulls de mostra i fitxers d'entrada |
Ambdós esquemes utilitzen el format JSON Schema, un estàndard àmpliament adoptat per descriure i validar estructures de dades.
La validació de paràmetres valida els paràmetres de línia de comandes (indicadors com --outdir, --batch, --input):
- Comprova els tipus, rangs i formats dels paràmetres
- Assegura que es proporcionen els paràmetres requerits
- Valida que existeixen els camins de fitxers
- Definit a
nextflow_schema.json
La validació de dades d'entrada valida l'estructura dels fulls de mostra i fitxers de manifest (fitxers CSV/TSV que descriuen les vostres dades):
- Comprova l'estructura de columnes i els tipus de dades
- Valida que existeixen els camins de fitxers referenciats al full de mostra
- Assegura que els camps requerits estan presents
- Definit a
assets/schema_input.json
Què NO fa la validació de dades d'entrada
La validació de dades d'entrada comprova l'estructura dels fitxers de manifest (fulls de mostra, fitxers CSV), NO els continguts dels vostres fitxers de dades reals (FASTQ, BAM, VCF, etc.).
Per a dades a gran escala, la validació dels continguts dels fitxers (com comprovar la integritat de BAM) hauria de passar en processos del pipeline executant-se en nodes de treball, no durant l'etapa de validació a la màquina d'orquestració.
0.4. Quan hauria d'ocórrer la validació?¶
graph LR
A[User runs pipeline] --> B[Parameter validation]
B -->|✓ Valid| C[Input data validation]
B -->|✗ Invalid| D[Error: Fix parameters]
C -->|✓ Valid| E[Pipeline executes]
C -->|✗ Invalid| F[Error: Fix input data]
La validació hauria de passar abans que s'executin els processos del pipeline, per proporcionar retroalimentació ràpida i evitar temps de càlcul malgastat.
Ara apliquem aquests principis a la pràctica, començant amb la validació de paràmetres.
1. Validació de paràmetres (nextflow_schema.json)¶
Comencem afegint validació de paràmetres al nostre pipeline. Això valida indicadors de línia de comandes com --input, --outdir i --batch.
1.1. Configurar la validació per ometre la validació de fitxers d'entrada¶
La plantilla de pipeline nf-core ve amb nf-schema ja instal·lat i configurat:
- El plugin nf-schema s'instal·la mitjançant el bloc
plugins{}anextflow.config - La validació de paràmetres està habilitada per defecte mitjançant
params.validate_params = true - La validació es realitza pel subworkflow
UTILS_NFSCHEMA_PLUGINdurant la inicialització del pipeline
El comportament de validació es controla mitjançant l'àmbit validation{} a nextflow.config.
Com que treballarem primer en la validació de paràmetres (aquesta secció) i no configurarem l'esquema de dades d'entrada fins a la secció 2, necessitem dir temporalment a nf-schema que ometi la validació dels continguts del fitxer del paràmetre input.
Obriu nextflow.config i trobeu el bloc validation (al voltant de la línia 246). Afegiu ignoreParams per ometre la validació de fitxers d'entrada:
Aquesta configuració indica a nf-schema que:
defaultIgnoreParams: Ometi la validació de paràmetres complexos comgenomes(establert pels desenvolupadors de la plantilla)ignoreParams: Ometi la validació dels continguts del fitxer del paràmetreinput(temporal; ho reactivarem a la secció 2)monochromeLogs: Desactivi la sortida en color als missatges de validació quan s'estableix atrue(controlat perparams.monochrome_logs)
Per què ignorar el paràmetre input?
El paràmetre input a nextflow_schema.json té "schema": "assets/schema_input.json" que indica a nf-schema que validi els continguts del fitxer CSV d'entrada contra aquest esquema.
Com que encara no hem configurat aquest esquema, ignorem temporalment aquesta validació.
Eliminarem aquesta configuració a la secció 2 després de configurar l'esquema de dades d'entrada.
1.2. Examinar l'esquema de paràmetres¶
Vegem una secció del fitxer nextflow_schema.json que ve amb la nostra plantilla de pipeline:
L'esquema de paràmetres està organitzat en grups. Aquí teniu el grup input_output_options:
Cada entrada descrita aquí té les següents propietats clau que es poden validar:
type: Tipus de dades (string, integer, boolean, number)format: Formats especials comfile-pathodirectory-pathexists: Per a camins de fitxers, comprova si el fitxer existeixpattern: Expressió regular que el valor ha de complirrequired: Array de noms de paràmetres que s'han de proporcionarmimetype: Mimetype de fitxer esperat per a la validació
Si teniu un ull agut, potser notareu que el paràmetre d'entrada batch que hem estat utilitzant encara no està definit a l'esquema.
L'afegirem a la següent secció.
D'on provenen els paràmetres de l'esquema?
La validació de l'esquema utilitza nextflow.config com a base per a les definicions de paràmetres.
Els paràmetres declarats en altres llocs dels vostres scripts de workflow (com a main.nf o fitxers de mòduls) no són recollits automàticament pel validador d'esquema.
Això significa que sempre hauríeu de declarar els vostres paràmetres de pipeline a nextflow.config, i després definir les seves regles de validació a nextflow_schema.json.
1.3. Afegir el paràmetre batch¶
Tot i que l'esquema és un fitxer JSON que es pot editar manualment, l'edició manual és propensa a errors i no es recomana. En canvi, nf-core proporciona una eina GUI interactiva que gestiona la sintaxi JSON Schema per vosaltres i valida els vostres canvis:
Hauríeu de veure alguna cosa així:
,--./,-.
___ __ __ __ ___ /,-._.--\
|\ | |__ __ / ` / \ |__) |__ } {
| \| | \__, \__/ | \ |___ \`-._,-`-,
`._,._,'
nf-core/tools version 3.4.1 - https://nf-co.re
INFO [✓] Default parameters match schema validation
INFO [✓] Pipeline schema looks valid (found 17 params)
INFO Writing schema with 17 params: 'nextflow_schema.json'
🚀 Launch web builder for customisation and editing? [y/n]:
Escriviu y i premeu Enter per llançar la interfície web interactiva.
El vostre navegador s'obrirà mostrant el constructor d'esquema de paràmetres:

Per afegir el paràmetre batch:
- Feu clic al botó "Add parameter" a la part superior
- Utilitzeu l'ansa d'arrossegament (⋮⋮) per moure el nou paràmetre cap amunt al grup "Input/output options", sota el paràmetre
input - Ompliu els detalls del paràmetre:
- ID:
batch - Description:
Name for this batch of greetings - Type:
string - Required: marqueu la casella
- Opcionalment, seleccioneu una icona del selector d'icones (p. ex.,
fas fa-layer-group)

Quan hàgiu acabat, feu clic al botó "Finished" a la part superior dreta.
De tornada al vostre terminal, veureu:
INFO Writing schema with 18 params: 'nextflow_schema.json'
⣾ Use ctrl+c to stop waiting and force exit.
Premeu Ctrl+C per sortir del constructor d'esquema.
L'eina ara ha actualitzat el vostre fitxer nextflow_schema.json amb el nou paràmetre batch, gestionant tota la sintaxi JSON Schema correctament.
1.4. Verificar els canvis¶
Hauríeu de veure que el paràmetre batch s'ha afegit a l'esquema amb el camp "required" ara mostrant ["input", "outdir", "batch"].
1.5. Provar la validació de paràmetres¶
Ara provem que la validació de paràmetres funciona correctament.
Primer, proveu d'executar sense el paràmetre requerit input:
Sortida de la comanda
Perfecte! La validació detecta el paràmetre requerit que falta abans que s'executi el pipeline.
Ara proveu amb un conjunt vàlid de paràmetres:
Sortida de la comanda
N E X T F L O W ~ version 25.04.3
Launching `./main.nf` [peaceful_wozniak] DSL2 - revision: b9e9b3b8de
executor > local (8)
[de/a1b2c3] CORE_HELLO:HELLO:sayHello (3) | 3 of 3 ✔
[4f/d5e6f7] CORE_HELLO:HELLO:convertToUpper (3) | 3 of 3 ✔
[8a/b9c0d1] CORE_HELLO:HELLO:CAT_CAT (test) | 1 of 1 ✔
[e2/f3a4b5] CORE_HELLO:HELLO:COWPY (test) | 1 of 1 ✔
-[core/hello] Pipeline completed successfully-
El pipeline hauria d'executar-se correctament, i el paràmetre batch ara està validat.
Conclusió¶
Heu après com utilitzar l'eina interactiva nf-core pipelines schema build per afegir paràmetres a nextflow_schema.json i heu vist la validació de paràmetres en acció.
La interfície web gestiona tota la sintaxi JSON Schema per vosaltres, facilitant la gestió d'esquemes de paràmetres complexos sense edició manual de JSON propensa a errors.
Què segueix?¶
Ara que la validació de paràmetres funciona, afegim validació per als continguts del fitxer de dades d'entrada.
2. Validació de dades d'entrada (schema_input.json)¶
Afegirem validació per als continguts del nostre fitxer CSV d'entrada. Mentre que la validació de paràmetres comprova els indicadors de línia de comandes, la validació de dades d'entrada assegura que les dades dins del fitxer CSV estan estructurades correctament.
2.1. Entendre el format greetings.csv¶
Recordem com és la nostra entrada:
Aquest és un CSV simple amb:
- Tres columnes (sense capçalera)
- A cada línia: una salutació, un idioma i una puntuació
- Les dues primeres columnes són cadenes de text sense requisits de format especials
- La tercera columna és un enter
Per al nostre pipeline, només la primera columna és requerida.
2.2. Dissenyar l'estructura de l'esquema¶
Per al nostre cas d'ús, volem:
- Acceptar entrada CSV amb almenys una columna
- Tractar el primer element de cada fila com una cadena de salutació
- Assegurar que les salutacions no estan buides i no comencen amb espai en blanc
- Assegurar que el camp d'idioma coincideix amb un dels codis d'idioma suportats (en, fr, es, it, de)
- Assegurar que el camp de puntuació és un enter amb un valor entre 0 i 100
Estructurarem això com un array d'objectes, on cada objecte té almenys un camp greeting.
2.3. Actualitzar el fitxer d'esquema¶
La plantilla de pipeline nf-core inclou un assets/schema_input.json per defecte dissenyat per a dades de seqüenciació paired-end.
Necessitem reemplaçar-lo amb un esquema més simple per al nostre cas d'ús de salutacions.
Obriu assets/schema_input.json i reemplaceu les seccions properties i required:
Els canvis clau:
description: Actualitzat per mencionar "greetings file"properties: Reemplaçatsample,fastq_1ifastq_2ambgreeting,languageiscoretype:Imposa string (greeting,language) o integer (score)pattern: "^\\S.*$": La salutació ha de començar amb un caràcter que no sigui espai en blanc (però pot contenir espais després)"enum": ["en", "fr", "es", "it", "de"]: El codi d'idioma ha d'estar al conjunt suportat"minimum": 0i"maximum": 100: El valor de puntuació ha d'estar entre 0 i 100errorMessage: Missatge d'error personalitzat mostrat si la validació fallarequired: Canviat de["sample", "fastq_1"]a["greeting"]
2.4. Afegir una capçalera al fitxer greetings.csv¶
Quan nf-schema llegeix un fitxer CSV, espera que la primera fila contingui capçaleres de columna que coincideixin amb els noms de camp de l'esquema.
Per al nostre cas simple, necessitem afegir una línia de capçalera al nostre fitxer de salutacions:
Ara el fitxer CSV té una línia de capçalera que coincideix amb els noms de camp del nostre esquema.
El pas final és implementar la validació al codi del pipeline utilitzant samplesheetToList.
2.5. Implementar la validació al pipeline¶
Ara necessitem reemplaçar el nostre anàlisi CSV simple amb la funció samplesheetToList de nf-schema, que validarà i analitzarà el full de mostra.
La funció samplesheetToList:
- Llegeix el full de mostra d'entrada (CSV, TSV, JSON o YAML)
- El valida contra l'esquema JSON proporcionat
- Retorna una llista de Groovy on cada entrada correspon a una fila
- Llança missatges d'error útils si la validació falla
Actualitzem el codi de gestió d'entrada:
Obriu subworkflows/local/utils_nfcore_hello_pipeline/main.nf i localitzeu la secció on creem el canal d'entrada (al voltant de la línia 80).
Necessitem:
- Utilitzar la funció
samplesheetToList(ja importada a la plantilla) - Validar i analitzar l'entrada
- Extreure només les cadenes de salutació per al nostre workflow
Primer, noteu que la funció samplesheetToList ja està importada a la part superior del fitxer (la plantilla nf-core inclou això per defecte):
Ara actualitzeu el codi de creació del canal:
| core-hello/subworkflows/local/utils_nfcore_hello_pipeline/main.nf | |
|---|---|
| core-hello/subworkflows/local/utils_nfcore_hello_pipeline/main.nf | |
|---|---|
Desglossem què ha canviat:
samplesheetToList(params.input, "${projectDir}/assets/schema_input.json"): Valida el fitxer d'entrada contra el nostre esquema i retorna una llistaChannel.fromList(...): Converteix la llista en un canal de Nextflow
Això completa la implementació de la validació de dades d'entrada utilitzant samplesheetToList i esquemes JSON.
Ara que hem configurat l'esquema de dades d'entrada, podem eliminar la configuració d'ignorar temporal que vam afegir abans.
2.6. Reactivar la validació d'entrada¶
Obriu nextflow.config i elimineu la línia ignoreParams del bloc validation:
Ara nf-schema validarà tant els tipus de paràmetres COM els continguts del fitxer d'entrada.
2.7. Provar la validació d'entrada¶
Verifiquem que la nostra validació funciona provant entrades vàlides i no vàlides.
2.7.1. Provar amb entrada vàlida¶
Primer, confirmeu que el pipeline s'executa correctament amb entrada vàlida.
Noteu que ja no necessitem --validate_params false ja que la validació funciona!
Sortida de la comanda
------------------------------------------------------
WARN: The following invalid input values have been detected:
* --character: tux
executor > local (8)
[c1/39f64a] CORE_HELLO:HELLO:sayHello (1) | 3 of 3 ✔
[44/c3fb82] CORE_HELLO:HELLO:convertToUpper (3) | 3 of 3 ✔
[62/80fab2] CORE_HELLO:HELLO:CAT_CAT (test) | 1 of 1 ✔
[e1/4db4fd] CORE_HELLO:HELLO:COWPY (test) | 1 of 1 ✔
-[core/hello] Pipeline completed successfully-
Genial! El pipeline s'executa correctament i la validació passa silenciosament.
L'advertència sobre --character és només informativa ja que no està definit a l'esquema.
Si voleu, utilitzeu el que heu après per afegir validació per a aquest paràmetre també!
2.7.2. Provar amb entrada no vàlida¶
Passar la validació sempre és una bona sensació, però assegurem-nos que la validació realment detectarà errors.
Per crear un fitxer de prova amb un nom de columna no vàlid, comenceu fent una còpia del fitxer greetings.csv:
Ara obriu el fitxer i canvieu el nom de la primera columna, a la línia de capçalera, de greeting a message:
Això no coincideix amb el nostre esquema, així que la validació hauria de llançar un error.
Proveu d'executar el pipeline amb aquesta entrada no vàlida:
Sortida de la comanda
N E X T F L O W ~ version 24.10.4
Launching `./main.nf` [trusting_ochoa] DSL2 - revision: b9e9b3b8de
Input/output options
input : assets/invalid_greetings.csv
outdir : test-results
Generic options
trace_report_suffix: 2025-01-27_03-16-04
Core Nextflow options
runName : trusting_ochoa
containerEngine : docker
launchDir : /workspace/hello-nf-core
workDir : /workspace/hello-nf-core/work
projectDir : /workspace/hello-nf-core
userName : user
profile : docker
configFiles : /workspace/hello-nf-core/nextflow.config
!! Only displaying parameters that differ from the pipeline defaults !!
------------------------------------------------------
ERROR ~ Validation of pipeline parameters failed!
-- Check '.nextflow.log' file for details
The following invalid input values have been detected:
* Missing required parameter(s): batch
* --input (assets/invalid_greetings.csv): Validation of file failed:
-> Entry 1: Missing required field(s): greeting
-> Entry 2: Missing required field(s): greeting
-> Entry 3: Missing required field(s): greeting
-- Check script 'subworkflows/nf-core/utils_nfschema_plugin/main.nf' at line: 68 or see '.nextflow.log' file for more details
Perfecte! La validació va detectar l'error i va proporcionar un missatge d'error clar i útil que assenyala:
- Quin fitxer va fallar la validació
- Quina entrada (fila 1, la primera fila de dades) té el problema
- Quin és el problema específic (falta el camp requerit
greeting)
La validació de l'esquema assegura que els fitxers d'entrada tenen l'estructura correcta abans que s'executi el pipeline, estalviant temps i evitant errors confusos més tard a l'execució.
Si voleu practicar això, sentiu-vos lliures de crear altres fitxers d'entrada de salutacions que violin l'esquema d'altres maneres divertides.
Conclusió¶
Heu implementat i provat tant la validació de paràmetres com la validació de dades d'entrada. El vostre pipeline ara valida les entrades abans de l'execució, proporcionant retroalimentació ràpida i missatges d'error clars.
Lectura addicional
Per aprendre més sobre característiques i patrons de validació avançats, consulteu la documentació de nf-schema. La comanda nf-core pipelines schema build proporciona una GUI interactiva per gestionar esquemes complexos.
Què segueix?¶
Heu completat les cinc parts del curs de formació Hello nf-core!
Continueu al Resum per reflexionar sobre el que heu construït i après.