Domanda

Conosco lo scopo di DOCTYPE (e quale sia ogni URL/identificatore sulla riga) per quanto riguarda gli standard web e la convalida della pagina, ma non sono sicuro di cosa "sia" effettivamente nel contesto di un documento XML.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
    <title>My Page</title>
  </head>
  <body>
    <p>Hello</p>
  </body>
</html>

Fa parte dell'effettiva struttura del documento XML o è una sorta di "suggerimento" simile a un commento che viene annotato e poi rimosso?

Qual è il significato del "!" Prima del nome?Questo denota un tipo speciale di "elemento"?Come si chiamano?

L'esempio che ho pubblicato è XHTML per il Web, ma DOCTYPE viene utilizzato anche nei documenti XML di uso generale?

È stato utile?

Soluzione

DOCTYPE è stato "ereditato" da SGML (doveva puntare al file DTD che spiega come analizzare il file), tuttavia la sintassi XML e gli spazi dei nomi autoesplicativi lo hanno reso in gran parte irrilevante.L'unico vero utilizzo per DOCTYPE/DTD in XML è definire entità denominate consentite (ad es. &nbsp;).

Le specifiche XML consentono anche parser "non convalidanti" che ignorano completamente il file DTD (i browser Web utilizzano tali parser, a meno che tu non sia caduto nel text/html trap, nel qual caso il parser XML non viene utilizzato affatto).

DTD lo è piuttosto scarso ai fini della convalida (difficile specificare regole per più di un livello di nidificazione, nessun modo per specificare tipi di attributi oltre a pochi tipi predefiniti).Schema, RelaxNG può essere molto più preciso.

DTD non supporta completamente nemmeno gli spazi dei nomi, il che porta a soluzioni ridicole come XHTMLplusMathMLplusSVG DOCTYPE.

Nei browser Web alcuni DOCTYPE hanno l'effetto collaterale desiderabile di attivando la modalità di rendering conforme agli standard.Questo è più un hack che l'uso previsto dei DOCTYPE.

  • Se stai utilizzando XHTML reale (application/xhtml+xml – quello che non si apre affatto in IE), quindi non utilizzare affatto DOCTYPE (questa è una raccomandazione di XHTML 5).La modalità XML attiverà il rendering conforme agli standard indipendentemente da DOCTYPE.

  • Se stai usando text/html modalità, quindi utilizzare <!DOCTYPE html>.Questo è HTML 5 DOCTYPE ed è il più breve che attiva il miglior rendering possibile in tutti i browser.I browser non utilizzano DOCTYPE per nessun altro scopo, quindi non ti perdi nulla.

  • Se stai elaborando file XHTML con parser XML (fuori dai browser), allora Per favore non dimenticare di impostare correttamente il catalogo DTD, altrimenti il ​​tuo parser potrebbe esserlo DoS su w3.org cercando di recuperare DTD ogni volta.Se non puoi utilizzare il catalogo DTD, disabilita "esterni" nel parser o ometti DOCTYPE e non utilizzare entità denominate (ad esempioutilizzo &#160; piuttosto che &nbsp;)

Altri suggerimenti

DOCTYPE fa parte della specifica XML (vedere la sottosezione pertinente qui ) e può includere un collegamento a un DTD , " internal " Dichiarazioni DTD o entrambe. Molti & Quot; moderni & Quot; gli usi di XML non usano affatto un DOCTYPE, tuttavia, come menziona PorneL, sia XML Schema che RelaxNG sono modi più potenti per specificare la sintassi di un documento. Vedi questo post sul blog di Tim Bray per un po 'più di sfondo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top