Estudo de arquivo Xml. XML básico para iniciantes

Lucinda Dykes, Ed Tittel

XML é uma linguagem de marcação que cria páginas da web. Antes de começar a usar XML, aprenda a diferença entre um documento válido e um documento bem formado, como criar elementos de definição de tipo de documento (DTD) e declarações de esquema básico para criar um documento XML. Você também vai querer entender os caracteres reservados usados \u200b\u200bregularmente e quais navegadores da web suportam XML e folhas de estilo melhor.

Documento XML válido versus bem formado

Em XML, um documento válido deve estar em conformidade com as regras em seu DTD (Document Type Definition) ou esquema, que define quais elementos podem ser exibidos em um documento e como os elementos podem caber uns nos outros. Se o documento estiver mal formado, ele não avançará muito no mundo XML, portanto, você deve seguir algumas regras muito simples ao criar um documento XML. UMA documento bem formado deve ter os seguintes componentes:

    Todas as tags de início e fim são iguais. Em outras palavras, as partes de abertura e fechamento devem conter sempre o mesmo nome no mesmo caso: ... ou ..., mas não ....

    Elementos vazios seguem sintaxe XML especial, como .

    Todos os valores de atributos aparecem entre aspas simples ou duplas: id \u003d "valor"\u003e ou .

Regras para criar uma definição de tipo de documento ou DTD, elementos

Basicamente, você prepara e usa uma Definição de Tipo de Documento (DTD) para adicionar estrutura e lógica, tornando mais fácil garantir que todas as funcionalidades necessárias estejam presentes - na ordem correta - em seu documento XML. Você pode desenvolver muitas regras no DTD que controlam como os elementos podem ser usados \u200b\u200bem um documento XML.

Símbolo Valor Exemplo
#PCDATA Contém texto ou dados de caracteres analisados
#PCDATA element-name Contém texto e outro elemento; #PCDATA sempre aparece primeiro em uma regra criança) *\u003e
, (vírgula) Deve ser usado neste pedido criança3)\u003e
| (painel de tubo) Use apenas uma das opções fornecidas criança3)\u003e
nome-do-elemento (por si só) Use apenas um nome
nome do elemento? criança3?)\u003e
item-nome + Use uma ou mais vezes criança3)\u003e
nome do elemento * Use uma vez, muitas vezes ou nunca criança3)\u003e
() Indica grupos; pode ser aninhado ou
criança4)\u003e

Declarações de esquema XML básico

Um documento XML Schema é construído a partir de uma série de declarações que fornecem informações muito detalhadas e garantem que as informações contidas no documento XML estejam na forma correta.

Anúncio Compromisso Sintaxe
Esquema Especifica a linguagem que o esquema usa xmlns: xsd \u003d "// www. w3. org / 2001 / XMLSchema"\u003e
Elemento Define um elemento
Atributo Define um atributo type \u003d "type"\u003e
Tipo complexo Define um elemento que contém outros elementos, contém atributos
ou contém conteúdo misto (elementos e texto)
Tipo simples Cria um tipo de dados restrito para um elemento ou atributo
valor
Ligante sequencial Indica que os atributos ou elementos são de um tipo complexo
deve ser listado em ordem
Compositor de escolha Indica que qualquer um dos atributos ou elementos em um tipo complexo pode ser usado
Todo compositor Indica que qualquer ou todos os atributos ou elementos em um tipo complexo podem ser usados
anotação Contém documentação e / ou elementos appInfo que fornecem
informações adicionais e comentários sobre o documento esquemático
Documentação Fornece informações legíveis em anotações
Informação do aplicativo Fornece informações legíveis por computador em
anotação

Caracteres reservados comuns em XML

Alguns objetos são reservados para uso interno em XML e devem ser substituídos por links simbólicos em seu conteúdo. Esses cinco objetos internos comumente usados \u200b\u200bjá estão definidos como parte do XML e estão prontos para uso:

CSS1?

XSLT 1.0? sim sim Não Não
Internet Explorer 6.0 sim sim sim sim
Mozilla 1. 7. 5 sim sim sim sim
Mozilla Firefox 1.0 sim sim sim sim
Netscape Navigator 7 sim sim sim sim
Opera 7 sim sim sim Não
1. Introdução

Se algum de vocês já tentou aprender XML por conta própria, pode ter se deparado com muitos conceitos confusos que me ocorreram no passado. DTD, XML Schema, namespaces, XPath, XPointers, XSL, XSLT, DOM, SAX, SOAP, É isso, desisto. Acrescentarei apenas que a maioria desses materiais é baseada em implementações, cujo código pode conter erros. Provavelmente, existem milhões de maneiras de implementar e usar XML, mas todas podem ser bastante complexas. Você sabe, XML pode ser muito simples. Se nos esquecermos de DTDs, esquemas XML, namespaces, etc.
Em um esforço para lhe ensinar rapidamente como trabalhar com XML, irei, sempre que possível, ignorar uma quantidade razoável de informações que você já pode ler na literatura relevante. E a primeira coisa que vou ignorar são os namespaces e os esquemas. Isso pode parecer estranho para você, já que a maioria dos livros começa com esses conceitos, mas tente pensar no XML como uma ferramenta para resolver um problema específico, como um martelo. É preciso saber construir uma casa para usar um martelo? E se eu só precisar cravar um prego para pendurar um quadro? É o mesmo com XML, pode ser muito complexo, versátil o suficiente para ser usado em centenas, senão milhares de aplicativos, e muito simples se você ignorar algumas coisas. Neste artigo, vou me concentrar na solução de problemas específicos usando XML.
Qual é o verdadeiro problema? Vamos supor que eu queira descrever um objeto simples como um copo usando XML. Por que vou usar XML para isso? Bem, em primeiro lugar, é exatamente para isso que serve o XML. XML descreve dados. No meu exemplo, o vidro são os dados. Na vida, os dados podem ser documentos do Word, planilhas, imagens, um livro, um registro de banco de dados ou até mesmo aulas de C ++ ou Visual básico... Em segundo lugar, o XML é extensível. XML me permite criar quantos recursos eu preciso para descrever os dados, e esses recursos serão o que eu quiser. E, finalmente, porque XML está se tornando rapidamente o padrão. Se houver vida em Marte, você pode ter certeza de que eles serão capazes de entender meu arquivo XML lá.

Quais são as principais propriedades do vidro?

Como ficaria o mesmo no formato XML?

vidro 6 16 cubo de gelo palha água sim

Observe que a primeira linha do arquivo () tem um visual especial, por enquanto, lembre-se de que deveria estar aqui. A beleza do XML é que qualquer um pode entender do que ele está falando apenas examinando-o mais de perto. Também está claro que esta não é a única descrição XML possível do vidro. Se eu pedir a 10 pessoas para desenvolver uma descrição XML de um vidro com as mesmas propriedades, todas elas podem criar descrições diferentes, mas corretas. É aqui que está o problema. Talvez não para nós, humanos, mas quando um computador lê um arquivo XML, seria uma ótima ideia informá-lo do que se trata o arquivo. É aqui que entram os namespaces e esquemas. Em termos simples, os esquemas são usados \u200b\u200bpara definir uma estrutura adequada para um arquivo XML.
Agora é hora de falar sobre algumas regras XML simples a serem seguidas:

Regra XML nº 1: Um arquivo XML adequado deve corresponder exatamente ao seu esquema. Mas para facilitar a compreensão do material, nenhum dos meus exemplos usará diagramas. Assim, estritamente falando, nenhum dos meus exemplos é "adequado". Mas, honestamente, não me importo. Não vou construir uma casa, só preciso pendurar um quadro. Entrarei em mais detalhes sobre isso mais tarde, quando discutirmos o XML Document Object Model.

Regra XML # 2Nota: Se você programa em VB, lembre-se: XML diferencia maiúsculas de minúsculas. XML diferencia maiúsculas de minúsculas. XML diferencia maiúsculas de minúsculas. XML diferencia maiúsculas de minúsculas. Escreva esta frase 1000 vezes e você nunca vai esquecer.

Regra XML # 3: As tags são geralmente chamadas de elementos e cada tag de abertura deve ter uma tag de fechamento correspondente. Seguindo esta regra, você terá um arquivo XML válido. Isso é muito importante porque até que o arquivo XML esteja bem formado, ele não será analisado e carregado no Document Object Model. Observe que se um elemento não contém nenhum valor e nenhum outro elemento (aninhado), a tag de fechamento pode ser semelhante a em vez de um design mais pesado ... Você pode ver essa abordagem no exemplo anterior ( ).

Regra XML # 4: Os elementos podem conter atributos e os valores dos atributos devem ser colocados entre aspas (simples ou duplas).

Regra XML # 5: Os nomes dos atributos podem ser usados \u200b\u200bvárias vezes, mas os nomes dos elementos devem ser exclusivos em todo o arquivo. No exemplo anterior, o atributo qty tinha um significado diferente dependendo do elemento em que é usado. ,, ou ... O significado de um atributo depende do contexto de seu uso. Enquanto o valor de um elemento sempre significa o mesmo, não importa onde o atributo esteja localizado no arquivo. No exemplo anterior, o elemento e sempre tem o mesmo significado em todo o nosso documento. por exemplo, é sempre usado para descrever a altura do vidro.

Regra XML # 6: Existem alguns caracteres especiais em XML que não podem ser usados \u200b\u200bdiretamente porque são reservados na sintaxe XML. Portanto, para usar tais caracteres, você terá que usar uma construção reservada começando com o caractere & e um código especial (o & deve ser escrito como &) (o "deve ser escrito como") (< должен писаться как <) (символ > deve ser escrito como\u003e) e (o caractere "deve ser escrito como"). Em vez disso, você também pode usar a instrução, onde "...." pode ser qualquer sequência de caracteres, exceto "]]\u003e". Essa construção pode aparecer em qualquer lugar, mas não pode ser aninhada.

2. Modelo de objeto de documento XML

O XML Document Object Model permite que os programadores carreguem o conteúdo de um arquivo XML na memória. Depois que o arquivo XML é carregado dessa maneira, você pode trabalhar com ele usando as propriedades, métodos e eventos do Document Object Model. É aqui que entra a utilidade do XML. O Document Object Model (DOM) torna muito mais fácil recuperar e processar informações de um arquivo XML. Não vou falar sobre todos os recursos do modelo de objeto de documento aqui, apenas falarei sobre alguns dos principais recursos que ajudarão a atingir o objetivo deste artigo. Vou pegar o arquivo XML recém-criado com a descrição do Depth of Market, carregá-lo no Document Object Model e executar várias ações com ele. Salvarei o restante dos recursos e capacidades do Document Object Model para o próximo artigo sobre XML do lado do cliente. Observe que, embora o DOM seja muito bom e fácil de usar para desenvolvedores, ele requer muitos recursos do sistema. Portanto, há outro método para analisar arquivos XML conhecido como SAX. Meu artigo não pretende ser uma fonte completa de informações sobre esse assunto, portanto, seria útil usar também o SDK XML.

Vamos dar uma olhada em um exemplo usando o analisador XML da Microsoft versão 3.0 (msxml3.dll) para ver como tudo isso funciona. Se você não tiver um analisador, a versão mais recente pode ser baixada do site da Microsoft.
Suponha que eu salvei um exemplo de uma descrição de xícara no formato XML no arquivo "http: //web_server/xml/cup.xml" (caminho local C: \\ inetpub \\ wwwroot \\ xml \\ cup.xml) e agora quero carregá-la no DOM ... O código a seguir presume que o analisador já está carregado e em execução.

Código Visual Basic 6.0: (vinculando a Microsoft XML, v3.0) Dim xmlDoc como MSXML2.DOMDocument30 Definir xmlDoc \u003d Novo DOMDocument30 xmlDoc.async \u003d False xmlDoc.validateOnParse \u003d False xmlDoc.load ("c: \\ inetpub \\ wwwroot \\ xml \\ cup.xml ) msgBox xmlDoc.xml Código Visual Basic do lado do servidor ASP: Dim xmlDoc Set xmlDoc \u003d Server.CreateObject ("Msxml2.DOMDocument.3.0") xmlDoc.async \u003d False xmlDoc.validateOnParse \u003d False xmlDoc.load "/xml/cup.xml" Código de script Java do lado do servidor ASP: var xmlDoc \u003d Server.CreateObject ("Msxml2.DOMDocument.3.0"); xmlDoc.async \u003d false; xmlDoc.validateOnParse \u003d false; xmlDoc.load ("/xml/cup.xml");

Explicação do código fornecido - vamos examinar o código em VB6

Linha 1: Dim xmlDoc como MSXML2.DOMDocument30

Nesta primeira linha, definimos uma referência a "Microsoft XML, v3.0". Nesta linha, defini a variável xmlDoc como um link para um documento XML. MSXML2 é uma biblioteca (use este nome, não tente escrever MSXML3, não funcionará). DOMDocument30 define um objeto de documento XML da versão 3.0. Você também pode encontrar um código como este: dim xmlDoc as MSXML2.DOMDocument. Essa construção é geralmente usada quando você não deseja especificar uma versão específica de um documento XML. Neste caso, será utilizado o analisador cadastrado por default no sistema. O único problema é que a versão do analisador registrada por padrão pode ser diferente em computadores diferentes. Se você deseja ter certeza de que o código que você escreve funcionará com qualquer versão do analisador, não use construções específicas para versões específicas do analisador. Porque não há garantia de que o usuário que usará seu código tenha os nomes da versão do analisador sob o qual você escreveu seu código. Outra vantagem de desenvolver código independente da versão do analisador é que quando mais uma nova versão analisador, ele definitivamente será compatível com versões anteriores e você não terá que recompilar seu código.

Linha 2: Defina xmlDoc \u003d new DOMDocument30

Esta linha inicializa a variável xmlDoc como uma nova instância de um objeto de documento XML 3.0.

Linha 3: xmlDoc.async \u003d False

Os arquivos XML podem ser carregados de forma síncrona ou assíncrona. Se xmlDoc.async \u003d False, significa que o conteúdo do arquivo XML será carregado, e somente após esse controle será transferido para o processo de chamada. Se xmlDoc.async \u003d True, significa que o controle será transferido para o processo de chamada imediatamente, sem esperar que o conteúdo do arquivo XML seja totalmente carregado.

Linha 4: xmlDoc.validateOnParse \u003d False

Este código informa ao analisador para não validar o arquivo XML carregado em seu esquema (validateOnParse \u003d False). Para habilitar a verificação de conformidade do esquema, você precisa escrever validateOnParse \u003d True.

Linha 5: xmlDoc.load ("C: \\ inetpub \\ wwwroot \\ xml \\ cup.xml")

Esta linha chama o método para carregar o arquivo XML especificado. Existem dois tipos de método de upload. O primeiro, que está escrito na linha 5, carrega o arquivo no DOM e você deve passar o caminho completo para o arquivo XML. A segunda opção de carregamento fornece a passagem de uma string como um parâmetro xml. Este tipo de carregamento poderia ser chamado, por exemplo, assim: xmlDoc.loadXML ("string xml válida"). Mostrarei como usar esse método mais tarde.

Linha 6: MsgBox xmlDoc.xml

Esta linha exibe o conteúdo do arquivo XML carregado. Como resultado, devemos obter o arquivo XML original que criamos anteriormente.

2.2. Explorando o modelo de objeto de documento XML

Crie um novo projeto no Visual Basic e denomine standard.exe. Cole o código acima no método de carregamento da janela principal do seu projeto. Certifique-se de declarar o link para "Microsoft XML v3.0". Para fazer isso, clique em Projeto -\u003e Referências e, em seguida, role a lista que aparece e encontre o link de que precisa. Observe que o analisador versão 3.0 deve estar instalado em seu computador, caso contrário, ele não será listado. Defina pontos de interrupção na última linha de código (msgbox xmlDoc.xml). Execute o aplicativo no modo de depuração. Quando a execução atinge um ponto de parada, chame a janela Locals e visualize o DOM. Você pode aprender muito observando o que é exibido nesta janela. A janela Locals deve ser semelhante à imagem abaixo. Aqui estão algumas propriedades interessantes do Document Object Model.

O modelo de objeto de documento XML sempre contém dois nós de nível superior:

  • Item1 é a raiz da ramificação do item do documento (ignore)
  • O item 2 é na verdade o primeiro item do documento (lembre-se disso)

nodeName ou baseName - podem ser usados \u200b\u200bao pesquisar o nome de um elemento ou atributo.
nodeType - Use para obter o tipo do nó atual.
nodeValue - usado para descobrir o valor dos dados do nó.
childNodes é uma coleção de nós filhos. Eles podem ser nós de elemento, nós de texto e nós CDATA. Pode haver outros tipos de nós, sobre os quais não falarei agora, mas você pode aprender tudo sobre eles no SDK XML.
atributos é uma coleção de nós de atributos do elemento atual.
comprimento - usado para determinar o número de nós na árvore que pertencem diretamente ao atual.
xml - esta propriedade está presente em todos os nós e pode ser usada para representar a posição atual no documento. A string XML começa no nó atual e desce até o final da árvore. Esta é uma propriedade muito útil. Experimente e veja o que acontece.

2.2.2. Nós de elemento

Um nó de elemento pode conter um elemento descendente, atributo, texto ou nós CDATA. A figura abaixo mostra as seguintes informações sobre o nó "SOLID":

nodeType - tipo de nó atual \u003d NODE_ELEMENT - ou seja, o nó atual é um elemento.
nodeName ou baseName ou tagName - O nome do nó atual (elemento) \u003d SOLID.
Seu pai, CONTENTS, tem 4 filhos.
Isso pode ser visto na figura a seguir, mas SOLID tem um filho, que é um tipo de dados de texto.
text - "cubo de gelo" é um método abreviado para obter o valor do nó atual sem navegar para o nó de texto da criança.

2.2.3. Nós de atributo

Os nós de atributo podem consistir apenas em texto ou nós descendentes de CDATA. A figura a seguir mostra quais informações podem ser obtidas sobre o nó "qty":

nodeType - Tipo de nó atual \u003d NODE_ATTRIBUTE - O nó atual é um atributo.
nodeName ou baseName - O nome do nó atual (Atributos) \u003d qty

Também fica claro na figura a seguir que qty tem um filho, que é um tipo de dados de texto.
texto ou valor - "2" é um método abreviado para obter o valor do nó atual sem navegar para o nó de texto da criança.

2.2.4. Nós de texto e CDATA

Os nós de texto ou CDATA não contêm filhos. Os nós de texto contêm os dados de texto processados \u200b\u200bde seu nó pai. CDATA contém os dados de texto brutos de seu pai. Os nós CDATA são criados quando os dados em um arquivo XML são especialmente enquadrados. O rótulo CDATA diz ao analisador para não analisar os dados e aceitar os caracteres dentro desse rótulo como dados. A seção CDATA é especialmente útil quando você precisa inserir código dentro de um arquivo XML. A figura a seguir mostra quais informações podem ser obtidas no nó de texto atual:

nodeType - tipo de nó atual \u003d NODE_TEXT - nó atual contém dados de texto.
nodeName - O nome do nó atual (texto) \u003d #text - todos os nós de texto são nomeados #text
dados ou texto ou valor - "2" são os dados do nó atual.

2.2.5. Erros ao carregar o documento

A seção parseError do DOM pode ser útil na identificação de problemas ao carregar um documento XML. Se eu remover a tag de fechamento de OTHER em nosso arquivo de exemplo e tentar executar o programa novamente, obtenho o seguinte resultado. A primeira informação útil é que nosso próximo irmão agora não contém nada. Agora, se você olhar para childNodes, verá que o campo de comprimento agora é 0. Ambos os sinais indicam que nosso documento XML não foi carregado. Para descobrir o porquê, abro o nó parseError e obtenho todas as informações de erro.

Então, eu mostrei como carregar um arquivo XML no DOM, mas o que você faz com ele lá? Um dos principais recursos que você poderá usar é realizar várias consultas em um documento XML. Para fazer isso, é claro que você pode examinar todo o documento até encontrar as informações que procura. Mas a maneira mais preferida é usar um dos dois métodos da classe DOMDocument. Os dois métodos usados \u200b\u200bpara localizar nós em nosso exemplo anterior podem ser semelhantes a xmlDoc.SelectSingleNode (patternString) para obter o nó desejado ou xmlDoc.SelectNodes (patternString) para obter uma lista dos nós pesquisados. O parâmetro patternString é exatamente a solicitação. Ele pode ser formado de duas maneiras. Tanto como uma consulta XSL ou como uma consulta XPath. A maneira mais nova e preferida de consultar documentos XML é XPath. O formato patternString deve ser definido com antecedência, antes da primeira chamada para qualquer um dos dois métodos de solicitação de dados, caso contrário, a forma XSL de gerar solicitações será usada por padrão. Use setProperty ("SelectionLanguage", "format") para definir o tipo de modelagem para patternString. Para alterar as consultas em nosso exemplo para usar o método XPath, adicionarei o seguinte comando: setProperty ("SelectionLanguage", "XPath"). Na minha opinião, XPath é a tecnologia XML mais importante a se aprender. Vou mostrar algumas consultas XPath simples. O Microsoft XML SDK é um bom lugar para começar a aprender sobre essa tecnologia. Outra maneira de explicar isso seria escrever um aplicativo Visual Basic simples que permite inserir consultas e gerar o resultado. Você pode encontrar alguns aplicativos grátisque fazem o mesmo, mas XPath é relativamente novo e pode não ser totalmente suportado por esses aplicativos.

2.3.1. Usando XPATH para consultar o modelo de objeto do documento

Vamos adicionar algum código ao final do nosso exemplo anterior para retornar o conteúdo do nosso copo:

EXCELENTE! Vamos agora adicionar outra consulta que nos permitirá determinar se o vidro tem tampa ou não. Adicione o seguinte código ao final do anterior:

Defina objNode \u003d xmlDoc.selectSingleNode ("/ CUP / LID") if objNode.text \u003d "yes" then MsgBox "Temos uma tampa" else MsgBox "Sem tampa neste copo" end if

Vamos examinar o código linha por linha:

Linha 1: Dim objNode As IXMLDOMNode

Esta linha define uma variável objNode do tipo nó de documento XML. É importante entender que um nó de documento XML também é um objeto. Não é um significado. Ele consiste em si mesmo, bem como em seus atributos e filhos (childNodes). Desta forma, você pode cortar galhos desnecessários da árvore, selecionando apenas os que você precisa.

Linha 2: Dim objListOfNodes As IXMLDOMNodeList

Esta linha define a variável objListOfNodes do tipo de uma lista de nós de documentos XML (grupo de nós).

Linha 3: xmlDoc.setProperty "SelectionLanguage", "XPath"

Esta linha define a forma como o patternString é formado como XPath.

Linha 4: MsgBox "Sua xícara contém os seguintes itens:"

Linha 5: Defina objListOfNodes \u003d xmlDoc.selectNodes ("// CONTENTS / * [@ qty\u003e 0]")

Esta linha executa uma consulta XPath que retornará um grupo de nós e os armazenará na variável objListOfNodes. A solicitação é dividida nas seguintes partes:

  • // CONTEÚDO - pega todos os elementos de CONTEÚDO no documento XML. Nota: // é uma abreviação para todo o conteúdo do documento XML.
  • / * - take all (* - usado para especificar todos) os elementos descendentes da lista de elementos CONTENTS. Isso reduz o resultado a quatro nós de elemento ( ) Esses quatro nós estão diretamente sob o nó CONTEÚDO.
  • [@qty\u003e 0] - verifique cada elemento filho para que seu atributo qty (@ - significa atributo) seja maior que 0. Se esta condição não for atendida, o nó é descartado. Qualquer coisa dentro de uma consulta XPath pode ser True ou False. Se o resultado for True, o nó será salvo. Se o resultado for False, o nó será descartado. Depois disso, nosso resultado é reduzido a três nós (

Linha 6-8: Para Cada objNode em objListOfNodes / MsgBox objNode.Text / Next

Essas linhas exibem os valores de cada nó de elemento que correspondem à consulta. ("cubo de gelo", "canudo", "água").

Linha 9: Defina objNode \u003d xmlDoc.selectSingleNode ("/ CUP / LID")

Esta string retorna todos os elementos LID que pertencem ao elemento CUP, que, por sua vez, é gerado a partir da raiz da árvore (quando a consulta começa com /, significa que você precisa começar na raiz). Isso é muito semelhante ao caminho para um arquivo ou pasta. Em nosso exemplo, essa consulta retornará um elemento LID que contém o valor "sim". O importante aqui é que eu disse à solicitação para começar no elemento raiz do documento XML. As consultas nem sempre começam nos elementos raiz, geralmente começam no nó atual. Em nosso exemplo, isso não importa, uma vez que o nó atual (xmlDoc) é o elemento raiz do documento XML (mas não é o caso em todos os casos).

Linha 10-15: if objNode.text \u003d "yes" then / MsgBox "Temos uma tampa" /
else / MsgBox "Sem tampa neste copo" / final se

Esta linha exibe a mensagem "Temos uma tampa" porque a propriedade text do elemento LID é "sim".

3. Convertendo ADO em XML

Agora que você entende os fundamentos do XML, vamos criar um controle ActiveX que converterá o conjunto de dados ADO para o formato XML. O objetivo é recuperar os títulos dos livros da tabela Títulos do banco de dados Pubs e devolvê-los no formato XML. O resultado que obterei será usado em meu próximo artigo. Você pode dizer que o ADO tem seus próprios métodos para salvar o resultado no formato XML, certo? Sim, mas se eu confiar isso ao ADO, vou acabar com um arquivo XML em um formato tão terrível que será impossível trabalhar com ele. O ADO criará um arquivo XML usando o namespace, do qual não preciso agora. Em segundo lugar, o ADO criará um arquivo XML que estará na forma de atributos. Em outras palavras, cada registro se tornará um elemento e cada campo se tornará um atributo:

E eu gostaria de receber um arquivo XML na forma de elementos, onde cada registro estaria contido em uma tag e cada campo seria um elemento dentro de uma tag ... A sintaxe para minha string XML seria assim:

dados da tabela dados da tabela dados da tabela dados da tabela dados da tabela dados da tabela datafromtable

A propósito, o que acabei de fazer foi criar um esquema para minha string XML. Agora, se eu precisar verificar a estrutura de um documento XML em relação a um esquema, tudo o que tenho a fazer é converter o esquema para o formato correto. Ou seja, na sintaxe DTD ou XDR. Observe que adicionei alguns atributos a cada elemento ... Um dos motivos para isso é que essas informações podem ser utilizadas pelo cliente. Prettyname pode ser usado como rótulos de dados. O atributo datatype pode ser usado para validar dados no lado do cliente. Mas, para ser honesto, o verdadeiro motivo pelo qual esses atributos apareceram é porque eles têm um propósito especial no modelo de arquivo XSL que costumo usar para construir a cláusula where de consultas SQL. Talvez eu poste um artigo em breve demonstrando essa abordagem. O modelo é realmente muito útil. Quando a estrutura XML é aplicada aos dados da tabela de títulos, o resultado será semelhante a este:

Guia de banco de dados do executivo ocupado BU1032 Guia de banco de dados do executivo ocupado o negócio 19.99 4095 Uma visão geral dos sistemas de banco de dados disponíveis com ênfase em aplicativos comerciais comuns. Ilustrado. 6/12/1991 Cozinhando com computadores: balanços sub-reptícios BU1111 Cozinhando com computadores: balanços sub-reptícios o negócio 11.95 3876 Dicas úteis sobre como usar seus recursos eletrônicos da melhor forma. 6/9/1991

Agora tenho algo com que trabalhar!

Listagem 1 - CUP.XML

vidro 6 16 cubo de gelo palha água sim

Dim xmlDoc As MSXML2.DOMDocument30 Definir xmlDoc \u003d Novo DOMDocument30 xmlDoc.async \u003d False xmlDoc.validateOnParse \u003d False xmlDoc.Load ("c: \\ inetpub \\ wwwroot \\ xml \\ cup.xml") MsgNxode DOMDocument30 xml xml Como IXMLDOMNodeList xmlDoc.setProperty "SelectionLanguage", "XPath" MsgBox "Sua xícara contém os seguintes itens" Set objListOfNodes \u003d xmlDoc.selectNodes ("// CONTENTS / * [@ qty\u003e 0]") Para Cada objNode Em objListOfNodes MsNodes Texto Próximo Definir objNode \u003d xmlDoc.selectSingleNode ("/ CUP / LID") If objNode.Text \u003d "sim" Then MsgBox "Temos uma tampa" Else MsgBox "Sem tampa nesta xícara" End If

Listagem 3 - Controle ActiveX: ADO para XML (WebClass.dll) (xmlControl.cls)

Option Explicit "Declarar variáveis \u200b\u200bde banco de dados Privado m_dbConnection As New ADODB.Connection Privado m_dbCommand As ADODB.Command Privado m_adoRs As ADODB.Recordset Privado m_adoErrors As ADODB.Errors Privado m_adoErr Como Erro Público nCommandTimeOut As VariantOn As Público As String Público strLogPath As String Público strDatabase As String Público strUser As String Público strPassword As String Público strServer As String Público strVersion As String Público lMSADO As Boolean "Private Global Variables Private gnErrNum As Variant Private gstrErrDesc As Private Variant Private gstrErrDesc As Private Variant Private gstrErDesc As Private Variant Private gstrEr gstrADOError As String Private Const adLeonNoRecordset As Integer \u003d 129 Private gtableName (6) As String Private gcolumnName (6) As String Private gprettyName (6) As String Private gdatatype (6) As String Private gfilter (6) As String Private Function OpenDatabase () Se Len (strConnect) \u003d 0 Then "defina o valor valores padrão If Len (strDatabase) \u003d 0 Then strDatabase \u003d "pubs" End If If nConnectionTimeOut \u003d 0 Then nConnectionTimeOut \u003d 600 End If If nCommandTimeOut \u003d 0 Then nCommandTimeOut \u003d 600 End If If Len (strAppName) \u003d 0 Then strAppName \u003d "xmlControl "End If If Len (strUser) \u003d 0 Then strUser \u003d" sa "End If Len (strPassword) \u003d 0 Then strPassword \u003d" "End If strConnect \u003d" Provider \u003d SQLOLEDB.1; "& _" Nome do aplicativo \u003d "& strAppName & _"; Fonte de dados \u003d "& strServer &"; Catálogo inicial \u003d "& strDatabase &"; "& _" ID do usuário \u003d "& strUser &"; Password \u003d "& strPassword &"; "End If" conecte-se ao SQL Server e abra o banco de dados On Error GoTo SQLErr "Ative o manipulador de erros Com m_dbConnection .ConnectionTimeout \u003d nConnectionTimeOut .CommandTimeout \u003d nCommandTimeOut .Open strConnect" abra a string de conexão End Com On Error GoTo 0 "desative o manipulador de erros OpenDatabase \u003d True" banco de dados aberto com êxito Sair da função SQLErr: Call logerror ("OPEN") OpenDatabase \u003d False End Function Função privada BuildSQLwhere (tmpWhere) As String "Isso é para a futura Função de fim de função pública GetTitlesXML (Opcional xmlWhere As Variant) As String Dim whereClause As String Dim strSQL As String Chame OpenDatabase "abra o banco de dados pubs If IsMissing (xmlWhere) Then" quando a consulta falhou whereClause \u003d "" Else whereClause \u003d BuildSQLwhere (xmlWhere) "converta a consulta para a correta sql End Se "inicializar a expressão sql que irá consultar os títulos dos livros strSQL \u003d" selecione title_id, título, tipo, pri ce, ytd_sales, notas, publicação de títulos "& whereClause Chamar NewRecordSet" criar conjunto de dados "definir cursorlocation m_adoRs. CursorLocation \u003d adUseClient "abrir o conjunto de registros m_adoRs.Open strSQL, m_dbConnection, adOpenForwardOnly, adLockReadOnly, adCmdText" desconectar do conjunto de dados Definir m_adoRs.ActiveConnection \u003d Nothing On Error GoTo 0 "desabilitar a conexão do banco de dados e liberar o manipulador de erros" EOF Then GetTitlesXML \u003d "" "a solicitação não retornou nenhum valor Else If lMSADO Then GetTitlesXML \u003d msado (m_adoRs)" converter o conjunto de dados em Microsoftado -\u003e xml Else GetTitlesXML \u003d ADOtoXML (m_adoRs, True) "converter o conjunto de dados em xml personalizado End If End If "fechar o conjunto de dados Call CloseRecordset Exit Function SQLErr: Call logerror (strSQL) End Function Função privada ADOtoXML (tmprs As ADODB.Recordset, tmpMP As Boolean) As String Dim adoFields As ADODB.Fields" declara uma coleção para armazenar campos Dim adoField As ADODB.Field "é usado para obter cada campo da coleção Dim xmlDoc As msxml2.DOMDocument30 Dim tmpLine As String" armazena representação xml de cada livro Dim tmpXML As String "serve para concatenar strings xml Dim i As Integer If tmprs.EOF Then" a consulta não retornou nenhum registro ADOtoXML \u003d "" Função Sair Ou Definir adoFields \u003d tmprs.Fields "criar uma coleção de campos End If tmpXML \u003d " "" todos os livros serão embrulhados em uma etiqueta Do until tmprs.EOF "percorre cada linha no conjunto de dados i \u003d 0" I é o índice ado do campo que começa em 0 - o primeiro campo será field (0) tmpLine \u003d " "& tmprs (" title ") & vbCrLf Para cada adoField Em adoFields" loop por todos os campos "construir uma tag xml e seus atributos para o campo atual tmpLine \u003d tmpLine & " "& adoField.Value tmpLine \u003d tmpLine &""& vbCrLf i \u003d i + 1" vá para o próximo campo Próximo tmpXML \u003d tmpXML & tmpLine & "Tag de fechamento "& vbCrLf" após o último campo tmprs.MoveNext "próximo cabeçalho Loop Set adoField \u003d Nothing" destruindo o objeto de campo Set adoFields \u003d Nothing "destruindo o objeto de coleção de campos tmpXML \u003d tmpXML &"Tag de fechamento "& vbCrLf" Set xmlDoc \u003d New msxml2.DOMDocument30 "create xmlDOM xmlDoc.async \u003d False" aguarde o documento carregar xmlDoc.validateOnParse \u003d False "não verifique o esquema xmlDoc.loadXML (tmpXML)" carregue a string no DOM On Error Resume Next "se o arquivo não existe, então manipule este erro Kill ("c: \\ temp \\ custom.xml") "exclua o arquivo se ele existir On Error GoTo 0" diga ao manipulador de erros para abortar quando um erro for detectado xmlDoc.save ("c: \\ temp \\ custom. xml ")" salvar xml no arquivo ADOtoXML \u003d xmlDoc.xml "return xml string Definir xmlDoc \u003d Nothing" destroy DOM Função final Função privada msado (tmprs As ADODB.Recordset) As String Dim xmlDoc como msxml2.DOMDocument30 On Error Resume Next "se o arquivo não existir, obteremos o erro Kill (" c: \\ temp \\ msado.xml ")" exclua o arquivo se ele existir On Error GoTo 0 "diga ao manipulador de erros para abortar quando um erro tmprs.save for encontrado" c: \\ temp \\ msado .xml ", adPersistXML" salvar xml no arquivo Definir xmlDoc \u003d N ew msxml2.DOMDocument30 "criando um modelo de objeto de documentos xml xmlDoc.async \u003d False" aguardando o documento xml carregar xmlDoc.validateOnParse \u003d False "não verifique o esquema xmlDoc.Load (" C: \\ temp \\ msado.xml ")" carregue o arquivo no objeto modelo de documento msado \u003d xmlDoc.xml "retornar a string xml Definir xmlDoc \u003d Nothing" destruir o modelo de objeto do documento Função final Privada SubCloseRecordset () "fechar conjunto de dados m_adoRs.Close Definir m_adoRs \u003d Nothing End Sub Privado Sub NewRecordSet () Definir m_adoRs \u003d Nothing Definir m_adoRs \u003d Novo ADODB.Recordset End Sub Privado Sub CloseDatabase () m_dbConnection.Close Set m_dbConnection \u003d Nothing End Sub Privado Sub logerror (errSQL As String) Dim hFile As Integer Dim expFile As String On Error GoTo 0 gnErrNum \u003d Err.Number gstrErrDesc \u003d Err.Number gstrErrDesc \u003d Err. Descrição gstrErrSrc \u003d Err.Source Definir m_adoErrors \u003d m_dbConnection.Errors Para Cada m_adoErr Em m_adoErrors gstrADOError \u003d m_adoErr.Description & "," & CStr (m_adoErr.NativeError) "&", "& CSError m_ado Err.Source _ & "," & CStr (m_adoErr.SQLState) Próximo hFile \u003d FreeFile If Len (strLogPath) \u003d 0 Then strLogPath \u003d "C: \\ temp \\" End If expFile \u003d strLogPath & strAppName & ".err" Abrir expFile Para Append As #hFile Print #hFile, "*********************************" Imprimir #hFile, Now () Imprimir # hFile, "*********************************" & tmpPro Imprimir #hFile, "Número do erro:" & gnErrNum Imprimir # hFile, "Descrição do erro:" & gstrErrDesc Imprimir #hFile, "Fonte do erro:" & gstrErrSrc Imprimir #hFile, "String de erro Ado:" & gstrADOError Imprimir #hFile , "SQL incorreto:" & errSQL Close #hFile End Sub Private Sub Class_Initialize () strVersion \u003d "xmlControl Versão 1. 1 "" title_id, title, type, price, ytd_sales, notes, pubdate gtableName (0) \u003d "title" gcolumnName (0) \u003d "title_id" gprettyName (0) \u003d "Title Identification Number" gdatatype (0) \u003d "number" gfilter (0) \u003d "" gtableName (1) \u003d "títulos" gcolumnName (1) \u003d "título" gprettyName (1) \u003d "Título do livro" gdatatype (1) \u003d "texto" gfilter (1) \u003d "" gtableName (2) \u003d "títulos" gcolumnName (2) \u003d "tipo" gprettyName (2) \u003d "Tipo de livro" gdatatype (2) \u003d "texto" gfilter (2) \u003d "" gtableName (3) \u003d "títulos" gcolumnName ( 3) \u003d "preço" gprettyName (3) \u003d "Preço do livro" gdatatype (3) \u003d "número" gfilter (3) \u003d "" gtableName (4) \u003d "títulos" gcolumnName (4) \u003d "ytd_sales" gprettyName ( 4) \u003d "Vendas anuais até a data" gdatatype (4) \u003d "número" gfilter (4) \u003d "" gtableName (5) \u003d "títulos" gcolumnName (5) \u003d "notas" gprettyName (5) \u003d "Notas sobre o livro "gdatatype (5) \u003d" memo "gfilter (5) \u003d" "gtableName (6) \u003d" títulos "gcolumnName (6) \u003d" pubdate "gprettyName (6) \u003d" Data de publicação "gdatatype (6) \u003d" data "gfilter (6) \u003d "" End Sub

Listagem 4 - Aplicação de teste VB para WebClass de teste

Private Sub Command1_Click () Dim objWC As xmlControl Dim xml As String Definir objWC \u003d Novo xmlControl objWC.strDatabase \u003d "pubs" objWC.strServer \u003d "ltweb" objWC.strUser \u003d "sa" objWC.strPassword \u003d "" objOWC2 Opção .Value objWC.strAppName \u003d "Artigo1" Text1.Text \u003d objWC.getTitlesXML End Sub

Listagem 5 - ASP para teste de WebClass

O XML foi criado para descrever dados tendo em vista o que são.

O HTML foi criado para exibir dados tendo em vista a aparência dos dados exibidos.

O que é XML?

  • XML significa Extensible Markup Language
  • XML é linguagem de marcaçãosemelhante a HTML
  • XML foi criado para descrições de dados
  • As tags XML não são predefinidas. Você pode use suas tags
  • XML usa Definição de Tipo de Documento (DTD) ou esquema XML para descrição de dados
  • XML recomendado por W3C

A principal diferença entre XML e HTML

XML foi projetado para transferir dados.

XML não é um substituto para HTML.

XML e HTML foram desenvolvidos para diferentes fins:

  • XML foi criado para descrever dados e foca em quais dados são transmitidos
  • HTML foi projetado para exibir dados com foco na exibição de dados
  • Assim, o HTML é mais para exibir informações, enquanto XML é mais para descrever informações.

XML não faz nada

XML não foi construído para realizar nenhuma ação.

Pode ser difícil de entender, mas XML não faz nada. Esta linguagem de marcação foi criada para estruturar, armazenar e comunicar informações. O exemplo a seguir é uma nota de Anton Ira, apresentada em XML:

Ira

Anton

Lembrete

Não se esqueça de se encontrar esta semana!

Como você pode ver, o XML é muito conciso.

Nota ( ) consiste em um cabeçalho ( ) e conteúdo ( ) cartas. Ele contém o remetente (tag - "de quem a carta") e o destinatário (tag - "a quem"). Mas esta carta não faz nada. Esta é a informação pura embrulhada em tags. Para enviar, receber e exibir essas informações, alguém deve escrever um programa.

XML - Linguagem de marcação extensível gratuita

As tags XML não são predefinidas. Você pode inserir suas tags.

As marcas e a estrutura do documento em HTML são predefinidas. O criador do documento html só pode usar tags definidas pelos padrões.

XML permite que o autor do documento xml insira suas tags e estrutura do documento. As tags fornecidas no exemplo (por exemplo, e ) não são definidos pelo padrão XML. Essas marcas são introduzidas pelo autor do documento.

XML é complementar a HTML

XML não é um substituto para HTML.

É importante entender que XML não substitui HTML. No futuro, os desenvolvedores da web usarão XML para descrever os dados, enquanto o HTML será usado para formatar e exibir esses dados.

Minha melhor definição de XML é esta: XML é uma ferramenta de comunicação independente de plataforma cruzada de software e hardware.

A anotação: Plataforma cruzada - Adequado para qualquer sistema operacional e qualquer hardware.

Se você sabe, existem vários sOalém do familiar Windows. Estes são Linux, Mac e outros.

Quanto ao hardware, podemos dizer o seguinte: podem ser PCs comuns, laptops, computadores de bolso, etc.

XML no futuro desenvolvimento da Web

XML será usado em todos os lugares.

Assistimos ao desenvolvimento do XML desde o seu início. Foi incrível ver a rapidez com que o padrão XML foi desenvolvido e como um grande número de fornecedores programas adotou este padrão. Acreditamos fortemente que o XML será tão importante para o futuro da Internet quanto o HTML, que é a base da Internet, e que o XML será a ferramenta predominante para toda a manipulação e transmissão de dados.

Esta seção é dedicada a trabalhar com XML. Irá recolher material teórico e prático. As operações básicas com arquivos XML serão abordadas, bem como a interação com LINQ e muito mais.

Criação de arquivo XML

XML (Extensible Markup Language) - uma linguagem de marcação extensível, usada para criar bancos de dados, páginas da web, usada para trocar informações entre programas, usada em tecnologias como Ajax, SOAP, e também é a base da linguagem XAML, que você pode encontrar quando trabalhando com WPF.

Para criar um arquivo xml, só precisamos inserir

Estrutura de arquivo XML

Qualquer arquivo XML começa com uma declaração de declaração.

Declaração

Declaração Xml arquivo inclui:

Versão - o número da versão do idioma XML, 1.0 e 1.1

Se você estiver usando, a linha de declaração pode ser omitida; se você estiver usando a versão 1.1, deve especificar esta linha.

Codificação - especifica a codificação do arquivo

Com esta entrada, você não define a codificação para o arquivo físico! E você apenas deixa claro para o programa que irá processar este arquivo, em qual codificação os dados estão contidos no arquivo. Nesse caso, você deve garantir que a codificação do documento e a codificação especificada na linha de declaração correspondam.

Para definir a codificação de um documento, você pode usar, por exemplo, o programa Notepad ++

Elementos de arquivo XML

XML é composto de elementos.

Um elemento é uma string que contém as tags de abertura e fechamento, bem como dados colocados entre elas.

  • valor - elemento

Um arquivo pode conter qualquer número de elementos.

Tag

Conforme mencionado anteriormente, um elemento é composto de tags.

  • - tag

Os nomes das marcas podem começar com uma letra, sublinhado ou dois pontos, seguido por quaisquer caracteres.

As tags são: emparelhadas e simples.

  • - emparelhado
  • - solteiro

Um único tag pode ser utilizado em uma situação em que não haja informação entre os tags, e para não indicar o tag emparelhado e o vazio entre eles, use um único tag, que a qualquer momento pode ser substituído por um par. Uma única tag deve ser fechada!

Ao construir um documento XML, é muito importante observar o aninhamento correto de tags:

  • Não está certo
  • Corretamente

Linguagem que diferencia maiúsculas de minúsculas em XML

  • erro!
  • corretamente
  • corretamente

Comentários

Os comentários em um documento XML usam a mesma sintaxe do HTML.

Após declarar a declaração e conhecer os principais componentes da linguagem XML, procedemos ao preenchimento de nosso arquivo.

Elemento raiz

O primeiro é sempre o elemento raiz, só pode haver um elemento raiz em um documento XML!

Neste exemplo, dois elementos raiz são criados

  • não está certo
  • corretamente

No segundo exemplo, um elemento raiz é criado, "Root", que contém um elemento regular "Admin".

Depois de declarar o elemento raiz, você pode adicionar qualquer número de elementos ao seu. Todos os elementos adicionados devem ser colocados entre as tags do elemento raiz.

"Biblioteca" O elemento raiz que contém o elemento livro, que contém elementos aninhados: título, autor, ano.

Atributos de arquivo xml

Os atributos são definidos na tag de abertura de qualquer elemento.

Sintaxe: nome \u003d "valor" entre aspas duplas.

Pode haver qualquer número de atributos, mas eles não devem ser repetidos e seus nomes não devem conter espaços.

  • não está certo
  • não está certo

Erro, há dois atributos "id" duplicados e um espaço entre id e número.

  • corretamente
  • corretamente

Depois de Documento XML criado, você deve salvá-lo, e não se esqueça de alterar a extensão do arquivo.

  • filename.xml

Hoje se tornou óbvio para todos os especialistas no campo das tecnologias da web que os padrões existentes para transmissão de dados pela Internet não são suficientes. O formato HTML, tendo se tornado um grande avanço no campo da exibição de conteúdos de sites da Internet, não atende mais a todos os requisitos exigidos atualmente. Ele permite que você descreva como os dados devem ser exibidos na tela do usuário final, mas não fornece nenhum meio para descrever e gerenciar com eficácia os dados transmitidos.

Além disso, o obstáculo para muitas empresas de desenvolvimento de software é a necessidade de compartilhar vários componentes, garantir sua interação e a capacidade de trocar dados entre eles.

Até recentemente, não havia um padrão que fornecesse meios para recuperação inteligente de informações, troca de dados e processamento adaptativo dos dados recebidos.

A solução para todos os problemas descritos acima foi a linguagem XML aprovada em 1998 pela organização internacional W3C (EN). XML (eXtensible Markup Language) é uma linguagem de marcação extensível para descrever dados estruturados em forma de texto. Este formato baseado em texto, bem como HTML, é projetado especificamente para armazenar e transmitir dados.

XML permite que você descreva e transfira dados estruturados, como:

  • documentos separados;
  • metadados que descrevem o conteúdo de qualquer site da Internet;
  • objetos que contêm dados e métodos para trabalhar com eles (por exemplo, controles ActiveX ou objetos Java);
  • registros individuais (por exemplo, os resultados da execução de consultas em bancos de dados);
  • todos os tipos de links da web para informações e recursos humanos da Internet (endereços o email, links de hipertexto, etc.).

Criação de documentos XML

Os dados descritos em XML são chamados de documentos XML. XML é fácil de ler e simples de entender. Se você estava familiarizado com HTML, aprender a escrever documentos XML deve ser fácil para você.

O texto fonte de um documento XML é composto por um conjunto de elementos XML, cada um dos quais contém tags de início e fim. Cada par de tags representa um dado. Ou seja, como o HTML, o XML usa tags para descrever os dados. Mas, ao contrário do HTML, o XML permite que você use um conjunto ilimitado de pares de tags, cada um dos quais representa não a aparência dos dados incluídos, mas o que significa.

Bom Dia NOTÍCIA A série Veneno suave Campo dos Milagres (repetir) M. f. Saúde NOTÍCIA Aproveite seu banho! M. f. Juntos NOTÍCIA Melhor hora NOTÍCIA Clima GOOG night kids TEMPO Vista

Este texto pode ser criado em formato de texto simples e salvo como um arquivo XML.

Qualquer elemento de um documento XML pode ter atributos que especificam suas características. Um atributo é um par nome \u003d "valor" que é especificado ao definir um elemento em uma tag inicial. No exemplo acima, o elemento tem um atributo date \u003d "December 25" e o elemento - nome do atributo \u003d "ORT".

O princípio da extensibilidade do XML é que um número ilimitado de pares de tags pode ser usado, conforme definido pelo criador do documento XML. Por exemplo, a descrição acima do guia de TV pode ser expandida para incluir informações sobre a região de transmissão e o guia de canal PTP. Nesse caso, a descrição XML ficará assim:

Rússia São Petersburgo Bom Dia NOTÍCIA A série Veneno suave Campo dos Milagres (repetir) M. f. Saúde NOTÍCIA Aproveite seu banho! M. f. Juntos NOTÍCIA Melhor hora NOTÍCIA Clima GOOG night kids TEMPO Vista M. f. Clima Correio RTR Bom dia Country! Seu próprio diretor Haze Roxo CHAVE DE OURO Federação Agentes secretos Boyarsky Dvor Minha família Casa cheia NOTÍCIA ASTEROID (EUA) JANTAR EM FRED (EUA) Clima

Agora, a partir desta descrição XML, você pode extrair o programa de TV dos canais ORT e RTR para 25 de dezembro na cidade de São Petersburgo, Rússia.

O princípio da independência da definição da estrutura interna do documento das formas de apresentação dessas informações é separar os dados do processo de seu processamento e exibição. Assim, os dados obtidos podem ser utilizados de acordo com a necessidade do cliente, ou seja, escolher o projeto desejado, aplicar os métodos de processamento necessários.

Você pode controlar a exibição de elementos na janela do cliente (por exemplo, na janela do navegador) usando instruções especiais - folhas de estilo XSL (eXstensible Stylesheet Language). Essas tabelas XSL permitem definir a aparência de um elemento com base em sua localização no documento, ou seja, diferentes regras de formatação podem ser aplicadas a dois elementos com o mesmo nome. Além disso, a linguagem subjacente do XSL é o XML, o que significa que as tabelas XSL são mais versáteis e os DTDs ou esquemas de dados discutidos abaixo podem ser usados \u200b\u200bpara controlar a exatidão dessas folhas de estilo.

O formato XML, em comparação com HTML, tem um pequeno conjunto de regras de análise simples que permitem analisar documentos XML sem recorrer a qualquer descrição externa dos elementos XML usados. Em geral, os documentos XML devem atender aos seguintes requisitos:

  • Cada tag de abertura que define algum dado no documento deve vir acompanhada de uma tag de fechamento, ou seja, ao contrário do HTML, as tags de fechamento não podem ser omitidas.
  • O aninhamento de tags em XML é rigidamente controlado, portanto, você precisa acompanhar a ordem das tags de abertura e fechamento.
  • XML diferencia maiúsculas de minúsculas.
  • Todas as informações entre as tags de início e fim são tratadas como dados em XML e, portanto, todos os caracteres de formatação são levados em consideração (ou seja, espaços, novas linhas, tabulações não são ignorados, como em HTML).
  • XML possui um conjunto de caracteres reservados que só devem ser especificados em um documento XML de uma maneira especial. Esses símbolos e os conjuntos de caracteres que os definem são:
    < <
    & &
    > >
    " "
    " "
  • Cada documento XML deve ter um elemento raiz exclusivo. Em nosso exemplo, tal elemento é o elemento .
  • Todos os valores de atributo usados \u200b\u200bnas definições de tag devem ser colocados entre aspas.

Se o documento XML não violar as regras acima, ele é chamado formalmente correto.

Hoje, existem duas maneiras de controlar a exatidão de um documento XML: definições de DTD (Document Type Definition) e esquemas de dados (Semantic Schema). Se um documento XML for criado e enviado usando DTDs ou Schemas, ele será chamado válido.

Esquema é uma maneira de criar regras para construir documentos XML, ou seja, especificar nomes, tipos, atributos e relacionamentos de elementos válidos em um documento XML. Esquemas são caminho alternativo criação de regras para a construção de documentos XML. Em comparação com as descrições DTD, os esquemas têm ferramentas mais poderosas para definir estruturas de dados complexas, fornecem uma maneira mais clara de descrever a gramática de uma linguagem e podem ser facilmente modernizados e estendidos. Uma vantagem indiscutível dos esquemas é que eles permitem que você descreva regras para um documento XML por meio do próprio XML. Deste ponto de vista, XML pode ser chamado de autodescritivo.

Como os elementos XML usados \u200b\u200bno mesmo documento podem ser obtidos de diferentes esquemas XML, podem surgir conflitos de nomes de elementos. Espaços de nomes resolvem esse problema. Os namespaces tornam possível distinguir elementos com o mesmo nome, mas significados diferentes. No entanto, eles não definem como esses elementos são tratados - é isso que os analisadores XML discutidos abaixo fazem.

Para entender mais claramente o propósito e as possibilidades de usar esquemas XML, aqui está um esquema para o guia de TV de exemplo discutido acima.

Este esquema XML deve ser salvo no arquivo TV-ProgramSchema.XML. O elemento raiz deste arquivo XML é cujos atributos são o nome do esquema TV-ProgramSchema e uma referência aos namespaces que definem os tipos de dados integrados usados \u200b\u200bneste esquema: xmlns \u003d "urn: schemas-microsoft-com: xml-data". Os atributos dos elementos deste esquema minOccurs e maxOccurs definem, respectivamente, o número mínimo e máximo possível de tais elementos no esquema. Por exemplo, a linha significa que o número de itens do tipo item (ou seja, os próprios programas de TV) no esquema pode ser de 0 a infinito.

Se você usar o esquema acima para controlar a exatidão da descrição XML do guia do programa de TV, deverá especificar o esquema usado no cabeçalho XML. Então, a descrição XML do programa de TV do canal ORT ficará assim:

Rússia São Petersburgo Bom Dia NOTÍCIA A série Veneno suave Campo dos Milagres (repetir) M. f. Saúde NOTÍCIA Aproveite seu banho! M. f. Juntos NOTÍCIA Melhor hora NOTÍCIA Clima GOOG night kids TEMPO Vista

Agora, o elemento raiz desta descrição XML tem o atributo xmlns \u003d "x-schema: TV-ProgramSchema.xml", que é um link para o esquema XML usado.

Análise de documentos XML

A obtenção de dados de um documento XML, bem como a verificação da exatidão dos documentos XML, é fornecida analisadores (analisadores) documentos XML. Se o documento XML estiver formalmente correto, todos os analisadores projetados para analisar documentos XML serão capazes de trabalhar com ele corretamente.

Como o uso de DTDs em XML é opcional, qualquer documento formalmente válido pode ser reconhecido e analisado por um programa que analisa documentos XML. Por exemplo, qualquer descrição XML fornecida neste documento é formalmente correta, portanto, qualquer analisador XML a reconhecerá corretamente.

Se um documento XML usando esquema XML for alimentado para o analisador XML, ele será analisado e verificado quanto à exatidão e conformidade com o esquema. Por exemplo, uma descrição XML de um programa de TV para um canal RTR usando o esquema TV-ProgramSchema.xml será considerada formalmente correta e válida.

Os analisadores XML permitem, se as construções de linguagem especificadas no documento estiverem sintaticamente corretas, extrair corretamente os elementos do documento que eles definem e transmiti-los ao programa aplicativo que executa as ações de exibição necessárias. Ou seja, após analisar um documento XML, na maioria dos casos, um aplicativo é fornecido com um modelo de objeto que exibe o conteúdo do documento XML resultante e as ferramentas necessárias para trabalhar com ele (percorrendo a árvore de elementos).

Como o XML, ao contrário do HTML, não determina de forma alguma como os elementos do documento descritos com sua ajuda são exibidos e usados, o analisador XML tem a oportunidade de escolher o design desejado.

Conforme mencionado, as tabelas XSL podem ser usadas para definir a aparência dos elementos XML. O princípio de processamento de documentos XML usando folhas de estilo é o seguinte: ao analisar um documento XSL, o programa analisador processa as instruções dessa linguagem e atribui um conjunto de tags a cada elemento encontrado na árvore XML que determina a formatação desse elemento. Em outras palavras, usando tabelas XSL, você define um modelo de formatação para elementos XML, e esse modelo em si pode ter a estrutura do fragmento correspondente de um documento XML. As instruções XSL definem a localização exata de um elemento XML na árvore, portanto, é possível aplicar estilos diferentes ao mesmo elemento, dependendo do contexto em que são usados.

Alguns analisadores dependem do DOM (Document Object Model) para representar a estrutura de um documento, o que permite que um DOM hierárquico estrito seja usado ao gerar documentos XML.

Um exemplo de analisador XML é o Microsoft Internet integrado Versão Explorer 5.0 analisador XML MSXML. Ele permite que você leia dados de um arquivo XML, processe-os, gere uma árvore de elementos, exiba os dados usando folhas de estilo XSL e use o DOM para representar todos os elementos de dados como objetos.

Usando XML

Muitos especialistas veem XML como nova tecnologia integração de componentes de software. As principais vantagens de usar XML são:

  • Integração de dados de várias fontes. XML pode ser usado para combinar dados estruturados heterogêneos na camada intermediária de sistemas web de três camadas, bancos de dados.
  • Processamento de dados local. Os dados recebidos em formato XML podem ser analisados, processados \u200b\u200be exibidos diretamente no cliente sem chamadas adicionais para o servidor.
  • Visualizando e manipulando dados em vários aspectos. Os dados recebidos podem ser processados \u200b\u200be visualizados pelo cliente de várias maneiras, dependendo das necessidades do usuário final.
  • A capacidade de atualizar dados parcialmente. Com XML, você pode atualizar apenas a parte dos dados estruturados que mudou, não a estrutura inteira.

Todas essas vantagens tornam o XML uma ferramenta indispensável para o desenvolvimento de ferramentas flexíveis de recuperação de banco de dados, aplicativos da web poderosos de três camadas e aplicativos com reconhecimento de transação. Em outras palavras, o XML pode ser usado para fazer consultas a bancos de dados de várias estruturas, o que permite pesquisar informações em vários bancos de dados incompatíveis entre si. O uso de XML na camada intermediária de aplicativos da web de três camadas permite uma comunicação eficiente entre clientes e servidores de e-commerce.

Além disso, o XML pode ser usado como um meio para descrever a gramática de outras linguagens e controlar a exatidão dos documentos.

As ferramentas de processamento de dados XML podem ser desenvolvidas em Visual Basic, Java ou C ++.