O que a diretiva 'autônoma' significa em XML?

272

O que a standalonediretiva ' ' significa em um documento XML?

usuario
fonte

Respostas:

203

A standalonedeclaraçã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 srce altatributos. Quando um navegador está passando por um documento XHTML 1.0 e encontra uma <img>tag, ele deve observar que o DTD exige srce altatribui 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 standalonedeclaraçã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.

anulabilidade
fonte
9
O exemplo precisa de mais modificações. Ter "standalone = 'no'" normalmente não fecha tags XML não fechadas (esse é um recurso do SGML, mas não do XML). A validação falhará. Também não fornecerá valores para atributos NECESSÁRIOS.
Khaemuaset
2
"A declaração autônoma é uma maneira de dizer ao analisador para ignorar quaisquer declarações de marcação na DTD." Isso não está correto. Com 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?
sleske
@lesleske Por favor, faça a alteração. O autor pode sempre reverter se não estiver feliz.
Stephan
@ Stephan: Obrigado pelo incentivo. Infelizmente, eu não sou mais atual em todo o material XML, então não posso editar com confiança no momento. Sinta-se à vontade para editar a si mesmo se tiver conhecimento atualizado :-).
sleske 03/06
106
  • A diretiva autônoma é um atributo opcional na declaração XML.
  • Os valores válidos são yese no, onde noé o valor padrão.
  • O atributo é relevante apenas quando um DTD é usado. (O atributo é irrelevante ao usar um esquema em vez de uma DTD.)
  • standalone="yes"significa que o processador XML deve usar o DTD apenas para validação. Nesse caso, não será utilizado para:
    • valores padrão para atributos
    • declarações de entidade
    • normalização
  • Observe que 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, e standalone="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

Rinke
fonte
2
O uso independente = "yes" causa restrições adicionais de validade (ou seja, pode causar a invalidez de um documento XML). Eu editei isso na resposta, espero que esteja tudo bem.
sleske
2
@sleske Obrigado pela sua contribuição. Tentei simplificar sua edição enquanto ainda declarava claramente seu ponto. Sinta-se livre para editar novamente se eu entendi errado.
Rinke
20

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)":

Stefan Gehrig
fonte
10

As declarações de marcação podem afetar o conteúdo do documento, conforme passado de um processador XML para um aplicativo; exemplos são padrões de atributo e declarações de entidade. A declaração de documento independente, que pode aparecer como um componente da declaração XML, sinaliza se existem ou não declarações externas à entidade do documento ou nas entidades de parâmetro. [Definição: Uma declaração de marcação externa é definida como uma declaração de marcação que ocorre no subconjunto externo ou em uma entidade de parâmetro (externa ou interna, a última sendo incluída porque os processadores não validadores não precisam lê-los).]

http://www.w3.org/TR/xml/#sec-rmd

Chris Diver
fonte
12
O que isso significa?
dan carter
4
Eu diminuí a votação, já que isso deve ser compreendido de maneira normal por seres humanos normais com QI médio.
Andrea Silvestri
8

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, E quotsão as únicas exceções

  • Ao 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:

    • atributos com valores padrão, se eles não tiverem seu valor fornecido explicitamente
    • referências de entidade (exceto amp, lt, gt, apos, e quot)
    • atributos com tipos tokenizados, se o valor do atributo for modificado pela normalização
    • elementos com conteúdo de elemento, se houver algum espaço em branco em seu conteúdo

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=yespoderia 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

A declaração autônoma é uma maneira de dizer ao analisador para ignorar quaisquer declarações de marcação na DTD. A DTD é posteriormente usada apenas para validação.

standalone = "yes" significa que o processador XML deve usar o DTD apenas para validação.

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.

user657267
fonte