Un file XML valido richiede una dichiarazione XML?

Sto analizzando un file XML usando Sax Parser di Xerces.
La dichiarazione XML Xml Richiesta?

In XML 1.0, la dichiarazione XML è facoltativa . Vedere la sezione 2.8 della raccomandazione XML 1.0 , in cui si dice che “dovrebbe” essere usato – il che significa che è raccomandato, ma non obbligatorio. In XML 1.1, tuttavia, la dichiarazione è obbligatoria . Vedere la sezione 2.8 della Raccomandazione XML 1.1 , dove si dice “DEVE” essere usato. Continua anche a dire che se la dichiarazione è assente, ciò implica automaticamente che il documento è un documento XML 1.0.

Si noti che in una dichiarazione XML la encoding e la standalone sono entrambe opzionali. Solo la version è obbligatoria. Inoltre, questi non sono attributi, quindi se sono presenti devono essere in questo ordine: version , seguita da qualsiasi encoding , seguita da qualsiasi standalone .

     

Se non si specifica la codifica in questo modo, i parser XML tentano di indovinare quale codifica viene utilizzata. La raccomandazione XML 1.0 descrive un ansible modo in cui la codifica dei caratteri può essere rilevata automaticamente . In pratica, questo non è un grosso problema se l’input è codificato come UTF-8, UTF-16 o US-ASCII. La rilevazione automatica non funziona quando rileva codifiche a 8 bit che utilizzano caratteri al di fuori dell’intervallo US-ASCII (ad es. ISO 8859-1) – evita di crearli se puoi.

La standalone indica se il documento XML può essere elaborato correttamente senza la DTD o meno. Le persone lo usano raramente. In questi giorni, è un pessimo progettare un formato XML in cui mancano informazioni senza il DTD.

Aggiornare:

Un errore “prolog error / invalid utf-8 encoding” indica che i dati effettivi rilevati dal parser all’interno del file non corrispondevano alla codifica dichiarata dalla dichiarazione XML. O in alcuni casi i dati all’interno del file non corrispondevano alla codifica rilevata automaticamente.

Dato che il tuo file contiene un byte order-mark (BOM) dovrebbe essere nella codifica UTF-16. Sospetto che la tua dichiarazione dica Che ovviamente non è corretto quando il file è stato modificato in UTF-16 da NotePad. La soluzione semplice è rimuovere la encoding e dire semplicemente . Potresti anche modificarlo per dire encoding="UTF-16" ma sarebbe sbagliato per il file originale (che non era in UTF-16) o se il file in qualche modo tornasse a UTF-8 o qualche altra codifica.

Non preoccuparti di provare a rimuovere il BOM: questa non è la causa del problema. Usare NotePad o WordPad per modificare XML è il vero problema!

La dichiarazione Xml è opzionale, quindi il tuo xml è ben formato senza di esso. Ma si raccomanda di usarlo in modo che le assunzioni sbagliate non siano fatte dai parser, in particolare sulla codifica usata.

È necessario solo se non si utilizzano i valori predefiniti per la version e la encoding (che si è in questo esempio).