Validatie (draft)¶
Status: draft v0.
CLI¶
cd /d C:\Git\orthodox-ronl\VSA-tooling
vsa mvsa validate examples\mvsa
vsa mvsa validate examples\mvsa\alleluia-toon-8.mvsa
vsa mvsa musicxml examples\mvsa\kleine-intocht-zondag-hemelum.mvsa --section schets-a-bladcijfer -o generated\intocht-a.mxl
validate: exitcode 0 = geen errors (warnings mogen). Exitcode 1 = minstens één error.
musicxml: exporteert SATB MusicXML (.mxl of .musicxml). Faalt als validate
errors heeft. Alleen primaire L als lyric-laag; geen blokhergebruik.
Ernst (voorstel)¶
| Niveau | Gebruik |
|---|---|
| error | Structuur of sync klopt niet; verdere verwerking onbetrouwbaar |
| warning | Canonieke vorm geschonden maar eenduidig herstelbaar |
| info | Stijladvies |
Structuur¶
- Elke LSATB-inhoudsregel begint met een geldige
regelidentifier:
stemidentifier+ optionele EHM +:. De stemidentifier is[A-Za-z0-9_-]+en eindigt niet op_of-. Begint die metL/l, dan is het een lyrics-regel; anders een stemregel. Een EHM op een lyrics-regelidentifier (L/:) is een error. - Binnen een sectie hebben alle LSATB-systemen dezelfde regelidentifiers (inclusief eventuele EHM) in dezelfde volgorde.
- Elk LSATB-systeem eindigt op elke LSATB-regel met
|of||(of toegestane specialisatie). 3a. Een lege regel binnen of direct na LSATB-inhoud eindigt het lopende LSATB-systeem. Lege regels horen dus niet tussenL:enS:van hetzelfde systeem; wél tussen twee systemen (primaire scheiding). Optioneel mag@---(met commentaar) of een andere directive hetzelfde doen.#-commentaar mag wél tussen markers van hetzelfde systeem. - Een sectie (
@sectieof anoniem) eindigt door: (a)||of:||op alle LSATB-regels van een systeem (expliciet midden in het bestand); of (b) een nieuwe@sectie— de laatste maatstreep van het vorige laatste systeem (|of||, …) is dan het sectie-einde; of (c) einde van het bestand (EOF); of (d) sluiten van een::: mvsa-notatie/::: mvsa-fence (zelfde als EOF). Geen warningMVSA-SECTIE-IMPLICITmeer voor (b)/(c)/(d). Uitzondering: speelblokken (@blok) — geen||-eis tussen blokken (zie Speelplan). @sectieid voldoet aan[a-z][a-z0-9_-]*. 5a.@blok/@speelplan: zie Speelplan. Eén@speelplanper bestand; geen@sectie/anonieme muziek naast een speelplan; geen herhaalstrepen in speelplan-blokken.
Sync¶
- Per maat: alle lyrics-regels en alle stemregels hebben hetzelfde aantal lengte-posities (recite = 1; melisma-slots tellen mee).
- Parallelle lyrics (
LenL1in hetzelfde systeem) hebben per maat dezelfde positietelling. - Elk hoogte-slot op een stemregel is een geldig hoogte-token (EHM, absolute
toon/laddergraad, of aanhouden
-/~). L-duur-ELM’s zoals_op de stem zijn een error (MVSA-HOOGTE), met marker, maat, positie en slot. 8a. Optioneel eindanker direct na een maatstreep (geen spatie): zie Syntax — eindanker. Ongeldige anker- tekst of mismatch met de berekende lopende toon: error (MVSA-BAR-ANKER). Een kale streep is geen anker. Lyrics-regels met een anker-suffix: error. 8b. Uitvoeraanwijzingen opL:([…]): alleen actieve tokens ([//],[adem],[ferm], dynamiekppp–fff,[cresc]/[/cresc],[dim]/[/dim],[rit],[atempo]). Onbekend token, ontbrekende], after-mark zonder voorafgaande lettergreep, before-mark zonder volgende lettergreep, of wees-/geneste cresc/dim-span: error (MVSA-MARK). Marks tellen niet mee in de sync (punt 6). Zie uitvoeraanwijzingen.
Directives / keywords¶
- Onbekende
@-keywords (geldige vorm, niet in Keywords): warning. Ongeldige keyword-vorm (bijv.@1foo): ook warning. Gedefinieerd in v0: sticky (@do,@mode,@oct,@start), layout (@tekst,@mscz-newline,@sectie,@blok,@speelplan,@---), actieve metadata (@title,@ondertitel,@composer,@tekstdichter,@arrangeur,@vertaler,@bron,@copyright), en gereserveerde metadata (@toon,@taal,@genre,@opmerkingen). - Sticky /
@tekst/ metadata met ongeldige waarde: error (MVSA-METAvoor string-metadata).@mscz-newlinemet argumenten: error.@tekstof@mscz-newlinezonder volgend LSATB-systeem: warning.
Canonieke vorm (warning)¶
- Ontbrekende woordstreepjes binnen een woord, of streepjes tussen woorden:
mvsa kuiserwaarschuwt via Pyphen (alleen Latijnse lettergrepen) wanneer de splitsing exact overeenkomt (ontbrekend), zonder een volgend hoofdletter-woord vast te plakken. Streepje tussen twee hoofdletter-woorden zonder Pyphen-breuk: aparte warning. Liturgische / niet-Latijnse splits blijven stil. - Maatstrepen niet op alle LSATB-regels herhaald terwijl de kuiser ze eenduidig
had kunnen syncen — of, na
mvsa kuiser, alsnog inconsistent: error.
Buiten v0-validatie / export-beperkingen¶
- Volledige controle op enharmonische/
#/b-spellingen t.o.v.@mode(norm staat in Syntax — kruis en mol; tooling volgt gefaseerd); - Muzikale “juistheid” t.o.v. een blad (alleen telling en vorm bij validate);
- blokhergebruik-referenties (
@voices,L', deelbereiken); - parallelle lyric-nummers (
L1als tweede<lyric number>); - MSCZ-export.