• Nenhum resultado encontrado

Código Java para criar documentos XML no repositório MOF

MDRManager.getDefault().getDefaultRepository(); 2 – XmlmetamodelPackage extent = (XmlmetamodelPackage)repository.getExtent("xmlmetamodel"); 3 - if (extent !=null) { 4 - repository.beginTrans(true); 5 - xmlmetamodel.Xmldocument docroot = extent.getXmldocument().createXmldocument( DATAWAREHOUSES.xml", 1, "Armazena dados sobre o esquema do data warehouse academico", "20/07/2002", "20/07/2002"); 6 - xmlmetamodel.XmlprocessingInstruction pi = extent.getXmlprocessingInstruction().createXmlprocessingInstruction( "xml", "version=\"1.0\" encoding=\"UTF-8\""); 7 - xmlmetamodel.XmldocumentType dt= extent.getXmldocumentType().createXmldocumentType( "\"D:\\ServerREDIRIS\\ data\\dw.dtd\""); 8 - xmlmetamodel.Xmlelement elroot = extent.getXmlelement().createXmlelement("DATAWAREHOUSES"); 9 - extent.getXmlcontains().add(pi,docroot); 10 - extent.getXmlcontains().add(dt,docroot); 11 - extent.getXmlcontains().add(elroot,docroot); 12 - extent.getXmlcontains().add(

extent.getXmlcomment().createXmlcomment("Este documento armazena metadados sobre os esquemas dos datawarehouses"),

docroot); 13 - repository.endTrans();

}

A Listagem 5.5 apresenta uma parte de um código em Java para acessar o repositório XML. A linha 1 do programa MDRManager.getDefault().getDefaultRepository() retorna o repositório padrão armazenado. Este repositório vai ser sempre o próprio metamodelo MOF. Após, é necessário pesquisar, no repositório padrão, o pacote proxy referente ao metamodelo XML. O método repository.getExtent("xmlmetamodel”), na linha 2, procura um determinado pacote proxy dentro do repositório MOF. Ele recebe o nome do pacote como parâmetro e retorna um objeto do tipo RefPackage, que faz parte do pacote reflexivo de JMI. Se a pesquisa ao pacote desejado for bem sucedida, o próximo passo será utilizar o pacote para gerenciar metadados descritos em XML.

Para criar qualquer objeto no metamodelo é necessário obter a referência à interface proxy do objeto a ser criado. Por exemplo, para criar um novo documento XML é necessário

XmldocumentClass, que é obtido pelo método getXmldocument() do pacote XmlmetamodelPackage. A interface XmldocumentClass possui o método para criar um novo documento XML, instância de Xmldocument. Da mesma maneira, para se criar um objeto, instância de qualquer classe do metamodelo, é necessário obter a referência à sua interface proxy. A execução do código da Listagem 5.5 cria um objeto instrução de processamento, um objeto DocType e um objeto elemento, que é a raiz do documento XML. Além disso, é necessário fazer as associações entre os objetos. Isto é feito através da associação XMLContains do metamodelo.

A Figura 5.10 apresenta o documento XML criado pela execução do código Java da Listagem 5.5.

Figura 5.10 - Documento XML criado através da execução do código da Listagem 5.5

As linhas 1 e 2 da Listagem 5.5 variam segundo a implementação utilizada. A especificação MOF não diz como um programa cliente recupera a referência a um repositório MOF e nem como deve ser a pesquisa aos pacotes dentro do repositório. Isto é implementado segundo os critérios de quem projetou o repositório.

Além da importação dos metadados na forma de documentos XMI, e do uso das interfaces geradas a partir dos metamodelos, os usuários podem necessitar importar os metadados que estão em documentos XML, XSLT, DTD, entre outros. Isto é interessante, pois os usuários podem possuir ferramentas que já produzem metadados nestes padrões. Desta forma, basta importar os mesmos para o repositório MOF. Para isto, é necessário construir utilitários que façam o mapeamento entre os metadados descritos nos padrões originais (XML, XSLT, RDF) para os seus metamodelos correspondentes. Isto é uma alternativa a mais para intercâmbio dos metadados desses metamodelos. A próxima seção apresenta o mapeamento do padrão XML para o metamodelo XML.

5.4.5 Mapeamento XML para o Metamodelo XML

Para realizar o mapeamento entre o metamodelo XML e um documento XML foi construído

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE DATAWAREHOUSES SYSTEM "D:\ServerREDIRIS\data\dw.dtd">

<!--Este documento armazena metadados sobre os esquemas dos datawarehouses--> <DATAWAREHOUSES></DATAWAREHOUSES>

um utilitário que exporta e importa os metadados para documentos XML a partir do repositório MOF.

5.4.5.1 Importação de documentos XML

O processo de importação consiste em submeter o documento XML a um parser XML, que processa o documento e importa para o repositório MOF como instância do metamodelo XML. A Figura 5.11 representa este processo.

Figura 5.11 – Importação de um documento XML

O módulo Importar XML executa as seguintes tarefas:

1. Processar o documento XML, verificando se ele é bem formado, ou seja, se os dados do arquivo passado como parâmetro estão mesmo na sintaxe XML.

2. Iniciar o repositório MOF e pesquisar o repositório XML, representado pelo metamodelo XML. Esta tarefa consiste em achar uma instância da classe MOFPackage do metamodelo MOF cujo nome é XMLMetamodel.

3. Criar uma instância da classe XMLDocument que representa o novo documento a ser importado para o repositório.

4. Para cada elemento do documento XML, criar uma instância da classe XMLElement. 5. Para cada atributo do documento XML, criar uma instância da classe XMLAttribute. 6. Similar aos passos 4 e 5, fazer os outros mapeamentos, como comentários, entidades,

instrução de processamento, entre outros.

7. Além de criar os objetos, é necessário criar as ligações entre os mesmos através da classe XMLContains, única associação do metamodelo XML.

A Listagem 5.6 apresenta uma parte do código Java que faz o mapeamento. O parser utilizado no processamento do documento XML foi o Xerces15 utilizando a API SAX (Simple API XML). No exemplo, é apresentado o código referente ao evento endElement do parser SAX,

15http://xml.apache.org/

Repositório MOF

ou seja, quando o parser encontra o final de um elemento. Ao chegar ao final do processamento de um elemento do documento, o programa cria um objeto MOF que é do tipo XMLElement, que faz parte do metamodelo XML. Ele verifica também se tal elemento possui conteúdo texto, que será adicionado ao objeto MOF do tipo XMLNodeText.

Listagem 5.6 - Código Java para gerar instâncias do metamodelo XML a partir de documentos XML