Metadata

Introdução

Metadado significa literalmente “dados sobre dados”. No contexto de dados espaciais metadados carregam uma série de informações sobre os dados que são críticas como: propósito do dados, localização, conteúdo e linhagem. A criação e manutenção de metadados tem 3 objetivos principais:

  1. Organizar e manter os investimentos feitos em coleções de dados;
  2. Fornecer informações para catálogos e “clearinghouses”;
  3. Fornecer informações que ajudam na transferência de dados entre organizações.

Padrões de Metadados

Entre os padrões ISO que tratam metadados geoespaciais, destacam-se:

  • ISO 19115:2003 (Geographic Information – Metadata) especificada pelo Comitê Técnico 211 (TC 211) da ISO faz parte de uma família de várias normas para informação geográfica e suporta o referenciamento espacial. Utiliza a modelagem UML para representar suas seções, entidades e elementos de metadados. É uma norma muito ampla - possui cerca de 400 elementos - que permite definição de perfis e de extensões para campos específicos de aplicação. Permite uma descrição detalhada de recursos geográficos, porém tem poucos elementos obrigatórios. Deve ser substituída pela chamada ISO 19115-1: Geographic Information – Metadata – Part 1: Fundamentals;
  • ISO 19115 – 2: Geographic information - Metadata - Part 2: Extensions for imagery and gridded data. The base ISO 19115 metadata standard plus extended elements for the description of imagery, gridded data and data collected using instruments, e.g. monitoring stations and measurement devices. These extensions also include improved descriptions of lineage and processing information. ISO 19115-2 is expected to be updated to comply with ISO 19115-1 once the final standard is released.
  • ISO 19139: Geographic Information—Metadata—Implementation Specification, fornece um esquema XML que o formato dos registros de metadados da ISO 19115 devem ser armazenados em formato XML.

Além disso, esses padrões se relacionam com outros padrões ISO, como pode ser visto na figura abaixo.

Muitos países, regiões ou comunidades adotam perfis derivados da ISO 19115 ou ISO 19139 como seu padrão. Um perfil é aplicação específica de padrão de metadados. .Cada perfil faz as modificações ao padrão original (ex. 19115 ou 19139) e tipicamente fornece seu próprio Esquema XML ou Document Type Definition (DTD) que define como os metadados que seguem esse pergil devem ser formatados. É o caso do Perfil de Metadados Geoespaciais do Brasil (Perfil MGB) construído dentro da Infraestrutura Nacional de Dados Espaciais (INDE) brasileira.

Módulo de Metadados

O módulo de metadados tem por objetivo fornecer suporte as aplicações TerraLib de gerenciar conjuntos de metadados, descritos em algum perfil, e associá-los a dados e recursos gerenciados/acessados pela TerraLib.

A figura abaixo mostra uma representação principal das funcionalidades contidas no módulo.

Diagrama de classes e de uso

<color red> EM CONSTRUÇÃO </color>

Exemplo de Uso

O exemplo abaixo mostra uma versão (sem interface gráfica) das classes e estruturas que permitem a implementação das funcionalidades previstas no módulo.

  // Open a data source
  std::string ogrInfo("connection_string="TE_DATA_EXAMPLE_LOCALE"/data/shp");
 
  te::da::DataSource* ds = te::da::DataSourceFactory::make("OGR");
  ds->setConnectionStr(ogrInfo);
  ds->open();
 
  te::da::DataSourceTransactor* transactor = ds->getTransactor();
 
  te::da::DataSourceCatalogLoader* cloader = transactor->getCatalogLoader();
 
  boost::ptr_vector<std::string> datasets;
 
  cloader->getDataSets(datasets);
 
  // Create an annotation for each dataset in the datasourc
  for (unsigned int i=0; i<datasets.size(); ++i)
  {
    te::da::DataSet* dataset = transactor->getDataSet(datasets[i]);
 
    te::md::MD_Metadata* md = te::md::Extract(dataset);
 
    // include manually other metadata elements
    // ...
    boost::format fname("%1%/%2%.xml");
    fname = fname % TE_DATA_EXAMPLE_LOCALE"/data/shp" % dataset->getType()->getTitle();    
    md->setMetadataURI(fname.str());
 
    // serialize it
    std::ofstream ofs(md->getMetadataURI().c_str());
    te::xml::Writer writer(ofs);
    te::serialize::Save(md, writer);
 
 
    // feed the manager
    te::md::MetadataAnnotation* anot = new te::md::MetadataAnnotation();
    anot->setElementId(boost::lexical_cast<std::string>(dataset->getType()->getId()));
    anot->setElementName(dataset->getType()->getTitle());
    anot->setAnnotationURI(md->getMetadataURI());    
    te::md::MetadataManager::getInstance().insert(anot);  
 
    delete dataset;
    delete md;
  }
 
  // Print manager contents
  const std::map<std::string,te::md::MetadataAnnotation*>& mm = te::md::MetadataManager::getInstance().getAnnotations();
  std::map<std::string,te::md::MetadataAnnotation*>::const_iterator it = mm.begin();
  std::string aid;
  while (it != mm.end())  
  {
    std::cout << "Annt id: " << it->second->getAnnotationtId() 
    << " Elem id: "  << it->second->getElementId() 
    << " Elem name: " << it->second->getElementName()
    << " Annt URI: " << it->second->getAnnotationURI() << std::endl;
    aid = it->second->getAnnotationtId();
    ++it;
  }
 
  // manager should be persisted
  // ...
  // 
 
  te::md::MetadataManager::getInstance().clear();
  delete cloader;
  delete transactor;
  ds->close();
  delete ds;
 

TODO

  • Sobre as classes de representação dos elementos de metadados do padrão ISO 19115
  1. Incluir a class MI_metadata para dados de imagens
  2. Estudar quais outros elemento da ISO 19115, além dos core, podem ser interessantes de serem incluídos como classes;
  3. Completar as classes já existentes e as novas que forem criadas;
  4. Fazer a documentação (diagramas de classe UML e use case);
  5. Verificar a documentação Doxygen;
  6. Verificar a necessidade de rearranjar as classes em pacotes;
  7. Criar testes unitários.
  • Sobre a serialização das classes de metadados segundo o padrão ISO 19139
  1. Criar um mecanismo para a serialização correta de valores advindos das listas de códigos pré-definidos;
  2. Criar a serialização das novas classes que forem construídas;
  3. Fazer a leitura, do XML → classes;
  4. Verificar a documentação Doxygen;
  5. Verificar a necessidade de rearranjar as classes em pacotes;
  6. Criar testes unitários.
  • Sobre o Metadata Extractor
  1. Verificar quais outros metadados podem ser automaticamente extraídos;
  2. Verificar como extrair metadados do Layer (e não só Dataset) ou outras entidades;
  3. Revisar a documentação Doxygen;
  4. Criar testes unitários.
  • Sobre o Metadata Manager
  1. Verificar a possíbilidade de usar multi-containeres da boost para permitir outras buscas mais facilmente;
  2. Definir uma arquitetura para persistência dos dados do manager (XML, banco…);
  3. Adicionar novas funcionalidades (catálogo de responsible party p.ex.);
  4. Pensar sobre ferramenta de publicação em catálogos;
  5. Projetar a integração com outros componentes do AF;
  6. Revisar a documentação Doxygen;
  7. Criar testes unitários.
  • Sobre componentes gráficos
  1. Projetar um componente gráfico para o Metadata Manager, integrado ao AF;
  2. Projetar um componente gráfico que seja um editor de metadados pelo menos para os elementos core;
  3. Testar componentes gráficos com um possível plugin para o TV.
  • Semântica
  1. Pensar na ligação com anotações semânticas (ontologias, etc.).

* Revisar, traduzir e completar documentação wiki.


QR Code
QR Code wiki:designimplementation:metadata (generated for current page)