# MusicXML

MusicXML è un sistema di codifica XML che è in grado di rappresentare il sistema di notazione musicale occidentale dal diciassettesimo secolo in poi, ovvero quello attualmente utilizzato.
La codifica è stata promossa e sviluppata da Recordare LLC, un'azienda americana che si occupa di Internet publishing per edizioni digitali di spartiti musicali.
MusicXML è un formato libero, rilasciato sotto una licenza senza diritto d'autore (royalty-free), che consente l'uso e la modifica del programma a chiunque, purché si specifichi che la proprietà intellettuale del prodotto originario appartiene a Recordare LLC e, in caso di modifica, si mostri all'utente la licenza rilasciata sul sito ufficiale.
MusicXML, in quanto codifica XML, offre tutte le potenzialità di questo strumento:
* strutturazione dei dati
* modularità
* estensibilità
* scambio di dati back-office
* possibilità di interrogazione e interazione attraverso la famiglia di tecnologie legate a XML
Lo scopo e l'uso attuale di MusicXML è l'interscambio di spartiti musicali su Internet. Negli ultimi trent'anni sono stati realizzati numerosi sistemi di rappresentazione della notazione occidentale, ma l'unico utilizzato su larga scala è il MIDI: Musical Instrumental Digital Interface. Mentre il formato MIDI nasce come supporto alle performance musicali, MusicXML si propone come uno standard di codifica dello spartito musicale in tutte le sue sfaccettature. Una volta codificato, lo spartito può essere considerato come un database semi-strutturato e dunque interrogato e rielaborato. Tale tipo di approccio è stato anche suggerito, durante un ciclo di conferenze organizzato per presentare il progetto, da Michael Good, fondatore della Recordare LLC.

## Struttura di MusicXML

La scrittura musicale occidentale può essere considerata sia in senso orizzontale che verticale, a seconda se il fattore di riferimento principale siano le parti
o le battute.
In realtà si tratta di un reticolato che risulta dalla combinazione dei due elementi. Ma di fronte alla necessità di rappresentare la musica in maniera gerarchica, i due approcci devono essere distinti. Per garantirli entrambi, MusicXML presenta due diverse Document Type Definition (DTD) principali e ognuna ha un elemento root diverso:
* <score-partwise> dove le battute sono contenute nelle parti
* <score-timewise> dove le parti sono contenute nelle battute
Le due codifiche sono convertibili l'una nell'altra attraverso un programma XSLT fornito da Recordare.
Le DTD sono parametrizzate; partwise.dtd e timewise.dtd sono entrambe composte da entità parametriche che fanno riferimento a diversi altri file.
La DTD score.dtd definisce la struttura fondamentale della codifica e risolve la dipendenza dall'una o dall'altra DTD principale con questo espediente:
<![ %partwise; [ <!ELEMENT score-partwise (%score-header;, part+)> <!ELEMENT part (measure+)> <!ELEMENT measure (%music-data;)> ]]> <![ %timewise; [ <!ELEMENT score-timewise (%score-header;, measure+)> <!ELEMENT measure (part+)> <!ELEMENT part (%music-data;)> ]]>
Le linee introdotte da <![ indicano un'istruzione condizionale. Se viene utilizzata partwise.dtd, sarà <part> a contenere <measure>, se invece è timewise.dtd a essere utilizzata, sarà <measure> a contenere <part>. L'unica differenza tra i due formati consiste nell'organizzazione di questi due elementi. In questo modo è stato evitato di definire due DTD completamente diverse, mantenendo la praticità delle entità parametriche, che permettono una più semplice manutenzione e interpretazione. Dopo la Document Type Declaration segue uno Score Header nel quale vengono inseriti dei metadati di base.
Esempio di Score Header
* <work> fornisce informazioni sull'opera. Il titolo, il numero, ecc.
* <movement-title> indica il nome del movimento1 codificato.
* <identification> contiene:
** <creator> fornisce informazioni generali sullo o sugli autori.
** <encoding> fornisce informazioni sul programma utilizzato per la codifica.
** <source>/ fornisce informazioni sulla fonte da cui è stato trascritto lo spartito.
** <part-list> enumera le parti che compongono l'organico.
Ogni elemento è opzionale tranne <part-list>. I tag dell'esempio sono solo una parte di quelli utilizzabili: è prevista la possibilità di informazioni più dettagliate riguardo all'opera, il movimento, i compositori, i diritti del musicista e del codificatore. Lo Score Header è strutturato allo stesso modo sia per la DTD timewise che partwise.

## Altri elementi della codifica

Si è detto che nella codifica partwise le parti (<part>) contengono le battute (<measure>): questo implica che la codifica viene effettuata una parte alla volta. L'elemento <part> richiede l'attributo id, di tipo IDREF, che fa riferimento all'ID della part-list nello Score Header; l'elemento <measure> richiede l'attributo number di tipo CDATA. Ogni parte contiene una o più battute.
Il contenuto delle battute è definito dall'entità parametrica %music-data;
L'elemento <note> contenuto in note.dtd:
L'elemento include tutte le informazioni riguardanti la rappresentazione grafica (notehead, staff, beam, …), il tempo (dot, duration, tie, …), il suono (%full-note, instrument, accidental, …).
L'informazione che normalmente permette di riconoscere una nota sullo spartito a colpo d'occhio è contenuta nell'entità parametrica %full-note;
Quest'entità specifica se l'elemento <note> è:
* un'altezza (<pitch>);
* una nota priva di altezza (<unpitched>);
* una pausa (<rest>).
L'elemento <chord>, invece, è un elemento vuoto che serve a specificare se alcune note vengono eseguite contemporaneamente, cioè se formano un accordo. La nota più bassa viene codificata senza l'elemento, mentre le altre presentano <chord> per specificare la loro contemporaneità con la prima.
Tale accordo verrà codificato nel modo seguente:
L'elemento <pitch> fornisce le informazioni tipiche di una nota:
* L'elemento <step> indica il nome della nota. La maggior parte dei plug-in utilizza la notazione anglosassone, anche se il content model prevede #PCDATA. Questo significa che potenzialmente le note potrebbero essere anche scritte in notazione latina.
* L'elemento <alter> indica l'alterazione della nota. Contiene di nuovo #PCDATA, quindi potrebbe essere specificata in diversi modi (per esempio bemolle, diesis, ecc.), ma la maggior parte dei plug-in indica l'innalzamento o l'abbassamento di tono con un numero intero (-2, -1, 1, 2). Nel caso in cui non ci sia alterazione, <alter> non è presente.
* L'elemento <octave> indica l'altezza dell'ottava di riferimento. L'elemento prevede #PCDATA ma dai plug-in viene specificato il numero (sempre intero) dell'ottava.
L'ultima versione di MusicXML (1.1) raggiunge un livello di rappresentazione estremamente elevato, proponendoci uno strumento molto potente.