Salve alessandro3,
gli errori che ho rilevato un po' a vista e un po' con gli strumenti di Visual Studio sono questi:
1) Dichiarazione di ferrovia con 3 r:
<!ELEMENT ferrovia (stazione+,treno+,percorso+)>
2) Mancanza di parentesi uncinate nel contenuto di <treno>:
A questo punto però la seconda <motrice/> (quella centrale) non risulta valida per il tuo DOCTYPE e te lo commento. In fondo non ho mai visto un treno a 3 motrici, anche se ho visto 2 treni regionali attaccati (4 motrici totali) che ad una stazione intermedia si sono staccati per proseguire in 2 destinazioni diverse.
<treno sigla="n001" tipo="intercity">
<motrice/> <carrozza_1classe/> <vagone_ristorante/> <!-- <motrice/> --> <carrozza_2classe/> <motrice/>
</treno>
3) In base al primo ELEMENT del DOCTYPE, l'ultimo <motrice/> è invalido, quindi:
</percorso>
<!-- <motrice/> -->
</ferrovia>
4) Non rimane che gli attributi partenza e destinazione di <tratto> che così com'è si ottiene un "Reference to undeclared ID is Udine|Milano", quindi posso solo supporre un ID al posto di IDREFS nei relativi ATTLIST.
<!ATTLIST tratto partenza ID #REQUIRED>
<!ATTLIST tratto destinazione ID #REQUIRED>
Ciao.