Pergunta

Eu sei o propósito de DOCTYPE (eo que cada url / identificador na linha é) tão longe como padrões web e página de validação passa, mas tenho certeza sobre o que realmente "é" no contexto de um 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>

É parte da estrutura do documento XML real, ou é algum tipo de comentário semelhantes a "dica" que é anotado em seguida, despojado?

Qual é o significado da "!" antes do nome? Será que isso denota um tipo especial de "elemento"? O que eles são chamados?

O exemplo que eu postei é XHTML para a web, mas é DOCTYPE também usado em documentos XML de propósito geral?

Foi útil?

Solução

DOCTYPE foi "herdado" do SGML (que era suposto ponto para o arquivo DTD que explica como analisar o arquivo), porém auto-explicativo sintaxe XML e namespaces tornou em grande parte irrelevante. O único uso real para DOCTYPE / DTD em XML é definir entidades nomeadas permitidos (por exemplo &nbsp;).

especificação XML permite mesmo que "não-validação" analisadores que ignoram arquivo DTD completamente (web browsers usar tais analisadores, a menos que você tenha caído na armadilha text/html em que parser XML caso não é usado em tudo).

DTD é bastante pobre para efeitos de validação (difícil de especificar regras para mais de um nível de aninhamento, nenhuma maneira de especificar os tipos de atributos além alguns tipos predefinidos). Schema, RelaxNG pode ser muito mais preciso.

DTD não totalmente namespaces suppport quer, o que leva a soluções alternativas ridículas como XHTMLplusMathMLplusSVG DOCTYPE .

Em navegadores certos DOCTYPEs tem efeito colateral desejável de provocando padrões compatíveis com o modo de renderização . Este é mais um truque do que DOCTYPEs uso pretendido.

  • Se você estiver usando XHTML real (application/xhtml+xml - aquele que não abre no IE em tudo), então não use DOCTYPE em todos (que de recomendação do XHTML 5). Modo XML irá desencadear compatível com os padrões de renderização independente de DOCTYPE.

  • Se você estiver usando o modo text/html, em seguida, usar <!DOCTYPE html>. Isso é HTML 5 DOCTYPE e é uma mais curta que gatilhos melhor possível renderização em todos os navegadores. Browsers não usar DOCTYPE para qualquer outra finalidade, para que você não está perdendo nada.

  • Se você está arquivos XHTML processamento com analisadores XML (navegadores fora), então por favor não se esqueça de configurar DTD Catálogo corretamente, caso contrário, seu analisador pode ser DoS-ing w3.org tentar buscar DTD de cada vez. Se você não pode usar catálogo DTD, em seguida, desativar "externos" no analisador ou DOCTYPE omitir e não use entidades nomeadas (ou seja &#160; uso ao invés de &nbsp;)

Outras dicas

DOCTYPE é parte da especificação XML (consulte a subsecção relevante aqui ) e pode incluir um link para um DTD , declarações "internos" DTD, ou ambos. Muitos usos "modernas" de XML não usar um DOCTYPE em tudo, embora - como porneL menciona, tanto Schema XML e RelaxNG formas mais poderosas para especificar a sintaxe de um documento. Consulte esta Tim Bray post no blog para um pouco mais fundo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top