XML - XML

XML (padrão)
Extensible Markup Language
Extensible Markup Language (XML) logo.svg
Status Publicado, recomendação W3C
Ano começou 1996 ; 25 anos atrás ( 1996 )
Publicado pela primeira vez 10 de fevereiro de 1998 ; 23 anos atrás (como uma recomendação do W3C) ( 10/02/1998 )
Última versão 1.1 (Segunda edição)
29 de setembro de 2006 ; 15 anos atrás ( 29/09/2006 )
Organização World Wide Web Consortium (W3C)
Editores
Padrões básicos SGML
Padrões relacionados Esquema XML
Domínio Serialização de dados
Abreviação XML
Local na rede Internet www .w3 .org / xml
XML (formato de arquivo)
Extensão de nome de arquivo
.xml
Tipo de mídia da Internet
Identificador de tipo uniforme (UTI) public.xml
Conformação UTI public.text
número mágico <?xml
Desenvolvido por World Wide Web Consortium
Tipo de formato Linguagem de marcação
Estendido de SGML
Alargado a
Padrão
Formato aberto ? sim

Extensible Markup Language ( XML ) é uma linguagem de marcação que define um conjunto de regras para a codificação de documentos em um formato tanto legível por humanos quanto por máquina . A especificação XML 1.0 do World Wide Web Consortium de 1998 e várias outras especificações relacionadas - todas elas padrões abertos gratuitos - definem o XML.

Os objetivos de design do XML enfatizam a simplicidade, generalidade e usabilidade na Internet . É um formato de dados textuais com forte suporte via Unicode para diferentes idiomas humanos . Embora o design de XML se concentre em documentos, a linguagem é amplamente usada para a representação de estruturas de dados arbitrárias , como aquelas usadas em serviços da web .

Vários sistemas de esquema existem para auxiliar na definição de linguagens baseadas em XML, enquanto os programadores desenvolveram muitas interfaces de programação de aplicativos (APIs) para auxiliar no processamento de dados XML.

Formulários

A essência da necessidade de linguagens de marcação extensíveis é explicada em Linguagem de marcação (por exemplo, consulte Linguagem de marcação § XML ) e em Linguagem de marcação generalizada padrão .

Centenas de formatos de documentos usando a sintaxe XML foram desenvolvidos, incluindo RSS , Atom , SOAP , SVG e XHTML . Formatos baseados em XML se tornaram o padrão para muitas ferramentas de escritório produtividade, incluindo o Microsoft Office ( Office Open XML ), OpenOffice.org e LibreOffice ( OpenDocument ), e a Apple 's iWork . XML também forneceu a linguagem base para protocolos de comunicação como o XMPP . Os aplicativos do Microsoft .NET Framework usam arquivos XML para configuração e as listas de propriedades são uma implementação do armazenamento de configuração baseado em XML.

Muitos padrões de dados da indústria, como Health Level 7 , OpenTravel Alliance , FpML , MISMO e National Information Exchange Model são baseados em XML e nos recursos avançados da especificação de esquema XML. Muitos desses padrões são bastante complexos e não é incomum que uma especificação compreenda vários milhares de páginas. Na publicação, a Darwin Information Typing Architecture é um padrão de dados da indústria XML. XML é usado extensivamente para sustentar vários formatos de publicação.

XML é amplamente usado em uma arquitetura orientada a serviços (SOA). Sistemas díspares comunicam-se uns com os outros trocando mensagens XML. O formato de troca de mensagens é padronizado como um esquema XML (XSD). Isso também é conhecido como esquema canônico. O XML tornou-se comum para o intercâmbio de dados na Internet. A IETF RFC: 3023 , agora substituída pela RFC: 7303 , deu regras para a construção de Tipos de mídia da Internet para uso no envio de XML. Também define os tipos de mídia application/xmle text/xml, que dizem apenas que os dados estão em XML, e nada sobre sua semântica .

A RFC 7303 também recomenda que as linguagens baseadas em XML recebam tipos de mídia que terminam em +xml; por exemplo, image/svg+xmlpara SVG . Diretrizes adicionais para o uso de XML em um contexto de rede aparecem no RFC 3470, também conhecido como IETF BCP 70, um documento que cobre muitos aspectos do projeto e implantação de uma linguagem baseada em XML.

Terminologia chave

O material desta seção é baseado na especificação XML. Esta não é uma lista exaustiva de todas as construções que aparecem em XML; ele fornece uma introdução às principais construções encontradas com mais frequência no uso diário.

Personagem

Um documento XML é uma sequência de caracteres . Quase todos os caracteres Unicode legais podem aparecer em um documento XML.

Processador e aplicativo

O processador analisa a marcação e passa informações estruturadas para um aplicativo . A especificação impõe requisitos sobre o que um processador XML deve ou não fazer, mas o aplicativo está fora de seu escopo. O processador (como a especificação o chama) costuma ser conhecido coloquialmente como um analisador XML .

Marcação e conteúdo

Os caracteres que compõem um documento XML são divididos em marcação e conteúdo , que podem ser diferenciados pela aplicação de regras sintáticas simples. Geralmente, as strings que constituem a marcação começam com o caractere <e terminam com a >, ou começam com o caractere &e terminam com a ;. Strings de caracteres que não são markup são conteúdos. Porém, em uma seção CDATA , os delimitadores <![CDATA[e ]]>são classificados como marcação, enquanto o texto entre eles é classificado como conteúdo. Além disso, os espaços em branco antes e depois do elemento mais externo são classificados como marcação.

Marcação

Uma tag é uma construção de marcação que começa com <e termina com >. Existem três tipos de tag:
  • tag de início , como <section>;
  • tag final , como </section>;
  • tag de elemento vazio , como <line-break />.

Elemento

Um elemento é um componente lógico do documento que começa com uma tag inicial e termina com uma tag final correspondente ou consiste apenas em uma tag de elemento vazio. Os caracteres entre a tag inicial e a tag final, se houver, são o conteúdo do elemento e podem conter marcação, incluindo outros elementos, que são chamados de elementos filhos . Um exemplo é <greeting>Hello, world!</greeting>. Outro é <line-break />.

Atributo

Um atributo é uma construção de marcação que consiste em um par nome-valor que existe em uma tag de início ou tag de elemento vazio. Um exemplo é <img src="madonna.jpg" alt="Madonna" />, onde os nomes dos atributos são "src" e "alt", e seus valores são "madonna.jpg" e "Madonna" respectivamente. Outro exemplo é <step number="3">Connect A to B.</step>, onde o nome do atributo é "número" e seu valor é "3". Um atributo XML pode ter apenas um único valor e cada atributo pode aparecer no máximo uma vez em cada elemento. Na situação comum em que uma lista de vários valores é desejada, isso deve ser feito codificando a lista em um atributo XML bem formado com algum formato além do que o XML define a si mesmo. Normalmente, esta é uma lista delimitada por vírgula ou ponto e vírgula ou, se os valores individuais não contêm espaços, uma lista delimitada por espaço pode ser usada. <div class="inner greeting-box">Welcome!</div>, em que o atributo "class" tem o valor "inner greeting-box" e também indica os dois nomes de classe CSS "inner" e "greeting-box".

Declaração XML

Os documentos XML podem começar com uma declaração XML que descreve algumas informações sobre eles mesmos. Um exemplo é <?xml version="1.0" encoding="UTF-8"?>.

Personagens e fugas

Os documentos XML consistem inteiramente em caracteres do repertório Unicode . Exceto por um pequeno número de caracteres de controle especificamente excluídos , qualquer caractere definido por Unicode pode aparecer no conteúdo de um documento XML.

XML inclui recursos para identificar a codificação dos caracteres Unicode que compõem o documento e para expressar caracteres que, por uma razão ou outra, não podem ser usados ​​diretamente.

Caracteres válidos

Os pontos de código Unicode nos seguintes intervalos são válidos em documentos XML 1.0:

  • U + 0009 (guia horizontal), U + 000A (alimentação de linha), U + 000D (retorno de carro): esses são os únicos controles C0 aceitos no XML 1.0;
  • U + 0020 – U + D7FF, U + E000 – U + FFFD: exclui alguns não-caracteres no BMP (todos os substitutos, U + FFFE e U + FFFF são proibidos);
  • U + 10000 – U + 10FFFF: inclui todos os pontos de código em planos suplementares, incluindo não-personagens.

O XML 1.1 estende o conjunto de caracteres permitidos para incluir todos os itens acima, além dos caracteres restantes no intervalo U + 0001 – U + 001F. Ao mesmo tempo, no entanto, ele restringe o uso de caracteres de controle C0 e C1 diferentes de U + 0009 (guia horizontal), U + 000A (avanço de linha), U + 000D (retorno de carro) e U + 0085 (próxima linha ), exigindo que sejam escritos na forma de escape (por exemplo, U + 0001 deve ser escrito como &#x01;ou seu equivalente). No caso de caracteres C1, essa restrição é uma incompatibilidade com versões anteriores; foi introduzido para permitir que erros comuns de codificação sejam detectados.

O ponto de código U + 0000 (Nulo) é o único caractere não permitido em nenhum documento XML 1.0 ou 1.1.

Detecção de codificação

O conjunto de caracteres Unicode pode ser codificado em bytes para armazenamento ou transmissão de várias maneiras diferentes, chamadas de "codificações". O próprio Unicode define codificações que cobrem todo o repertório; os bem conhecidos incluem UTF-8 e UTF-16 . Existem muitas outras codificações de texto anteriores ao Unicode, como ASCII e ISO / IEC 8859 ; seus repertórios de caracteres em quase todos os casos são subconjuntos do conjunto de caracteres Unicode.

XML permite o uso de qualquer uma das codificações definidas por Unicode e qualquer outra codificação cujos caracteres também apareçam em Unicode. XML também fornece um mecanismo pelo qual um processador XML pode, de maneira confiável, sem nenhum conhecimento prévio, determinar qual codificação está sendo usada. Codificações diferentes de UTF-8 e UTF-16 não são necessariamente reconhecidas por todos os analisadores XML.

Fugindo

XML fornece recursos de escape para incluir caracteres que são problemáticos para incluir diretamente. Por exemplo:

  • Os caracteres "<" e "&" são marcadores de sintaxe chave e podem nunca aparecer no conteúdo fora de uma seção CDATA . É permitido, mas não recomendado, usar "<" em valores de entidade XML.
  • Algumas codificações de caracteres oferecem suporte apenas a um subconjunto de Unicode. Por exemplo, é legal codificar um documento XML em ASCII, mas ASCII não possui pontos de código para caracteres Unicode como "é".
  • Pode não ser possível digitar o caractere na máquina do autor.
  • Alguns caracteres têm glifos que não podem ser distinguidos visualmente de outros caracteres, como o espaço sem quebra ( &#xa0;) "" e o espaço ( &#x20;) "", e a letra maiúscula cirílica A ( &#x410;) "А" e a letra latina maiúscula A ( &#x41;) "UMA".

Existem cinco entidades predefinidas :

  • &lt; representa "<";
  • &gt; representa ">";
  • &amp; representa "&";
  • &apos;representa " ' ";
  • &quot;representa ' " '.

Todos os caracteres Unicode permitidos podem ser representados com uma referência de caractere numérico . Considere o caractere chinês "中", cujo código numérico em Unicode é hexadecimal 4E2D ou decimal 20.013. Um usuário cujo teclado não oferece nenhum método para inserir esse caractere ainda pode inseri-lo em um documento XML codificado como &#20013;ou &#x4e2d;. Da mesma forma, a string "I <3 Jörg" pode ser codificada para inclusão em um documento XML como I &lt;3 J&#xF6;rg.

&#0;não é permitido, entretanto, porque o caractere nulo é um dos caracteres de controle excluídos do XML, mesmo ao usar uma referência de caractere numérico. Um mecanismo de codificação alternativo, como Base64, é necessário para representar esses caracteres.

Comentários

Os comentários podem aparecer em qualquer lugar em um documento fora de outra marcação. Os comentários não podem aparecer antes da declaração XML. Os comentários começam <!--e terminam com -->. Para compatibilidade com SGML , a string "-" (hífen duplo) não é permitida nos comentários; isso significa que os comentários não podem ser aninhados. O e comercial não tem significado especial nos comentários, portanto, as referências de entidade e de caractere não são reconhecidas como tal e não há como representar caracteres fora do conjunto de caracteres da codificação do documento.

Um exemplo de comentário válido: <!--no need to escape <code> & such in comments-->

Uso internacional

XML 1.0 (Quinta Edição) e XML 1.1 suportam o uso direto de quase qualquer caractere Unicode em nomes de elementos, atributos, comentários, dados de caracteres e instruções de processamento (exceto aqueles que têm significado simbólico especial no próprio XML, como o less -que o sinal, "<"). O seguinte é um documento XML bem formado, incluindo caracteres chineses , armênios e cirílicos :

<?xml version="1.0" encoding="UTF-8"?>
<俄语 լեզու="ռուսերեն">данные</俄语>

Correção sintática e tratamento de erros

A especificação XML define um documento XML como um texto bem formado , o que significa que ele atende a uma lista de regras de sintaxe fornecidas na especificação. Alguns pontos-chave na lista bastante extensa incluem:

  • O documento contém apenas caracteres Unicode legais devidamente codificados.
  • Nenhum dos caracteres especiais de sintaxe como <e &aparecem, exceto ao desempenhar suas funções de delimitação de marcação.
  • A tag de início, a tag de fim e a tag de elemento vazio que delimitam os elementos estão aninhados corretamente, sem nenhum ausente e nenhum sobreposto.
  • Os nomes das marcas diferenciam maiúsculas de minúsculas; a tag inicial e a tag final devem corresponder exatamente.
  • Os nomes das tags não podem conter nenhum dos caracteres! "# $% & '() * +, /; <=>? @ [\] ^` {|} ~, Nem um caractere de espaço e não podem começar com "-", "." ou um dígito numérico.
  • Um único elemento raiz contém todos os outros elementos.

A definição de um documento XML exclui textos que contêm violações das regras de boa formação; eles simplesmente não são XML. Um processador XML que encontra tal violação é necessário para relatar tais erros e interromper o processamento normal. Esta política, ocasionalmente referida como " tratamento de erros draconiano " , contrasta notavelmente com o comportamento de programas que processam HTML , que são projetados para produzir um resultado razoável mesmo na presença de erros graves de marcação. A política do XML nesta área foi criticada como uma violação da lei de Postel ("Seja conservador no que você envia; seja liberal no que você aceita").

A especificação XML define um documento XML válido como um documento XML bem formado que também está em conformidade com as regras de uma Definição de Tipo de Documento (DTD).

Esquemas e validação

Além de ser bem formado, um documento XML pode ser válido . Isso significa que ele contém uma referência a uma Definição de Tipo de Documento (DTD), e que seus elementos e atributos são declarados nessa DTD e seguem as regras gramaticais para eles que a DTD especifica.

Os processadores XML são classificados como validantes ou não validantes, dependendo se eles verificam ou não os documentos XML quanto à validade. Um processador que descobre um erro de validade deve ser capaz de relatá-lo, mas pode continuar o processamento normal.

Um DTD é um exemplo de esquema ou gramática . Desde a publicação inicial do XML 1.0, tem havido um trabalho substancial na área de linguagens de esquema para XML. Essas linguagens de esquema normalmente restringem o conjunto de elementos que podem ser usados ​​em um documento, quais atributos podem ser aplicados a eles, a ordem em que podem aparecer e os relacionamentos pai / filho permitidos.

Definição do tipo de documento

A linguagem de esquema mais antiga para XML é a definição de tipo de documento (DTD), herdada de SGML.

Os DTDs têm os seguintes benefícios:

  • O suporte DTD é onipresente devido à sua inclusão no padrão XML 1.0.
  • Os DTDs são concisos em comparação com as linguagens de esquema baseadas em elementos e, conseqüentemente, apresentam mais informações em uma única tela.
  • Os DTDs permitem a declaração de conjuntos de entidades públicas padrão para caracteres de publicação.
  • Os DTDs definem um tipo de documento em vez dos tipos usados ​​por um namespace, agrupando assim todas as restrições de um documento em uma única coleção.

Os DTDs têm as seguintes limitações:

  • Eles não têm suporte explícito para recursos mais recentes de XML, principalmente namespaces .
  • Eles carecem de expressividade. XML DTDs são mais simples do que SGML DTDs e existem certas estruturas que não podem ser expressas com gramáticas regulares. Os DTDs suportam apenas tipos de dados rudimentares.
  • Eles não têm legibilidade. Os designers de DTD normalmente fazem uso intenso de entidades de parâmetro (que se comportam essencialmente como macros textuais ), o que torna mais fácil definir gramáticas complexas, mas em detrimento da clareza.
  • Eles usam uma sintaxe baseada na sintaxe de expressão regular , herdada de SGML, para descrever o esquema. APIs XML típicas, como SAX , não tentam oferecer aos aplicativos uma representação estruturada da sintaxe, portanto, é menos acessível aos programadores do que uma sintaxe baseada em elemento.

Duas características peculiares que distinguem DTDs de outros tipos de esquema são o suporte sintático para incorporar um DTD em documentos XML e para definir entidades , que são fragmentos arbitrários de texto ou marcação que o processador XML insere no próprio DTD e no documento XML onde quer que eles são referenciados, como escapes de caractere.

A tecnologia DTD ainda é usada em muitas aplicações devido à sua onipresença.

Esquema

Uma linguagem de esquema mais recente, descrita pelo W3C como o sucessor dos DTDs, é o XML Schema , frequentemente referido pelo initialism para instâncias do XML Schema, XSD (XML Schema Definition). Os XSDs são muito mais poderosos do que os DTDs na descrição de linguagens XML. Eles usam um sistema de datatyping avançado e permitem restrições mais detalhadas na estrutura lógica de um documento XML. Os XSDs também usam um formato baseado em XML, o que torna possível usar ferramentas XML comuns para ajudar a processá-los.

Elemento xs: schema que define um esquema:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"></xs:schema>

RELAX NG

RELAX NG (Linguagem Regular para XML Next Generation) foi inicialmente especificado pelo OASIS e agora é um padrão (Parte 2: Validação baseada em gramática regular da ISO / IEC 19757 - DSDL ). Os esquemas RELAX NG podem ser escritos em uma sintaxe baseada em XML ou em uma sintaxe não XML mais compacta; as duas sintaxes são isomórficas e a ferramenta de conversão de James Clark - Trang - pode converter entre elas sem perda de informações. O RELAX NG tem uma estrutura de definição e validação mais simples do que o XML Schema, tornando-o mais fácil de usar e implementar. Ele também tem a capacidade de usar plug-ins de estrutura de tipo de dados ; um autor de esquema RELAX NG, por exemplo, pode exigir valores em um documento XML para estar em conformidade com as definições em tipos de dados de esquema XML.

Schematron

Schematron é uma linguagem para fazer afirmações sobre a presença ou ausência de padrões em um documento XML. Normalmente usa expressões XPath . Schematron agora é um padrão (Parte 3: Validação baseada em regras da ISO / IEC 19757 - DSDL ).

DSDL e outras linguagens de esquema

DSDL (Document Schema Definition Languages) é um padrão ISO / IEC de várias partes (ISO / IEC 19757) que reúne um conjunto abrangente de pequenas linguagens de esquema, cada uma voltada para problemas específicos. DSDL inclui a sintaxe completa e compacta RELAX NG , linguagem de asserção Schematron e linguagens para definir tipos de dados, restrições de repertório de caracteres, renomeação e expansão de entidade e roteamento baseado em espaço de nomes de fragmentos de documentos para diferentes validadores. As linguagens de esquema DSDL ainda não têm o suporte do fornecedor de Esquemas XML e são, até certo ponto, uma reação popular de editores industriais à falta de utilidade dos Esquemas XML para publicação .

Algumas linguagens de esquema não apenas descrevem a estrutura de um formato XML específico, mas também oferecem recursos limitados para influenciar o processamento de arquivos XML individuais que estão em conformidade com esse formato. DTDs e XSDs têm essa capacidade; eles podem, por exemplo, fornecer o recurso de aumento do infoset e padrões de atributos. RELAX NG e Schematron intencionalmente não os fornecem.

Especificações relacionadas

Um conjunto de especificações intimamente relacionadas ao XML foi desenvolvido, começando logo após a publicação inicial do XML 1.0. Freqüentemente, o termo "XML" é usado para se referir ao XML junto com uma ou mais dessas outras tecnologias que passaram a ser vistas como parte do núcleo XML.

  • Os namespaces XML permitem que o mesmo documento contenha elementos e atributos XML retirados de vocabulários diferentes, sem que ocorram conflitos de nomenclatura . Embora os namespaces XML não façam parte da especificação XML em si, virtualmente todos os softwares XML também oferecem suporte a namespaces XML.
  • XML Base define o xml:baseatributo, que pode ser usado para definir a base para a resolução de referências URI relativas dentro do escopo de um único elemento XML.
  • XML Information Set ou XML Infoset é um modelo de dados abstrato para documentos XML em termos de itens de informação . O infoset é comumente usado nas especificações de linguagens XML, para conveniência na descrição de restrições nas construções XML que essas linguagens permitem.
  • XSL (Extensible Stylesheet Language) é uma família de linguagens usadas para transformar e renderizar documentos XML, dividida em três partes:
  • XSLT (XSL Transformations), uma linguagem XML para transformar documentos XML em outros documentos XML ou outros formatos como HTML, texto simples ou XSL-FO. O XSLT é fortemente acoplado ao XPath, que ele usa para endereçar componentes do documento XML de entrada, principalmente elementos e atributos.
  • XSL-FO (XSL Formatting Objects), uma linguagem XML para renderizar documentos XML, frequentemente usada para gerar PDFs.
  • XPath (XML Path Language), uma linguagem não XML para abordar os componentes (elementos, atributos e assim por diante) de um documento XML. XPath é amplamente utilizado em outras especificações XML centrais e em bibliotecas de programação para acessar dados codificados em XML.

Algumas outras especificações concebidas como parte do "XML Core" não encontraram ampla adoção, incluindo XInclude , XLink e XPointer .

Interfaces de programação

Os objetivos de design do XML incluem: "Deve ser fácil escrever programas que processam documentos XML." Apesar disso, a especificação XML quase não contém informações sobre como os programadores podem fazer esse processamento. A especificação XML Infoset fornece um vocabulário para se referir às construções em um documento XML, mas não fornece nenhuma orientação sobre como acessar essas informações. Uma variedade de APIs para acessar XML foram desenvolvidas e usadas, e algumas foram padronizadas.

APIs existentes para processamento de XML tendem a se enquadrar nestas categorias:

  • APIs orientadas a stream acessíveis a partir de uma linguagem de programação, por exemplo SAX e StAX .
  • APIs de travessia de árvore acessíveis a partir de uma linguagem de programação, por exemplo DOM .
  • Ligação de dados XML , que fornece uma tradução automática entre um documento XML e objetos de linguagem de programação.
  • Linguagens de transformação declarativa, como XSLT e XQuery .
  • Extensões de sintaxe para linguagens de programação de uso geral, por exemplo LINQ e Scala .

As instalações orientadas a fluxo requerem menos memória e, para certas tarefas baseadas em uma passagem linear de um documento XML, são mais rápidas e simples do que outras alternativas. APIs de travessia de árvore e vinculação de dados normalmente requerem o uso de muito mais memória, mas geralmente são consideradas mais convenientes para uso por programadores; alguns incluem a recuperação declarativa de componentes do documento por meio do uso de expressões XPath.

XSLT é projetado para descrição declarativa de transformações de documentos XML e foi amplamente implementado em pacotes do lado do servidor e navegadores da web. O XQuery se sobrepõe ao XSLT em sua funcionalidade, mas foi projetado mais para pesquisar grandes bancos de dados XML .

API simples para XML

API simples para XML (SAX) é um lexical , orientada a eventos API em que um documento é lido em série e seu conteúdo são relatados como retornos de chamada para vários métodos em um objeto manipulador de projeto do usuário. O SAX é rápido e eficiente de implementar, mas difícil de usar para extrair informações aleatoriamente do XML, uma vez que tende a sobrecarregar o autor do aplicativo com o controle de qual parte do documento está sendo processada. É mais adequado para situações em que determinados tipos de informações são sempre tratados da mesma forma, independentemente de onde ocorram no documento.

Pull parsing

A análise pull trata o documento como uma série de itens lidos em sequência usando o padrão de design do iterador . Isso permite a gravação de analisadores descendentes recursivos nos quais a estrutura do código que executa a análise reflete a estrutura do XML que está sendo analisado, e os resultados intermediários analisados ​​podem ser usados ​​e acessados ​​como variáveis ​​locais dentro das funções que executam a análise ou transmitidos ( como parâmetros de função) em funções de nível inferior ou retornados (como valores de retorno de função) para funções de nível superior. Exemplos de analisadores pull incluem Data :: Edit :: Xml em Perl , StAX na linguagem de programação Java , XMLPullParser em Smalltalk , XMLReader em PHP , ElementTree.iterparse em Python , System.Xml.XmlReader no .NET Framework e DOM API traversal (NodeIterator e TreeWalker).

Um analisador pull cria um iterador que visita sequencialmente os vários elementos, atributos e dados em um documento XML. O código que usa este iterador pode testar o item atual (para dizer, por exemplo, se é uma tag de início ou fim, ou texto) e inspecionar seus atributos (nome local, namespace , valores de atributos XML, valor de texto, etc.), e também pode mover o iterador para o próximo item. O código pode, portanto, extrair informações do documento à medida que o atravessa. A abordagem descendente recursiva tende a manter os dados como variáveis ​​locais digitadas no código que faz a análise, enquanto SAX, por exemplo, normalmente requer um analisador para manter manualmente os dados intermediários em uma pilha de elementos que são elementos pais do elemento sendo analisado. O código de análise pull pode ser mais simples de entender e manter do que o código de análise SAX.

Modelo de Objeto de Documento

Document Object Model (DOM) é uma API que permite a navegação de todo o documento como se fosse uma árvore de objetos de representando o conteúdo do documento. Um documento DOM pode ser criado por um analisador ou pode ser gerado manualmente pelos usuários (com limitações). Os tipos de dados em nós DOM são abstratos; implementações fornecem suas próprias ligações específicas da linguagem de programação . As implementações do DOM tendem a consumir muita memória , pois geralmente exigem que o documento inteiro seja carregado na memória e construído como uma árvore de objetos antes que o acesso seja permitido.

Ligação de dados

A vinculação de dados XML é a vinculação de documentos XML a uma hierarquia de objetos personalizados e fortemente tipados, em contraste com os objetos genéricos criados por um analisador DOM. Essa abordagem simplifica o desenvolvimento de código e, em muitos casos, permite que os problemas sejam identificados em tempo de compilação, em vez de tempo de execução. É adequado para aplicativos em que a estrutura do documento é conhecida e corrigida no momento em que o aplicativo é escrito. Os exemplos de sistemas de ligação de dados incluem a Arquitetura Java para Ligação XML (JAXB), Serialização XML no .NET Framework . e serialização de XML em gSOAP .

XML como tipo de dados

XML apareceu como um tipo de dados de primeira classe em outras linguagens. A extensão ECMAScript para XML (E4X) para a linguagem ECMAScript / JavaScript define explicitamente dois objetos específicos (XML e XMLList) para JavaScript, que suportam nós de documentos XML e listas de nós XML como objetos distintos e usam uma notação de ponto especificando relacionamentos pai-filho . E4X é suportado pelos navegadores Mozilla 2.5+ (embora agora obsoleto) e Adobe Actionscript , mas não foi adotado de forma mais universal. Notações semelhantes são usadas na implementação do LINQ da Microsoft para Microsoft .NET 3.5 e superior e no Scala (que usa o Java VM). O aplicativo xmlsh de código aberto, que fornece um shell semelhante ao Linux com recursos especiais para manipulação de XML, trata de forma semelhante o XML como um tipo de dados, usando a notação <[]>. O Resource Description Framework define um tipo de dados rdf:XMLLiteralpara conter XML canônico empacotado . O Facebook produziu extensões para as linguagens PHP e JavaScript que adicionam XML à sintaxe principal de maneira semelhante ao E4X, ou seja, XHP e JSX, respectivamente.

História

XML é um perfil de aplicativo da SGML (ISO 8879).

A versatilidade do SGML para exibição dinâmica de informações foi compreendida pelos primeiros editores de mídia digital no final da década de 1980, antes do surgimento da Internet. Em meados da década de 1990, alguns praticantes da SGML haviam adquirido experiência com a então nova World Wide Web e acreditavam que a SGML oferecia soluções para alguns dos problemas que a Web provavelmente enfrentaria à medida que crescesse. Dan Connolly adicionou SGML à lista de atividades do W3C quando se juntou à equipe em 1995; o trabalho começou em meados de 1996, quando o engenheiro da Sun Microsystems Jon Bosak desenvolveu um estatuto e recrutou colaboradores. Bosak estava bem conectado na pequena comunidade de pessoas que tinham experiência em SGML e na web.

O XML foi compilado por um grupo de trabalho de onze membros, apoiado por um Grupo de Interesse de (aproximadamente) 150 membros. O debate técnico ocorreu na lista de mala direta do Grupo de Interesse e as questões foram resolvidas por consenso ou, quando isso falhou, pela maioria dos votos do Grupo de Trabalho. Um registro das decisões de design e seus fundamentos foi compilado por Michael Sperberg-McQueen em 4 de dezembro de 1997. James Clark atuou como Líder Técnico do Grupo de Trabalho, contribuindo notavelmente com a <empty />sintaxe de elemento vazio e o nome "XML". Outros nomes que foram apresentados para consideração incluem "MAGMA" (Arquitetura mínima para aplicativos de marcação generalizada), "SLIM" (linguagem estruturada para marcação da Internet) e "MGML" (linguagem de marcação mínima generalizada). Os co-editores da especificação eram originalmente Tim Bray e Michael Sperberg-McQueen . Na metade do projeto, Bray aceitou um contrato de consultoria com a Netscape , provocando protestos violentos da Microsoft. Bray foi temporariamente convidado a renunciar à redação. Isso levou a uma disputa intensa no Grupo de Trabalho, eventualmente resolvida com a nomeação de Jean Paoli , da Microsoft, como terceiro coeditor.

O XML Working Group nunca se encontrou cara a cara; o design foi realizado usando uma combinação de e-mail e teleconferências semanais. As principais decisões de design foram alcançadas em uma curta explosão de intenso trabalho entre agosto e novembro de 1996, quando o primeiro Working Draft de uma especificação XML foi publicado. O trabalho de design continuou em 1997 e o XML 1.0 tornou-se uma recomendação do W3C em 10 de fevereiro de 1998.

Fontes

XML é um perfil de um SGML padrão ISO, e a maior parte do XML vem de SGML inalterado. De SGML vem a separação de estruturas lógicas e físicas (elementos e entidades), a disponibilidade de validação baseada em gramática (DTDs), a separação de dados e metadados (elementos e atributos), conteúdo misto, a separação de processamento de representação ( processamento instruções ) e a sintaxe de colchetes angulares padrão. A declaração SGML foi removida; portanto, o XML tem um conjunto de delimitadores fixo e adota o Unicode como o conjunto de caracteres do documento .

Outras fontes de tecnologia para XML foram o TEI (Text Encoding Initiative), que definiu um perfil de SGML para uso como "sintaxe de transferência"; e HTML , em que os elementos eram sincronizados com seus recursos, os conjuntos de caracteres do documento eram separados da codificação do recurso, o xml:langatributo era inventado e (como o HTTP ) os metadados acompanhavam o recurso, em vez de serem necessários na declaração de um link. O projeto ERCS (Extended Reference Concrete Syntax) do SPREAD (Projeto de Padronização Relativo aos Documentos do Leste Asiático) do grupo de especialistas em Processamento de Documentos China / Japão / Coréia relacionado à ISO foi a base das regras de nomenclatura do XML 1.0; O SPREAD também introduziu referências de caracteres numéricos hexadecimais e o conceito de referências para disponibilizar todos os caracteres Unicode. Para suportar melhor ERCS, XML e HTML, o padrão SGML IS 8879 foi revisado em 1996 e 1998 com WebSGML Adaptations. O cabeçalho XML seguiu o do ISO HyTime .

As ideias desenvolvidas durante a discussão que são novas em XML incluem o algoritmo para detecção de codificação e o cabeçalho de codificação, o destino da instrução de processamento, o atributo xml: space e o novo delimitador de fechamento para tags de elemento vazio. A noção de boa formação em oposição à validade (que permite a análise sem um esquema) foi formalizada pela primeira vez em XML, embora tenha sido implementada com sucesso no software Electronic Book Technology "Dynatext"; o software do Projeto de Dicionário de Inglês New Oxford da Universidade de Waterloo; o processador de texto RISP LISP SGML na Uniscope, Tóquio; o sistema de hipertexto IADS do Comando de Mísseis do Exército dos EUA; Contexto gráfico do Mentor; Interleaf e Sistema de Publicação Xerox.

Versões

Existem duas versões atuais de XML:

XML 1.0

O primeiro ( XML 1.0 ) foi definido inicialmente em 1998. Ele passou por pequenas revisões desde então, sem receber um novo número de versão, e está atualmente em sua quinta edição, publicada em 26 de novembro de 2008. Está amplamente implementado e ainda recomendado para uso geral.

XML 1.1

O segundo ( XML 1.1 ) foi publicado inicialmente em 4 de fevereiro de 2004, mesmo dia do XML 1.0 Terceira Edição, e atualmente está em sua segunda edição, conforme publicado em 16 de agosto de 2006. Ele contém recursos (alguns contenciosos) que são pretendidos para tornar o XML mais fácil de usar em certos casos. As principais mudanças são para permitir o uso de caracteres de finalização de linha usados ​​em plataformas EBCDIC e o uso de scripts e caracteres ausentes do Unicode 3.2. XML 1.1 não é amplamente implementado e é recomendado para uso apenas por aqueles que precisam de seus recursos específicos.

Caracteres Unicode válidos em XML 1.0 e XML 1.1

Antes do lançamento da quinta edição, o XML 1.0 diferia do XML 1.1 por ter requisitos mais rígidos para caracteres disponíveis para uso em nomes de elementos e atributos e identificadores exclusivos: nas primeiras quatro edições do XML 1.0, os caracteres eram enumerados exclusivamente usando uma versão específica do Padrão Unicode (Unicode 2.0 para Unicode 3.2.) A quinta edição substitui o mecanismo do XML 1.1, que é mais preparado para o futuro, mas reduz a redundância . A abordagem adotada na quinta edição do XML 1.0 e em todas as edições do XML 1.1 é que apenas certos caracteres são proibidos em nomes e todo o resto é permitido para acomodar caracteres de nome adequados em futuras versões do Unicode. Na quinta edição, os nomes XML podem conter caracteres nos scripts balineses , cham ou fenícios, entre muitos outros adicionados ao Unicode desde o Unicode 3.2.

Quase qualquer ponto de código Unicode pode ser usado nos dados de caractere e valores de atributo de um documento XML 1.0 ou 1.1, mesmo se o caractere correspondente ao ponto de código não estiver definido na versão atual do Unicode. Em dados de caracteres e valores de atributos, XML 1.1 permite o uso de mais caracteres de controle do que XML 1.0, mas, para "robustez", a maioria dos caracteres de controle introduzidos em XML 1.1 devem ser expressos como referências de caracteres numéricos (e # x7F a # x9F , que eram permitidos no XML 1.0, estão no XML 1.1 até mesmo obrigados a ser expressos como referências de caracteres numéricos). Entre os caracteres de controle suportados no XML 1.1 estão dois códigos de quebra de linha que devem ser tratados como espaços em branco. Caracteres de espaço em branco são os únicos códigos de controle que podem ser escritos diretamente.

XML 2.0

Tem havido discussão sobre um XML 2.0, embora nenhuma organização tenha anunciado planos para trabalhar em tal projeto. XML-SW (SW para skunkworks ), escrito por um dos desenvolvedores originais do XML, contém algumas propostas de como um XML 2.0 pode se parecer: eliminação de DTDs da sintaxe, integração de namespaces , XML Base e XML Information Set na base padrão.

XML binário

O World Wide Web Consortium também tem um Grupo de Trabalho de Caracterização Binária XML que faz pesquisas preliminares sobre casos de uso e propriedades para uma codificação binária de Conjunto de Informações XML. O grupo de trabalho não está autorizado a produzir quaisquer padrões oficiais. Uma vez que XML é, por definição, baseado em texto, ITU-T e ISO estão usando o nome Fast Infoset para seu próprio infoset binário para evitar confusão (consulte ITU-T Rec. X.891 e ISO / IEC 24824-1).

Crítica

XML e suas extensões têm sido regularmente criticados por sua verbosidade, complexidade e redundância.

Mapear o modelo de árvore básico de XML para sistemas de tipos de linguagens de programação ou bancos de dados pode ser difícil, especialmente quando XML é usado para trocar dados altamente estruturados entre aplicativos, o que não era seu objetivo principal de design. No entanto, os sistemas de vinculação de dados XML permitem que os aplicativos acessem dados XML diretamente de objetos que representam uma estrutura de dados dos dados na linguagem de programação usada, o que garante a segurança do tipo , em vez de usar o DOM ou SAX para recuperar dados de uma representação direta do XML em si. Isso é feito criando automaticamente um mapeamento entre os elementos do esquema XML XSD do documento e os membros de uma classe a ser representada na memória.

Outras críticas tentam refutar a afirmação de que XML é uma linguagem autodescritiva (embora a própria especificação XML não faça tal afirmação).

JSON , YAML e S-Expressions são frequentemente propostas como alternativas mais simples (consulte Comparação de formatos de serialização de dados ) que se concentram na representação de dados altamente estruturados em vez de documentos, que podem conter conteúdo altamente estruturado e relativamente não estruturado. No entanto, as especificações de esquema XML padronizadas do W3C oferecem uma gama mais ampla de tipos de dados XSD estruturados em comparação com formatos de serialização mais simples e oferecem modularidade e reutilização por meio de namespaces XML .

Veja também

Notas

Referências

Leitura adicional

links externos