Processamento de Documentos Ativos XML
Daniela Marques Pereira e Marcelo de Mattos Mayworm
[email protected], [email protected]
Resumo. O framework de integração de dados peer-to-peer AXML surgiu com
o desafio de permitir o desenvolvimento de aplicações baseados em dados
distribuídos e dinâmicos fornecidos através de documentos ativos XML,
documentos estes que possuem chamadas a serviços webs que fazem com que
o conteúdo destes documentos seja então variável e dinâmico. Este framework
pode ser útil para uma série de aplicações importantes e por isso este relatório
tem por objetivo realizar um estudo que visa fazer um estudo do mesmo,
procurando levantar suas características, funcionalidades, vantagens e
desvantagens. Além deste levantamento, serão descritos os testes realizados
com o framework e os resultados obtidos com os mesmo. Os testes tinham por
objetivo avaliar as características do framework descritas neste trabalho e
analisar seu desempenho e funcionalidade.
Introdução
Os arquivos XML se tornaram o formato padrão para troca de informações na
Internet, devido a seu formato simples e devido ao fato de trazerem consigo dados e
metadados. Com o surgimento dos WebServices ou Serviços Web, estes arquivos se
tornaram ainda mais importantes, uma vez que estes serviços utilizam este formato
como padrão para troca de informações.
Um Web Service, nada mais é do que um serviço publicado na Internet que permite
que duas aplicações troquem informações. Estes serviços são fortemente baseados em
XML e no protocolo HTTP, podendo ser utilizados de forma totalmente independente
de plataforma e linguagem de programação.
Estes serviços trouxeram para o ambiente da Internet novas perspectivas de
interação, além da já conhecida homem-máquina, possível através da navegação
através de browsers pelas páginas disponíveis em servidores web. Com os serviços
Web, foi possível automatizar as interações existentes na Web, favorecendo aplicações
de e-comerce, B2B entre outras. Eles na verdade são uma tentativa de construir uma
plataforma computacional distribuída para a Web.
O framework Active XML [1], procuroa fazer uso destas duas tecnologias de modo
a tirar proveito de ambas, criando o que eles chamaram de documentos ativos XML.
Documentos Ativos XML ou simplesmente documentos AXML, são documentos
XMLs convencionais, que podem ou não seguir um esquema, mas que possuem dados
ativos, isto é, dados que para serem materializados no documento XML necessitam
que serviços web sejam executados, retornando como resultado de execução os dados
a serem preenchidos. O conteúdo pode ser dinâmico, pois estas chamadas são
2
Daniela Marques Pereira e Marcelo de Mattos Mayworm
controladas e os resultados destas chamadas (conteúdo do arquivo) atualizados
conforme a freqüência determinada na chamada do serviço.
Esta funcionalidade pode ser muito importante para uma série de aplicações devido
ao seu conteúdo dinâmico. Um exemplo simples seria de um jornal que dentre algumas
informações contidas em um arquivo XML, poderia ter também a previsão do tempo
para a cidade do jornal, obtida através da chamada a um serviço Web específico que
fornece esta informação. Esta informação pode ser atualizada constantemente, e o
jornal pode fornecer sempre informações sobre a temperatura atualizadas.
Além da realização de chamadas a serviços web o framework AXML, também
permite disponibilizar serviços através de consultas realizadas sobre o repositório
XML existente, cujos arquivos também podem conter chamadas a serviços web.
O framework AXML é dito uma aplicação P2P [1], cujo objetivo é integrar
informações fornecidas por várias fontes autônomas e heterogêneas e também
executar consultas informalmente sobre estas informações. Por assumir esta
arquitetura P2P, não existe uma fonte central e qualquer peer pode assumir esta função
de integração. [2] No entanto existem algumas controvérsias com relação as
definições de P2P existentes e que serão tratadas neste relatório.
Através deste framework, não só tem-se uma distribuição das informações, como
também uma distribuição do processamento, uma vez, que chamadas a serviços locais
demanda processamento local e chamadas a serviços remotos, demandam
processamento da máquina que provê o serviço.
Como em todo ambiente P2P, as chamadas não são garantidas, pois basta o peer
que contem o serviço requisitado falhar que os dados não serão integrados. Este é um
problema presente em todo o ambiente P2P e que na maioria dos casos não garante a
resposta certa, mas a melhor resposta possível.
Neste relatório, procurar-se-á descrever a arquitetura do framework em questão,
seu funcionamento e configuração, e procurar-se-á realizar testes que explorem suas
funcionalidades e verifiquem seu comportamento e desempenho.
Arquitetura AXML
O framework Active XML ou AXML é considerado uma arquitetura peer-to-peer
de integração de dados, ou que pelo menos facilita a integração de dados, onde cada
site prove dados XML e/ou WebServices e pode também chamar outros peers que
contenham arquivos XML e que definem serviços AXML. Além da integração de
dados, o framework AXML visa facilitar a publicação de aplicações baseadas em
dados compartilhados e distribuídos.[2]
Através deste framework é possível configurar peers, chamados de peers AXML
que podem tanto possuir documentos ativos XML com chamadas a serviços web,
quanto fornecer serviços, baseados em consultas executadas sobre o repositório.
Documentos AXML
Os documentos AXML, nada mais são do que arquivos XML válidos (e por isso
podem fazer uso de todas as ferramentas XML existentes) onde alguns elementos (os
Processamento de Documentos Ativos XML
3
rotulados como sc) são interpretados como chamada de serviços. A presença destes
elementos o faz um documento intencional, uma vez que alguns dos dados são
fornecidos de forma explícita, enquanto para outros dados é dada uma definição (o
que significa pegar os dados somente quando forem necessários). Estes documentos
podem ser vistos como documentos dinâmicos, pois um mesmo serviço chamado duas
vezes pode trazer respostas diferentes e assim o mesmo documento em momentos
diferentes poderá conter informações diferentes.
Exemplo de uma chamada de serviço:
<axml:sc methodName="GetACM" valid="0" mode="replace"
serviceNameSpace="GetACM"
serviceURL="http://localhost:8080/ActiveXMLWeb/servlet/AxisServlet">
<axml:params/>
</axml:sc>
No exemplo acima, foi realizada uma chamada a um serviço chamado GetACM
publicado no mesmo peer de onde a chamada foi executada. Após a chamada o
conteúdo foi acrescentado ao documento:
<axml:sc methodName="GetACM" mode="replace" serviceNameSpace="GetACM"
serviceURL="http://localhost:8080/ActiveXMLWeb/servlet/AxisServlet"
valid="0">
<axml:params/>
</axml:sc>
<código axml:origin="8B67DE13-7F00-0001-018F-F4F671EE685E"
endPage="119"/>
Tanto em chamadas a serviços internos quanto em chamadas a serviços
internosexternos, o conteúdo resultante da chamada de serviço é adicionado ao
documento AXML.
Atributos de Chamadas de Serviços
O elemento responsável pelas chamadas aos serviços web, possui uma série de
parâmetros que auxiliam no modo e com que freqüência estas chamadas serão
executadas. [3]
Os parâmetros possíveis são:
Atributo
Tipo
Valor Default
Status
serviceURL
Qualquer URI
requerido
serviceNameSpace
Qualquer URI
requerido
methodName
Nome do Método
requerido
signature
anyURI
opcional
useWSDLDefinition booleano
false
opcional
4
Daniela Marques Pereira e Marcelo de Mattos Mayworm
id
Id
Gerado
name
string
opcional
frequency
string
opcional
callable
boolean
lastCalled
unsignedLong
gerado
followedBy
string
opcional
mode
doNesting
string
boolean
true
merge
false
opcional
opcional
ServiceURL
Especifica a URL do serviço web.
ServiceNameSpace
Este atributo especifica o nome a ser usado no elemento body da mensagem SOAP.
De forma mais simples é o nome URI do método.
MethodName
Define o nome da operação a ser chamada no serviço web.
Signature
Este atributo marca a URL do arquivo WSDL que define o serviço web.
UseWSDLDefinition
Este atributo especifica se o arquivo WSDL definido pela assinatura deve ser usado na
validação de tipos.
Id
Identifica unicamente uma chamada de serviço e não deve ser definida manualmente.
Name
Especifica o nome da chamada de serviço. Não possui nenhum significado e é
opcional.
Frequency
O momento no qual a chamada de um serviço deve ser ativada é controlado por um
atributo especial do elemento <sc>: frequency. A freqüência (frequency) pode ser
definida como um intervalo de tempo ou disparada por uma mudança no conteúdo do
documento. Uma chamada de serviço é tida como ”expired” quando de acordo com o
Processamento de Documentos Ativos XML
5
valor definido em frequency ela tiver que ser chamada novamente. Os valores
possíveis para este parâmetro são:
·
·
·
·
Once – indica que o serviço só será executado uma única vez, quando o
sistema for iniciado;
Lazy - a chamada do serviço só será chamada quando seus resultados
forem úteis para a execução de uma consulta X-OQL ou para a
instanciação de um parâmetro de uma chamada através de uma expressão
XPath.
On Date – Especifica exatamente quando um serviço será executado.
Exemplo: frequency="on 25/12/05 14:36"
Every X – Define de quantos em quantos milisegundos o serviço web será
chamado. Exemplo: frequency= “every 60000”.
Callable
Através deste atributo é possível configurar o serviço para ele não ser ativado por
um peer AXML, mesmo que ele possua uma configuração de freqüência adequada.
LastCalled
Este atributo é usado pelo peer AXML para monitorar a última vez que o serviço foi
chamado de modo a cumprir a freqüência sempre que o peer AXML for iniciado ou
recarregado após alguma modificação.
FollowedBy
Este atributo, permite encadear a execução de vários serviços web dentro de um
mesmo documento (um forma simples de workflow).
mode
Este atributo especifica o que fazer com o resultado obtido pela chamada de serviço
AXML e pode assumir dois valores:
·
·
merge – significa que os resultados serão adicionados logo após o
elemento <sc> e que os resultados anteriores serão mantidos.
replace – significa que os resultados anteriores serão substituídos
pelos resultados obtidos pela nova chamada ao serviço.
doNesting
Usado quando se deseja manter um rastro dos nós de texto inseridos no arquivo
AXML. Assim é possível pedir ao peer que aninhe os nós do tipo texto em um
elemento especial chamado text e o ligue ao AXML.
Exemplo de uma chamada de serviço web com vários parâmetros configurados:
<axml:sc xmlns:axml="http://www-rocq.inria.fr/verso/AXML"
6
Daniela Marques Pereira e Marcelo de Mattos Mayworm
serviceURL="http://api.google.com/search/beta2"
serviceNameSpace="urn:GoogleSearch"
methodName="doGoogleSearch"
signature="http://api.google.com/GoogleSearch.wsdl"
useWSDLDefinition="true"
id="038BD50A-C353-D490-0082-D603FA7A81AC"
name="GoogleSearch"
frequency="lazy"
lastCalled="1082395879693"
followedBy="//axml:sc[@serviceNameSpace='Crawler']"
...>
[snipped
Serviços AXML
O framework AXML permite não só usar serviços web já existentes como também
definir novos serviços sobre os arquivos XML existentes no repositório. A definição
de serviços web AXML se baseia em consultas XML parametrizadas expressas em
XQuery, estendida com updates. A especificação de serviços AXML permite, em
particular, a definição de serviços contínuos e de serviços com entrada e saídas
intencionais.
Peers AXML
Um peer AXML contém um módulo de armazenamento e um catálogo dos serviços
definidos neste peer. Cada peer possui também um modulo avaliador que é
responsável por ativar as chamadas definidas nos documentos AXML. No caso de
chamadas a serviços externos ao peer, estas chamadas são codificadas por um SOAP
Wrapper que as transmite ao provedor do serviço e eventualmente recebe os
resultados como uma mensagem SOAP.
Cada peer XML pode atuar tanto com cliente de serviços publicados em outros
peers ou de serviços web, quanto como servidor provendo serviços definidos através
de consultas sobre o repositório XML existente no mesmo.
Uma questão interessante a ser levantada é com relação a arquitetura deste
framework ser definida como peer-to-peer. Segundo [5], embora a definição exata de
peer-to-peer seja discutível, estes sistemas não possuem infra-estrutura centralizada,
dedicada, mas ao invés dependem da participação voluntária dos pares para contribuir
com recursos com os quais a infra-estrutura é construída. A participação nos sistemas
peer-to-peer é ad-hoc e dinâmica. Sob este aspecto, o framework AXML pode ser dito
peer-to-peer no sentido de que cada peer pode atuar tanto quanto cliente, quanto como
servidor e a formação da rede é aleatória e dinâmica e pode fazer uso dos serviços
publicados em sites distintos. No entanto isso nem sempre é verdade. Um peer pode
fazer chamadas aos serviços publicados em um único peer e se não houver replicação
destes serviços em outros peers e um redirecionamento de acesso caso este peer esteja
fora do ar, o sistema estará se comportando com um sistema cliente-servidor comum,
onde um peer fornece os serviços e outro os utiliza. Se este peer cair, o peer cliente,
ficará sem acesso ao serviço e não terá como atualizar o conteúdo do arquivo XML
que faz as chamadas.
Processamento de Documentos Ativos XML
7
Figura 1 - Arquitetura AXML
Configuração de um Peer AXML
O framework AXML é distribuído como uma aplicação Web, desenvolvida em java,
que deve rodar em um container servlet 2.3/ JSP 1.2 tal como o Tomcat. Assim, para
que uma estação possa ser configurada como um peer AXML, é preciso que ela tenha
instalado o Java Development Kit (versão 4.1 ou superior), não funciona somente com
o Java Runtime Enviroment e um servlet container como o Tomcat e fazer o deploy da
aplicação no container instalado.
Uma vez instalados todos os elementos necessários, é possível acessar a interface
web do framework AXML, através da qual é possível visualizar os documentos
publicados no repositório XML, edita-los, comandar chamadas de serviços presentes
nos documentos, visualizar e editar serviços definidos e executar consultas sobre o
repositório.
8
Daniela Marques Pereira e Marcelo de Mattos Mayworm
Figura 2 – Documentos Publicados
Figura 3 – Edição de Documentos
Processamento de Documentos Ativos XML
Figura 4 – Documento publicado com uma chamada de serviço
Figura 5 – Mesmo documento após a chamada de serviço
9
10
Daniela Marques Pereira e Marcelo de Mattos Mayworm
Figura 6 – Especificação de um serviço
Figura 7 – Execução do serviço definido na figura 6
Processamento de Documentos Ativos XML
11
Figura 8 - Espaço para a execução de consultas
Publicação de documentos AXML
Para publicar um arquivo no repositório, de modo que este possa ser utilizado em
consultas e estejam visíveis através da interface web, é preciso criar uma entrada para
o documento em um arquivo xml chamado docRepository.xml que representa o
repositório de documentos, da seguinte maneira:
<?xml version="1.0" ?>
<mxbase>
<forest name="HelloWorld">
<file href="hello.xml" />
<file href="world.xml" />
</forest>
</mxbase>
O elemento root é chamado de mxbase e os itens de seu repositório são
representados pelo elemento forest. O nome do atributo forest identifica a
floresta no repositório e no peer AXML. Este é o valor que deve ser utilizado para
identifica-la, como por exemplo, em uma consulta. Uma forest na verdade é um
documento lógico, que pode ser composto de vários arquivos XMLs físicos, descritos
através do elemento file e do atributo href.
Definição de serviços AXML
12
Daniela Marques Pereira e Marcelo de Mattos Mayworm
Um peer AXML também pode ser um repositório de serviços web AXML. Um serviço
é definido de forma declarativa e pode ser dos tipos:
• query,
• update,
continuous,
callback,
composed,
• xslt.
Os serviços, também definidos em arquivos XML, devem ser declarados em um
arquivo chamado svcRepository.xml, para que possam ser chamados e para que
possam ser visualizados pela interface web do framework.
Exemplo de um arquivo XML, contendo uma consulta:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<serviceDefinition type="query">
<parameters>
<param name="codigo" />
</parameters>
<definition>
<query>
<![CDATA[
select <article>p/title</>
from p in ACM//articles/article
where p/"endPage" = codigo;
]]>
</query>
</definition>
</serviceDefinition>
Declaração do serviço no arquivo XML svcRepository.xml:
<?xml version="1.0" ?>
<mxbase origURI="yaunos.inria.fr" lastId="0">
<forest name="GetACM2" replicationIndex="0">
<file name="" href="acm/servicos/GetACM2.xml" />
</forest>
</mxbase>
Testes
Uma vez feito um estudo sobre o framework ActiveXML, realizamos testes que
procuraram analisar suas características, através do que julgamos ser uma aplicação
onde estas características seriam úteis e favorecidas pela utilização do framework em
questão.
Com os testes, procurou-se analisar as características de distribuição deste
framework, ou seja, analisar como que as funcionalidades que permitem a distribuição
Processamento de Documentos Ativos XML
13
de dados e processamento se comportam. Dentre estas funcionalidades, procuramos
analisar como é possível fazer a publicação de novos serviços a partir de um
repositório XML existente, como fazer chamadas a serviços internos e externos a um
peer, como integrar seus resultados provenientes de chamadas a serviços distintos, e
como realizar consultas sobre documentos que possuem chamadas de serviços.
Para a realização dos testes utilizamos o repositório XML da ACM (ACM Record)
para que fosse possível definir serviços e realizar chamadas a estes serviços a partir de
documentos AXML.
Instalação e Configuração
Para a realização dos testes, utilizamos um PowerPC – Apple rodando MacOS e um
PC Athlon 3 GHZ com 512 MB de memória RAM, rodando Windows XP
Professional. As duas máquinas estava interligadas em rede e podiam ser acessadas
uma a partir da outra.
Em ambas as máquinas foi instalado o JBOSS 4.0 para onde foi feito o
deploy do framework, baixado a partir do repositório CVS do projeto
(cvs.forge.objectweb.org). Assim cada uma das máquinas foi configurada como um
peerXML. Para podermos ter acesso a interface do framework, bastava acessar o
seguinte
endereço
a
partir
do
browser:
http://localhost:8080/ActiveXMLWeb/jsp/index.jsp.
Para o desenvolvimento de novos serviços, configuração de arquivos e
publicação dos mesmos, utilizamos a ferramenta Eclipse, uma vez que o framework
foi todo desenvolvido em Java.
Testes Realizados
Os primeiros testes foram executados sobre um arquivo chamado 152.xml que foi
publicado como ACM no arquivo docRepository.xml e que continha os artigos
publicados no 15º volume dos proceedings da ACM.
Sobre este arquivo foi criado o seguinte serviço:
GETACM, que corresponde a consulta abaixo:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<serviceDefinition type="query">
<definition>
<query>
<![CDATA[
select <article> p/title</>
from p in ACM//articles/article
where p/initPage > 100;
]]>
</query>
</definition>
</serviceDefinition>
14
Daniela Marques Pereira e Marcelo de Mattos Mayworm
Para utilizar este serviço, foi criado um documento ativo XML, que fazia a
chamada ao serviço descrito acima. O documento foi registrado como servicoACM e
a chamada foi configurada da seguinte maneira:
<?xml version="1.0" encoding="UTF-8"?>
<vol axml:docName="servicoACM" xmlns:axml="http://wwwrocq.inria.fr/verso/AXML">
<axml:sc methodName="GetACM" valid="0" mode="immediate"
serviceNameSpace="GetACM"
serviceURL="http://localhost:8080/ActiveXMLWeb/servlet/AxisServlet">
<axml:params/>
</axml:sc>
</vol>
Sobre os resultados obtidos através da chamada de serviço declarada no
documento acima, foi criado um serviço chamado GETACM2, que corresponde a
consulta abaixo:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<serviceDefinition type="query">
<definition>
<query>
<![CDATA[
select p/article
from p in servicoACM//vol;
]]>
</query>
</definition>
</serviceDefinition>
Por fim criamos um outro documento ativo XML cadastrado como
servicoACM2 que possuía uma chamada ao serviço GETACM2.
<?xml version="1.0" encoding="UTF-8"?>
<vol axml:docName="servicoACM2" xmlns:axml="http://wwwrocq.inria.fr/verso/AXML">
<axml:sc methodName="GetACM2" valid="0" mode="immediate"
serviceNameSpace="GetACM2"
serviceURL="http://localhost:8080/ActiveXMLWeb/servlet/AxisServlet">
<axml:params/>
</axml:sc>
</vol>
Pelas configurações acima, esperávamos que ao executar a chamada de
serviço presente no documento ativo servicoACM2, a chamada de serviço declarada
no documento servicoACM fosse executada e por fim os dois documentos deveriam
conter os mesmos valores. No entanto isso não foi constatado.
Quando o documento servicoACM ainda não tinha o resultado da chamada de
serviço em seu conteúdo, a chamada de serviço presente no documento servicoACM2,
Processamento de Documentos Ativos XML
15
que executava uma querie sobre o primeiro, não retornava nada. Para que a chamada
funcionasse, era preciso primeiro executar a chamada presente no documento
servicoACM para que depois então a chamada ao serviço GetACM2, presente no
documento servicoACM2 pudesse trazer os resultados.
Outra questão analisada, é que com as configurações colocadas acima, se o
documento source, ou seja, o documento 152.xml (cadastrado como ACM) tivesse o
seu conteúdo trocado, as chamadas de serviço seguintes, executadas sobre este
arquivo não traziam nenhuma alteração, nem no arquivo servicoACM, nem no arquivo
servicoACM2. As alterações só foram percebidas quando o parâmetro mode era
setado como “replace”.
O atributo frequency funcionou normalmente atualizando automaticamente o
conteúdo da chamada do serviço dentro da freqüência determinada. Quando havia
uma chamada de serviço sobre este conteúdo, ao ser executada esta chamada trazia o
conteúdo atualizado também.
Um outro teste que foi realizado foi a chamada de serviço utilizando como
parâmetro o resultado trazido por outra chamada de serviço configurada dentro de um
mesmo documento. No entanto, para que a chamada de serviço que dependia do
parâmetro proveniente da outra chamada de serviço, só funcionava, quando a primeira
chamada já tinha sido executada e seu conteúdo materializado no documento XML.
Mesmo com a freqüência configurada como lazy, obtivemos os mesmos resultados.
Exemplo do teste descrito acima, após a execução das chamadas de serviço,
com a chamada ao serviço GetACM sendo executado primeiro para que a segunda
pudesse ser executada em seguida.
root
|
|___< vol>
| \___ {http://www-rocq.inria.fr/verso/AXML}docName (QName
axml:docName) = servicoACM2
|
|___< pagina>
|
|
|
|___ Service call
|
|
| \___serviceURL =
http://localhost:8080/ActiveXMLWeb/servlet/AxisServlet
|
|
| \___serviceNameSpace = GetACM
|
|
| \___methodName = GetACM
|
|
| \___frequency = lazy
|
|
| \___mode = replace
|
|
| \___id = 902F5F8B-7F00-0001-0002E879E0297599
|
|
|
|
|
|___Parameters
|
|
|
|___< codigo>
|
\___ {http://www-rocq.inria.fr/verso/AXML}origin
(QName axml:origin) = 902F5F8B-7F00-0001-0002-E879E0297599
|
\___ endPage = 119
|
|___< artigo>
16
Daniela Marques Pereira e Marcelo de Mattos Mayworm
|
|___ Service call
|
| \___serviceURL =
http://localhost:8080/ActiveXMLWeb/servlet/AxisServlet
|
| \___serviceNameSpace = GetACM2
|
| \___methodName = GetACM2
|
| \___frequency = lazy
|
| \___mode = replace
|
| \___id = 902F5F9A-7F00-0001-0002E8799ABCBDB7
|
|
|
|___Parameters
|
|
|
|___codigo
|
|
|
|___XPath : ../../
pagina/codigo/@endPage
|
|___< article>
| \___ {http://www-rocq.inria.fr/verso/AXML}origin
(QName axml:origin) = 902F5F9A-7F00-0001-0002-E8799ABCBDB7
|
|___< title>
| \___ articleCode = 152009
|
|___ Load balancing in a locally distributed D
B system
Com a utilização do forest, realizamos a execução de serviços
(ex.:GetACM) sobre um repositório lógico, ou seja, a execução do serviço é dada não
sobre um repositório físico XML, mas sobre vários arquivos físicos que são
endereçados por um nome lógico. A referência a esses arquivos não precisa ser local,
podendo ser uma URL e com isso conseguimos realizar, por exemplo, uma única
busca em um conjunto de arquivos XML. Esses arquivos podem ser distintos, ou seja,
conter uma estrutura (DTD ou esquema XML) diferente entre eles.
Como teste a virar subsidio para nossa aplicação, montamos um forest com
alguns dos arquivos do repositório ACMRecord, de forma a fornecer uma única
consulta capaz de retornar informações sobre as várias “proceedings” da ACMRecord.
A configuração do forest é realizada no arquivo docRepository.xml, ficando
da seguinte forma:
<forest name="ACM" replicationIndex="0">
<file name="" href="acm/242.xml" />
<file name="" href="acm/252.xml" />
<file
<file
<file
<file
name=""
name=""
name=""
name=""
href="acm/162.xml" />
href="acm/172.xml" />
href="acm/182.xml" />
href="acm/1922.xml" />
Processamento de Documentos Ativos XML
<file
<file
<file
<file
<file
<file
<file
<file
<file
<file
<file
<file
<file
<file
</forest>
name=""
name=""
name=""
name=""
name=""
name=""
name=""
name=""
name=""
name=""
name=""
name=""
name=""
name=""
href="acm/202.xml"
href="acm/212.xml"
href="acm/222.xml"
href="acm/232.xml"
href="acm/242.xml"
href="acm/262.xml"
href="acm/272.xml"
href="acm/282.xml"
href="acm/292.xml"
href="acm/302.xml"
href="acm/311.xml"
href="acm/312.xml"
href="acm/313.xml"
href="acm/314.xml"
17
/>
/>
/>
/>
/>
/>
/>
/>
/>
/>
/>
/>
/>
/>
Com essa criação do forest, podemos pensar em uma serie de serviços para
uma aplicação desenvolvida sobre o ACMRecord, como por exemplo:
·
·
·
Quais os artigos publicados em um determinado volume?
Todos os autores que já publicaram na ACM ou quais autores publicaram em
um determinado volume?.
Quais os artigos publicados em um determinado ano?
Uma querie executada sobre este repositório lógico foi a busca por autores
que publicaram artigos em um determinado ano, passado como parâmetro através da
tag param:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<serviceDefinition type="query">
<parameters>
<param name="ano" />
</parameters>
<definition>
<query>
<![CDATA[
select t//articles/article/title
from t in ACM
where t//"year"=ano;
]]>
</query>
</definition>
</serviceDefinition>
Enfim, temos uma série de buscas que podem ser realizadas de forma a tornar
a aplicação que utilizará o ACMRecord mais útil. Teremos uma base de dados XML
18
Daniela Marques Pereira e Marcelo de Mattos Mayworm
em torno de 900KB para realizarmos consultas e disponibilizarmos serviços. É
importante perceber como o uso do forest torna a base heterogenia (vários fontes xml)
apesar de estar em um mesmo “peer”.
Testes a serem Realizados
Os testes realizados até agora foram testes simples, visando explorar o funcionamento
e as características do framework AXML. A idéia agora, é produzirmos em cima de um
repositório XML, uma aplicação útil que faça proveito dos benefícios dos documentos
e serviços AXML. Pretendemos configurar dois ou mais peers servindo e consumindo
serviços definidos sobre os repositórios XML de cada peer. Procurar-se-á criar
serviços que façam uso de consultas encadeadas e aninhadas para que possamos
constatar a eficiência deste framework.
Conclusões
Dentre os testes realizados até agora, pudemos constatar que o framework AXML é
inovador em sua proposta, permitindo o desenvolvimento de aplicações baseadas em
dados dinâmicos e distribuídos e que é de fácil configuração.
No entanto sua utilização requer atenção e algumas funcionalidades ficaram a
desejar, como a chamada de serviços encadeados, onde as chamadas tiveram que ser
executadas manualmente para que as subseqüentes pudessem trazer os resultados.
Tivemos algumas dificuldades também com relação a chamadas a serviços
externos e a utilização de alguns parâmetros como o followedBy que não funcionou
como descrito na documentação do framework.
No mais o framework se comportou como o descrito e obteve resultados
satisfatórios até agora.
Referências
1.
Abiteboul, S., Benjelloun, O., Milo, T.: The Active XML Project: an
Overview.ACM (0YY).
2.
Abiteboul, S. et al: Active XML Primer.
3.
Abitebou, S. et al: Active XML: Peer-to-Peer Data and Web Services
Integration.
4.
Baumgarten, J.: Active XML User Guide
5.
Nicolaas Ruberg, Gabriela Ruberg1, Ioana Manolescu: Towards cost-based
optimization for data-intensive Web service computations
Processamento de Documentos Ativos XML
19
6.
Abiteboul, S. Et al: Construction and Maintenance of a Set Of Pages of
Interest (SPIN) using ActiveXML
7.
Abitebou, S. et al: Lazy Query Evaluation for Active XML.
8.
Stefan Saroiu, P. Krishna Gummadi and Steven D. Gribble: “A Measurement
Study of Peer-to-Peer File Sharing Systems” (2002).
Download

Processamento de Documentos Ativos XML