Existe alguma diferença entre ‘xml válido’ e ‘xml bem formado’?

Eu não estava ciente de uma diferença, mas um colega de trabalho diz que há, embora ele não possa fazer o backup. Qual a diferença, se alguma?

Há uma diferença, sim.

O XML que adere ao padrão XML é considerado bem formado, enquanto o xml que adere a um DTD é considerado válido.

XML válido é XML que obtém validação contra um DTD.

XML bem formado é o XML que tem todas as tags fechadas na ordem correta e, se tiver uma declaração, terá a primeira coisa no arquivo com os atributos apropriados.

Em outras palavras, validade refere-se à semântica, bem-formado refere-se à syntax.

Então você pode ter um XML bem formado inválido.

Bem formado vs Valid XML

Bem formado significa que um object textual atende aos requisitos do W3C para ser XML .

Válido significa que o XML bem formado atende aos requisitos adicionais fornecidos por um esquema especificado.


Definições oficiais

Por recomendação do W3C para XML :

[Definição: Um object de dados é um documento XML se estiver bem formado , conforme definido nesta especificação. Além disso, o documento XML é válido se atender a outras restrições.]


Observações:

  • Um documento que não é bem formado não é XML. ( XML bem formado é comumente usado, mas tecnicamente redundante.)
  • Ser válido implica estar bem formado.
  • Ser bem formado não significa ser válido.
  • Embora a Recomendação W3C para XML defina a validade como contra uma DTD, o uso convencional permite que o termo seja aplicado para conformidade com esquemas XML especificados por meio de XSD , RELAX NG , Schematron ou outros methods.

Exemplos do que faz com que um documento seja …

Não bem formado :

  • Um elemento não possui uma tag de fechamento (e não é de fechamento automático).
  • Os elementos se sobrepõem sem o aninhamento adequado:
  • Um valor de atributo está faltando uma cotação de fechamento que corresponde à cotação de abertura.
  • < ou & são usados ​​no conteúdo em vez de &lt ou & .
  • Existem vários elementos-raiz.
  • Várias declarações XML existem ou uma declaração XML aparece diferente da parte superior do documento.

Inválido :

  • Um elemento ou atributo está faltando, mas é requerido pelo esquema XML.
  • Um elemento ou atributo é usado, mas não é definido pelo esquema XML.
  • O conteúdo de um elemento não corresponde ao conteúdo especificado pelo esquema XML.
  • O valor de um atributo não corresponde ao tipo especificado pelo esquema XML.

Namespace-bem-formado

Tecnicamente, os caracteres de dois pontos são permitidos em nomes de componentes em XML. No entanto, os dois pontos só devem ser usados ​​em nomes para propósitos de namespace:

Nota:

A recomendação Namespaces in XML [ XML Names ] atribui um significado aos nomes que contêm caracteres de dois pontos. Portanto, os autores não devem usar os dois-pontos em nomes XML, exceto para fins de namespace, mas os processadores XML devem aceitar os dois-pontos como um caractere de nome.

Portanto, outro termo, namespace-well-formed , é definido na Recomendação Namespaces in XML 1.0 W3C, que implica todas as regras XML para boa formação, além daquelas que governam namespaces e prefixos de namespace.

Coloquialmente, o termo bem formado é freqüentemente usado onde o espaço de nomes bem formado seria mais preciso. No entanto, esta é uma maneira técnica menor de menor conseqüência prática do que a distinção entre XML bem formado versus XML válido descrito nesta resposta.

Como já foi dito, o XML bem formado está em conformidade com a especificação XML e o XML válido está de acordo com um determinado esquema.

Outra maneira de dizer é que XML bem formado é lexicamente correto (pode ser analisado), enquanto XML válido é gramaticalmente correto (pode ser combinado com um vocabulário e gramática conhecidos).

Um documento XML não pode ser válido até que esteja bem formado. Todos os documentos XML são mantidos no mesmo padrão de boa formação (um RFC lançado pelo W3). Um documento XML pode ser válido contra alguns esquemas e inválido para outros. Existem várias linguagens de esquema, muitas das quais são baseadas em XML.

XML bem formado é XML que atende aos requisitos sintáticos da linguagem. Não faltando nenhuma tag de fechamento, tendo todas as suas tags singleton usando invés de apenas , e tendo suas tags de fechamento na ordem correta.

XML válido é XML que usa um DTD e está em conformidade com todos os seus requisitos. Portanto, se você usar um atributo indevidamente, violará o DTD e não será válido.

Todo o XML válido é bem formado, mas nem todo XML bem formado é válido.

O XML é bem formado se atende aos requisitos de todos os documentos XML estabelecidos pelos padrões – portanto, como ter um único nó raiz, ter nós nesteds corretamente, todos os nós terem uma tag de fechamento (ou usar a abreviação do nó vazio de uma barra antes o colchete angular de fechamento), os atributos que estão sendo citados etc. Ser bem formado significa que ele adere às regras de XML e, portanto, pode ser analisado corretamente.

O XML é válido se for validado em relação a um DTD ou esquema. Isso obviamente difere de caso para caso – o XML que é válido contra um esquema não será válido contra outro esquema, mesmo que ainda esteja bem formado.

Se o XML não estiver bem formado, ele não poderá ser analisado corretamente – os analisadores simplesmente lançarão uma exceção ou informarão um erro. Isso é genérico e não importa o que seu XML contém. Somente depois de analisado, pode-se verificar sua validade. Este domínio ou contexto depende e requer um DTD ou esquema para validar. Para documentos XML simples, você pode não ter um DTD ou esquema, caso em que você não pode saber se o XML é válido – o conceito ou validade simplesmente não se aplica neste caso. Claro, isso não significa que você não possa usá-lo, apenas significa que você não pode dizer se é válido ou não.

O W3C, na especificação XML, definiu certas regras que precisam ser seguidas ao criar documentos XML. Os exemplos de tais regras incluem ter exatamente um elemento raiz, com tag de finalização para cada tag de início, usando aspas simples / duplas para valores de atributos e assim por diante. Se um documento XML segue todas essas regras, diz-se que ele é um documento bem formado e que os analisadores XML podem ser usados ​​para analisar e processar esses documentos.

Definições de Tipo de Documento (DTDs) ou XML Schemas podem ser usados ​​para definir a estrutura e o conteúdo de uma class específica de documentos XML. Isso inclui os detalhes do relacionamento pai-filho, listas de atributos, informações de tipo de dados, restrições de valor, etc. Além das regras de boa formação, se um documento XML também segue as regras especificadas no DTD / Esquema associado, diz-se seja um documento XML válido.

Todos os documentos XML válidos são bem formados, mas o inverso nem sempre é verdadeiro. Documentos XML bem formados não precisam necessariamente ser válidos.

Acrescentarei que o XML válido também implica que ele é bem formado, mas o XML bem formado não é necessariamente válido.

Além das DTDs acima mencionadas, há duas outras maneiras de descrever e validar os documentos XML XMLSchema e RelaxNG , que podem ser mais fáceis de usar e oferecer suporte a mais resources do que a DTD.

Se o XML está confirmando para regras DTD, então é um XML válido. Se um documento XML está em conformidade com as regras XML (todas as tags iniciadas são fechadas, existe um elemento raiz etc), então é um XML bem formado.

Extraído da Extensible Markup Language (XML) 1.0 (Quinta Edição) – Recomendação W3C de 26 de novembro de 2008 :

[Definição: Um object de dados é um documento XML se estiver bem formado, conforme definido nesta especificação. Além disso, o documento XML é válido se atender a outras restrições.]


Para aqueles que preferem o código psuedo a parágrafos e parágrafos de texto … 🙂

 IF is_well_formed() THEN # It is well-formed, and can be parsed IF is_valid() THEN # Well-formed and ALSO valid. Hurray! # **A valid XML doc, is a well-formed doc!** ELSE # Only well-formed, NOT valid END IF ELSE # Not well-formed, or valid! END IF FUNCTION is_well_formed IF  THEN RETURN TRUE ELSE RETURN FALSE END IF END FUNCTION FUNCTION is_valid IF  THEN # Standards used to validate XML could be a DTDs or XML Schemas, referenced within the XML document RETURN TRUE ELSE RETURN FALSE END IF END FUNCTION 

Baseado na teoria: “Bem Formado” vs. Válido

DTD é o acrônimo para Document Type Definition. Esta é uma descrição do conteúdo de uma família de arquivos XML. Isso faz parte da especificação XML 1.0 e permite descrever e verificar se uma determinada instância do documento está em conformidade com o conjunto de regras que detalham sua estrutura e conteúdo.

A validação é o processo de verificar um documento em relação a um DTD (mais geralmente contra um conjunto de regras de construção).

O processo de validação e a criação de DTDs são as duas partes mais difíceis do ciclo de vida do XML. Resumidamente, um DTD define todos os elementos possíveis no documento, qual é a forma formal da tree do documento (definindo o conteúdo permitido de um elemento; texto, uma expressão regular para a lista permitida de filhos ou conteúdo misto). ou seja, texto e filhos). O DTD também define os atributos válidos para todos os elementos e os tipos desses atributos.

Bem, XML que não é bem formado, por definição, não é XML. Geralmente, as pessoas se referem ao XML válido como XML que adere a um determinado esquema (XSD ou DTD).

Veja XML DTD nas Escolas W3 :

Um documento XML com syntax correta é chamado de “Bem formado”.

Um documento XML validado contra um DTD é “Bem formado” e “Válido”.