"SINCRONIZAÇÃO EM TEMPO REAL DE DADOS DE XML ENTREAPLICAÇÕES"
ANTECEDENTES
Os usuários de computador cresceram acostumadoscom aplicações de software convenientes para os usuários queos ajuda a escrever,, calcular, organizar, preparar apresen-tações, enviar e receber correio eletrônico, fazer música esemelhantes. Por exemplo, aplicações de processamento detexto permitem que os usuários preparem uma variedade de do-cumentos úteis. Aplicações de planilha permitem que os usuá-rios insiram, manipulem e organizem dados. Aplicações de a-presentação de slide permitem que os usuários criem uma va-riedade de apresentações de slide contendo texto, imagens,dados ou outros objetos úteis.
Os documentos criados por tais aplicações (por e-xemplo, documentos de processamento de texto, planilhas, do-cumentos de apresentação de slide), entretanto, têm uma fa-cilidade limitada para armazenar/transportar os conteúdos demetadados arbitrários requeridos pelo contexto dos documen-tos. Por exemplo, uma solução construída em cima de um docu-mento de processamento de texto pode requerer o armazenamen-to de dados de fluxo de trabalho que descrevem vários esta-dos do documento, por exemplo, estados de aprovação préviosdo fluxo de trabalho (datas, horas, nomes), estados de apro-vação atuais, estados de fluxo de trabalho futuros antes daconclusão, nome e endereço do escritório do autor do docu-mento, mudanças no documento e semelhantes. As opções paraarmazenar essa informação são primariamente limitadas ao usode variáveis de documento ou propriedades de documento deligação e incorporação do objeto (OLE) personalizado exis-tentes que têm limitações. Por exemplo, os dados hierárqui-cos podem não ser armazenados, o comprimento do caractere élimitado e semelhantes. As propriedades para tais métodossão armazenadas em uma única memória, por exemplo, uma memó-ria de propriedades de OLE, o que significa que as proprie-dades têm uma possibilidade de conflito. Além disso, taispropriedades armazenadas não têm validação de dados. É difí-cil para os usuários de tais aplicações e documentos rela-cionados armazenar dados arbitrários com documentos, que éuma necessidade comum de muitos usuários.
SUMÁRIO
Esse sumário é provido para apresentar uma seleçãode conceitos em uma forma simplificada que são também des-critos abaixo na descrição detalhada. Esse sumário não éplanejado para identificar aspectos chaves ou aspectos es-senciais da matéria exposta reivindicada, nem ele é planeja-do para ser usado como uma ajuda na determinação do escopoda matéria exposta reivindicada.
Uma ou mais memórias de dados são mantidas separa-damente de um armazenamento de apresentação primário dentrode um documento para armazenar, relacionar e para permitir ouso de dados arbitrários que são associados com um documentogerado pelo computador entre múltiplos consumidores de da-dos. Os dados para estruturar a informação associada com umdocumento, tal como metadados do documento, são mantidos emuma memória de dados onde as relações entre pedaços diferen-tes de dados são mantidas. A memória de dados expõe as in-terfaces de programação da aplicação (APIs) para os váriospedaços de dados na memória de dados para permitir que con-sumidores de dados diferentes acessem e operem em um ou maisdos pedaços de dados em tempo real. Múltiplos consumidoresde dados podem acessar e editar o mesmo pedaço de dados si-multaneamente e quaisquer mudanças conflitantes para um dadopedaço de dados são resolvidas. Cada consumidor de dados po-de aceitar ou rejeitar a mudança, bem como fazer mudançasadicionais de efeito colateral como um resultado da mudançaoriginal. Dessa maneira, os dados podem ser sincronizados emtempo real através dos consumidores de dados.
Os pedaços de dados podem ser estruturados de a-cordo com uma linguagem de marcação tal como a linguagem demarcação extensível (XML). Esquemas da XML podem ser associ-ados com cada pedaço de dados e a memória de dados pode au-tomaticamente validar a estrutura da XML dos dados com baseem um esquema da XML associado com um dado pedaço de dados.Isso ajuda a impedir que mudanças inválidas tenham permissãopara entrar no sistema.
BREVE DESCRIÇÃO DOS DESENHOS
A figura 1 ilustra uma arquitetura de computaçãoexemplar para um computador,
A figura 2 é um diagrama de blocos ilustrando umarelação entre uma ou mais aplicações de cliente e uma oumais memória(s) de dados e os conteúdos da(s) memória(s) dedados,
A figura 3 ilustra um diagrama de sistema mostran-do a interação entre os consumidores de dados interno e ex-terno com as memórias de dados da XML,
A figura 4 ilustra um exemplo da sincronização a-tiva,
A figura 5 ilustra a interação entre dois clientese uma memória de dados da XML,
A figura 6 mostra a interação entre dois consumi-dores de dados externos e uma mudança na memória de dados daXML,
A figura 7 mostra um processo envolvendo múltiplasmudanças de efeito colateral e
A figura 8 ilustra um processo mostrando que osefeitos colaterais do chamador são executados por último, deacordo com aspectos- da presente invenção.
DESCRIÇÃO DETALHADA
Com referência agora os desenhos, nos quais nume-rais semelhantes representam elementos semelhantes, váriosaspectos da presente invenção serão descritos. Em particu-lar, a figura Iea discussão correspondente são planejadospara prover uma breve descrição geral de um ambiente de com-putação adequado no qual modalidades da invenção podem serimplementadas.
De forma geral, módulos do programa incluem roti-nas, programas, componentes, estruturas de dados e outrostipos de estruturas que executam tarefas particulares ou im-plementam tipos de dados abstratos particulares. Outras con-figurações do sistema de computador podem também ser usadas,incluindo dispositivos de mão, sistemas de multiprocessador,eletrônica de consumidor com base em microprocessador ouprogramável, minicomputadores, computadores de grande portee semelhantes. Ambientes de computação distribuídos podemtambém ser usados onde as tarefas são executadas por dispo-sitivos de processamento remoto que são ligados através deuma rede de comunicações. Em um ambiente de computação dis-tribuído, módulos de programa podem ficar localizados em am-bos os dispositivos de armazenamento de memória locais e re-motos.
Por todo o relatório descritivo e reivindicações,os seguintes termos adotam os significados associados aqui,a menos que o contexto do termo dite de outra forma.
0 termo "apresentação" se refere à porção visíveldo documento tais como o texto e o leiaute que apareceriamse o documento fosse impresso.
0 termo "marca" se refere aos caracteres inseridosem um documento que delineiam os elementos dentro de um do-cumento da XML. Cada elemento não pode ter mais do que duasmarcas: a marca de início e a marca de fim. É possível terum elemento vazio (sem conteúdo) em cujo caso uma marca épermitida.
Os termos "linguagem de marcação" ou "ML" se refe-rem a uma linguagem para códigos especiais dentro de um do-cumento que especificam como as partes do documento devemser interpretadas por uma aplicação. Em um arquivo de pro-cessador de texto, a linguagem de marcação especifica como otexto deve ser formatado ou disposto.
0 termo "elemento" se refere à unidade básica deum documento da XML. O elemento pode conter atributos, ou-tros elementos, texto e outras regiões de conteúdo para umdocumento da XML.
O conteúdo da XML entre as marcas é considerado o"secundário" do elemento (ou descendentes). Portanto, outroselementos incorporados no conteúdo do elemento são chamados"elementos secundários" ou "nós secundários" ou o elemento.O texto incorporado diretamente no conteúdo do elemento éconsiderado os "nós do texto secundário" do elemento. Jun-tos, os elementos secundários e o texto dentro de um elemen-to constituem o "conteúdo" desse elemento.
O termo "atributo" se refere a uma propriedade a-dicional estabelecida para um valor particular e associadacom um elemento. Os elementos podem ter um número arbitráriode ajustes de atributo associados com eles, incluindo ne-nhum. Os atributos são usados para associar a informação a-dicional com um elemento que não conterá elementos adicio-nais ou será tratado como um nó do texto.
O termo "XPath" é um operador que usa uma expres-são padrão para identificar nós em um documento da XML. Umpadrão de XPath é uma lista separada por traços oblíquos dosnomes do elemento secundário que descrevem uma trajetóriaatravés do documento da XML. O padrão "seleciona" elementosque igualam a trajetória.
O termo "mudança de efeito colateral" se refere auma mudança que é feita em resposta a uma outra mudança.
O termo "documento" pode consistir da XML arbitrá-ria que descreve as propriedades que são definidas no tipode conteúdo associado, bem como as outras linguagens de mar-cação que podem ser usadas para descrever o conteúdo de su-perfície real do documento:
0 termo "memória de dados da XML e/ou memória dedados" se refere a um recipiente dentro de um documento, talcomo um documento de processador de texto, um documento deplanilha, um documento de apresentação de slide, etc., queprovê acesso para o armazenamento e modificação dos dados(no formato da XML, por exemplo) armazenados no documentoenquanto o arquivo está aberto. Definição adicional da memó-ria de dados da XML é provida abaixo com relação à figura 2.
Com referência à figura 1, um sistema exemplar pa-ra implementar a invenção inclui um dispositivo de computa-ção, tal como dispositivo de computação 100. Em uma configu-ração muito básica, o dispositivo de computação 100 tipica-mente inclui pelo menos uma unidade de processamento 102 ememória do sistema 104. Dependendo da configuração exata edo tipo do dispositivo de computação, a memória do sistema104 pode ser volátil (tal como RAM) , não volátil (tal comoROM, memória flash, etc.) ou alguma combinação das duas. Amemória do sistema 104 tipicamente inclui um sistema opera-cional 105, uma ou mais aplicações 106 e pode incluir dadosdo programa 107. Em uma modalidade, a aplicação 106 pode in-cluir uma aplicação de processador de texto 120. Essa confi-guração básica é ilustrada na figura 1 por esses componentesdentro da linha tracejada 108.
O dispositivo de computação 100 pode ter aspectosou funcionalidade adicional. Por exemplo, o dispositivo decomputação 100 pode também incluir dispositivos de armazena-mento de dados adicionais (removíveis e/ou não removíveis)tais como, por exemplo, discos magnéticos, discos óticos oufita. Tal armazenamento adicional é ilustrado na figura 1pelo armazenamento removível 109 e armazenamento não removí-vel 110. Meios de armazenamento no computador podem incluirmeios voláteis e não voláteis, removíveis e não removíveisimplementados em qualquer método ou tecnologia para armaze-namento de informação, tais como instruções legíveis porcomputador, estruturas de dados, módulos do programa ou ou-tros dados. A memória do sistema 104, armazenamento removí-vel 109 e armazenamento não removível 110 são todos exemplosde meios de armazenamento no computador. Meios de armazena-mento no computador incluem, mas não são limitados a, RAM,ROM, EEPROM, memória flash ou outra tecnologia de memória,CD-ROM, discos versáteis digitais (DVD) ou outro armazena-mento ótico, cassetes magnéticos, fita magnética, armazena-mento de disco magnético ou outros dispositivos de armazena-mento magnético ou qualquer outro meio que possa ser usadopara armazenar a informação desejada e que possa ser acessa-do pelo dispositivo de computação 100. Quaisquer tais meiosde - armazenamento no computador podem ser parte do dispositi-vo 100. O dispositivo de computação 100 pode também ter dis-positivo (s) de entrada 112 tais como teclado, mouse, caneta,dispositivo de entrada de voz, dispositivo de entrada portoque, etc. Dispositivo (s) de saída 114 tais como um moni-tor, alto-falantes, impressora, etc., podem também ser in-cluídos. Esses dispositivos são bem conhecidos na técnica enão precisam ser discutidos em maiores detalhes aqui.
0 dispositivo de computação 100 pode também conterconexões de comunicação 116 que permitem que o dispositivose comunique com outros dispositivos de computação 118, talcomo através de uma rede. A conexão de comunicação 116 é umexemplo dos meios de comunicação. Os meios de comunicaçãopodem ser tipicamente personificados por instruções legíveispor computador, estruturas de dados, módulos do programa ououtros dados em um sinal de dados modulado, tal como uma on-da portadora ou outro mecanismo de transporte e incluiquaisquer meios' de entrega de informação. O termo "sinal dedados modulado" significa um sinal que tem uma ou mais desuas características ajustadas ou alteradas em uma tal ma-neira de modo a codificar a informação no sinal. Por meio deexemplo, e não limitação, meios de comunicação incluem meiosligados por fiação tal como uma rede ligada por fiação ouconexão ligada por fiação direta e meios sem fio tais comomeios sem fio acústicos, de RF, de infravermelho e outros. Otermo meios legíveis por computador como usado aqui incluiambos os meios de armazenamento e meios de comunicação.
Uma série de módulos do programa e arquivos de da-dos pode ser armazenada na memória do sistema 104 do dispo-sitivo de computação 100, incluindo um sistema operacional105 adequado para controlar a operação de um computador pes-soai em rede, tal como os sistemas operacionais WINDOWS daMICROSOFT Corporation de Redmond, Washington. A memória dosistema 104 pode também armazenar um ou mais módulos do pro-grama, tal como a aplicação do processador de texto 120, eoutros descritos abaixo. A aplicação do processador de texto120 é operativa para prover funcionalidade para criar, edi-tar e processar documentos eletrônicos.
De acordo com uma modalidade da invenção, a apli-cação do processador de texto 120 compreende o programa WORDda MICROSOFT CORPORATION. Deve ser verificado, entretanto,que programas de aplicação de processador de texto de outrosfabricantes podem ser utilizados. A ilustração de uma apli-cação de processamento de texto é com finalidades de exemplosomente e não está limitando outros tipos de aplicações quepodem produzir e operar nos documentos. Por exemplo, outrosprogramas de aplicação 106 que são capazes de processar vá-rias formas de conteúdo (por exemplo, texto, imagens, dese-nhos, etc.), tais como programas de aplicação de planilha,programas de aplicação de base de dados, programas de apli-cação de apresentação de slide, programas de aplicação auxi-liados por computador ou de desenho, etc., são igualmenteaplicáveis. Um programa de aplicação exemplar 106 que produze opera em uma variedade de tipos diferentes de documentosinclui o OFFICE da MICROSOFT Corporation.
Modalidades podem ser implementadas como um pro-cesso de computador, um sistema de computação ou como um ar-tigo de fabricação tal como um produto de programa de compu-tador ou meios legíveis por computador. O produto de progra-ma de computador pode ser meios de armazenamento no computa-dor legíveis por um sistema de computador e codificação.deum programa de computador das instruções para executar umprocesso no computador. O produto do programa de computadorpode também ser um sinal propagado em uma portadora legívelpor um sistema de computação e codificação de um programa decomputador das instruções para executar um processo do com-putador.
A figura 2 é um diagrama de blocos ilustrando umarelação entre uma ou mais aplicações do cliente e uma oumais memórias de dados e os conteúdos da(s) memória(s) dedados. Geralmente descrito, uma ou mais memórias de dadossão mantidas separadamente de um armazenamento de apresenta-ção primário dentro de um documento para armazenar, relacio-nar e para permitir o uso de dados arbitrários através deconsumidores de dados que são associados com um documentogerado pelo computador. Dados para estruturar a informaçãoassociada com um documento, tal como metadados do documento,são mantidos em uma memória de dados onde as relações entrepedaços de dados diferentes são mantidas. A memória de dadosexpõe as interfaces de programação de aplicação (APIs) aosvários pedaços de dados na memória de dados para permitirque aplicações diferentes acessem e operem em um ou mais dospedaços de dados. Como usado aqui, os termos "consumidoresde dados", "aplicações" e "processos" podem ser usados demaneira permutável a menos que o contexto claramente dite deoutra forma.
Os pedaços de dados podem ser estruturados de a-cordo com uma linguagem de marcação tal como a linguagem demarcação extensível (XML). Esquemas da XML podem ser associ-ados com cada pedaço dos dados e a memória de dados pode va-lidar a estrutura da XML aplicada nos dados com base em umesquema da XML associado com um dado pedaço dos dados paragarantir a validade de cada solicitação. As memórias de da-dos podem conter qualquer número de itens de dados arbitrá-rios, por exemplo, metadados, estruturados de acordo com alinguagem de marcação extensível (XML). Dessa maneira, pro-vedores de solução de documento podem armazenar os metadadosarbitrários como XML com um dado documento e ter essa infor-mação processada por uma dada solução tendo acesso aos dadoscom a ocorrência de um evento tal como quando os dados sãoremovidos ou carregados na memória de dados e/ou quando odocumento é aberto/editado/salvo por um usuário.
O acesso programático é também provido para os da-dos na sua forma de XML enquanto o documento está sendo edi-tado. De acordo com uma modalidade, um mecanismo padrão é-provido que é familiar para desenvolvedores de solução via oqual os dados podem ser acessados e modificados de maneiraprogramática enquanto o documento está aberto. Esse acessoprogramático é projetado para imitar APIs de XML padrões. 0acesso programático aos dados é provido via interfaces deprogramação da aplicação para uma ou mais aplicações do cli-ente de edição (por exemplo, aplicações de edição ou criaçãode documento e/ou soluções de complemento da aplicação deterceiros e semelhantes). Dessa maneira, múltiplas aplica-ções de cliente podem acessar e editar o mesmo pedaço dosdados de documento e quaisquer mudanças conflitantes para umdado pedaço de dados são resolvidas. Consumidores de dadospodem fazer mudanças de efeitos colaterais em resposta aqualquer dada mudança. Por exemplo, em resposta ao estabele-cimento de um nome de companhia para "Microsoft", um consu-midor de dados pode alterar um símbolo de estoque para"MSFT". Alem disso, mudanças em dados e quaisquer efeitoscolaterais, associados podem ser "agrupadas" pela memória dedados, de modo que a anulação de uma ou mais mudanças inver-te todas as mudanças relacionadas. Isso auxilia na remoçãodo fardo de desenvolvimento do próprio consumidor de dadospara garantir que ele inverteu todas as mudanças quando ousuário inicia uma anulação da mudança original a partir dasuperfície do documento, por exemplo, pelo aperto de comandodesfazer.
Esquemas de XML padrões (XSDs) podem também serusados para definir os conteúdos de qualquer um dos pedaçosdos dados de XML personalizados associados com metadados dedocumento a fim de garantir que os dados de XML aplicadosnos dados do documento sejam válidos. Esses esquemas podemser anexados a qualquer instância dos dados da XML armazena-dos no documento e a memória de dados pode ser configuradapara proibir qualquer mudança nos dados da XML que resulta-ria na estrutura da XML (isto é, as marcas da XML em oposi-ção aos seus conteúdos) desses dados se tornando inválida.Isso ajuda a garantir que o desenvolvedor da solução possaanexar um pedaço específico dos metadados da XML em um docu-mento e garantir qué os dados da XML continuarão a ser es-truturalmente "corretos" de acordo com o esquema associado,a despeito de quais consumidores de dados (por exemplo, com-plementos) são usados para modificar esses dados. 0 esquemapode ser armazenado em um meio legível por computador, talcomo em um arquivo ou em uma unidade rígida.
Com referência agora à figura 2, os dados do docu-mento 220 incluem dados de estrutura da XML e dados de docu-mento associados representando a superfície ou visão do ní-vel de apresentação de um documento. Por exemplo, os dadosdo documento 220 podem incluir a estrutura da XML (por exem-plo, marcas de cabeçalho, marcas de corpo, marcas de conclu-são) e dados de visualização de superfície associados (porexemplo, palavras, frases, parágrafos) de um documento deprocessamento de texto, documento de planilha, documento deapresentação de slide e semelhantes.
A memória de dados 208 é um repositório dos dadosdo documento para armazenar um ou mais pedaços dos dados es-truturados associados com um ou mais tipos de dados associa-dos com um dado documento. Embora somente uma memória de da-dos seja ilustrada, mais do que uma memória de dados podeser utilizada. Os metadadosl 225 (item de dados estrutura-dos) podem incluir dados de estrutura da XML e dados associ-ados para um primeiro pedaço dos metadados associados com odocumento. Por exemplo, os metadadosl 225 podem incluir da-dos de estrutura da XML (por exemplo, marcas de data, marcasde nome, etc.) listando o autor do documento, data da cria-ção do documento, data da última mudança/salvamento do docu-mento e semelhantes. Os metadados2 230 (item dos dados es-truturados) podem incluir dados da estrutura da XML (marcas)e metadados associados representando um segundo pedaço dosmetadados associados com o documento. Os metadadosl e os me-tadados2 são para finalidades de exemplo e não estão Iimi-tando a variedade e o número de tipos diferentes de dadosque podem ser mantidos na memória de dados 208 em associaçãocom um dado documento. Por exemplo, como descrito aqui, da-dos arbitrários podem ser estruturados e adicionados no do-cumento por uma ou mais aplicações de software como desejadopelos provedores de solução ou usuários tendo acesso aos da-dos do documento.
Um arquivo de esquema 240,245 pode ser opcional-mente anexado a cada pedaço dos dados armazenados na memóriade dados 208 para ditar as regras de sintaxe e validação as-sociadas com os dados da linguagem de marcação extensível(XML) aplicados em cada pedaço dos dados 225,230. Arquivosdo esquema da XML provêem uma maneira para descrever e vali-dar os dados em um ambiente da XML. Um arquivo de esquemadeclara quais dados de marcação da XML, incluindo elementose atributos, são usados para descrever o conteúdo em um do-cumento da XML e o arquivo do esquema define a sintaxe demarcação da XML, incluindo onde cada elemento é permitido,quais tipos de conteúdo são permitidos dentro de um elementoe quais elementos podem aparecer dentro de outros elementos.
0 uso dos arquivos de esquema garante que o documento (oupedaço individual dos. dados) seja estruturado em uma maneiraconsistente e previsível. Arquivos de esquema 240,245 podemser criados por um usuário e geralmente suportados por umalinguagem de marcação associada, tal como XML.
Essa esquematização do documento permite que a me-mória de dados proveja a capacidade para "garantir" a vali-dade estrutural do documento rejeitando qualquer mudança queviola um dado arquivo de esquema no nível da memória de da-dos. De acordo com uma modalidade, a memória de dados 208utiliza um módulo de validação de esquema 2 60 para validar aestrutura da XML adicionada a ou as mudanças feitas em umdado pedaço dos dados contra um arquivo de esquema associa-do. Por exemplo, se um criador ou editor do documento fazmudanças estruturais da XML em um dado pedaço dos dados, porexemplo, os metadadosl, onde o editor adiciona ou remove umadada marca da XML, a memória de dados 208 utilizará o módulode validação do esquema para verificar as mudanças estrutu-rais da XML contra o arquivo de esquema associado para ga-rantir a validade da mudança. Se a mudança não é válida, umerro pode ser gerado para o editor. Como é entendido, talcontrole da estrutura da XML aplicada em um dado pedaço dedados permite a consistência estrutural e a capacidade depredição que são especialmente importantes para permitir queaplicações de cliente e terceiros interajam com os dados as-sociados. Qualquer consumidor de dados pode prover um esque-ma que pode ser usado para validar os dados.
A memória de dados 208 provê uma ou mais interfa-ces de programação de aplicação (API) 270 que podem ser a-cessadas por aplicações do cliente 205 (por exemplo, aplica-ções de processamento de texto, aplicações de planilha, a-plicações de apresentação de slide, etc.), bem como, aplica-ções de terceiros 210,215 e via os modelos de objeto (OM)das aplicações respectivas 205, 210, 215. Essas APIs permi-tem que as aplicações do cliente e aplicações de terceiroscarreguem qualquer arquivo de XML existente na memória dedados de um dado documento 208, assim garantindo que essesdados sejam agora parte do documento e percorrerão dentrodesse documento por sua duração de vida (por exemplo, atra-vés de abrir/editar/salvar/renomear/etc. ) ou até que os da-dos sejam deletados da memória de dados. De acordo com umamodalidade, os dados na memória de dados ficam disponíveisno seu formato de XML mesmo quando uma aplicação fonte paraum dado pedaço de dados 225, 230 é fechada ou de alguma for-ma não está disponível. Isto é, um dado pedaço dos dados225, 230 pode ser acessado via um conjunto de APIs. Comodescrito abaixo, as APIs também permitem que aplicações docliente e de terceiros façam mudanças nos dados de marcaçãoda XML aplicados nos itens de dados 225, 230.
Depois que os dados da XML 225, 230 são carregadosna memória de dados para associação com um documento 22 0,eles podem ser manipulados como XML padrão usando as inter-faces da memória de dados designadas para prover métodos si-milares para interfaces de edição de XML existentes de modoa alavancar o conhecimento existente dos desenvolvedores dopadrão de programação da XML. Isso permite que os usuáriosexecutem operações de XML padrões em dados de XML adiciona-dos na memória de dados para um documento, tal como a adiçãode elementos e atributos, remoção de elementos e atributos,mudança no valor dos elementos/atributos existentes e leitu-ra dos valores de qualquer parte existente da árvore da XMLassociada. Usando essas operações padrões da XML, as solu-ções podem armazenar metadados complexos estruturados com umdocumento. Por exemplo, uma aplicação de terceiros 215 podeser escrita para localizar e extrair nomes de autor de docu-mento e datas de criação do documento de um número de docu-mentos pela leitura dos metadadosl 225 adicionados na memó-ria de dados 208 para cada documento. A aplicação de tercei-ros exemplar pode ser uma aplicação programada para fazeruma lista de nomes de autor de documento e datas de criaçãode documento para todos os documentos criados por uma dadaorganização.
De acordo com modalidades da presente invenção,a aplicação de terceiros pode utilizar a estrutura da XMLaplicada nos metadadosl para eficientemente localizar e ex-trair os dados desejados. Por exemplo, a aplicação de ter-ceiros pode ser escrita para analisar a estrutura da XML doarquivo de metadadosl para localizar marcas da XML, tais co-mo <docauthor> e <doccreationdate> para obter e usar os da-dos associados com essas marcas. Como deve ser verificado, oprecedente é apenas um exemplo das muitas maneiras que umaou mais aplicações podem interagir com os dados estruturadosque são associados com o documento via a memória de dados 208.
Além disso, a memória de dados 208 provê qualquernúmero de interfaces da API 270 para qualquer pedaço indivi-dual de dados da XML 220, 225, 230 (também conhecidos comoum item da memória) para possibilitar que múltiplas aplica-ções 205, 210, 215 funcionem com o mesmo pedaço de dados.
Por exemplo, várias soluções, tal como uma aplicação do cli-ente (por exemplo, aplicação de processamento de texto) esoluções de aplicação de terceiros (por exemplo, a aplicaçãode terceiros descrita acima), podem funcionar com o mesmoconjunto de propriedades de documento (por exemplo, proprie-dades contidas no arquivo de metadados2 230). Usando a memó-ria de dados 208, cada uma dessas aplicações recebe acessoseparado para os dados da XML desejados 230 através de suaprópria interface API da memória de dados 270 para permitirque cada aplicação se comunique com os dados via seu própriogerenciador de objeto sem ter que lidar com a complexidadede ter múltiplos consumidores de dados acessando o mesmo pe-daço dos dados.
A fim de permitir que essas múltiplas aplicações205, 210, 215 acessem os mesmos dados, a memória de dados208 notifica cada uma dessas aplicações quando qualquer par-te dos dados da XML é alterada por uma outra aplicação demodo que uma dada aplicação pode responder para essa mudança(tanto internamente ao seu próprio processo quanto externa-mente por outras mudanças nos mesmos dados). Quando uma a-plicação solicita uma mudança para um dado item de dados,essa solicitação é automaticamente enviada para todas as ou-tras aplicações para permitir que as outras aplicações deci-dam como ou se responder para a mudança solicitada. De acor-do com uma modalidade, isso é realizado permitindo que cadaaplicação se inscreva para "participar" de qualquer partedos dados da XML nos quais ele tem uma interface de modo queuma dada solução/programa de aplicação somente recebe essasmensagens que são pertinentes para sua própria lógica. Porexemplo, um tipo de aplicação 210 pode desejar se inscreverpara participar de todas as mudanças feitas nos dados de umadada XML de modo a prover capacidades detalhadas de lógicado negócio para uma solução de terceiros, mas um outro tipode aplicação 215 pode desejar somente participar das mudan-ças em um ou dois elementos da XML específicos dentro dosmesmos dados porque sua lógica não se preocupa com as mudan-ças em qualquer outra parte dos dados da XML.
De acordo com essa modalidade, as múltiplas apli-cações 205, 210, 215 podem acessar e editar o mesmo pedaçodos dados de documento e quaisquer mudanças conflitantes pa-ra um dado pedaço de dados são resolvidas. Por exemplo, "e-feitos colaterais" em qualquer dada mudança podem ser feitosquando uma mudança por uma aplicação causa uma mudança deefeito colateral por uma outra aplicação. Por exemplo, umaprimeira aplicação 210 pode ser encarregada de extrair nomesde companhia de um ou mais itens de dados 225, 230 associa-dos com um dado documento para traduzir esses nomes em sím-bolos de estoque correspondentes, se disponível, para compi-lar uma lista de símbolos de estoque da companhia relaciona-dos com um dado documento. Se uma segunda aplicação 215 fazcom. que um dado nome de companhia em um dado pedaço dos me-tadados seja adicionado ou seja alterado, por exemplo, mu-dando o nome da companhia de "companhia ABC" para "companhiaXYZ", a primeira aplicação pode participar dessa mudança pa-ra automaticamente atualizar a sua lista de símbolos de es-toque para incluir o símbolo de estoque para a "companhiaXYZ" ao invés da "companhia ABC". Além disso, tais mudançase quaisquer efeitos colaterais associados podem ser agrupa-dos pela memória de dados 208 de modo que a anulação de umaou mais mudanças reverte todas as mudanças relacionadas.A figura 3 ilustra um diagrama de sistema mostran-do a interação entre os consumidores de dados internos e ex-ternos com as memórias de dados da XML. Como ilustrado, osistema 300 inclui documento 315, uma memória de dados 302,uma camada de apresentação 304, memórias da XML I-N 306 den-tro da memória de dados 202 que incluem, cada uma, uma memó-ria de erro e uma memória de anulação, uma memória de mudan-ça global 308, uma memória de anulação global opcional 310,um agente interno 312 que é acoplado nos consumidores de da-dos internos I-N 314, memória externa da XML 320 e um agenteexterno 316 que é acoplado nos consumidores de dados exter-nos I-N 318.
Com o uso da memória de dados 302 e a(s) memo-riais) de dados da XML 306, os documentos têm a capacidadede conter qualquer número de itens de dados arbitrários(contanto que cada um se conforme com a sintaxe da XML pa-drão). Metadados arbitrários podem ser armazenados como XMLdentro de um documento e essa informação pode ser automati-camente circulada quando o documento é aberto/editado/salvopelo usuário.
Como discutido acima, o acesso programático a es-ses dados é provido via uma API que pode ser utilizada en-quanto o documento está sendo editado, provendo um mecanismopadrão familiar para desenvolvedores de solução via o qualessa informação pode ser acessada e modificada de modo pro-gramático enquanto o documento está aberto. De acordo comuma modalidade, esse acesso programático é projetado paraimitar as interfaces da XML padrões. Com o uso da API, osdados podem ser adicionados/removidos enquanto a aplicação,tal como uma aplicação de processamento de texto, está fun-cionando, os dados podem ser preenchidos dentro de um itemda memória (uma parte dentro da memória de dados), os dadospodem ser manipulados usando construções da XML padrões, es-quemas podem ser associados com quaisquer dados da XML arbi-trários na memória de dados, esquemas podem ser adiciona-dos/removidos/alterados uma vez associados com o item da me-mória de dados e mudanças da XML podem ser transmitidas paraquaisquer clientes participantes. Como ilustrado, a API com-preende um agente externo 316 que provê uma interface paraos consumidores de dados externos 318 e um agente interno312 que provê uma interface para quaisquer consumidores dedados internos 314 que interagem com a memória de dados 302.
As manipulações na memória de dados 302 podem o-correr em tempo real. Como discutido acima, as memórias dedados 302 e 306 podem conter um ou mais tipos de dados. Porexemplo, uma companhia poderia ter uma memória de dados queeles estão usando para armazenar todos os tipos diferentesde dados que eles desejam armazenar dentro de uma única me-mória de dados, enquanto uma outra companhia poderia quererarmazenar tipos diferentes de dados dos dados através de di-ferentes memórias de dados.
Um consumidor de dados (interno 314 e/ou externo318) pode se inscrever para eventos que se relacionam comações com relação aos dados dentro das memórias de dados.Por exemplo, um consumidor de dados pode se inscrever parareceber um evento quando qualquer tipo de mudança é feita emuma ou mais das memórias de dados. Um outro consumidor dedados pode se inscrever para mudanças que aconteceram em umcerto elemento ou conjunto de elementos dentro de uma memó-ria de dados. Eventos comuns incluem adicionar um item, mu-dar um item e deletar um item de uma das memórias de dados.Quando o evento ocorre, cada consumidor de dados que se ins-creveu pode reagir à mudança enquanto o estado das memóriasde dados é mantido consistentemente. Muitas vezes, um consu-midor de dados não executará quaisquer ações quando uma mu-dança é feita. Em outras vezes, o consumidor de dados execu-tará algumas ações em resposta ao evento. Por exemplo, umconsumidor de dados pode fazer algumas outras mudanças namemória de dados em resposta à mudança tal como, em respostaa uma mudança de titulo, atualizar cabeçalhos dentro do do-cumento. 0 consumidor de dados pode também executar algumasoutras operações que não afetam o documento. Por exemplo, seo símbolo registrador do estoque é inserido, o consumidor dedados pode recuperar os dados que são associados com essesímbolo do estoque mesmo embora todos os dados recuperadospossam não ser exibidos dentro do documento na camada de a-presentação. 0 consumidor de dados pode também rejeitar amudança usando sua própria lógica de validação. Por exemplo,se o consumidor de dados 1 recebe uma mudança que eles nãoaceitam, esse consumidor de dados pode retornar um indicadorpara o agente indicando que a mudança não é aceita. Sempreque uma mudança não é aceita, a mudança é revertida, juntocom quaisquer efeitos colaterais, tal que a mudança nuncaocorreu. Cada memória da XML 306 pode utilizar sua memóriade anulação para desfazer as mudanças que ela fez. Alterna-tivamente, a memória de anulação global 310 pode ser utili-zada para desfazer as mudanças feitas através das memóriasde dados. Imagine que existem três consumidores de dados queestão interessados no que está acontecendo nas propriedadesdo documento, então cada um desses consumidores de dados seinscreveu para receber um evento relacionado com uma mudançadas propriedades. Quando uma mudança é feita, a memória dedados determina cada consumidor de dados que se inscreveu einforma cada um deles da mudança em uma ordem predetermina-da. Cada consumidor de dados, por sua vez, pode executar al-guma ação em resposta à mudança. Se a mudança, ou qualqueruma das mudanças feitas pelos consumidores de dados inscri-tos como um resultado da mudança, não é aceita por qualquerum dos consumidores de dados, todas as mudanças relacionadascom a mudança inicial são desfeitas.
A camada de interface de programação da aplicaçãodo agente externo 316 provê acesso à memória de dados 302pelos consumidores de dados externos 318 e permite que cli-entes de terceiros interajam com a memória de dados 302 jus-to como os consumidores de dados internos que são associadoscom a aplicação interagem com a memória de dados. Cada umadas memórias de dados da XML 306 dentro da memória de dados302 é provida com um ID único para finalidades de identifi-cação. Isso ajuda na localização das memórias de dados daXML 306.
Em qualquer ponto no tempo, um consumidor de dadospode adicionar um esquema que é usado para validar os dadosdentro de uma memória de dados. Quando um esquema é adicio-nado e um consumidor de dados tenta mudar qualquer um dosdados, a memória de dados determina se a mudança faz sentidocom o esquema provido. Depois que um esquema é anexado, oagente se torna um objeto de validação.
Esquemas da XML definidos sob encomenda podem serusados para prover marcação semântica ao redor de conteúdosdentro de um documento, tais como um documento de processa-mento de texto, um documento de planilha e semelhantes. Essafuncionalidade poderosa permite que os desenvolvedores criemsoluções que alavancam essa incorporação da XML sob encomen-da para funcionar diretamente contra a estrutura e o conteú-do de seus dados ao invés de requerer que a sua solução lidecom as complexidades do formato de apresentação da aplicaçãosubjacente.
Por exemplo, se o usuário fosse criar uma páginade cobertura para uma nota de pesquisa de equidade em umaaplicação que não fosse capaz da XML, então a extração dosdados úteis (por exemplo, o nome da companhia, o símbolo re-gistrador do estoque, a avaliação do estoque) exigiria o usodo modelo do objeto da aplicação que está intimamente ligadoao formato de apresentação do documento. Isso necessariamen-te significaria que a lógica da solução resultante estavatambém ligada ao formato de apresentação do documento e su-jeita à falha se essa apresentação fosse para mudar. Por e-xemplo, se o código espera que o símbolo registrador estejana coluna 3, linha 2 da primeira tabela, a adição de uma no-va linha/coluna romperia essa lógica. Com aplicações habili-tadas em XML, entretanto, esse código pode agora ser associ-ado com a estrutura dos próprios dados do consumidor, remo-vendo a necessidade da lógica ser ligada à apresentação. Es-sa mesma lógica poderia pesquisar os conteúdos do nó da XML<stockSymbol>, e encontrá-lo sempre que ele existisse no do-cumento para editá-lo, mesmo se sua apresentação contextualtivesse mudado drasticamente.
Um esquema da XML freqüentemente envolve váriostipos de dados, incluindo: metadados (por exemplo, dados doautor para armazenamento/processamento), dados de corpo (porexemplo, a companhia sendo relatada) e dados de tabela (porexemplo, histórias de preço de estoque). Esses tipos de da-dos, entretanto, não são mutuamente exclusivos. Na realida-de, eles são de forma geral regiões vastamente sobrepostasdentro do mesmo documento da XML. Idealmente, embora essesdados sejam todos expressos por um único esquema da XML, es-ses vários ^tipos' de dados poderiam ser editados cada umetc. em ambientes especificamente adequados para a expressãoótima desses dados. Por exemplo, um formulário poderia apa-recer para permitir que o usuário facilmente editasse os me-tadados para o documento enquanto que o corpo do documentopode ser editado via uma aplicação de processamento de tex-to. Isso ocorre em tempo real, tal que o usuário poderiapreencher partes do documento e formulário simultaneamente.
As memórias de dados podem também receber mais doque um elemento de cada vez. Prover os dados (XML) como umfluxo particular pode ajudar a satisfazer o esquema em algu-mas situações. Por exemplo, suponha que um esquema anexo dizque se os dados do estoque existem, deve ter pelo menos duascompanhias. Se os dados de estoque fossem adicionados um porum, isso não seria válido.
De acordo com uma modalidade, uma única passagem éusada para validar os dados. Ao invés de fazer duas passa-gens que pode resultar em uma mudança sendo feita na memóriade dados, a validação é executada antes que os dados sejamsubmetidos à memória de dados. Isso ajuda a impedir que umconsumidor de dados introduza erros na memória de dados.
Como discutido aqui, os dados da XML que são asso-ciados com um documento podem agora ser armazenados separa-damente de qualquer documento de aplicação especifico em umamemória de dados da XML central 302. Múltiplos ambientes po-dem ser criados para a apresentação/edição de um pedaço dosdados da XML. As expressões desses dados são automaticamentesincronizadas através de suas conexões nos mesmos dados namemória de dados da XML. Como tal, múltiplas aplicações po-dem simultaneamente exibir os mesmos dados da XML subjacen-tes. Isso significa que o usuário é concedido com a capaci-dade de editar os mesmos dados na aplicação que é melhorferramenta para a tarefa'. Por exemplo, um formulário paraeditar a informação dos metadados, uma superfície do docu-mento de processamento de texto para editar as seções deformulário livre dos dados, etc. Isso também significa que ousuário pode editar os dados em múltiplas aplicações comodesejado. Se a mesma informação aparece em múltiplas aplica-ções, o usuário pode editar esses dados em qualquer uma de-las como desejado com base no seu contexto de edição atual.Embora cada aplicação agora tenha acesso simultâ-neo aos dados inteiros da XML que são associados com o docu-mento, cada aplicação pode individualmente fazer a escolhade se exibir e editar qualquer parte desses dados. Isso sig-nifica que cada aplicação precisa somente exibir as partesdos dados que são relevantes dentro desse contexto. Por e-xemplo, todos os dados da XML poderiam ser exibidos no docu-mento, mas uma outra aplicação poderia somente estar inte-ressada nos valores de um nó da XML dentro dos dados e, por-tanto, precisa somente exibir essa parte dos dados sem sepreocupar sobre o ^transporte' do resto da estrutura da XMLpara garantir o contexto.
O usuário pode editar os dados em qualquer aplica-ção exibindo a mesma informação da XML e imediatamente teresses dados atualizados (junto com qualquer lógica de negó-cios aplicável) em todas as localizações que estão se refe-rindo a essa parte dos dados. Essa capacidade de recebermensagens em tempo real para cada mudança da XML é útil, jáque ela permite a criação de ambientes de edição que refle-tem a natureza de sobreposição das várias exigências de edi-ção dentro de um único documento da XML.
As aplicações podem também compartilhar informaçãode erro. Uma coleção definida pelo usuário de erros de con-teúdo pode ser armazenada em cada memória de dados. Por e-xemplo, a lógica do negócio pode ditar que um nó <startDate>deve ter um valor antes do nó <endDate>. A fim de permitirque múltiplos consumidores de dados compartilhem coletiva-mente os seus erros, uma memória de erro é incluída dentrode cada uma das memórias da XML que armazena listas de nósna XML + um erro (consistindo de texto de erro e um nome).
Assim como as mudanças da XML, um cliente pode criar um erroe essa mudança de erro é difundida para cada cliente suces-sivamente. Como tal, múltiplas aplicações podem contar comuma única implementação para a lógica de validação ser com-partilhada contra todas as representações desses dados. Emoutras palavras, a mesma lógica não precisa ser replicada emcada aplicação que está exibindo os dados da XML.
Uma memória de anulação pode ser uma memória deanulação global 310 e/ou as memórias de anulação podem serincluídas com cada memória da XML. Solicitações de mudançade cada consumidor de dados podem ser concatenadas em umaúnica pilha de anulação, tal coma memória de anulação 310,que combina cada mudança com todas as mudanças relacionadas,de modo que cada uma pode ser desfeita como uma unidade. Is-so permite que todos os clientes solicitem a Aanulação' daúltima mudança inteira, mantendo todo o documento em um es-tado "bom" conhecido.
A sincronização dos dados não é limitada a um gru-po predefinido estabelecido de consumidores de dados. Em ou-tras palavras, novos consumidores de dados podem se inscre-ver para notificação em qualquer momento, em quaisquer dadosda XML e imediatamente ser capazes de editar os mesmos dadoscomo todos os outros clientes. Por exemplo, inicialmente so-mente os consumidores de dados externos 1 e 2 podem estarcompartilhando os dados. Em um momento posterior, um ou maisconsumidores de dados podem se inscrever com a memória dedados e começar a compartilhar os dados.
Um consumidor de dados age como o 'dono' dos dadosda XML e é responsável por: manter a forma persistente dosdados da XML, prover uma cópia dos dados para consumidoresde dados solicitantes, receber solicitações de mudança paraos dados dos consumidores de dados e enviar notificações demudanças para os consumidores de dados inscritos. De acordocom uma modalidade, a memória de dados age como o dono e ma-nipula toda a atualização e notificação para cada um dosconsumidores de dados. A memória de dados da XML inclui umconjunto de interfaces que estão disponíveis para aplicaçõesdiferentes, tais como uma aplicação de processamento de tex-to, uma aplicação de planilha, um programa de apresentaçãode slide e outros consumidores de dados. As interfaces sãodirecionadas em: obter pedaços desejados dos dados da XML,notificar a memória de dados das mudanças que um consumidorde dados gostaria de fazer na memória de dados e inscreverpara receber notificações da memória de dados da XML sobremudanças feitas nesse item da memória por outros consumido-res de dados.
Sempre que a memória de dados notifica um consumi-dor de dados sobre uma mudança, o consumidor de dados pode:não fazer nada e aceitar a mudança, solicitar uma ou maismudanças de efeito colateral e rejeitar a mudança. As mudan-ças de efeito colateral geralmente envolvem a adição de ló-gica que inicia mudanças em resposta a outras mudanças quesão feitas na memória de dados. Por exemplo, um consumidorde dados que usa uma nota de pesquisa de equidade pode dese-jar receber notificação quando o nó <stockSymbol/> dentro damemória de dados é alterado, e em resposta à mudança submeteos dados a um serviço de rede e atualiza a subárvore <stock-Data/> que está dentro de uma memória de dados.
Mudanças de efeito colateral são agrupadas com amudança original com as finalidades de desfazer/cancelar eelas são manipuladas diferentemente pela memória de dados.Elas são manipuladas diferentemente desde que as mudanças deefeito colateral são solicitadas em resposta a uma mudançaque não foi ainda ela própria submetida à memória de dadosda XML.
Se um consumidor de dados (314 e/ou 318) solicitauma mudança na memória de dados da XML 302, essa mudança po-de ser rejeitada por razões diferentes, incluindo: a mudançaé inválida (por exemplo, XML que não é bem formada) , a mu-dança foi rejeitada por alguma lógica dentro de um consumi-dor de dados e semelhantes.
Alguns consumidores de dados podem manter sua pró-pria versão dos dados em uma memória 320 que é mantida sepa-radamente da memória de dados da XML 302. Manter múltiplascópias desses dados da XML pode levar a problemas, incluindoque as cópias podem sair de sincronismo (por exemplo, o 'ti-tulo' no painel de -propriedade não iguala o 'titulo exibidoem linha no documento). Para tratar esse problema, uma únicacópia "mestre" de cada pedaço dos dados da XML é mantida du-rante uma sessão. Essa cópia mestre é então usada por múlti-plos consumidores de dados durante uma sessão. Quando a ses-são termina, as outras cópias dos dados podem ser atualiza-das para refletir o estado atual da memória de dados da XML.
De acordo com uma modalidade, a memória de dados 302 é con-figurada para intercalar os mesmos itens das memórias de da-dos diferentes e depois salvar cada cópia de volta em um mo-mento posterior. Quando uma solicitação para um item de da-dos comum é recebida, a memória de dados 302 encobre essesdois itens da memória de dados em um único nó principal,cria um XSD intercalado que importa os esquemas que são as-sociados com cada item de dados e entrega a interface para'esse item de memória para o consumidor de dados.
A memória de dados 302 é configurada para detectarrecursão excessiva e quando detectada, causar uma falha au-tomática se a memória de dados detecta um laço de efeitoscolaterais em resposta a uma dada mudança. De acordo com umamodalidade, um laço que excede 16 niveis em profundidade ou1000 efeitos colaterais totais é considerado excessivo. Amemória de dados pode também ser configurada para rejeitarautomaticamente qualquer mudança e seus efeitos colaterais,quando é verificado que a mudança é estruturalmente inválidapela memória de dados da XML. Isso significa que se uma mu-dança estrutural é solicitada por um usuário e verificadacomo sendo estruturalmente inválida, então a memória de da-dos se restaura para o último estado bom conhecido e produzum erro que pode ser passado para os outros consumidores dedados.
Cada consumidor de dados (interno 314/externo 318)pode também rejeitar mudanças inválidas. Por exemplo, umconsumidor de dados pode incluir sua própria camada de vali-dação. Se uma mudança é solicitada dentro de um consumidorde dados que é inválido, essa mudança pode ser rejeitada porsua camada de validação existente e revertida de sua própriamemória de dados sem notificar a memória de dados da XML. Seessa mudança se originou da memória de dados da XML, então oconsumidor de dados retorna uma rejeição para o evento ati-rado pela memória de dados e a memória de dados inicia umcancelamento para seu 'último estado bom conhecido'.
No caso de mudanças solicitadas por outros consu-midores de dados para a memória de dados, a memória de dadostenta validar essas mudanças se ela tem uma coleção de es-quema da XML 305 associada com os dados atuais. Se esquemasestão presentes, então a memória de dados rejeita quaisquerinválidos estruturalmente.
A fim de suportar a ligação dos dados, o consumi-dor interno dos dados de aplicação, tal como o consumidorinterno de dados 1 314, manipula a interação entre as açõesna memória de dados da XML e na superfície do documento 315.
Quando um usuário edita um campo ligado de dados, essa mu-dança afeta o conteúdo do documento (assim adicionando umregistro na pilha de anulação da. aplicação), mas também afe-ta o conteúdo da XML da memória de dados (assim adicionandoum registro na pilha de anulação da memória de dados). A fimde ajudar a garantir que a superfície e os dados permaneçamem sincronismo em todos os momentos, a pilha de anulação daaplicação (com a qual o usuário interage) é capaz de Agru-par' mudanças de superfície em um registro de anulação, jun-to com uma referência de anulação da memória de dados da XMLcorrespondente, garantindo que a anulação do item superiorem cada pilha mantenha a aplicação e a memória de dados emum estado idêntico.
Alternativas diferentes estão disponíveis para Ii-dar com a anulação iniciada pelo usuário, incluindo: manterpilhas de anulação separadas para cada consumidor de dadosincluindo a aplicação hospedeira, compartilhar uma pilha deanulação global e limitar a anulação para um consumidor dedados com base no foco atual.
Quando uma pilha de anulação global é usada, oconsumidor de dados passa através das solicitações de anula-ção diretamente para a aplicação hospedeira, que então pegao último item fora da sua pilha de anulação (anulação seriaa mesma a despeito de onde o foco estava no quadro da apli-cação). Isso implica que todas as mudanças na memória de da-dos da XML são afuniladas sobre a pilha de anulação do hos-pedeiro com algum registro genérico (por exemplo, "desfazerpropriedade de edição"). Por exemplo, se o usuário digita"Microsoft Corp." no campo <company/> em uma aplicação deprocessamento de texto, então essa operação faz com que apilha de anulação da memória de dados inclua essa ação. Aseguir, se o usuário fosse pressionar desfazer na aplicaçãode processamento de texto para remover esse texto, a aplica-ção de processamento de texto desfaz a última operação nasua pilha de anulação (e notifica a memória de dados paradesfazer a última operação na sua pilha), o que resultariano outro cliente fazendo essa ação. Inversamente, se o usuá-rio então tivesse digitado algum texto não ligado na aplica-ção de processamento de texto e pressionado desfazer no pai-nel, o outro cliente abandonaria essa solicitação para ohospedeiro, que removeria a última ação da sua pilha de anu-lação (nesse caso, a edição para a superfície do documento):
Quando um consumidor de dados rejeita uma mudançaenviada pela memória de dados da XML, os dados da XML podemterminar em um estado lógico de negócios *ruim'. Por exem-plo, assuma que exista lógica de negócios que executa veri-ficações em um relatório de despesa. A lógica inclui verifi-car se um item da linha está acima de $100; e se afirmativo,o consumidor de dados rejeita a atualização de <lineItemA-mount/>. Se não, o consumidor de dados atualiza o total coma nova quantidade do item da linha. Se o total está acima de$500, então o consumidor de dados rejeita a atualização de<reportTotal/>. Agora usando a lógica acima,' assuma que umusuário insere uma linha de fatura de $50 que move o totalacima de $500, a primeira verificação dá lógica é bem suce-dida, mas a segunda verificação da lógica rejeita a atuali-zação do total. Isso significa que se apenas a última mudan-ça foi desfeita, então existiria uma fatura onde a soma dositens da linha não iguala o total. Como um resultado, de a-cordo com uma modalidade, todos os efeitos colaterais da mu-dança original são desfeitos.
A memória de dados 302 age como um mecanismo detransação que permite o agrupamento dessas transações com asfinalidades de anulação. De acordo com a modalidade, trêsalternativas diferentes para manipular as Rejeições' sãousadas. Primeiro, a memória de dados pode emitir mudanças deanulação para retornar para um estado válido (também chamado'reversão') . Segundo, anulação e cancelamento não têm. pari-dade e terceiro, nenhum cliente é capaz de cancelar.
A primeira alternativa é ter a memória de dados daXML emitindo mudanças de anulação para retornar para um es-tado válido. Isso essencialmente desfaz todas as operaçõesde volta para a mudança que disparou o erro da lógica do ne-gócio. Nessa alternativa, a memória de dados da XML poderiaemitir solicitações de mudança com um indicador de ^anula-ção' ajustado para VERDADEIRO e ter o consumidor de dadosexecutando essas mudanças por si próprio; e a memória de da-dos da XML poderia emitir solicitações de mudança com esseindicador de Anulação' ajustado. O seguinte é um exemplo.
O usuário edita o nó A em um cliente 1 {(Cliente 1 faz a lógica interna)
Informar memória de dados da XML {Armazenar atualizações
Informar cliente 2 sobre A {Mudar B {
Enfileirar, retornar OK
}
}
Informar cliente 1 sobre B {Lógica interna
Mudar C {
Lógica interna
Informar memória de dados da XML {
Enfileirar, retornar OK}
OAC}
}
Informar cliente 2 sobre C {
Mudar D {
Enfileirar, retornar OK}
}
Informar cliente 1 sobre D {
Lógica interna**REJEIÇÃO**
Reverter mudança DOM para DRetornar FALHA}
Informar cliente 2 para desfazer DInformar cliente 2 para desfazer C
Informar cliente 1 para desfazer C - *desfazer en-quanto saindo depois de uma rejeição"
Informar cliente 1 para desfazer B - *desfazer en-
quanto saindo depois de uma rejeição"Informar cliente 2 para desfazer BInformar cliente 2 para desfazer A
Retornar FALHA para solicitação de mudança inicial
}
}
Essencialmente, o consumidor de dados aceita asduas chamadas da memória de dados da XML (solicitações paradesfazer mudanças de B e C enquanto saindo da mudança prin-cipal A) ou senão os dois gerentes do objeto do documento daXML saem de sincronismo.
Uma outra alternativa é manter a disparidade atualentre cancelar e desfazer, à medida que ter o consumidor dedados 'cancelando' a mudança atual pode deixar a solução emum estado lógico de negócios inválido. Nesse caso, a memóriade dados da XML reverte *somente* a mudança que foi rejeita-da/cancelada, desfazendo essa mudança, mas então apenas pa-raria - não desfazendo quaisquer mudanças adicionais que es-tão na pilha de anulação da memória.
Consumidores de dados podem também manter suaspróprias pilhas de anulação únicas. As aplicações, entretan-to, devem ser 'inteligentes' sobre não adicionar ações adi-cionais nas suas pilhas de anulação quando a ação mais supe-rior na sua pilha iguala a operação solicitada do outro ladodo limite de sincronismo ativo. Por exemplo, se o usuáriodigita "Microsoft Corp" no campo <company/> na aplicação deprocessamento de texto, então essa operação será 'sincroni-zada ativa' e resultará em uma ação de anulação aparecendona pilha de anulação de cada consumidor de dados registrado.
A seguir, se o usuário fosse pressionar desfazer na aplica-ção de processamento de texto para remover o texto que foirecentemente inserido, a aplicação de processamento de textodesfária a última operação na sua pilha de anulação (e in-formaria a memória de dados para desfazer a última operaçãona sua pilha), mas nesse momento o consumidor de dados veriaessa solicitação e adotaria a última ação da sua pilha deanulação (incluindo quaisquer efeitos colaterais) porque apilha de anulação da memória deve necessariamente igualar amemória de dados. Se o usuário tivesse então pressionadodesfazer no consumidor de dados, o consumidor de dados remo-veria a última ação da sua pilha de anulação e da aplicaçãode processamento de texto, ao obter a ação de anulação damemória de dados, perceberia que ela iguala a última ação nasua pilha de anulação e removeria essa também. Inversamente,se o usuário tivesse então digitado algum texto não ligadona aplicação de processamento de texto (adicionando regis-tros de anulação na aplicação de processamento de texto) an-tes que eles pressionassem desfazer no consumidor de dados,o cliente removeria a última ação da sua pilha de anulação ea memória faria o mesmo, entretanto, a aplicação de proces-samento de texto adiciona uma outra ação (porque a últimacoisa na pilha de anulação não é a última mudança da XML).
Entretanto, a aplicação de processamento de texto armazena-ria essa mudança junto com o fato que a memória precisa exe-cutar um refazer para retornar para o seu estado original.
Uma outra alternativa envolve tornar os consumido-res de dados cientes um do outro. O controle de anulação po-deria ser passado entre os consumidores de dados. Por exem-plo, se o usuário edita o campo <company/> em uma aplicação,que é então difundida para um outro consumidor de dados, en-tão a pilha de anulação se pareceria com:<table>table see original document page 41</column></row><table>
Nesse caso, o registro de anulação na memória de
dados da XML não hospedaria a transação. Preferivelmente,ele hospedaria um marcador que permitiria que ele passasse ocontrole para o cliente para completar a ação de anulação.
Assumindo que o usuário então fosse para a aplicação de pro-cessamento de texto e executasse uma anulação: a tela da a-plicação atualizaria de volta e a seguir passaria o controle,para a memória de dados. A memória de dados da XML tentariadesfazer a última transação, porém veria o marcador e passa-ria o controle para o consumidor de dados para essa anula-ção. O consumidor de dados executaria a solicitação de anu-lação para a memória, que então a difundiria como uma anula-ção para todos os outros clientes. Isso significa que se ousuário executasse uma ação no cliente, seguido por uma açãoem um campo diferente na aplicação de processamento de tex-to, as pilhas de anulação se pareceriam com:
<table>table see original document page 41</column></row><table>Nesse caso, se a próxima ação do usuário fosse umaanulação na aplicação hospedeira, então o hospedeiro (e amemória de dados) faria a ação de anulação, que o consumidorde dados executaria no seu próprio DOM e se desfaria do mar-cador de anulação. Se a próxima ação do usuário fosse umaanulação no consumidor de dados, então o consumidor de dadosdaria o controle para essa ação para o hospedeiro (porque aação superior é apenas um 'marcador' ) e a mesma anulação dohospedeiro seria executada.
A figura 4 ilustra um exemplo da sincronização a-tiva. Em um dos casos mais simples, λsincronização ativa' serefere à capacidade das edições do usuário dos dados da XMLapre,sentados em uma localização (por exemplo, uma aplicaçãode processador de texto) serem refletidas na UI de uma outralocalização/aplicação em tempo real. Enquanto o documentoestá sendo editado, mudanças que afetam os dados da XML sãopassadas para os outros consumidores de dados registradosque estão interessados nos dados, tal como ambos a aplicaçãode processamento de texto e o painel de propriedade. Issoajuda a garantir que o conteúdo dos dados da XML de cada a-plicação permaneça o mesmo.
Com referência à janela 400, um documento 415 éaberto para edição e um painel de propriedade 420 está mos-trando. O titulo é mostrado em ambos o painel de propriedade405, bem como no documento 410. Suponha que o titulo 405 najanela 400 é alterado de Data Binding - Live Sync Integrati-on para Foo Bar Biz, como ilustrado no titulo 435 e titulo440 dentro da janela 425. Tão logo o titulo seja atualizadodentro do titulo do painel de propriedade 435, a mudança éenviada para a aplicação de processamento de texto tal queela pode aceitar ou rejeitar a mudança. Nesse exemplo, a a-plicação aceitou a mudança para o titulo que foi feita usan-do a aplicação do painel de propriedade e o titulo 440 den-tro do documento é atualizado.
As figuras 5-8 ilustram processos para sincroniza-ção em tempo real dos dados da XML entre consumidores de da-dos.
Quando lendo a discussão das rotinas apresentadasaqui, deve ser verificado que as operações lógicas de váriasmodalidades são implementadas (1) como uma seqüência de a-ções implementadas no computador ou módulos de programa fun-cionando em um sistema de computação e/ou (2) como circuitoslógicos de máquina interligados ou módulos de circuito den-tro do sistema de computação. A implementação é uma questãode escolha dependente das exigências de desempenho do siste-ma de computação implementando a invenção. Dessa maneira, asoperações lógicas ilustradas e compondo as modalidades doaqui descrito são citadas variavelmente como operações, dis-positivos estruturais, ações ou módulos. Essas operações,dispositivos estruturais, ações e módulos podem ser imple-mentados em software, em firmware, em lógica digital de usoespecial e qualquer combinação desses.
A figura 5 ilustra a interação entre dois clientese uma memória de dados da XML.
A memória de dados 520 recebe uma edição do usuá-rio para o nó A feita usando a aplicação 510. O consumidorde dados 1 530 recebe a notificação da mudança para o nó Ada memória de dados 520. Como um resultado da mudança para onó A, o consumidor de dados 1 solicita uma mudança de efeitocolateral para o nó Β. A memória de dados 520 enfileira amudança de efeito colateral B para execução posterior. De-pois que todas as mudanças de efeito colateral foram enfi-leiradas do consumidor de dados 1, a memória de dados 520notifica o consumidor de dados 2 540 da mudança para o nó A.O consumidor de dados 2 solicita uma mudança de efeito cola-teral para o nó C. Em resposta, a memória de dados enfileiraa mudança do nó C para execução posterior. Nesse momento, oprocessamento relacionado com o nó A concluiu, mas ainda e-xistem mudanças de efeito colateral pendentes para o nó B epara o nó C. Como o consumidor de dados 1 solicitou a mudan-ça para o nó B, a memória de dados envia a notificação damudança proposta de B para o consumidor de dados 2. O consu-midor de dados 2 não faz quaisquer mudanças em resposta eaceita a mudança. Similarmente, o consumidor de dados 2 so-licitou a mudança para o nó C, então a memória de dados en-via a notificação da mudança do nó C para o consumidor dedados 1. O consumidor de dados 1 aceita a mudança. Nesse e-xemplo, todas as mudanças foram aceitas por todos os consu-midores de dados interessados. Portanto, a memória de dadossubmete as mudanças para a memória de dados. Em resumo, amemória de dados permite que cada consumidor de dados execu-te quaisquer mudanças em resposta a uma mudança, a memóriade dados executa e transmite mensagem dessas mudanças na or-dem que elas são recebidas, dessa maneira permitindo que e-Ias sejam transmitidas serialmente.
A figura 6 mostra a interação entre dois consumi-dores de dados externos e uma mudança na memória de dados da XML.
No caso onde a mudança original foi gerada por umcliente interno, tal como a aplicação que criou o documentomostrado na figura 5, o consumidor de dados muda ligeiramen-te. Esse exemplo ilustra duas regras básicas de mudanças demúltiplos clientes. A primeira regra é que as mudanças denível superior ocorrem primeiro. A segunda regra envolve oenfileiramento das mudanças de efeito colateral.
A primeira regra se refere ao fato que os efeitoscolaterais de uma mudança acontecem antes que qualquer novamudança possa ocorrer. Considere o exemplo seguinte, onde oconsumidor de dados 1 executa uma função para fazer duas mu-danças. A primeira mudança é feita no nó A e a segunda mu-dança no nó B.
Quando o consumidor de dados 1 630 solicita umamudança no nó A, a notificação é enviada para o consumidorde dados 2 640 depois que a memória de dados da XML 620 re-cebe a solicitação para mudar o nó A. Em resposta, o consu-midor de dados 2 solicita uma mudança de efeito colateralpara o nó C que é enfileirada pela memória de dados para e-xecução posterior. O consumidor de dados 1 então solicitauma mudança para o nó B que é enfileirada desde que a mudan-ça para o nó A ainda não foi concluída. O consumidor de da-dos 2 aceita a mudança para o nó A, e em resposta, a memóriade dados executa a mudança de efeito colateral enfileiradapara C. O consumidor de dados 1 recebe a notificação da mu-dança para o nó C e pode responder à mudança. Nesse exemplo,o consumidor de dados 1 aceita a mudança. A memória de dadosentão executou a mudança de efeito colateral enfileirada pa-ra B que foi solicitada pelo consumidor de dados 1. 0 consu-midor de dados 2 recebe a notificação da mudança B da memó-ria de dados para a qual ele pode responder. 0 consumidor dedados 2 aceita a mudança e as mudanças são submetidas para amemória de dados.
Nesse caso, o consumidor de dados 2 responde pri-meiro para a mudança em A, de modo que as duas linhas se-guintes do código disparam duas mudanças únicas:
doc.CustomXMLParts(1).SelectSingleNodeC).AddNode("foo","bar")
doc.CustomXMLParts(1).SelectSingleNodeO.AddNode("foo2","bar")
Uma segunda regra se refere ao fato que os efeitoscolaterais de uma mudança são enfileirados quando eles sãosolicitados e, portanto, múltiplas mudanças podem ser enfi-leiradas antes que os efeitos colaterais da primeira mudançaocorram.
A figura 7 mostra um processo envolvendo múltiplasmudanças de efeito colateral. O exemplo seguinte ilustra asmudanças seguintes. Suponha que o consumidor de dados 1 730,quando ele recebe uma notificação que o nó A é alterado, de-seja executar mudanças de efeito colateral nos nós B e C. 0consumidor de dados 2 740, em resposta à notificação da mu-dança para o nó B, deseja executar mudanças de efeito cola-teral nos nós D, EeF.
Com referência à figura 7, pode ser observado queo consumidor de dados 1 causa todas as suas mudanças de e-feito colateral como um resultado da notificação da mudançapara o nó A antes que os efeitos colaterais relacionados coma mudança do nó B sejam executados. Portanto, as mudanças nonó C ocorrem antes das mudanças nos nós D, EeF.
A figura 8 ilustra um processo mostrando que osefeitos colaterais do chamador são executados por último.
Uma pessoa pode ainda observar que nesse caso, os efeitoscolaterais gerados pelo próprio consumidor de dados 1 acon-tecerão depois que todos os outros clientes tenham tido umachance de ver a mudança e gerar seus próprios efeitos cola-terais. Isso é um efeito colateral necessário do fato que amemória de dados da XML informa cada cliente de uma mudança(para garantir que cada cliente tenha uma chance de acei-tar/rejeitar essa mudança) antes que ela possa retornar acondição de sucesso para o chamador e permitir que o chama-dor proveja o evento com o qual fazer os efeitos colaterais.
É previsível que o consumidor de dados que solicitou uma mu-dança deva ser o último, de modo a saber se a mudança foiaceita ou rejeitada por todos os clientes da memória de da-dos da XML. Também, isso ajuda a garantir que se as duas mu-danças são conflitantes e não estruturais, a mudança do cha-mador obtém o que é geralmente o resultado desejado.
O relatório descritivo acima, exemplos e dadosprovêem uma descrição completa da fabricação e uso da compo-sição da invenção.