O que a standalone
diretiva ' ' significa em um documento XML?
A standalone
declaração é uma maneira de dizer ao analisador para ignorar quaisquer declarações de marcação na DTD . A DTD é posteriormente usada apenas para validação.
Como exemplo, considere a <img>
tag humilde . Se você observar o XHTML 1.0 DTD , verá uma declaração de marcação informando ao analisador que as <img>
tags devem estar VAZIAS e possuir src
e alt
atributos. Quando um navegador está passando por um documento XHTML 1.0 e encontra uma <img>
tag, ele deve observar que o DTD exige src
e alt
atribui os atributos e os adiciona se eles não estiverem presentes. Ele também fechará <img>
automaticamente a tag, pois ela deve estar VAZIA. É isso que a especificação XML quer dizer com "declarações de marcação podem afetar o conteúdo do documento". Você pode usar a standalone
declaração para dizer ao analisador para ignorar essas regras.
Se o seu analisador realmente faz isso é outra questão, mas um analisador de validação compatível com os padrões (como um navegador) deve.
Observe que, se você não especificar uma DTD, a declaração autônoma "não tem significado"; portanto, não há motivo para usá-la, a menos que você também especifique uma DTD.
standalone=yes
, as declarações de marcação não são ignoradas; elas fazem com que o documento seja XML inválido. Você se importaria se eu editar isso na resposta?yes
eno
, ondeno
é o valor padrão.standalone="yes"
significa que o processador XML deve usar o DTD apenas para validação. Nesse caso, não será utilizado para:standalone="yes"
pode adicionar restrições de validade se o documento usar uma DTD externa. Quando o documento contém itens que exigiriam modificação do XML, como valores padrão para atributos, estandalone="yes"
é usado , o documento é inválido .standalone="yes"
pode ajudar a otimizar o desempenho do processamento de documentos.Fonte: o pseudo-atributo independente é relevante apenas se um DTD for usado
fonte
standalone
descreve se o documento XML atual depende de uma declaração de marcação externa.O W3C descreve seu objetivo em "XML (Extensible Markup Language) 1.0 (Quinta Edição)":
fonte
http://www.w3.org/TR/xml/#sec-rmd
fonte
A intenção do
standalone=yes
declaração é garantir que as informações contidas no documento possam ser recuperadas fielmente com base apenas na DTD interna, ou seja, o documento pode "ficar sozinho" sem referências externas. A validação de um documento independente garante que os processadores que não validam terão todas as informações disponíveis para analisar corretamente o documento.A declaração autônoma não serve para nada se um documento não tiver DTD externa e a DTD interna não tiver referências a entidades de parâmetros, pois esses documentos já são implicitamente autônomos.
A seguir estão os efeitos reais do uso
standalone=yes
.Força os processadores a gerar um erro ao analisar documentos com uma DTD externa ou referências a entidades de parâmetros, se o documento contiver referências a entidades não declaradas na DTD interna (com exceção do texto de substituição de entidades de parâmetros como processadores sem validação). analisar isso);
amp
,lt
,gt
,apos
, Equot
são as únicas exceçõesAo analisar um documento não declarado como independente, um processador não validador fica livre para parar de analisar o DTD interno assim que encontrar uma referência de entidade de parâmetro. Declarar um documento como independente força os processadores não validadores a analisar as declarações de marcação na DTD interna, mesmo depois de ignorar uma ou mais referências de entidade de parâmetro.
Força a validação de processadores para gerar um erro se alguma das seguintes opções for encontrada no documento e suas respectivas declarações estiverem na DTD externa ou no texto de substituição da entidade de parâmetro:
amp
,lt
,gt
,apos
, equot
)Um processador não validador pode considerar recuperar a DTD externa e expandir todas as referências de entidade de parâmetro para documentos que não são autônomos, mesmo que não tenha obrigação de fazê-lo, ou seja, a configuração
standalone=yes
poderia teoricamente melhorar o desempenho de processadores não validados (alerta de spoiler: provavelmente não fará diferença).As outras respostas aqui são incompletas ou incorretas, o principal equívoco é que
Muito pelo contrário, declarar um documento como autônomo forçará realmente um processador não validador a analisar declarações internas que ele normalmente deve ignorar (ou seja, aquelas após uma referência de entidade de parâmetro ignorada). Os processadores que não validam ainda devem usar as informações na DTD interna para fornecer valores de atributo padrão e normalizar atributos tokenizados, pois isso é independente da validação.
fonte