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 |
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?
|
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
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.
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
|
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
|
Agora tenho algo com que trabalhar!
Listagem 1 - CUP.XML
|
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 " |
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:
Como você pode ver, o XML é muito conciso.
Nota (
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,
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.
- 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
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.
Erro, há dois atributos "id" duplicados e um espaço entre id e número.
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.
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
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:
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 é
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:
Agora, o elemento raiz
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 ++.