2016-07-03 59 views
7

Quando si utilizza SVG all'interno di HTML5: è la dichiarazione XML <?xml version="1.0" encoding="UTF-8"?> necessario con SVGSVG in HTML5 - quando è la dichiarazione XML `<? Xml version =" 1.0 "encoding =" UTF-8 "?>` Necessario?

  • come immagini tramite <img> o
  • come CSS background-image s?

Questo è leggermente correlato a "Are SVG parameters such as 'xmlns' and 'version' needed". I numeri dei namespace sono chiariti come necessario dalle due risposte e dallo MDN Namespace crash course.

Ma SVG 1.1 non include la dichiarazione sulla necessità della dichiarazione XML o quando potrebbe essere omessa?

Esempio senza dichiarazione:

<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200" viewBox="0 0 200 200"> 
    <circle id="circle--red" cx="30" cy="30" r="30" fill="#f00"/> 
</svg> 

Aggiornamento 2016/07/04: Chiarito a questa domanda è la dichiarazione su XML. Grazie @ Martin Honnen! Aggiornamento 2017-10-24: modificato in “UTF-8“ uppercase e nell'ordine degli attributi ottimizzato SVGO.

+4

'' È la dichiarazione XML, non è un DOCTYPE. –

+0

Una risposta approfondita sulla necessità generale dei file XML della dichiarazione XML è disponibile su https://stackoverflow.com/a/7007781/1696030 In breve, nella versione 1.0 di XML la dichiarazione ** è facoltativa **, ma tu potrebbe incorrere in problemi con la codifica o alcuni editor (di testo). –

risposta

8

per HTML5, il corretto DOCTYPE declaration è

<!DOCTYPE html> 

E 'necessario specificare la modalità standard completi per il browser.

Quello che hai mostrato,

<?xml version="1.0" encoding="utf-8"?> 

è un XML declaration. E 'optional for XML 1.0 e required for XML 1.1, ma

  • XML 1.1 non è in uso diffuso.
  • version="1.0" e encoding="utf-8" sono i valori predefiniti comunque.

Utilizzare una dichiarazione XML in HTML5 quando si desidera specificare una codifica diversa, soprattutto quando il file potrebbe essere consumato non solo dai browser, ma anche da processori XML.

Per ulteriori informazioni vedere HTML5: A vocabulary and associated APIs for HTML and XHTML.

Nota riguardante SVG interno (grazie, @Quentin): SVG incorporato in un documento HTML5 non deve avere una dichiarazione XML indipendente. Solo una dichiarazione XML è consentita in XML ben formato e deve essere nella parte superiore, se disponibile. Vedere this answer per ulteriori dettagli sui requisiti di posizionamento delle dichiarazioni XML.

Nota relativa SVG esterno (grazie, @Kaiido): SVG riferimento tramite HTML5 img o CSS background-images deve avere una propria dichiarazione XML e dovrebbe utilizzare la seguente dichiarazione DOCTYPE:

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
      "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 

Nota per SVG esterno (update) (grazie, @user314159):

Per 1.3. SVG namespace and DTD del Scalable Vector Graphics (SVG) 2 W3C Working Draft 09 July 2015:

0.123.

In questa specifica non è fornito un DTD, poiché è noto che l'utilizzo di DTD per i documenti di convalida è problematico. In particolare, i DTD non gestiscono gli spazi dei nomi con garbo e l'intervallo di vincoli che possono esprimere è limitato. Si consiglia agli autori di non includere una dichiarazione DOCTYPE nei documenti SVG.

[corsivo è mio.]

+1

Giusto per chiarezza, è probabilmente opportuno menzionare che la dichiarazione XML dovrebbe essere nella parte superiore del documento e che l'SVG in linea in HTML 5 è parte del documento HTML 5, non indipendente e non dovrebbe avere la propria dichiarazione XML. – Quentin

+1

E non una sola parola su svg esterno? Questo è il punto della domanda ... "* come immagini in linea tramite' ' come CSS background-images *". In questi casi, dovresti mantenere sia le dichiarazioni xml che il doctype che dovrebbe essere "' btw. – Kaiido

+0

Risposta aggiornata per riflettere suggerimenti utili di Quentin e Kaiido. Grazie! – kjhughes