1 - Visão geral

O que é possível fazer com o OpenDataBio

OpenDataBio é uma plataforma web de código aberto para organizar, relacionar, consultar, analisar e publicar dados de biodiversidade. Uma instalação pode ser usada por diferentes grupos de pesquisa, que compartilham bibliotecas comuns — como taxonomia, localidades, pessoas, referências e variáveis — sem perder o controle sobre a edição e a visibilidade de seus dados.

O que você pode fazer

Consultar, filtrar e mapear dados

Você pode consultar registros públicos sem iniciar uma sessão. As listas de registros, o Data Explorer e o Map Explorer permitem combinar filtros como dataset, projeto, grupo taxonômico e localidade. Resultados acessíveis podem ser inspecionados, mapeados e exportados.

Veja Pesquisar e mapear dados.

Registrar e relacionar dados de biodiversidade

Usuários autorizados podem registrar dados pela interface web, importar planilhas, usar a API ou coletar dados com formulários e o OpenDataBio Collect. O sistema relaciona:

  • localidades, parcelas e transectos;
  • taxons publicados e não publicados;
  • indivíduos, suas localizações e seu histórico de identificações;
  • vouchers e coleções biológicas;
  • variáveis, medições e formulários;
  • pessoas, referências bibliográficas, nomes populares e mídias.

Para começar, consulte Primeira vez?.

Organizar acesso e colaboração

Projetos reúnem usuários e datasets. Datasets organizam os registros que serão gerenciados e distribuídos juntos. Papéis como administrador, colaborador e visualizador determinam o que cada pessoa pode fazer em um projeto, dataset ou biocoleção; o nível global do usuário não substitui essas permissões.

Veja Papéis e permissões.

Publicar versões citáveis

Um dataset pode continuar recebendo correções e novos registros. Quando uma versão precisa ser distribuída ou citada, seus responsáveis podem criar um snapshot com UUID próprio, autores, licença, política de uso, citações, metadados e arquivos persistentes. Assim, a versão publicada permanece fixa enquanto o dataset continua evoluindo.

Veja Organizar e publicar datasets.

Trabalhar com taxonomia e identificações

OpenDataBio consulta serviços nomenclaturais durante o cadastro de taxons, permite revisar sugestões de validação e preserva o histórico biológico de identificações dos indivíduos.

Veja os Objetos centrais. Existe também um fluxo experimental para importar filogenias candidatas à incorporação no backbone, sujeito à revisão administrativa.

Automatizar importações e exportações

A API permite consultar, inserir e atualizar dados. O pacote OpenDataBio-R facilita essas operações em R. Importações e exportações grandes são executadas como UserJobs, com progresso, logs e resultados por registro.

Veja a API, os Fluxos de trabalho com R e a documentação de UserJobs.

Para administradores da instalação

Superadministradores mantêm usuários, serviços externos, registros do sistema, filas, armazenamento, backups e atualizações. Essas responsabilidades são diferentes da administração científica de um projeto ou dataset.

Consulte Instalação e administração e sempre leia o UPGRADES_NOTES.md da versão de destino antes de atualizar o sistema.

2 - Primeiros passos

Obtenha e instale o OpenDataBio

OpenDataBio é um web-software para Linux nas distribuições Debian, Ubuntu e Arch-Linux e pode ser implementado em qualquer máquina baseada em Linux. Não temos planos de suporte ao Windows, mas pode ser fácil de instalar em uma máquina Windows usando o Docker.

OpenDataBio é escrito em PHP e desenvolvido com o framework Laravel. Requer um servidor web (Apache ou nginx), PHP e um banco de dados SQL - testado apenas com MySQL e MariaDB .

Você pode instalar o OpenDataBio facilmente usando os arquivos Docker incluídos na distribuição. O repositório agora inclui o perfil docker/prod e o arquivo docker-compose.prod.yml, permitindo uso com Docker também em produção (com ajustes de infraestrutura e segredos).

Se você deseja testar o OpenDataBio, ajudar no desenvolvimento ou ter uma instalação individual no seu computador, siga a instalação do Docker.


Proximos passos

  1. Instalação padrão
  2. Instalação com Nginx
  3. Instalação com Docker
  4. Atualizar OpenDataBio

Prepare para instalação

  1. Você pode solicitar uma chave API Tropicos.org para que o OpenDataBio possa recuperar dados taxonômicos do banco de dados Tropicos.org. Se não for fornecido, principalmente o serviço de nomenclatura do GBIF será usado;
  2. OpenDataBio envia e-mails para usuários registrados, seja para informar sobre um job que foi concluído, para enviar solicitações de dados para administradores de Conjuntos de Dados, ou para recuperação de senha. Você pode usar um e-mail do Google para isso, mas precisará alterar as opções de segurança da conta para permitir que o OpenDataBio use a conta para enviar e-mails (você precisa ativar a opção de Acesso a aplicativos menos seguros nas configurações da conta do gmail). Portanto, crie um endereço de e-mail dedicado para sua instalação. Verifique o arquivo “config/mail.php” para mais opções sobre como enviar e-mails.

2.1 - Primeira vez?

Descubra o que você pode fazer e como começar

OpenDataBio é normalmente acessado em um servidor mantido por uma instituição ou grupo de pesquisa. As funcionalidades disponíveis dependem do seu nível de usuário e das permissões concedidas em cada projeto, dataset ou biocoleção.

Escolha seu ponto de partida

Papéis e permissões

Visitante

Sem iniciar uma sessão, um visitante pode consultar registros públicos, usar os exploradores, visualizar datasets e versões públicas e baixar dados cuja política permita acesso anônimo. Não pode inserir ou alterar registros.

Usuário registrado

O autocadastro cria uma conta básica. Um usuário registrado pode editar o próprio perfil e acessar dados disponibilizados para usuários autenticados. A instalação pode exigir autenticação e aceite de um acordo para determinados downloads. O cadastro, por si só, não autoriza a inserção de dados.

Usuário pleno

Um superadministrador, ou um usuário pleno autorizado a gerenciar acessos, pode promover uma conta registrada para usuário pleno. Esse nível permite criar dados e receber papéis de colaboração, mas cada operação continua dependendo das permissões do objeto. Ser usuário pleno não concede acesso a todos os datasets nem permite administrar a instalação.

Um usuário pleno pode, quando autorizado:

  • criar registros nas bibliotecas compartilhadas;
  • criar projetos e datasets;
  • inserir dados pela interface ou por formulários;
  • importar planilhas e usar a API;
  • executar e acompanhar UserJobs;
  • administrar objetos nos quais recebeu o papel apropriado.

Gestor de acesso de usuários

Um superadministrador pode conceder a um usuário pleno a permissão gerenciar acessos de usuários. Esse gestor pode:

  • promover um usuário registrado para usuário pleno;
  • rebaixar um usuário pleno para usuário registrado.

Essa delegação é limitada. O gestor de acesso não pode criar, promover ou remover superadministradores; não pode alterar outro gestor de acesso; e não pode conceder essa permissão a outras pessoas. Somente um superadministrador pode designar ou remover gestores de acesso.

Antes de promover uma conta, o gestor deve confirmar a identidade do usuário e seguir a política local da instalação. A promoção autoriza a criação de dados, mas não concede automaticamente participação em projetos, datasets ou biocoleções.

Administrador, colaborador e visualizador

Projetos, datasets e biocoleções possuem seus próprios participantes:

PapelPode fazer
AdministradorConfigurar o objeto, gerenciar participantes e controlar seu conteúdo.
ColaboradorInserir e editar conteúdo permitido, sem administrar todas as configurações ou permissões.
VisualizadorConsultar conteúdo restrito, sem alterá-lo.

As regras específicas variam conforme o tipo de objeto. Por exemplo, o administrador de um dataset pode preparar versões e revisar suas políticas; o administrador de uma biocoleção controla os vouchers e solicitações sob a responsabilidade da coleção.

Superadministrador da instalação

O superadministrador tem acesso global e mantém a instalação. Ele deve:

  • revisar novos usuários e atribuir níveis globais com cuidado;
  • designar quais usuários plenos podem promover ou rebaixar contas;
  • configurar integrações e serviços externos;
  • habilitar biocoleções administradas pelo sistema;
  • manter localidades e outros registros de referência do sistema;
  • revisar ferramentas administrativas, como duplicidades e validações;
  • monitorar filas, armazenamento, logs e backups;
  • aplicar atualizações e os procedimentos do UPGRADES_NOTES.md.

O superadministrador não deve substituir os responsáveis científicos por projetos e datasets na curadoria cotidiana dos dados.

Preparar uma conta de usuário pleno

  1. Confirme que sua conta foi promovida a usuário pleno.
  2. Crie ou localize seu registro de Pessoa e associe-o como pessoa padrão do seu perfil. Isso permite preencher automaticamente autoria, coleta, medição e identificação quando apropriado.
  3. Defina em qual projeto e dataset os novos registros serão organizados. Crie novos objetos apenas quando os existentes não representam o mesmo trabalho.
  4. Consulte as regras locais da instalação para bibliotecas compartilhadas, evitando duplicar pessoas, taxons, localidades, referências ou variáveis.

Inserir e importar dados

Escolha o método conforme o volume e a maturidade dos seus dados:

  1. Interface web: melhor para aprender o modelo, criar poucos registros e conferir validações.
  2. Formulários: adequados para protocolos repetíveis de coleta e medição.
  3. OpenDataBio Collect: usa formulários compatíveis para coleta móvel, inclusive offline.
  4. Planilhas: permitem importação em lote pela interface. Os nomes das colunas correspondem aos parâmetros POST da API.
  5. OpenDataBio-R: facilita preparar, validar, importar e consultar dados a partir do R.
  6. API direta: indicada para integrações e clientes em outras linguagens.

Comece criando manualmente um exemplo pequeno de cada objeto necessário. Depois exporte ou consulte esse registro para confirmar nomes de campos, relações e identificadores antes de preparar um lote grande.

Ordem recomendada para novos dados

Cadastre ou localize primeiro as bibliotecas reutilizadas:

  1. pessoas e referências bibliográficas;
  2. taxons e localidades que ainda não existam;
  3. traits, unidades, categorias e formulários;
  4. projeto e dataset;
  5. indivíduos e vouchers;
  6. medições, identificações e mídias.

Uma localidade do tipo ponto não precisa ser criada antecipadamente quando a importação de indivíduos informa coordenadas e o fluxo utilizado permite sua criação automática. Parcelas, transectos e polígonos, entretanto, devem ser planejados e validados antes de importar grandes quantidades de indivíduos.

Antes de importar um lote grande

  • teste algumas linhas pela interface ou em uma instalação de testes;
  • confirme o dataset e as permissões de destino;
  • valide datas, coordenadas e identificadores usados nas relações;
  • separe nomes taxonômicos publicados de nomes não publicados;
  • verifique se pessoas, referências e traits já existem;
  • acompanhe o UserJob até o fim e examine avisos e erros por registro;
  • exporte uma amostra após a importação para conferir o resultado.

Os tutoriais de R transformam essa sequência em exemplos reproduzíveis de consulta e importação. Antes deles, consulte o Fluxo de importação de dados para entender dependências, validação prévia de coordenadas, UserJobs e reconciliação de IDs.

2.2 - Instalação padrão

Como instalar o OpenDataBio?

Estas instruções são para instalação baseada em apache. Para nginx, use Instalação com Nginx.

Requisitos do servidor

  1. A versão suportada do PHP >= 8.2 (8.3 recomendado).
  2. Servidor web: apache para este guia. Para nginx, use Instalação com Nginx.
  3. Requer um banco de dados SQL, MySQL e MariaDB foram testados, mas também pode funcionar com Postgres. Testado com MySQL 8.0 e MariaDB 10.6+.
  4. Extensões PHP necessárias: openssl, pdo, pdo_mysql, mbstring, tokenizer, xml, dom, gd, exif, bcmath, zip, curl, redis.
  5. Redis Server é necessário para filas e cache.
  6. Tectonic é usado para geração de PDFs/etiquetas a partir de LaTeX.
  7. Pandoc é usado para traduzir o código LaTeX usado nas referências bibliográficas. Não é necessário para a instalação, mas é sugerido para uma melhor experiência do usuário.
  8. Requer Supervisor, que é necessário para os jobs de usuário

Criar usuário dedicado

A maneira recomendada de instalar o OpenDataBio para produção é usando um usuário de sistema dedicado. Nestas instruções, esse usuário é odbserver.

Baixar OpenDataBio

Faça login como seu Usuário dedicado e baixe ou clone este software para onde deseja instalá-lo. Aqui assumimos que é /home/odbserver/opendatabio para que os arquivos de instalação residam neste diretório. Se este não for o seu caminho, altere abaixo sempre que aplicável.


Baixar OpenDataBio

Prepare o Servidor

Primeiro, instale os softwares Apache, MySQL, PHP, Redis, Tectonic, Pandoc e Supervisor. Em um sistema Debian, você também precisa instalar algumas extensões PHP e ativá-las:

#EXEMPLO EM UBUNTU 22.04

#repositórios
apt-get install software-properties-common
add-apt-repository ppa:ondrej/php
add-apt-repository ppa:ondrej/php ppa:ondrej/apache2
add-apt-repository ppa:ondrej/php
add-apt-repository ppa:ondrej/apache2
apt update

#instala o php
apt install php8.3 -y
apt update
apt upgrade

#instala extensoes (modulos) do php
php --version
#quais os modulos instalados?
php -m

#se algum desses nao estive, instale
apt install php8.3-{bcmath,xml,mysql,zip,intl,gd,cli,curl,mbstring,sqlite3,redis}

#install apache
apt install libapache2-mod-php8.3
#instala redis e tectonic
apt install redis-server tectonic
#install pandoc
apt install pandoc
#install supervisor (needed for jobs)
apt-get install supervisor -y

a2enmod php8.3
phpenmod mbstring
phpenmod xml
phpenmod dom
phpenmod gd
a2enmod rewrite
a2ensite
systemctl restart apache2.service

#To check if they are installed:
php -m | grep -E 'mbstring|cli|xml|gd|mysql|redis|bcmath|pcntl|zip'
tectonic --version
redis-server --version

Adicione o seguinte à sua configuração do Apache.

  • Mude /home/odbserver/opendatabio para o seu caminho (os arquivos devem estar acessíveis pelo apache)
  • Você pode criar um novo arquivo na pasta sites-available: /etc/apache2/sites-available/opendatabio.conf e colocar o seguinte código nele.
<IfModule alias_module>
        Alias /opendatabio      /home/odbserver/opendatabio/public/
        Alias /fonts /home/odbserver/opendatabio/public/fonts
        Alias /images /home/odbserver/opendatabio/public/images
        Alias /build /home/odbserver/opendatabio/public/build
        Alias /vendor/livewire /home/odbserver/opendatabio/public/vendor/livewire
        <Directory "/home/odbserver/opendatabio/public">
                Require all granted
                AllowOverride All
        </Directory>
</IfModule>

Isso fará com que o Apache redirecione todas as solicitações de / para a pasta correta, e também permitirá que o arquivo .htaccess fornecido controle as regras de reescrita, de forma que os URLs sejam bonitos. Se desejar acessar o arquivo apontando o navegador para a raiz do servidor, adicione também a seguinte diretiva:

RedirectMatch ^/$ /

Content Security Policy (CSP) para Apache

Configure o CSP na camada do servidor web (não nos arquivos Laravel). Aplique primeiro em modo report-only, valide os logs e depois migre para enforcement.

Para instalação standalone com nginx, use Instalação com Nginx.

Apache: onde colocar

  1. Habilite o módulo necessário:
sudo a2enmod headers
sudo systemctl restart apache2
  1. Edite o arquivo de vhost ativo (exemplo):
sudo nano /etc/apache2/sites-available/opendatabio.conf
  1. Dentro do bloco <VirtualHost ...> correto (HTTP e/ou HTTPS), adicione:
Header always set Content-Security-Policy-Report-Only "
  default-src 'self';
  base-uri 'self';
  form-action 'self';
  frame-ancestors 'self';
  object-src 'none';
  script-src 'self' 'unsafe-eval';
  style-src 'self' 'unsafe-inline';
  img-src 'self' data: https://server.arcgisonline.com https://*.tile.openstreetmap.org;
  font-src 'self' data:;
  connect-src 'self';
"
  1. Recarregue o Apache:
sudo apachectl configtest
sudo systemctl reload apache2

Instalações em subcaminho (/opendatabio)

Se sua instalação roda em subcaminho (por exemplo http://localhost/opendatabio), ajuste no .env:

APP_URL=http://localhost/opendatabio
ASSET_URL=http://localhost/opendatabio

Depois atualize os assets gerados e arquivos do Livewire:

php artisan livewire:publish --assets
php artisan optimize:clear
npm run build

Notas

  1. https://server.arcgisonline.com e https://*.tile.openstreetmap.org são necessários para tiles do mapa.
  2. unsafe-inline / unsafe-eval são flags temporárias de compatibilidade; remova após endurecer templates/assets.
  3. Mantenha Report-Only enquanto ajusta a política em produção.

Configure seu arquivo php.ini. O instalador pode reclamar da falta de extensões do PHP, então lembre-se de ativá-las nos arquivos cli (/etc/php/8.3/cli/php.ini e web ini (/etc/php/8.3/fpm/php.ini) para PHP!

Atualize os valores para as seguintes variáveis:

Encontre os arquivos
php -i | grep 'Configuration File'

Mudar:
	memory_limit should be at least 512M
	post_max_size should be at least 30M
	upload_max_filesize should be at least 30M

Algo como:

[PHP]
allow_url_fopen=1
memory_limit = 512M

post_max_size = 100M
upload_max_filesize = 100M

Habilite os módulos Apache ‘mod_rewrite’ e ‘mod_alias’ e reinicie o servidor:

sudo a2enmod rewrite
sudo a2ensite
sudo systemctl restart apache2.service

Mysql Charset e Collation

  1. Você deve adicionar o seguinte ao seu arquivo de configuração do SQL (mariadb.cnf ou my.cnf), ou seja, o conjunto de caracteres e o agrupamento que você escolher para sua instalação devem corresponder aos do config/database.php
[mysqld]
character-set-client-handshake = FALSE  #without this, there is no effect of the init_connect
collation-server      = utf8mb4_unicode_ci
init-connect          = "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"
character-set-server  = utf8mb4
log-bin-trust-function-creators = 1
sort_buffer_size = 256M  #espaco suficiente para consultas com geometria


[mariadb]
max_allowed_packet=100M
innodb_log_file_size=300M  #no use for mysql
  1. Se estiver usando MariaDB e você ainda tiver problemas do tipo #1267 Illegal mix of collations, então verifique aqui sobre como consertar isso.

Configurar o supervisord

Configure o Supervisor, que é necessário para trabalhos. Crie um nome de arquivo opendatabio-worker.conf na pasta de configuração do Supervisor /etc/supervisor/ conf.d/opendatabio-worker.conf com o seguinte conteúdo, ajustando o caminho conforme a sua instalação:

touch /etc/supervisor/conf.d/opendatabio-worker.conf
echo ";--------------
[program:opendatabio-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/odbserver/opendatabio/artisan queue:work --sleep=3 --tries=1 --timeout=0 --memory=512
autostart=true
autorestart=true
user=odbserver
numprocs=8
redirect_stderr=true
stdout_logfile=/home/odbserver/opendatabio/storage/logs/supervisor.log
;--------------" > /etc/supervisor/conf.d/opendatabio-worker.conf

Permissões de arquivos e pastas

  • As pastas storage e bootstrap/cache precisam ter permissão de escrita para o usuário do servidor (geralmente www-data). Defina 0775 para esses diretórios.
  • O arquivo de configuração .env precisa ter permissão 0640 pois contém senhas.
  • Este link mostra diferentes métodos de definir permissões para um aplicativo Laravel.

Este é o método recomendado:

cd /home/odbserver

#note que odbserver e www-data podem mudar na sua configuracao

#defia as permissões tanto par ao seu usuário (aqui odbserver) como para o do apache (aqui www-data)
sudo chown -R odbserver:www-data opendatabio
sudo find ./opendatabio -type f -exec chmod 644 {} \;
sudo find ./opendatabio -type d -exec chmod 755 {} \;


cd /home/odbserver/opendatabio
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

#pasta media ajustar
sudo find ./storage/app/public/media  -type f -exec chmod 664 {} \;
sudo find ./storage/app/public/media  -type d -exec chmod 775 {} \;

#arquivo de configuracao .env para permissao 640 
sudo chmod 640 ./.env

Instale OpenDataBio

  1. Muitas distribuições Linux (Ubuntu e Debian) têm arquivos php.ini diferentes para a interface de linha de comando e para o Apache. Recomenda-se usar o arquivo de configuração do Apache ao executar o script de instalação, para que ele possa apontar corretamente as extensões ou configurações ausentes. Para fazer isso, encontre o caminho correto para o arquivo .ini e exporte-o **antes de usar o comando de instalação php install **.

    Por exemplo,

    export PHPRC=/etc/php/8.3/apache2/php.ini
    
  2. O script de instalação baixará o gerenciador de dependências Composer e todas as bibliotecas PHP necessárias listadas no arquivo composer.json. No entanto, se o seu servidor estiver atrás de um proxy, você deve instalar e configurar o Composer independentemente. Implementamos a configuração do PROXY, mas não a estamos mais usando e não testamos corretamente (se você precisar de ajustes, coloque um issue no GitLab).

  3. O script solicitará opções de configuração, que são armazenadas no arquivo de ambiente .env na pasta raiz do aplicativo.

    Você pode, opcionalmente, configurar este arquivo antes de executar o instalador:

    • Crie um arquivo .env com o conteúdo do cp .env.example .env fornecido
    • Leia os comentários neste arquivo e ajuste de acordo
    • Garanta que ASSET_URL esteja correto para a URL/subcaminho da sua instalação
  4. Execute o instalador:

cd /home/odbserver/opendatabio
php install
  1. Compile os assets frontend depois de configurar o .env (obrigatorio quando ASSET_URL e adicionado ou alterado):
npm ci #talvez precise disso
npm run build
  1. Seed data - o script irá pergunar se você quer instalar Localidades e Taxons distribuídos com aplicativo. Esses dados são específicos de cada versão do OpenDataBio. Ver as notas das versões no repositório desses dados.

Problemas de instalação

Existem inúmeras maneiras possíveis de instalar o aplicativo, mas podem envolver mais etapas e configurações.

  • se o navegador retornar 500|SERVER ERROR , você deve olhar para o último error em storage/logs/laravel.log. Se você tiver ERROR: No application encryption key has been specified execute:
chave artesanal php: gerar
php artisan config: cache
  • Se você receber o erro failed to open stream: Connection timed out durante a execução do instalador, isso indica uma configuração incorreta do seu roteamento IPv6. A correção mais fácil é desabilitar o roteamento IPv6 no servidor.
  • Se você receber erros durante alimentação aleatória do banco de dados, você pode tentar remover o banco de dados inteiramente e reconstruí-lo. Claro, não execute isso em uma instalação de produção.
php artisan migrate: fresh
  • Você pode substituir as tabelas Locations e Taxons usando o seed data depois de reconstruir a base:
php seedodb

Configurações pós-instalação

  • Se seus Jobs de importação/exportação não estão sendo processados, certifique-se de que o Supervisor esteja executando systemctl start supervisord && systemctl enable supervisord e verifique os arquivos de log em storage/logs/supervisor.log.
  • Você pode alterar várias variáveis ​​de configuração para o aplicativo. O mais importante deles provavelmente está definido pelo instalador, mas há outras variáveis em .env e no arquivo config/app.php que você pode alterar. Em particular, você pode querer alterar as configurações de idioma, fuso horário e e-mail. Execute php artisan config: cache após atualizar os arquivos de configuração.
  • Para impedir que os rastreadores do mecanismo de pesquisa indexem seu banco de dados, adicione o seguinte ao seu “robots.txt” na pasta raiz do servidor (no Debian, /var/www/html):
User-agent: *
Disallow: /
  • As pastas storage e bootstrap/cache devem ser graváveis ​​pelo usuário do Apache (geralmente www-data). Veja este link para um exemplo de como fazer isso. Defina a permissão 0775 para esses diretórios.

Atualizando uma instalação Apache existente

Antes de atualizar, faça backup do banco de dados, do arquivo .env e de storage/app/public/media. Antes de rodar os comandos, revise diferencas de configuracao da versao alvo:

  • Compare .env com .env.example (incluindo assets_url)
  • Confira configuracoes do PHP (php.ini em CLI e FPM/Apache)
  • Confira configuracao dos workers no Supervisor
  1. Coloque a aplicação em modo de manutenção:
cd /home/odbserver/opendatabio
php artisan down
  1. Atualize o código-fonte para a versão desejada:
git fetch --tags
git checkout <tag-ou-branch-de-destino>
  1. Atualize dependências e aplique migrações de banco:
composer install --no-dev --optimize-autoloader
php artisan migrate --force
  1. Recompile os assets frontend apos mudancas no .env:
npm run build
  1. Recrie os caches e reinicie os workers de fila:
php artisan optimize:clear
php artisan config:cache
php artisan queue:restart
  1. Tire a aplicação do modo de manutenção:
php artisan up

Se a versão de destino incluir novas variáveis de ambiente, adicione-as ao .env antes de rodar assets/cache. Veja o conteúdo de .env.example para mudanças necessárias.

Armazenamento e backups

Você pode alterar as configurações de armazenamento em config/filesystem.php, onde pode definir o armazenamento baseado em nuvem, que pode ser necessário se muitos usuários enviarem arquivos de mídia, exigindo muito espaço em disco.

  1. Downloads de dados são colocados em fila como Jobs e um arquivo é gravado em uma pasta temporária,sendo excluído quando o trabalho é excluído pelo usuário. Esta pasta é definida como download disk no arquivo de configuração filesystem.php, que aponta para storage/app/public/downloads. Apagar esses arquivos temporários depende dos usuários, portanto, um trabalho de limpeza do cron pode ser aconselhável para implementar em sua instalação;
  2. Arquivos de mídia são armazenados por padrão no media disk, que coloca os arquivos na pasta storage/app/ public/media;
  3. Para configuração regular crie ambos os diretórios storage/app/public/downloads e storage/app/public/media com permissões graváveis ​​pelo usuário do servidor
  4. Lembre-se de incluir a pasta de mídia em um plano de backup;

2.3 - Instalação com Docker

Como instalar usando Docker!

A maneira mais fácil de instalar e executar o OpenDataBio é usando o Docker e os arquivos de configuração do docker fornecidos, que contêm todas as configurações necessárias para executar o ODB. Usa nginx e mysql e supervisor.

Perfil de produção

O OpenDataBio agora inclui um perfil Docker orientado a produção:

  • docker/prod/nginx.conf
  • docker/prod/php.ini
  • docker/prod/www.conf
  • docker-compose.prod.yml

Execute o compose de produção com:

docker compose -f docker-compose.prod.yml build
docker compose -f docker-compose.prod.yml up -d

Principais diferenças em relação ao dev:

  1. Usa configurações nginx/php-fpm em docker/prod/*.
  2. Remove bind-mounts do código-fonte da aplicação.
  3. Desativa o phpMyAdmin por padrão (perfil dev-only).
  4. Publica o nginx na porta 80 (ajuste se houver reverse proxy).

O CSP no nginx (report-only) está incluído em docker/prod/nginx.conf. Mantenha report-only primeiro e só depois aplique enforcement.

Arquivos Docker incluídos

laravel-app/
----docker/*
----.env.docker
----docker-compose.yml
----Dockerfile
----Makefile

Eles foram adaptados deste link, onde você também encontra uma configuração de produção.

Instalação


Baixar OpenDataBio

Pré-requisitos

  1. Docker com plugin Compose (docker compose v2).
  2. Linux/mac: usuário no grupo docker ou usar sudo.
  3. Windows: Docker Desktop (WSL2/Hyper-V habilitados).

Início rápido (Linux/mac, requer make)

cd opendatabio
make docker-init          # copia .env.docker se faltar, sobe containers, instala composer, gera key, migra e faz storage:link
make seed-odb             # seed opcional para Locations/Taxons
#ou tudo junto
make docker-init SEED=1   # igual acima + seed opcional para Locations/Taxons
  • Depois de configurar o .env (ou sempre que ASSET_URL mudar), recompile os assets:
npm run build
  • App: http://localhost:8081 (usuário admin@example.org / password1)
  • phpMyAdmin: http://localhost:8082

Windows (PowerShell)

cd opendatabio
powershell -ExecutionPolicy Bypass -File scripts/docker-init.ps1
# opcional seed
powershell -ExecutionPolicy Bypass -File scripts/docker-init.ps1 -Seed

Comandos manuais (se você não tiver make)

cp .env.docker .env
docker compose up -d
docker compose exec -T -u www-data laravel composer install --optimize-autoloader
docker compose exec -T -u www-data laravel php artisan key:generate --force
docker compose exec -T -u www-data laravel php artisan migrate --force
docker compose exec -T -u www-data laravel php artisan storage:link

Seed opcional sem make:

docker compose exec -T -u www-data laravel php getseeds
docker exec -i odb_mysql mysql -uroot -psecret odbdocker < storage/Location*.sql
docker exec -i odb_mysql mysql -uroot -psecret odbdocker < storage/Taxon*.sql
rm storage/Location*.sql storage/Taxon*.sql

Persistência de dados

Os contêineres criados pelo Docker podem ser excluídos e recriados sem perder os dados As tabelas MySQL são armazenadas em um volume; se ele for apagado, a base de dados será excluída.

docker volume list

Usando

O arquivo Makefile contém os seguintes comandos para interagir com os contêineres do docker e o odb.

Comandos para construir e criar o app

  1. make docker-init - copia .env.docker (se faltar), constroi/sobe containers, instala composer, gera key, migra e faz storage:link
  2. make build - construir os contêineres
  3. make key-generate - gerar a chave do app e adicioná-la ao .env
  4. make composer-install - instalar dependências php
  5. make composer-update - atualizar dependências php
  6. make composer-dump-autoload - executar o dump-autoload do composer dentro do contêiner
  7. make migrate - criar ou atualizar o banco de dados
  8. make drop-migrate - apaga a base de dados e migra novamente
  9. make seed-odb - popular o banco de dados com localizações e táxons

Comandos para acessar os contêineres docker

  1. make start - iniciar todos os contêineres
  2. make stop - parar todos os contêineres
  3. make restart - reiniciar todos os contêineres
  4. make ssh - entrar no contêiner principal da aplicação laravel
  5. make ssh-mysql - entrar no contêiner mysql, para que você possa acessar o log do banco de dados usando mysql -uUSER -pPWD
  6. make mysql - entrar no console docker do mysql
  7. make ssh-nginx - entrar no contêiner nginx
  8. make ssh-supervisord - entrar no contêiner supervisord

Comandos de manutenção

  1. make optimize - limpar caches e arquivos de log
  2. make info - mostrar informações do app
  3. make logs - mostrar logs do laravel
  4. make logs-mysql - mostrar logs do mysql
  5. make logs-nginx - mostrar logs do nginx
  6. make logs-supervisord - mostrar logs do supervisord

Recriando os containers

Se você tiver problemas e alterou os arquivos do docker, pode ser necessário reconstruir:

#apaga todas as imagens sem apagr a base de dados
make stop #pare todas
docker system prune -a  #aceitar com Yes

#se quiser pagar os dados
docker volume list
docker volume rm VOLUME_ID

#construa novamente
make build
make start

Atualizando uma instalação Docker existente

Antes de atualizar, faça backup do banco de dados e de storage/app/public/media. Antes de rodar os comandos, revise diferencas de configuracao da versao alvo:

  • Compare .env com .env.example (incluindo assets_url)
  • Confira configuracoes PHP do perfil alvo (docker/prod/php.ini ou seu arquivo customizado)
  • Confira configuracao do Supervisor (docker/supervisord.conf ou equivalente no seu deploy)
  1. Atualize o código-fonte para a versão desejada:
cd opendatabio
git fetch --tags
git checkout <tag-ou-branch-de-destino>
  1. Reconstrua e reinicie os contêineres:
make stop
make build
make start
  1. Atualize dependências PHP e rode as migrações:
make composer-install
make migrate
  1. Recompile os assets frontend apos mudancas no .env:
npm run build
  1. Atualize os caches do Laravel e reinicie os workers de fila:
make optimize
docker compose exec -T -u www-data laravel php artisan queue:restart

Se a nova versão incluir mudanças no .env, adicione as novas chaves antes de rodar assets/cache/restart em produção.

2.4 - Instalação com Nginx

Como instalar o OpenDataBio com nginx

Estas instruções são para instalação com nginx. Se preferir Apache, use a página de instalação padrão (Apache).

Requisitos do servidor

  1. Versão suportada do PHP >= 8.2 (8.3 recomendado).
  2. Servidor web: nginx.
  3. Banco SQL: MySQL ou MariaDB (testado com MySQL 8.0 e MariaDB 10.6+).
  4. Extensões PHP necessárias: openssl, pdo, pdo_mysql, mbstring, tokenizer, xml, dom, gd, exif, bcmath, zip, curl, redis.
  5. Redis para filas/cache.
  6. Tectonic para geração de PDF de etiquetas.
  7. Pandoc para renderização bibliográfica (recomendado).
  8. Supervisor para jobs em segundo plano.

Configuração do site no nginx

Crie o arquivo do site (exemplo):

sudo nano /etc/nginx/sites-available/opendatabio

Use este bloco base (ajuste domínio/caminhos):

server {
    listen 80;
    server_name seu-dominio.exemplo;

    root /home/odbserver/opendatabio/public;
    index index.php index.html;

    charset utf-8;
    client_max_body_size 300M;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_read_timeout 300;
    }

    location ~ /\. {
        deny all;
    }
}

Ative e recarregue:

sudo ln -s /etc/nginx/sites-available/opendatabio /etc/nginx/sites-enabled/opendatabio
sudo nginx -t
sudo systemctl reload nginx

Content Security Policy (CSP)

No mesmo arquivo do site nginx, adicione no bloco server { ... }:

add_header Content-Security-Policy-Report-Only "
  default-src 'self';
  base-uri 'self';
  form-action 'self';
  frame-ancestors 'self';
  object-src 'none';
  script-src 'self' 'unsafe-eval';
  style-src 'self' 'unsafe-inline';
  img-src 'self' data: https://server.arcgisonline.com https://*.tile.openstreetmap.org;
  font-src 'self' data:;
  connect-src 'self';
" always;

Depois recarregue:

sudo nginx -t
sudo systemctl reload nginx

Notas:

  1. Comece com Report-Only e depois migre para enforcement após validar logs.
  2. https://server.arcgisonline.com e https://*.tile.openstreetmap.org são necessários para os tiles do mapa.

Instalações em subcaminho (/opendatabio)

Se sua instalação roda em subcaminho (por exemplo http://localhost/opendatabio), ajuste no .env:

APP_URL=http://localhost/opendatabio
ASSET_URL=http://localhost/opendatabio

Depois atualize os assets gerados e arquivos do Livewire:

php artisan livewire:publish --assets
php artisan optimize:clear
npm run build

Etapas compartilhadas da aplicação

Para evitar redundância, use as mesmas seções da instalação Apache (também válidas para implantação com nginx):

  1. Configurações de PHP (php.ini) em Instalação padrão
  2. Configurar o supervisord em Instalação padrão
  3. Permissões de arquivos e pastas em Instalação padrão
  4. Instale OpenDataBio em Instalação padrão
  5. Configurações pós-instalação em Instalação padrão

2.5 - Personalizar a instalação

Como personalizar a interface web!

Mudanças simples que podem ser implementadas no layout de um site OpenDataBio

Logo e imagem de fundo

Para substituir o logotipo da barra de navegação e a imagem da página inicial, apenas coloque seus arquivos de imagem substituindo os arquivos em /public/custom/ sem alterar seus nomes.

Textos e informações

Para alterar o texto de boas-vindas da página inicial, altere os valores para cada entrada nos arquivos:

  • /resources/lang/en/customs.php
  • /resources/lang/pt-br/customs.php
  • Não remova as chaves de entrada. Defina como null para suprimir a exibição no rodapé e na página inicial.

Documentação Local

Você pode adicionar documentação em formato *.md para o repositório em arquivos nas seguintes pastas:

  • /resources/docs/en/*
  • /resources/docs/pt/*

Este espaço é reservado para administradores definirem documentação e diretivas personalizadas para os usuários de uma instalação específica do OpenDataBio. Por exemplo, este é um espaço para adicionar um código de conduta para os usuários, quem contatar para se tornar um usuário pleno,tutoriais específicos, etc.

  1. Se você deseja alterar a cor da barra de navegação superior e do rodapé, basta substituir a classe css Boostrap 5 nas tags e arquivos correspondentes na pasta /resources/view/layout.
  2. Você pode adicionar html adicional ao rodapé e barra de navegação, alterar o tamanho do logotipo, etc… como desejar.

2.6 - Atualizar OpenDataBio

Instruções seguras para atualizar instalações do OpenDataBio

Use esta página para a sequência comum de implantação. Antes de atualizar, leia o arquivo UPGRADES_NOTES.md da versão de destino do OpenDataBio. Ele é a fonte oficial para requisitos, permissões de armazenamento, migrações, preenchimentos e comandos de reparo específicos da versão; essas instruções não são repetidas aqui.

Antes de começar

  1. Leia UPGRADES_NOTES.md e as notas da versão de destino. Anote todos os testes preliminares e comandos pós-migração antes de começar.
  2. Faça backup de pelo menos:
    • Dump do banco de dados
    • .env
    • Toda a árvore storage/app, incluindo mídias, exportações geradas e os arquivos persistentes das versões de datasets
  3. Compare as configurações atuais com os modelos/configurações da versão de destino:
    • .env com .env.example (incluindo ASSET_URL)
    • Configuração do Supervisor (/etc/supervisor/conf.d/opendatabio-worker.conf ou equivalente no contêiner)
    • Configuração do PHP (php.ini de CLI e FPM/Apache)
  4. Planeje uma janela de manutenção para o ambiente de produção.

Atualização (instalação Apache ou nginx)

  1. Coloque a aplicação em modo de manutenção:
cd /home/odbserver/opendatabio
php artisan down
  1. Atualize o código-fonte:
git fetch --tags
git checkout <target-tag-or-branch>
  1. Instale as dependências e execute as migrações:
composer install --no-dev --optimize-autoloader
php artisan migrate:status
php artisan migrate --force
  1. Execute, na ordem documentada, os comandos pós-migração indicados no UPGRADES_NOTES.md da versão de destino. Alguns comandos enviam UserJobs em segundo plano; mantenha a aplicação em manutenção e acompanhe-os até o fim quando as notas assim exigirem.
  2. Recompile os assets do frontend após mudanças no .env (obrigatório quando ASSET_URL mudar):
npm ci
npm run build
  1. Limpe o cache e reinicie os workers:
php artisan optimize:clear
php artisan config:cache
php artisan queue:restart
systemctl restart supervisor.service
# Reinicie o servidor web e o PHP-FPM conforme a sua instalação.
  1. Verifique a aplicação, os workers, os logs e as operações citadas nas notas de atualização; depois coloque a aplicação online novamente:
php artisan up

Atualização (instalação Docker)

  1. Atualize o código-fonte:
cd opendatabio
git fetch --tags
git checkout <target-tag-or-branch>
  1. Reconstrua e reinicie os contêineres:
make stop
make build
make start
  1. Instale as dependências e execute as migrações:
make composer-install
make migrate
  1. Execute dentro do contêiner da aplicação, na ordem documentada, os comandos pós-migração do UPGRADES_NOTES.md da versão de destino e acompanhe os UserJobs enviados por eles.
  2. Recompile os assets do frontend após mudanças no .env (obrigatório quando ASSET_URL mudar):
npm run build
  1. Limpe o cache e reinicie os workers:
make optimize
docker compose exec -T -u www-data laravel php artisan queue:restart

Variáveis de ambiente

Compare .env com o .env.example da versão de destino antes de compilar assets ou armazenar configurações em cache. Siga UPGRADES_NOTES.md para variáveis cujo valor ou significado mudou; em produção, confira APP_FORCE_HTTPS e ASSET_URL.

Estratégia de rollback

Se algo falhar depois das migrações:

  1. Mantenha o modo de manutenção ativo.
  2. Restaure o banco, o .env e o backup correspondente de storage/app. Os registros do banco e os arquivos das versões de datasets devem ser restaurados como um único snapshot.
  3. Retorne para a tag estável anterior.
  4. Reinstale as dependências/reconstrua os contêineres e valide os logs antes de php artisan up.

3 - Guias de uso

Fluxos de trabalho para usuários e responsáveis pelos dados

Estes guias explicam tarefas completas do ponto de vista de quem usa o OpenDataBio. Para definições de cada tipo de registro, consulte Conceitos. Para parâmetros de integração, consulte a API.

3.1 - Pesquisar e mapear dados

Como descobrir, filtrar, visualizar e exportar dados

Quem pode usar

Visitantes podem consultar o conteúdo público. Usuários autenticados também podem ver registros liberados para seu nível de acesso e aqueles a que têm acesso por projetos, datasets ou biocoleções. Os mesmos filtros podem produzir resultados diferentes para usuários com permissões diferentes.

Escolher a ferramenta

  • Use as listas de registros para pesquisar um tipo específico de objeto, conferir detalhes e navegar por suas relações.
  • Use o Data Explorer para combinar filtros e descobrir registros de dados relacionados.
  • Use o Map Explorer para examinar a distribuição espacial dos resultados e abrir os detalhes de localidades e indivíduos.
  • Use a API GET ou o pacote OpenDataBio-R quando precisar de uma consulta reproduzível ou de resultados para análise.

Pesquisar registros

  1. Comece com o menor conjunto de filtros que represente sua pergunta.
  2. Confira se o filtro taxonômico deve corresponder apenas ao taxon informado ou também aos seus descendentes.
  3. Quando usar uma localidade, confirme se a consulta inclui suas localidades descendentes.
  4. Use projeto ou dataset quando a pergunta depender da origem ou da política dos dados.
  5. Inspecione alguns registros antes de exportar o conjunto completo.

Resultados públicos publicados podem ser encontrados por meio das versões de datasets que os contêm. Um registro editável e uma versão publicada não são a mesma coisa: a versão representa um snapshot fixo.

Usar o mapa

O Map Explorer pode mostrar localidades, indivíduos, parcelas e transectos. Em grandes conjuntos, o mapa utiliza tiles vetoriais e geometrias simplificadas para responder rapidamente. Essa representação é adequada para navegação, mas não substitui a geometria oficial fornecida no registro ou na exportação.

Localidades podem representar ambientes terrestres ou marinhos. Algumas localidades de referência são mantidas pelo sistema; usuários comuns não devem editá-las sem a orientação dos administradores da instalação.

Exportar resultados

Exportações pequenas podem ser retornadas diretamente. Exportações grandes são preparadas em segundo plano como UserJobs. Depois de solicitar uma exportação:

  1. abra a lista de UserJobs;
  2. acompanhe o progresso e os logs;
  3. examine avisos ou erros;
  4. baixe o arquivo quando a tarefa terminar;
  5. preserve o README e os metadados dos campos junto com os dados.

Uma exportação de consulta representa os resultados daquele momento. Para citar uma publicação fixa, prefira uma versão de dataset.

Perfis e formatos de exportação

As exportações comuns incluem campos locais do OpenDataBio e campos de intercâmbio, como Darwin Core. Consulte a tabela de campos do endpoint GET e preserve o README e os metadados produzidos com o arquivo.

Instalações que trabalham com coleções botânicas também podem oferecer um perfil BRAHMS/INPA. Ele reorganiza dados de Indivíduos ou Vouchers, Localidades, Taxons, coletores, identificações e medições em colunas destinadas a esse fluxo de intercâmbio. Escolha explicitamente se o registro-base é o Indivíduo ou o Voucher e confira os metadados da exportação; o perfil não transforma registros incompletos em dados curatoriais completos.

Continuar no R

O tutorial Obter dados com R demonstra autenticação, taxons, localidades, indivíduos, medições, mídias e vouchers. Use o Data Explorer para construir e conferir uma pergunta; depois traduza os mesmos filtros para R quando precisar reproduzir a análise.

3.2 - Fluxo de importação de dados

Como preparar, importar, reconciliar e validar dados em etapas

Uma importação confiável não consiste em enviar todas as tabelas de uma vez. O fluxo recomendado é iterativo: preparar uma etapa, verificar o que já existe, enviar um lote pequeno, recuperar os IDs produzidos, reconciliá-los com a tabela de origem e validar o resultado antes de importar os objetos dependentes.

Antes de enviar dados

  1. Defina o projeto e o dataset de destino.
  2. Confirme que sua conta é colaboradora ou administradora dos objetos que serão alterados.
  3. Preserve uma cópia imutável dos dados recebidos.
  4. Acrescente à tabela de trabalho uma chave local única, como source_row_id. Ela permitirá associar cada resultado à linha original.
  5. Normalize codificação, datas, valores ausentes, números decimais e nomes de colunas.
  6. Consulte as bibliotecas compartilhadas antes de criar Pessoas, Referências, Taxons, Localidades ou Traits.
  7. Confira os campos do endpoint na API POST.

Não substitua a chave local pelos IDs do OpenDataBio. Mantenha ambos: a chave local documenta a origem; o ID ou UUID permite relacionar registros no sistema.

Ordem de dependências

Uma sequência comum é:

EtapaPreparar ou localizarSerá usado depois por
1Pessoas e Referências Bibliográficascoleta, identificação, medição, Taxons, datasets
2Taxonsidentificações, medições e nomes populares
3Localidadesindivíduos, medições e validação espacial
4Traits, unidades e categoriasmedições e formulários
5Projeto e datasetindivíduos, vouchers, medições e mídias
6Indivíduos e suas ocorrênciasvouchers, identificações, medições e mídias
7Vouchers e histórico de identificaçõesmedições, mídias e documentação científica
8Medições, mídias e nomes popularesconjunto final de dados

Essa ordem deve ser adaptada ao conjunto. Uma linha pode usar nomes, siglas ou outros identificadores aceitos pelo endpoint, mas guardar os IDs/UUIDs obtidos reduz ambiguidades nas etapas seguintes.

Validar coordenadas antes da importação

O endpoint POST locations-validation recebe latitude e longitude em graus decimais. Ele permite verificar previamente quais Localidades registradas contêm cada ponto, antes de criar Indivíduos ou Localidades automáticas.

Use essa etapa para detectar:

  • latitude e longitude trocadas;
  • sinal incorreto nos hemisférios sul ou oeste;
  • pontos fora do país, estado, município ou área de estudo esperados;
  • pontos que caem em unidades de conservação, terras indígenas ou camadas ambientais já cadastradas;
  • coordenadas repetidas ou com precisão inadequada.

Exemplo em R:

library(opendatabio)

cfg = odb_config(
  base_url = "http://localhost/opendatabio/api",
  token = Sys.getenv("ODB_TOKEN")
)

coordinates = data.frame(
  source_row_id = c("plot-001", "plot-002"),
  latitude = c(-3.101, -3.115),
  longitude = c(-60.120, -60.135)
)

job = odb_validate_locations(
  coordinates[c("latitude", "longitude")],
  odb_cfg = cfg
)

odb_get_jobs(params = list(id = job$id), odb_cfg = cfg)
validated = odb_get_jobs(
  params = list(id = job$id, get_file = 1),
  odb_cfg = cfg
)

Reassocie o resultado a source_row_id pela ordem ou por uma chave preservada no arquivo de trabalho. Revise casos inesperados manualmente. A validação não decide se uma coordenada é cientificamente correta; ela informa sua relação com as Localidades existentes.

Ciclo de cada UserJob

1. Enviar um lote pequeno

Comece com algumas linhas representativas: uma simples, uma com relações e uma que você espera que produza aviso ou erro. Guarde o ID do UserJob retornado.

2. Acompanhar o processamento

O estado pode ser Submitted, Processing, Success, Failed ou Cancelled. Acompanhe também o percentual e o log. Não envie novamente o mesmo lote apenas porque a tarefa ainda está processando.

3. Examinar resultados por linha

Na interface, abra os resultados do UserJob. O arquivo de resultados pode conter:

  • row: número da linha recebida;
  • status: resultado daquela linha;
  • id: ID criado ou encontrado no OpenDataBio;
  • first_field e first_value: valores usados para reconhecer a entrada;
  • error: motivo pelo qual a linha não foi concluída;
  • warning: situação que exige revisão, mesmo quando existe um ID.

Uma tarefa com estado Success pode conter avisos ou resultados que reutilizam registros existentes. Valide linha por linha.

4. Reconciliar com a tabela enviada

Baixe os resultados e acrescente-os à tabela de trabalho sem alterar a cópia original. Um padrão útil é manter:

source_row_idodb_statusodb_idodb_uuidodb_errorodb_warning
person-001imported812
person-002already registered107registro existente reutilizado
person-003errorabreviação duplicada

Use row para relacionar o arquivo de resultados à ordem enviada e confira first_field/first_value antes de copiar o ID. Se o cliente R fornecer uma tabela de IDs afetados, aplique a mesma conferência. Nunca associe IDs apenas pela posição depois de ordenar ou filtrar uma das tabelas.

5. Validar os registros no servidor

Consulte por ID ou UUID os registros criados ou reutilizados e compare campos essenciais com a entrada. Para dados espaciais, confira o mapa; para Taxons, confira nome aceito, autoria e pai; para medições, confira Trait, objeto, valor, unidade, data e Pessoa.

6. Corrigir somente as linhas necessárias

Separe erros de entrada, duplicatas legítimas e falhas externas. Corrija a tabela de trabalho e envie somente as linhas pendentes. Registre o novo ID de UserJob para manter a rastreabilidade de cada tentativa.

7. Avançar para a próxima dependência

Somente depois de reconciliar e validar uma etapa, use seus IDs na etapa seguinte. Por exemplo:

  1. importe Pessoas e registre person_id;
  2. use esses IDs em coletores, identificadores e medidores;
  3. importe Taxons e Localidades e registre seus IDs;
  4. importe Indivíduos usando dataset, coletores, Taxon e Localidade já conferidos;
  5. use individual_id para Vouchers, medições, mídias e histórico de identificações.

Exemplo concreto de encadeamento

Considere uma planilha de árvores medidas em parcelas:

  1. Pessoas: localize ou importe coletores e medidores; acrescente seus IDs.
  2. Referências: importe DOIs ou BibTeX usados nas identificações e Traits.
  3. Taxons: valide nomes publicados e resolva morfotipos separadamente.
  4. Parcelas: localize as parcelas existentes; crie apenas as ausentes.
  5. Coordenadas: execute locations-validation e revise os pontos fora das parcelas ou unidades administrativas esperadas.
  6. Traits: localize dbh, altura e demais variáveis por export_name.
  7. Indivíduos: importe um lote piloto, recupere individual_id e confira no mapa.
  8. Medições: use individual_id, trait_id, Pessoa, data e dataset.
  9. Validação final: consulte indivíduos e medições, compare contagens e preserve os arquivos de resultados dos UserJobs.

Encerrar a importação

Uma importação está concluída quando:

  • todas as linhas possuem resultado documentado;
  • erros foram corrigidos ou justificados;
  • avisos foram revisados;
  • IDs e UUIDs foram incorporados à tabela de trabalho;
  • registros foram consultados novamente no OpenDataBio;
  • contagens, relações, datas, coordenadas e permissões foram conferidas;
  • os arquivos de entrada, resultados e IDs dos UserJobs foram preservados.

Continue nos tutoriais de importação com R para exemplos de cada objeto.

3.3 - Organizar e publicar datasets

Da organização dos registros a uma versão citável

Quem pode fazer o quê

  • Visitantes e visualizadores podem consultar ou baixar o conteúdo permitido pela política, mas não alteram o dataset.
  • Colaboradores podem trabalhar com os registros autorizados, mas não devem definir participantes, política ou publicação.
  • Administradores do dataset configuram acesso, participantes, metadados e versões.
  • Superadministradores podem intervir em qualquer dataset para manter o sistema, mas a curadoria e a decisão de publicar pertencem aos responsáveis científicos pelo dataset.

Dataset e versão de dataset

Um dataset é um conjunto gerenciado que pode continuar mudando. Ele organiza registros e participantes e define como esses dados devem ser acessados.

A visibilidade configurada no dataset e a visibilidade permitida para seus registros determinam quem pode encontrá-los nas listas, exploradores, mapas e exportações. Tornar a página do dataset visível não significa publicar todos os registros nem conceder licença de uso. Da mesma forma, associar um registro a mais de um dataset pode envolver políticas diferentes; confira a política efetiva antes de prometer acesso.

Uma versão de dataset é um snapshot preparado para distribuição. Ela possui UUID, data e arquivos próprios e não deve mudar silenciosamente quando os registros do dataset forem editados depois.

Use a página do dataset para o trabalho contínuo. Use o UUID da versão para links, citações e análises que precisam apontar para conteúdo fixo.

Preparar o dataset

Antes de publicar, o administrador deve:

  1. confirmar o título, a descrição e o projeto;
  2. revisar administradores, colaboradores e visualizadores;
  3. definir visibilidade e política de acesso;
  4. conferir licença, política de uso e acordo de download;
  5. ordenar autores e criadores e registrar seus papéis;
  6. associar referências e marcar citações obrigatórias;
  7. revisar os registros e os filtros que definem o escopo;
  8. decidir se a lista taxonômica pode ser compartilhada;
  9. verificar datasets relacionados e os metadados explicativos.

Uma política não é apenas texto informativo: ela orienta a forma de uso e pode afetar a visibilidade dos registros. Alterações devem ser discutidas com os responsáveis pelo dataset antes da publicação.

Criar e conferir uma versão

  1. Abra a ação de criação de versão no dataset.
  2. Defina versão, data, escopo e filtros.
  3. Confira autores, licença, política, citação e metadados.
  4. Gere a versão e acompanhe o UserJob relacionado, quando houver.
  5. Abra a página pública pelo UUID.
  6. Baixe o arquivo principal e, quando existir, o arquivo de mídias.
  7. Confira README, metadados dos campos, contagem de registros e uma amostra dos dados.
  8. Teste o acordo de download e a visibilidade com uma conta que não seja administradora.

Os arquivos de versões são persistentes. Administradores da instalação devem incluí-los nos backups junto com o banco de dados; não devem tratar esses arquivos como exportações temporárias.

Depois da publicação

Administradores do dataset podem consultar o registro de uso e exportá-lo para relatórios. Esse registro indica acessos e downloads; não altera permissões nem prova, sozinho, como os dados foram utilizados.

Se os dados precisarem de correção, corrija o dataset gerenciado e publique uma nova versão. Não substitua silenciosamente os arquivos de uma versão já citada.

Relação com a API e o R

A API pode listar datasets, consultar registros associados e preparar exportações. O R é adequado para revisar o escopo e a consistência dos dados antes da publicação. O ato de publicar, entretanto, deve ser realizado por um administrador responsável, depois da revisão de política, autoria e metadados.

3.4 - Importar filogenias para o backbone

Importação experimental de árvores candidatas à incorporação taxonômica

Objetivo do fluxo atual

A importação permite comparar os terminais e relações de uma árvore de origem com os Taxons existentes. Os rótulos da árvore precisam ser associados a conceitos taxonômicos da instalação antes que qualquer mudança no backbone seja considerada.

Importar a árvore não significa incorporá-la automaticamente. Ela funciona como uma proposta que deve ser conferida e aprovada.

Preparar uma importação

Antes de importar:

  1. preserve o arquivo original;
  2. registre a referência bibliográfica ou o DOI da fonte;
  3. confira os rótulos dos terminais e possíveis homônimos;
  4. verifique se os Taxons correspondentes já existem;
  5. resolva previamente nomes ausentes pelo fluxo normal de cadastro e validação taxonômica;
  6. documente o clado objetivo e a interpretação que se pretende incorporar.

Depois da importação, revise terminais não vinculados, correspondências ambíguas, conflitos taxonômicos e relações incompatíveis com o backbone atual. Um rótulo igual ao nome de um Taxon não garante que representam o mesmo conceito taxonômico.

Aprovação administrativa

A incorporação ao backbone afeta uma biblioteca compartilhada por toda a instalação e, por isso, exige revisão e aprovação de um superadministrador. A decisão deve considerar a referência, o escopo da árvore, a correspondência dos Taxons e os conflitos apresentados.

Enquanto o fluxo permanecer experimental, a documentação não garante suporte a publicação, compartilhamento, análise, versionamento ou exportação geral de filogenias. Recursos visíveis na interface podem servir apenas à revisão da importação e podem mudar em versões futuras.

3.5 - Curadoria de bibliotecas compartilhadas

Como revisar Taxons, Localidades, Pessoas, referências e nomes populares

Taxons, Pessoas, Referências Bibliográficas, Localidades, Traits e nomes populares são bibliotecas compartilhadas. Um registro criado para um projeto pode ser reutilizado por muitos outros; por isso, procure antes de criar e não trate uma correção global como se afetasse apenas o seu dataset.

Validação externa de Taxons

Usuários plenos podem abrir a ferramenta de validação e limitar a análise por projeto, dataset ou raiz taxonômica. A ferramenta pode localizar nomes sem referência de publicação, sem chaves externas ou com divergências de validade, nome aceito e hierarquia.

Fluxo recomendado:

  1. escolha um escopo pequeno e uma fonte adequada ao grupo;
  2. execute a verificação e aguarde o UserJob;
  3. separe resultados seguros, conflitos, Taxons ausentes e decisões manuais;
  4. para fungos, revise primeiro o Index Fungorum; para plantas, compare Tropicos e IPNI; use o GBIF como fonte ampla, sem presumir que resolve toda divergência;
  5. aceite uma mudança de pai somente quando a hierarquia local realmente deva mudar;
  6. aplique diretamente apenas alterações para as quais você possui permissão;
  7. quando não puder atualizar o Taxon, envie uma sugestão para revisão;
  8. confira os Taxons alterados e o UserJob final.

Conflitos entre fontes são decisões curatoriais. A ferramenta não deve trocar automaticamente um conceito taxonômico apenas porque uma fonte externa apresenta outro nome aceito. Operações administrativas em lote e alterações amplas no backbone devem ser revisadas por superadministradores.

Taxons duplicados

A ferramenta de Taxons duplicados é exclusiva de superadministradores. Ela ignora nomes não publicados na busca automática, escolhe um registro principal, copia metadados e chaves externas ausentes e só remove ramos duplicados quando não existe uso protegido no próprio nó ou em seus descendentes.

Antes de unir, compare autoria, publicação, validade, nome aceito, pai, chaves externas e relações nos descendentes. Homônimos e conceitos taxonômicos diferentes não são duplicatas mesmo quando a grafia coincide. Execute grupos pequenos e confira o backbone e os registros relacionados após cada operação.

Localidades compartilhadas e duplicações

Localidades são compartilhadas por toda a instalação. Países, estados, municípios, unidades de conservação, terras indígenas, camadas ambientais, parcelas e transectos não pertencem exclusivamente ao projeto que os cadastrou. Antes de criar uma nova Localidade, pesquise pelo nome, caminho hierárquico, tipo e geometria.

Países e unidades administrativas

Um país deve existir uma única vez, com o código de país correto e a geometria adotada pela instalação. Estados, províncias, municípios e outros níveis devem ser cadastrados sob o pai correto e de acordo com a convenção de níveis administrativos definida para o país. Não crie outro país ou município apenas porque a grafia ou o idioma do nome é diferente; confirme se o registro existente deve ser corrigido ou traduzido.

Novos países e grandes conjuntos de unidades administrativas devem ser coordenados com os superadministradores. Eles afetam a detecção automática de pais, a validação de coordenadas e muitos registros de usuários.

Unidades de conservação, terras indígenas e camadas ambientais

Essas Localidades podem se sobrepor à hierarquia administrativa e funcionar como relações espaciais adicionais. Antes de importar:

  1. procure o nome oficial, siglas e versões anteriores do limite;
  2. registre a fonte, a data e a versão da geometria nas notas ou metadados;
  3. confirme o tipo correto de Localidade;
  4. use geometria WGS84 e valide polígonos e multipolígonos;
  5. verifique sobreposição e duplicação com camadas já cadastradas;
  6. combine com a administração como uma atualização de limites oficiais será tratada sem alterar silenciosamente análises anteriores.

Parcelas, subparcelas e transectos

Parcelas e transectos também são objetos compartilhados. Pesquise pelo nome, localidade pai, projeto, coordenadas e dimensões. Nomes genéricos como “Parcela 1” não são suficientes para distinguir unidades de amostragem de projetos diferentes.

Antes de criar, defina uma convenção de nomes e confira:

  • localidade pai e caminho completo;
  • ponto inicial ou geometria;
  • orientação e dimensões cartesianas;
  • relação entre parcela e subparcela;
  • comprimento e largura de busca do transecto;
  • datum e unidade das coordenadas.

Não crie uma segunda parcela para corrigir dimensões ou geometria. Se a Localidade já possui dados relacionados, somente um superadministrador pode alterá-la, e a correção deve considerar o efeito sobre as posições globais dos indivíduos.

Pontos e localidades automáticas

Alguns fluxos de importação criam Localidades de ponto automaticamente a partir das coordenadas dos indivíduos. Antes de cadastrar pontos manualmente em lote, confirme se esse mecanismo já atende ao caso. O formulário verifica geometrias e pontos semelhantes, mas o usuário ainda deve examinar as correspondências antes de confirmar um novo registro.

Quem pode corrigir

Usuários plenos podem criar Localidades e editar apenas aquelas que ainda não possuem indivíduos, vouchers, medições ou mídias relacionados. Depois que uma Localidade passa a ser usada, apenas superadministradores podem alterá-la. A exclusão também exige que não existam dados relacionados nem descendentes.

Ao encontrar uma duplicata já utilizada, não tente contornar a restrição criando outra versão. Documente os registros envolvidos e solicite que um superadministrador avalie hierarquia, geometrias e relações antes de corrigir.

Pessoas duplicadas

Antes de criar uma Pessoa, pesquise variações de nome, abreviatura, instituição, e-mail e ORCID. Não crie uma segunda Pessoa apenas para corrigir grafia ou acrescentar metadados.

A ferramenta de substituição de duplicatas é exclusiva de superadministradores. Ela redireciona relações como coleta, autoria de versões, identificação, medição, especialidade taxonômica e autoria de nomes não publicados para uma Pessoa escolhida como registro principal. Depois tenta remover os registros substituídos.

Antes de unir Pessoas, o administrador deve:

  1. confirmar que representam a mesma pessoa real;
  2. escolher como principal o registro com nome, abreviatura, ORCID e instituição mais completos;
  3. verificar se algum registro está associado ao perfil de um usuário;
  4. conferir possíveis papéis distintos nas mesmas identificações ou medições;
  5. executar a união e revisar o histórico e as relações do registro resultante.

Não use essa ferramenta para homônimos. Se dois usuários já possuem Pessoas padrão diferentes, a associação não pode ser simplesmente transferida para um registro que já pertence a outra conta.

Referências duplicadas

Pesquise DOI e chave BibTeX antes de cadastrar. Quando o sistema indicar DOI ou chave existente, compare os registros; não modifique arbitrariamente a chave apenas para criar uma segunda referência. Corrija o registro existente se você tiver permissão e ele representar a mesma publicação.

Nomes populares

Um nome popular deve registrar o idioma e pode ser relacionado a Taxons, Indivíduos ou Localidades. Use citações para documentar fonte, contexto e variação regional. A mesma grafia em idiomas ou regiões diferentes não implica necessariamente o mesmo uso.

Usuários plenos podem criar nomes populares. Um usuário comum só pode editar um registro criado por ele; superadministradores podem editar qualquer registro. Uma exclusão é bloqueada quando existem citações pertencentes a outros usuários.

Antes de criar:

  1. pesquise o nome e o idioma;
  2. confira os objetos já relacionados;
  3. determine se deve acrescentar uma relação ou citação ao registro existente;
  4. crie outro registro apenas quando o idioma ou o conceito registrado for realmente diferente.

3.6 - Vouchers, etiquetas e solicitações

Operações de coleção biológica e preparação de etiquetas

Este guia reúne operações posteriores ao cadastro de Indivíduos: identificação em lote, criação de Vouchers, impressão de etiquetas e solicitações tratadas por biocoleções administradas no OpenDataBio.

Identificar indivíduos em lote

Use a identificação em lote quando vários Indivíduos compartilham a mesma determinação taxonômica. Antes de aplicar:

  1. filtre e confira os Indivíduos selecionados;
  2. confirme o Taxon, os identificadores e a data;
  3. registre modificador, referência e notas quando necessários;
  4. verifique se a nova identificação substitui ou complementa informação anterior;
  5. acompanhe o UserJob e revise o Histórico de Identificações.

Não selecione indivíduos apenas por semelhança de nome ou por uma consulta ampla sem conferir a lista. O Histórico de Identificações preserva determinações anteriores; o log de atividades registra alterações no sistema, mas não o substitui.

Criar e revisar Vouchers

Um Voucher representa uma amostra física de um Indivíduo depositada em uma BioColeção. Confira:

  • Indivíduo de origem;
  • BioColeção e número de catálogo;
  • coletores e data;
  • tipo nomenclatural, quando aplicável;
  • referências e mídias diretamente relacionadas ao Voucher.

O Voucher herda a identificação e a Localidade do Indivíduo. Registre uma medição ou mídia diretamente no Voucher somente quando ela descreve a amostra, e não o organismo de forma geral.

Gerar etiquetas

O gerador produz etiquetas para os modelos suportados e permite selecionar formato de folha, dimensões, margens, conteúdo, bordas e outras opções de impressão. Existem formatos predefinidos, incluindo modelos Pimaco, e geração de PDF para impressão.

Fluxo recomendado:

  1. filtre e selecione poucos registros;
  2. escolha o tipo de etiqueta adequado ao objeto;
  3. selecione a folha e confira dimensões e margens;
  4. gere uma prévia e imprima uma folha de teste em escala de 100%;
  5. compare códigos, nomes, números de coleção e identificadores com os registros;
  6. somente depois gere o lote completo.

As opções mais recentes são lembradas nas configurações do usuário. Um usuário pode salvar a configuração como preset, reutilizá-la, duplicar um preset compartilhado e, se for o proprietário, atualizá-lo ou excluí-lo. Presets públicos podem ser usados por outras pessoas, mas somente o proprietário pode alterá-los. Um preset guarda configuração de impressão; não congela os dados dos registros selecionados.

Solicitações de biocoleções

O fluxo de solicitações fica disponível quando existe pelo menos uma BioColeção administrada pelo sistema. Ele atende a dois casos diferentes: o depósito de material já representado por Indivíduos no banco e a solicitação de material que já está depositado em uma coleção. Não confunda esse fluxo com uma solicitação de acesso a um dataset.

Depositar material e registrar Vouchers

Use este fluxo quando você cadastrou seus dados de coleta como Indivíduos e quer depositar as amostras em uma BioColeção gerenciada pelo OpenDataBio.

  1. confira a Localidade, os coletores, a data e a identificação de cada Indivíduo;
  2. selecione os Indivíduos e indique a BioColeção de destino;
  3. envie a solicitação de registro de Vouchers e acompanhe o UserJob que cria a solicitação;
  4. um administrador ou colaborador da coleção revisa os itens e pode registrar correções ou atualizar a identificação solicitada;
  5. se o depósito for aceito, a coleção informa o dataset dos novos Vouchers e o primeiro número de catálogo; o sistema cria um Voucher para cada Indivíduo e numera a sequência;
  6. confira no resultado quais itens foram registrados ou recusados.

Somente administradores e colaboradores do dataset do Indivíduo podem incluí-lo na solicitação. A interface também exige que esses Indivíduos estejam em um dataset acessível ao público ou a usuários registrados, para que a coleção possa avaliá-los.

O registro do Voucher muda a responsabilidade de edição. Se a BioColeção possui equipe cadastrada no OpenDataBio:

  • somente membros dessa coleção podem editar o Voucher;
  • somente usuários que sejam membros de todas as coleções gerenciadas às quais o Indivíduo está vinculado podem editar o Indivíduo, inclusive sua identificação e Localidade;
  • o superadministrador da instalação mantém acesso administrativo;
  • Medições e Mídias vinculadas ao Indivíduo não passam para o controle da coleção: continuam obedecendo aos seus próprios datasets e permissões.

Assim, o depositante conserva a autoria e o acesso definidos pelos datasets, mas não deve esperar continuar editando o registro curado pela coleção, a menos que também faça parte da equipe dela.

Solicitar empréstimo de material depositado

Use este fluxo quando os Vouchers já existem em uma BioColeção gerenciada e você quer solicitar o material físico.

  1. localize e selecione os Vouchers desejados;
  2. abra a solicitação, informe instituição, contato e mensagem com a finalidade e as condições pretendidas;
  3. acompanhe separadamente o estado de cada Voucher;
  4. a equipe da coleção confere os itens e registra o empréstimo ou a recusa;
  5. quando o material retorna, a coleção registra a devolução. O sistema também admite o encerramento como doação quando esse for o destino acordado.

Os estados implementados para esse fluxo distinguem item solicitado, conferido, emprestado, recusado, devolvido e doado. Eles documentam a tramitação no OpenDataBio; embalagem, transporte, prazos e termos institucionais continuam sendo responsabilidade da coleção.

Responsabilidades e solicitações com várias coleções

O solicitante cria e acompanha a solicitação. Administradores e colaboradores da BioColeção podem anotar e tratar seus itens; para uma solicitação que reúne mais de uma coleção, o usuário precisa integrar todas elas. Alterar os dados administrativos da solicitação exige ser administrador de todas as coleções envolvidas, salvo para um superadministrador da instalação.

O histórico e o estado pertencem a cada item. Por isso, uma mesma solicitação pode terminar com parte dos Vouchers registrados ou emprestados e parte recusada. Use notas para justificar decisões e não exclua uma solicitação em andamento para corrigir uma anotação.

3.7 - Tutoriais

Fluxos reproduzíveis com OpenDataBio-R

Os tutoriais aplicam os conceitos e guias de uso em fluxos reproduzíveis com o pacote OpenDataBio-R.

Antes de importar, consulte também o Fluxo de importação de dados, que explica dependências, validação e reconciliação dos resultados de UserJobs.

4 - Serviços de API

Como obter, importar ou atualizar dados no OpenDataBio?

Cada instalação do OpenDataBio fornece um serviço de API, permitindo aos usuários OBTER, INSERIR, ATUALIZAR dados programaticamente. O serviço é de acesso aberto a dados públicos, e requer autenticação do usuário para INSERIR e ATUALIZAR dados, ou para OBTER dados de acesso restrito.

O pacote OpenDataBio é um cliente para esta API, permitindo a interação com o repositório de dados diretamente do R.

A API OpenDataBio permite a consulta ao banco de dados e a importação/edição de dados por meio de uma interface inspirada em REST.

Todas as solicitações e respostas da API são formatadas em JSON.

A interação com a API do OpenDataBio

Uma simples chamada para a API OpenDataBio possui quatro partes independentes:

  1. HTTP-verbo - GET para exportações, POST para importações e PUT para atualizações.
  2. URL-base - o URL usado para acessar seu servidor OpenDataBio + mais / api / v0. Por exemplo, http:// opendatabio.inpa.gov.br/api/v0
  3. endpoint - representa o objeto ou coleção de objetos que você deseja acessar, por exemplo, para consultar nomes taxonômicos, o endpoint é “taxons”
  4. parâmetros de solicitação - representam a filtragem e o processamento que devem ser feitos com os objetos e são representados na chamada da API após um ponto de interrogação. Por exemplo, para recuperar apenas nomes taxonômicos válidos finalize a solicitação com ?valid = 1.

A chamada API acima pode ser inserida em um navegador para OBTER dados de acesso público. Por exemplo, para obter a lista de táxons válidos de uma instalação do OpenDataBio, a solicitação da API poderia ser:


https://opendb.inpa.gov.br/api/v0/taxons?valid=1&limit=10

Quando usar o OpenDataBio R package essa mesma chamada seria algo como odb_get_taxons(list(valid=1,limit=10)).

A resposta será algo como:

{
  "meta":
  {
    "odb_version":"0.9.1-alpha1",
    "api_version":"v0",
    "server":"http://opendb.inpa.gov.br",
    "full_url":"https://opendb.inpa.gov.br/api/v0/taxons?valid=1&limit1&offset=100"},
    "data":
    [
      {
        "id":62,
        "parent_id":25,
        "author_id":null,
        "scientificName":"Laurales",
        "taxonRank":"Ordem",
        "scientificNameAuthorship":null,
        "namePublishedIn":"Juss. ex Bercht. & J. Presl. In: Prir. Rostlin: 235. (1820).",
        "parentName":"Magnoliidae",
        "family":null,
        "taxonRemarks":null,
        "taxonomicStatus":"accepted",
        "ScientificNameID":"http:\/\/tropicos.org\/Name\/43000015 | https:\/\/www.gbif.org\/species\/407",
        "basisOfRecord":"Taxon"
    }]}

Autenticação da API

  1. Não é obrigatória para obter quaisquer dados de acesso público numa base de dados ODB, que por padrão inclui Localidades, Taxons, Referências Bibliográficas, Pessoas e Variáveis.
  2. Autenticação é necessária para OBTER quaisquer dados que não sejam de acesso público e para INSERIR e ATUALIZAR dados.
  • A autenticação é feita usando um token API, que pode ser encontrado no seu perfil de usuário na interface do aplicativo. O token é atribuído a um único usuário do banco de dados e não deve ser compartilhado, exposto, enviado por e-mail ou armazenado em controles de versão.
  • Para autenticar na API OpenDataBio, use o token no cabeçalho “Authorization” da solicitação da API.

Os usuários terão acesso somente aos dados para os quais o usuário tem permissão e para quaisquer dados com acesso público na base de dados. O acesso à Medições, Indivíduos, Vouchers e Mídia depende das permissões compreendidas pelo token do usuário.


Versões da API

A API OpenDataBio segue seu próprio número de versão. Isso significa que o cliente pode esperar usar o mesmo código e obter as mesmas respostas, independentemente da versão do OpenDataBio que o servidor está executando. Todas as alterações feitas na mesma versão da API devem ser compatíveis com versões anteriores. Nosso controle de versão da API é controlado pelo URL, portanto, para solicitar uma versão específica da API, use o número da versão entre o URL base e o endpoint:

https://opendb.inpa.gov.br/api/v1/taxons

https://opendb.inpa.gov.br/api/v2/taxons

4.1 - Referência rápida

Lista dos EndPoints e dos Parâmetros para GET e POST!

OBTER DADOS - GET

Parâmetros GET compartilhados

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
limitNãoQuantidade maxima de registros retornados.100
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11

Parâmetros GET específicos

EndpointDescriçãoParâmetros
/Testa seu acesso/token.
bibreferencesReferências bibliográficas (GET lista, POST cria).id, bibkey, biocollection, dataset, fields, job_id, limit, offset, save_job, search, taxon, taxon_root
biocollectionsBiocoleções (GET lista, POST cria).id, acronym, fields, irn, job_id, limit, name, offset, save_job, search
datasetsDatasets e versões publicadas de datasets (GET lista, POST cria via job de importação).id, bibreference, fields, has_versions, include_url, limit, list_versions, name, offset, project, save_job, search, summarize, tag, tagged_with, taxon, taxon_root, traits, version_id, version_uuid
individualsIndivíduos (GET lista, POST cria, PUT atualiza).id, dataset, date_max, date_min, fields, job_id, limit, location, location_root, odbrequest_id, offset, person, project, save_job, tag, taxon, taxon_root, trait, vernacular
individual-locationsOcorrências para indivíduos com múltiplas localizações (GET lista, POST/PUT grava).id, dataset, date_max, date_min, fields, individual, limit, location, location_root, offset, person, project, save_job, tag, taxon, taxon_root
languagesLista idiomas disponíveis.fields, limit, offset
locationsLocalidades (GET lista, POST cria, PUT atualiza).id, adm_level, dataset, fields, job_id, lat, limit, location_root, long, name, offset, parent_id, project, querytype, root, save_job, search, taxon, taxon_root, trait
measurementsMedições de traits (GET lista, POST cria via job de importação, PUT atualiza).id, bibreference, dataset, date_max, date_min, fields, individual, job_id, limit, location, location_root, measured_id, measured_type, offset, person, project, save_job, taxon, taxon_root, trait, trait_type, voucher
mediaMetadados de mídia (GET lista, POST cria, PUT atualiza).id, dataset, fields, individual, job_id, limit, location, location_root, media_id, media_uuid, offset, person, project, save_job, tag, taxon, taxon_root, uuid, voucher
personsPessoas (GET lista, POST cria, PUT atualiza).id, abbrev, email, fields, job_id, limit, name, offset, save_job, search
projectsProjetos (GET lista).id, fields, job_id, limit, offset, save_job, search, tag
taxonsNomes taxonômicos (GET lista, POST cria).id, bibreference, biocollection, dataset, external, fields, job_id, level, limit, location_root, name, offset, person, project, root, save_job, taxon_root, trait, valid, vernacular
traitsDefinições de traits (GET lista, POST cria).id, bibreference, categories, dataset, fields, job_id, language, limit, name, object_type, offset, save_job, search, tag, taxon, taxon_root, trait, type
vernacularsNomes vernáculos (GET lista, POST cria).id, fields, individual, job_id, limit, location, location_root, offset, save_job, taxon, taxon_root
vouchersVouchers de coleção (GET lista, POST cria, PUT atualiza).id, bibreference, bibreference_id, biocollection, biocollection_id, collector, dataset, date_max, date_min, fields, individual, job_id, limit, location, location_root, main_collector, number, odbrequest_id, offset, person, project, save_job, taxon, taxon_root, trait, vernacular
userjobsJobs em background (importações/exportações) (GET lista).id, fields, get_file, limit, offset, status
activitiesLista entradas do log de atividades.id, description, fields, individual, language, limit, location, log_name, measurement, offset, save_job, subject, subject_id, taxon, taxon_root, voucher
tagsTags/palavras-chave (GET lista).id, dataset, fields, job_id, language, limit, name, offset, project, save_job, search, trait
brahmsExportacao de individuos no formato BRAHMS/INPA (GET lista, exportacao em job com save_job).id, brahms_level, dataset, date_max, date_min, fields, habitattxt_traits, habitattxt_traits_header, include_taxon_vernaculars, include_vernaculars, include_voucher_individuals, job_id, lang, limit, location, location_root, locnotes_traits, locnotes_traits_header, measurement_dataset, odbrequest_id, offset, person, plantdesc_traits, plantdesc_traits_header, project, save_job, tag, taxon, taxon_root, trait, vernacular
identification-historiesHistórico de identificações (GET lista, POST cria linhas manuais de histórico).id, biocollection, date_max, date_min, fields, identification_id, individual, individual_id, job_id, limit, offset, person, save_job, source, taxon, taxon_root

Importar ou Validar dados - POST

EndpointDescriçãoParâmetros
bibreferencesReferências bibliográficas (GET lista, POST cria).bibtex, doi
biocollectionsBiocoleções (GET lista, POST cria).acronym, name
individualsIndivíduos (GET lista, POST cria, PUT atualiza).altitude, angle, biocollection, biocollection_number, biocollection_type, collector, dataset, date, distance, identification_based_on_biocollection, identification_based_on_biocollection_number, identification_date, identification_individual, identification_notes, identifier, latitude, location, location_date_time, location_notes, longitude, modifier, notes, tag, taxon, x, y
individual-locationsOcorrências para indivíduos com múltiplas localizações (GET lista, POST/PUT grava).altitude, angle, distance, individual, latitude, location, location_date_time, location_notes, longitude, x, y
locationsLocalidades (GET lista, POST cria, PUT atualiza).adm_level, altitude, azimuth, datum, geojson, geom, ismarine, lat, long, name, notes, parent, startx, starty, x, y
locations-validationValida coordenadas com locais registrados (POST).latitude, longitude
measurementsMedições de traits (GET lista, POST cria via job de importação, PUT atualiza).bibreference, dataset, date, duplicated, link_id, location, notes, object_id, object_type, parent_measurement, person, trait_id, value
mediaMetadados de mídia (GET lista, POST cria, PUT atualiza).collector, dataset, date, filename, latitude, license, location, longitude, notes, object_id, object_type, project, tags, title_en, title_pt
personsPessoas (GET lista, POST cria, PUT atualiza).abbreviation, biocollection, email, full_name, institution
taxonsNomes taxonômicos (GET lista, POST cria).author, author_id, bibkey, bibreference, enforceValid, gbif, indexfungorum, ipni, level, mobot, mycobank, name, parent, parent_id, parent_name, person, senior, senior_id, valid, zoobank
traitsDefinições de traits (GET lista, POST cria).bibreference, categories, description, export_name, link_type, name, objects, parent, range_max, range_min, tags, type, unit, value_length, wavenumber_max, wavenumber_min
vernacularsNomes vernáculos (GET lista, POST cria).citations, individuals, language, name, notes, parent, taxons, type
vouchersVouchers de coleção (GET lista, POST cria, PUT atualiza).biocollection, biocollection_number, biocollection_type, collector, dataset, date, individual, notes, number
datasetsDatasets e versões publicadas de datasets (GET lista, POST cria via job de importação).description, license, name, privacy, project_id, share_taxon_list, title, visibility
identification-historiesHistórico de identificações (GET lista, POST cria linhas manuais de histórico).biocollection_id, biocollection_reference, date, identification_id, identifier, identifier_id, identifiers, individual_id, modifier, notes, replaced_at, source, taxon_id

Atualizar dados - PUT

EndpointDescriçãoParâmetros
individualsIndivíduos (GET lista, POST cria, PUT atualiza).id, collector, dataset, date, identification_based_on_biocollection, identification_based_on_biocollection_number, identification_date, identification_individual, identification_notes, identifier, individual_id, modifier, notes, tag, taxon
individual-locationsOcorrências para indivíduos com múltiplas localizações (GET lista, POST/PUT grava).id, altitude, angle, distance, individual, individual_location_id, latitude, location, location_date_time, location_notes, longitude, x, y
locationsLocalidades (GET lista, POST cria, PUT atualiza).id, adm_level, altitude, datum, geom, ismarine, lat, location_id, long, name, notes, parent, startx, starty, x, y
measurementsMedições de traits (GET lista, POST cria via job de importação, PUT atualiza).id, bibreference, dataset, date, duplicated, link_id, location, measurement_id, notes, object_id, object_type, parent_measurement, person, trait_id, value
mediaMetadados de mídia (GET lista, POST cria, PUT atualiza).id, collector, dataset, date, latitude, license, location, longitude, media_id, media_uuid, notes, project, tags, title_en, title_pt
personsPessoas (GET lista, POST cria, PUT atualiza).id, abbreviation, biocollection, email, full_name, institution, person_id
vouchersVouchers de coleção (GET lista, POST cria, PUT atualiza).id, biocollection, biocollection_number, biocollection_type, clear_biocollection_number, collector, dataset, date, individual, notes, number, voucher_id
taxonsNomes taxonômicos (GET lista, POST cria).id, author, author_id, bibkey, bibreference, bibreference_id, enforceValid, gbif, indexfungorum, ipni, level, mobot, mycobank, name, notes, parent, parent_id, parent_name, person, senior_id, taxon_id, valid, zoobank

Nomenclature Types

Tipo Nomenclatural : código numérico
NotType : 0Isosyntype : 8
Type : 1Neotype : 9
Holotype : 2Epitype : 10
Isotype : 3Isoepitype : 11
Paratype : 4Cultivartype : 12
Lectotype : 5Clonotype : 13
Isolectotype : 6Topotype : 14
Syntype : 7Phototype : 15

Níveis taxonômicos (Ranks)

CódigoNível
-100clade
0kingdom
10subkingd.
30div., phyl., phylum, division
40subdiv.
60cl., class
70subcl., subclass
80superord., superorder
90ord., order
100subord.
120fam., family
130subfam., subfamily
150tr., tribe
180gen., genus
190subg., subgenus, sect.
210section, sp., spec., species
220subsp., subspecies
240var., variety
270f., fo., form

4.2 - Obter dados - GET

Como obter dados usando a GET API!

Parâmetros GET compartilhados

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
limitNãoQuantidade maxima de registros retornados.100
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11

Selecionar campos da resposta

O parâmetro fields controla as colunas retornadas:

  • simple é o perfil padrão e reúne os campos mais úteis para o uso comum;
  • all inclui campos adicionais, técnicos, relacionais ou mantidos por compatibilidade;
  • uma lista separada por vírgulas, como fields=id,uuid,scientificName, retorna apenas os campos solicitados.

Cada endpoint abaixo apresenta uma tabela com os campos de simple e all e o significado de cada coluna. As descrições vêm do mesmo schema usado pela aplicação. Quando um campo muda de sentido conforme o endpoint — por exemplo, x e y em Localidades e Indivíduos — a definição específica do endpoint é mostrada. Campos indicados como Darwin Core seguem o vocabulário de intercâmbio; campos indicados como locais são extensões do OpenDataBio.

Endpoints GET

/ (GET)

Testa seu acesso/token.

Nenhum parâmetro para este endpoint.


bibreferences (GET)

Referências bibliográficas (GET lista, POST cria).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
bibkeyNãoBibkey ou lista de bibkeys.ducke1953,mayr1992
biocollectionNãoId/nome/sigla de biocoleção; retorna referências que citam vouchers dessas coleções.INPA
datasetNãoId ou nome de dataset; retorna referências ligadas ao dataset.Forest1
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
job_idNãoId do job para reutilizar affected_ids ou filtrar resultados.1024
limitNãoQuantidade maxima de registros retornados.100
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
searchNãoBusca full-text no bibtex em modo booleano; espaços funcionam como AND.Amazon forest
taxonNãoLista de ids ou nomes canônicos de taxon; retorna referências ligadas ao taxon.Ocotea guianensis,Minquartia guianensis ou 120,455
taxon_rootNãoId/nome de taxon incluindo descendentes.Lauraceae

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
uuidsimple / allUUID estável do registro exportado.
bibkeysimple / allChave curta local OpenDataBio usada para identificar uma referência bibliográfica.
yearsimple / allAno de publicação de uma referência bibliográfica.
authorsimple / allTexto de autoria de uma referência bibliográfica ou nome taxonômico, dependendo do endpoint.
titlesimple / allTítulo de uma referência bibliográfica ou dataset, dependendo do endpoint.
doisimple / allDigital Object Identifier associado a uma referência bibliográfica.
urlsimple / allURL associada a uma referência bibliográfica.
bibtexsimple / allRepresentação BibTeX da referência bibliográfica ou citação de mídia.

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": [
        {
            "id": 2,
            "bibkey": "Riberiroetal1999FloraDucke",
            "year": 1999,
            "author": "José Eduardo Lahoz Da Silva Ribeiro and Michael John Gilbert Hopkins and Alberto Vicentini and Cynthia Anne Sothers and Maria Auxiliadora Da Silva Costa and Joneide Mouzinho De Brito and Maria Anália Duarte De Souza and Lúcia Helena Pinheiro Martins and Lúcia Garcez Lohmann and Paulo Apóstolo Costa Lima Assunção and Everaldo Da Costa Pereira and Cosme Fernandes Da Silva and Mariana Rabello Mesquita and Lilian Costa Procópio",
            "title": "Flora Da Reserva Ducke: Guia De Identificação Das Plantas Vasculares De Uma Floresta De Terra Firme Na Amazônica Central",
            "doi": null,
            "url": null,
            "bibtex": "@Article{Riberiroetal1999FloraDucke,\r\n  title = {Flora da Reserva Ducke: Guia de Identifica{\\c{c}}{\\~a}o das Plantas Vasculares de uma Floresta de Terra Firme na Amaz{\\^o}nica Central},\r\n  author = {José Eduardo Lahoz da Silva Ribeiro and Michael John Gilbert Hopkins and Alberto Vicentini and Cynthia Anne Sothers and Maria Auxiliadora da Silva Costa and Joneide Mouzinho de Brito and Maria Anália Duarte de Souza and Lúcia Helena Pinheiro Martins and Lúcia Garcez Lohmann and Paulo Apóstolo Costa Lima Assunç{ã}o and Everaldo da Costa Pereira and Cosme Fernandes da Silva and Mariana Rabello Mesquita and Lilian Costa Procópio},\r\n  journal = {Flora da Reserva Ducke: Guia de Identifica{\\c{c}}{\\~a}o das Plantas Vasculares de uma Floresta de Terra Firme na Amaz{\\^o}nica Central},\r\n  year = {1999},\r\n  publisher = {INPA-DFID Manaus},\r\n  pages = {819p},\r\n}"
        },
        {
            "id": 3,
            "bibkey": "Sutter2006female",
            "year": 2006,
            "author": "D. Merino Sutter and P. I. Forster and P. K. Endress",
            "title": "Female Flowers And Systematic Position Of Picrodendraceae (Euphorbiaceae S.l., Malpighiales)",
            "doi": "10.1007/s00606-006-0414-0",
            "url": "http://dx.doi.org/10.1007/s00606-006-0414-0",
            "bibtex": "@article{Sutter2006female,\n     author = {D. Merino Sutter and P. I. Forster and P. K. Endress},\n     year = {2006},\n     title = {Female flowers and systematic position of Picrodendraceae (Euphorbiaceae s.l., Malpighiales)},\n     issn = {0378-2697 | 1615-6110},\n     issue = {1-4},\n     url = {http://dx.doi.org/10.1007/s00606-006-0414-0},\n     doi = {10.1007/s00606-006-0414-0},\n     volume = {261},\n     page = {187-215},\n     journal = {Plant Systematics and Evolution},\n     journal_short = {Plant Syst. Evol.},\n     published = {Springer Science and Business Media LLC}\n}"
        }
    ]
}

biocollections (GET)

Biocoleções (GET lista, POST cria).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
acronymNãoSigla da biocoleção.INPA
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
irnNãoIRN do Index Herbariorum para filtrar biocoleções.123456
job_idNãoId do job para reutilizar affected_ids ou filtrar resultados.1024
limitNãoQuantidade maxima de registros retornados.100
nameNãoNome exato da biocoleção (string simples).Herbário do INPA
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
searchNãoParametro de busca de texto.Silva

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
uuidsimple / allUUID estável do registro exportado.
acronymsimple / allSigla local OpenDataBio de um projeto ou biocoleção.
namesimple / allNome local OpenDataBio do recurso exportado.
irnsimple / allNúmero de registro institucional local OpenDataBio de uma biocoleção.
countryallNome ou código do país associado a uma localidade, coleção ou linha de exportação BRAHMS.
cityallCidade local OpenDataBio registrada para uma biocoleção.
addressallTexto de endereço local OpenDataBio registrado para uma biocoleção.

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": [
        {
            "id": 1,
            "acronym": "INPA",
            "name": "Instituto Nacional de Pesquisas da Amazônia",
            "irn": 124921,
            "country": null,
            "city": null,
            "address": null
        },
        {
            "id": 2,
            "acronym": "SPB",
            "name": "Universidade de São Paulo",
            "irn": 126324,
            "country": null,
            "city": null,
            "address": null
        }
    ]
}

datasets (GET)

Datasets e versões publicadas de datasets (GET lista, POST cria via job de importação).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
bibreferenceNãoId ou bibkey da referência.34
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
has_versionsNãoQuando 1, retorna apenas datasets que possuem versões publicas.1
include_urlNãoQuando 1 com list_versions, inclui URL do archive.1
limitNãoQuantidade maxima de registros retornados.100
list_versionsNãoSe 1, lista arquivos de versões de dataset para os ids informados.1
nameNãoParametro generico de nome (taxon completo, local, export_name de trait, etc.).Ocotea guianensis
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
projectNãoId ou sigla do projeto.PDBFF ou 2
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
searchNãoParametro de busca de texto.Silva
summarizeNãoId do dataset para retornar sumarios de conteudo/taxonomia/traits.3
tagNãoTag/número/código do indivíduo.A-1234
tagged_withNãoIds de tags (virgula) ou texto para filtrar datasets por tags (lista de ids ou full-text).12,13 ou copa folha
taxonNãoId ou nome canônico do taxon (lista aceita).Licaria cannela,Licaria armeniaca ou 456,789
taxon_rootNãoId/nome de taxon incluindo descendentes.Lauraceae
traitsNãoLista de ids de traits (separados por virgula) para filtrar datasets.12,15
version_idNãoId da versão de dataset para listar ou baixar.34
version_uuidNãoUUID da versão de dataset para listar ou baixar.550e8400-e29b-41d4-a716-446655440000

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
uuidsimple / allUUID estável do registro exportado.
namesimple / allNome local OpenDataBio do recurso exportado.
titlesimple / allTítulo de uma referência bibliográfica ou dataset, dependendo do endpoint.
projectNamesimple / allNome ou sigla do projeto ligado ao registro ou dataset.
project_idsimple / allIdentificador numérico interno do projeto ligado ao registro ou dataset.
project_uuidsimple / allUUID estável do projeto ligado ao registro ou dataset.
descriptionsimple / allTexto descritivo local OpenDataBio do recurso exportado.
notessimple / allNotas locais OpenDataBio associadas ao recurso exportado.
contactEmailsimple / allE-mail de contato local OpenDataBio configurado para o dataset.
taggedWidthsimple / allLista local OpenDataBio de tags associadas a um dataset. Este nome de campo legado é mantido por compatibilidade da API.
policyCodesimple / allCódigo compacto da política derivado da licença do dataset e das obrigações de uso.
privacyLevelallNível de acesso interno local OpenDataBio configurado para o dataset; não é licença.
policyallTexto completo da política de dados armazenado localmente para um dataset.
measurements_countallContagem local OpenDataBio de medições ligadas ao dataset.
policyUrlallURL onde a política completa do dataset ou versão pode ser consultada.
policySummaryallResumo curto, em linguagem simples, das permissões e obrigações de uso.

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": [
        {
            "id": 4,
            "name": "PDBFF-FITO 1ha core plots 1-10cm dbh - TREELETS",
            "title": "Arvoretas (1cm>DAP",
            "projectName": "Projeto Dinâmica Biológica de Fragmentos Florestais (PDBFF-Data)",
            "notes": null,
            "privacyLevel": "Restrito a usuários autorizados",
            "policy": null,
            "description": "Contém o único censo de árvores de pequeno porte 1-10cm de diâmetro nas parcelas de 1ha do PDBFF, em 11 das 69 de parcelas permanentes de 1ha do Programa de Monitoramento de Plantas do PDBFF.",
            "measurements_count": null,
            "contactEmail": "example",
            "taggedWidth": "Parcelas florestais | PDBFF | Fitodemográfico",
            "uuid": "e1d8ce8d-4847-11f0-8e9f-9cb654b86224"
        }
    ]
}

individuals (GET)

Indivíduos (GET lista, POST cria, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
datasetNãoId/nome de dataset; com trait filtra por dataset_id de medições existentes, senão o dataset_id do indivíduo.3 ou FOREST1
date_maxNãoData final inclusiva (AAAA-MM-DD) comparada com a data do indivíduo.2024-12-31
date_minNãoData inicial inclusiva (AAAA-MM-DD) comparada com a data do indivíduo.2020-01-01
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
job_idNãoId do job para reutilizar affected_ids ou filtrar resultados.1024
limitNãoQuantidade maxima de registros retornados.100
locationNãoLista de ids/nomes de locais; retorna indivíduos ligados à esses locais.Parcela 25ha ou 55,60
location_rootNãoId/nome de local; inclui descendentes dos locais informados; retorna individuos dentro dos locais informadosAmazonas
odbrequest_idNãoId de request para filtrar indivíduos vinculados a esse pedido ODB.12
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
personNãoIds/nomes/abreviação/emails de coletoresSilva, J.B. da, Assunção, P.C.L. ou Paulo Apóstolo Costa Lima Assunção ou 3,567,300
projectNãoId/nome de projeto; filtra indivíduos cujo dataset pertence ao projeto.PDBFF
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
tagNãoFiltro por tag/número de indivíduo; aceita lista separada por virgula.A-123,2001,24,54
taxonNãoLista de ids/nomes de taxon; filtra pela identificacao exata (sem descendentes).Licaria cannela ou 456
taxon_rootNãoLista de ids/nomes de taxon; inclui descendentes de cada taxon.Lauraceae
traitNãoIds/export_name de traits; retorna indivíduos que tem medições para esses traits12,15 ou treeDbh,treeDbhPom
vernacularNãoIds/nomes de vernáculos (nomes populares) vinculados à indivíduos.castanha,itaúba,jacareúba ou 24,56,74

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
uuidsimple / allUUID estável do registro exportado.
dataset_idsimple / allIdentificador numérico interno do dataset que governa o registro exportado.
basisOfRecordsimple / allColuna Darwin Core: valor basisOfRecord indicando o tipo geral de registro biológico.
organismIDsimple / allColuna Darwin Core: identificador estável do organismo/indivíduo, formatado pelo OpenDataBio como odb:{installation}:individual:{uuid}.
organismNamesimple / allColuna Darwin Core: rótulo legível do organismo ou registro de indivíduo.
recordedByMainsimple / allColetor ou observador principal responsável pelo registro.
recordNumbersimple / allColuna Darwin Core: número de coleta ou observação.
eventDatesimple / allColuna Darwin Core: data ou intervalo em que ocorreu o evento de coleta, observação, captura da mídia ou ocorrência.
familysimple / allColuna taxonômica Darwin Core: família associada ao táxon exportado ou organismo identificado.
scientificNamesimple / allColuna taxonômica Darwin Core: nome científico associado ao registro no momento da exportação.
identificationQualifiersimple / allColuna Darwin Core: qualificador que expressa incerteza ou condição da identificação.
identifiedBysimple / allColuna Darwin Core: pessoa ou pessoas responsáveis pela identificação taxonômica.
dateIdentifiedsimple / allColuna Darwin Core: data em que a identificação taxonômica foi feita.
locationNamesimple / allRótulo de localidade compatível com Darwin Core usado pelo OpenDataBio para a localidade associada ao registro.
locationParentNamesimple / allNome da localidade pai que contém a localidade do registro.
higherGeographysimple / allColuna Darwin Core: contexto geográfico superior da localidade, como localidades parentais ou hierarquia administrativa.
decimalLatitudesimple / allColuna Darwin Core: latitude em graus decimais, quando coordenadas estão disponíveis para distribuição.
decimalLongitudesimple / allColuna Darwin Core: longitude em graus decimais, quando coordenadas estão disponíveis para distribuição.
xsimple / allCampo local OpenDataBio para posição de ocorrência: coordenada cartesiana X do indivíduo dentro da parcela, transecto ou localidade parental.
ysimple / allCampo local OpenDataBio para posição de ocorrência: coordenada cartesiana Y do indivíduo dentro da parcela, transecto ou localidade parental. Em transectos, o sinal pode indicar o lado do transecto.
gxsimple / allCoordenada X projetada ou de grade local OpenDataBio da posição de um indivíduo, quando disponível.
gysimple / allCoordenada Y projetada ou de grade local OpenDataBio da posição de um indivíduo, quando disponível.
anglesimple / allAzimute local OpenDataBio, em graus, de um ponto de referência até a posição de ocorrência.
distancesimple / allDistância local OpenDataBio, em metros, de um ponto de referência até a posição de ocorrência.
datasetIDsimple / allColuna Darwin Core: identificador estável do dataset que governa o registro, formatado pelo OpenDataBio como odb:{installation}:dataset:{uuid}; inclui o UUID do dataset e os prefixos da instalação.
datasetNamesimple / allColuna Darwin Core: nome ou título do dataset que governa o registro exportado.
accessRightssimple / allColuna Darwin Core: informação legível sobre permissões, restrições e condições de uso do registro, derivada da licença e da política de dados do dataset que governa o registro.
policyCodesimple / allCódigo compacto da política derivado da licença do dataset e das obrigações de uso.
recordedDateallColuna legada OpenDataBio equivalente a Darwin Core eventDate. Mantida em exportações all por compatibilidade; prefira eventDate para interoperabilidade.
recordedByallColuna Darwin Core: coletores ou observadores associados ao registro.
scientificNameAuthorshipallColuna taxonômica Darwin Core: texto de autoria associado ao nome científico.
taxon_idallIdentificador numérico interno do nome taxonômico ligado.
taxon_uuidallUUID estável do nome taxonômico ligado.
identification_idallIdentificador numérico interno da identificação taxonômica ligada ao registro.
identification_uuidallUUID estável da identificação taxonômica ligada ao registro.
taxonPublishedStatusallStatus de publicação do nome taxonômico usado na identificação.
genusallColuna taxonômica Darwin Core: gênero associado ao táxon exportado ou organismo identificado.
identificationRemarksallColuna Darwin Core: notas associadas à identificação taxonômica.
identificationBiocollectionallBiocoleção usada como referência para a identificação, quando aplicável.
identificationBiocollectionReferenceallNúmero de catálogo ou referência na biocoleção usada para identificação.
location_idallIdentificador numérico interno da localidade ligada.
location_uuidallUUID estável da localidade ligada.
georeferenceRemarksallColuna Darwin Core: notas descrevendo origem das coordenadas, incerteza ou detalhes de georreferenciamento.
relatedLocationsallOutras localidades relacionadas ao registro, como parcelas, transectos ou localidades de ocorrência ligadas.
organismRemarksallColuna Darwin Core: observações sobre o organismo ou indivíduo.
policyUrlallURL onde a política completa do dataset ou versão pode ser consultada.
policySummaryallResumo curto, em linguagem simples, das permissões e obrigações de uso.

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": [
        {
            "id": 306246,
            "basisOfRecord": "Organism",
            "organismID": "2639_Spruce_1852",
            "recordedByMain": "Spruce, R.",
            "recordNumber": "2639",
            "recordedDate": "1852-10",
            "recordedBy": "Spruce, R.",
            "scientificName": "Ecclinusa lanceolata",
            "scientificNameAuthorship": "(Mart. & Eichler) Pierre",
            "taxonPublishedStatus": "published",
            "genus": "Ecclinusa",
            "family": "Sapotaceae",
            "identificationQualifier": "",
            "identifiedBy": "Spruce, R.",
            "dateIdentified": "1852-10-00",
            "identificationRemarks": "",
            "identificationBiocollection": null,
            "identificationBiocollectionReference": null,
            "locationName": "São Gabriel da Cachoeira",
            "higherGeography": "São Gabriel da Cachoeira < Amazonas < Brasil",
            "decimalLatitude": 1.1841927,
            "decimalLongitude": -66.80167715,
            "georeferenceRemarks": "decimal coordinates are the CENTROID of the footprintWKT geometry",
            "locationParentName": "Amazonas",
            "x": null,
            "y": null,
            "gx": null,
            "gy": null,
            "angle": null,
            "distance": null,
            "organismRemarks": "prope Panure ad Rio Vaupes Amazonas, Brazil",
            "datasetName": "Exsicatas LABOTAM",
            "uuid": "c01000f0-f437-11ef-b90b-9cb654b86224"
        }
    ]
}

individual-locations (GET)

Ocorrências para indivíduos com múltiplas localizações (GET lista, POST/PUT grava).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
datasetNãoId/nome de dataset; filtra pelo dataset do indivíduo vinculado.FOREST1
date_maxNãoData/hora maxima; compara date_time ou data do indivíduo quando vazio.2024-12-31
date_minNãoData/hora minima; compara date_time ou data do indivíduo quando vazio.2020-01-01
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
individualNãoLista de ids de indivíduos com ocorrências retornadas.12,44
limitNãoQuantidade maxima de registros retornados.100
locationNãoId ou nome do local.Parcela 25ha ou 55
location_rootNãoId/nome do local incluindo descendentes.Amazonas ou 10
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
personNãoIds/nomes/emails de coletores; filtra pelas coletas dos indivíduos.Silva, J.B.|23
projectNãoId/nome de projeto; filtra ocorrências de indivíduos em datasets do projeto.PDBFF
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
tagNãoLista de tags/números de indivíduo; compara com individuals.number.A-123,B-2
taxonNãoId ou nome canônico do taxon (lista aceita).Licaria cannela,Licaria armeniaca ou 456,789
taxon_rootNãoId/nome de taxon incluindo descendentes.Lauraceae

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
uuidsimple / allUUID estável do registro exportado.
individual_idsimple / allIdentificador numérico interno do indivíduo ou organismo ligado.
individual_uuidsimple / allUUID estável do indivíduo ou organismo ligado.
location_idsimple / allIdentificador numérico interno da localidade ligada.
location_uuidsimple / allUUID estável da localidade ligada.
basisOfRecordsimple / allColuna Darwin Core: valor basisOfRecord indicando o tipo geral de registro biológico.
occurrenceIDsimple / allColuna Darwin Core: identificador estável do registro de ocorrência biológica. Uma ocorrência representa a presença/registro de um organismo ou táxon em uma localidade.
organismIDsimple / allColuna Darwin Core: identificador estável do organismo/indivíduo, formatado pelo OpenDataBio como odb:{installation}:individual:{uuid}.
organismNamesimple / allColuna Darwin Core: rótulo legível do organismo ou registro de indivíduo.
eventDatesimple / allColuna Darwin Core: data ou intervalo em que ocorreu o evento de coleta, observação, captura da mídia ou ocorrência.
locationNamesimple / allRótulo de localidade compatível com Darwin Core usado pelo OpenDataBio para a localidade associada ao registro.
higherGeographysimple / allColuna Darwin Core: contexto geográfico superior da localidade, como localidades parentais ou hierarquia administrativa.
decimalLatitudesimple / allColuna Darwin Core: latitude em graus decimais, quando coordenadas estão disponíveis para distribuição.
decimalLongitudesimple / allColuna Darwin Core: longitude em graus decimais, quando coordenadas estão disponíveis para distribuição.
xsimple / allCampo local OpenDataBio para posição de ocorrência: coordenada cartesiana X desta ocorrência do indivíduo dentro da parcela, transecto ou localidade parental.
ysimple / allCampo local OpenDataBio para posição de ocorrência: coordenada cartesiana Y desta ocorrência do indivíduo dentro da parcela, transecto ou localidade parental. Em transectos, o sinal pode indicar o lado do transecto.
anglesimple / allAzimute local OpenDataBio, em graus, de um ponto de referência até a posição de ocorrência.
distancesimple / allDistância local OpenDataBio, em metros, de um ponto de referência até a posição de ocorrência.
minimumElevationsimple / allColuna Darwin Core: limite inferior de elevação da ocorrência ou localidade, em metros.
occurrenceRemarkssimple / allColuna Darwin Core: observações sobre a ocorrência.
scientificNamesimple / allColuna taxonômica Darwin Core: nome científico associado ao registro no momento da exportação.
familysimple / allColuna taxonômica Darwin Core: família associada ao táxon exportado ou organismo identificado.
datasetIDsimple / allColuna Darwin Core: identificador estável do dataset que governa o registro, formatado pelo OpenDataBio como odb:{installation}:dataset:{uuid}; inclui o UUID do dataset e os prefixos da instalação.
datasetNamesimple / allColuna Darwin Core: nome ou título do dataset que governa o registro exportado.
accessRightssimple / allColuna Darwin Core: informação legível sobre permissões, restrições e condições de uso do registro, derivada da licença e da política de dados do dataset que governa o registro.
policyCodesimple / allCódigo compacto da política derivado da licença do dataset e das obrigações de uso.
occurrenceNameallRótulo legível de um registro de ocorrência.
recordedDateallColuna legada OpenDataBio equivalente a Darwin Core eventDate. Mantida em exportações all por compatibilidade; prefira eventDate para interoperabilidade.
georeferenceRemarksallColuna Darwin Core: notas descrevendo origem das coordenadas, incerteza ou detalhes de georreferenciamento.
organismRemarksallColuna Darwin Core: observações sobre o organismo ou indivíduo.
policyUrlallURL onde a política completa do dataset ou versão pode ser consultada.
policySummaryallResumo curto, em linguagem simples, das permissões e obrigações de uso.

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": [
        {
            "id": 306244,
            "individual_id": 306246,
            "basisOfRecord": "Occurrence",
            "occurrenceID": "2639_Spruce_1852.1852-10",
            "organismID": "2639_Spruce_1852",
            "scientificName": "Ecclinusa lanceolata",
            "family": "Sapotaceae",
            "recordedDate": "1852-10",
            "locationName": "São Gabriel da Cachoeira",
            "higherGeography": "Brasil > Amazonas > São Gabriel da Cachoeira",
            "decimalLatitude": 1.1841927,
            "decimalLongitude": -66.80167715,
            "georeferenceRemarks": "decimal coordinates are the CENTROID of the footprintWKT geometry",
            "x": null,
            "y": null,
            "angle": null,
            "distance": null,
            "minimumElevation": null,
            "occurrenceRemarks": null,
            "organismRemarks": "prope Panure ad Rio Vaupes Amazonas, Brazil",
            "datasetName": "Exsicatas LABOTAM"
        }
    ]
}

languages (GET)

Lista idiomas disponíveis.

ParâmetroObrigatórioDescriçãoExemplo
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
limitNãoQuantidade maxima de registros retornados.100
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": [
        {
            "id": 1,
            "code": "en",
            "name": "English",
            "is_locale": 1,
            "created_at": null,
            "updated_at": null
        }
    ]
}

locations (GET)

Localidades (GET lista, POST cria, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
adm_levelNãoUm ou mais códigos adm_level (separados por virgula ou array).10,100
datasetNãoId/nome de dataset; expande para todas as locations usadas pelo dataset.FOREST1
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
job_idNãoId do job para reutilizar affected_ids ou filtrar resultados.1024
latNãoLatitude (graus decimais) usada com querytype.-3.11
limitNãoQuantidade maxima de registros retornados.100
location_rootNãoAlias de root para compatibilidade.Amazonas
longNãoLongitude (graus decimais) usada com querytype.-60.02
nameNãoCorrespondencia exata de nome; aceita lista de nomes ou ids.Manaus
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
parent_idNãoId do pai para consultas hierarquicas.210
projectNãoId ou sigla do projeto.PDBFF ou 2
querytypeNãoQuando lat/long informados: busca geometrica exact|parent|closest.parent
rootNãoId/nome de local; retorna ele e todos os descendentes/relacionados.Amazonas
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
searchNãoBusca prefixada no nome (SQL LIKE name%).Mana
taxonNãoLista de ids/nomes de taxon; filtra locations por identificações vinculadas.Euterpe edulis
taxon_rootNãoLista de ids/nomes de taxon; inclui descendentes ao filtrar identificações vinculadas.Lauraceae
traitNãoId/nome de trait; so funciona junto com dataset para filtrar por measurements.DBH

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
uuidsimple / allUUID estável do registro exportado.
locationIDsimple / allColuna Darwin Core: identificador estável do registro de localidade, formatado pelo OpenDataBio como odb:{installation}:location:{uuid}.
basisOfRecordsimple / allColuna Darwin Core: valor basisOfRecord indicando o tipo geral de registro biológico.
locationNamesimple / allRótulo de localidade compatível com Darwin Core usado pelo OpenDataBio para a localidade associada ao registro.
adm_levelsimple / allCódigo local OpenDataBio do nível administrativo de uma localidade.
country_adm_levelsimple / allCódigo local OpenDataBio do nível administrativo que representa o país.
xsimple / allCampo local OpenDataBio para geometria da localidade: dimensão X ou comprimento de uma parcela/transecto no sistema de coordenadas local da localidade.
ysimple / allCampo local OpenDataBio para geometria da localidade: dimensão Y de uma parcela ou valor de largura/buffer de um transecto no sistema de coordenadas local da localidade.
startxsimple / allCoordenada X inicial local OpenDataBio de uma parcela, transecto ou sistema de coordenadas local.
startysimple / allCoordenada Y inicial local OpenDataBio de uma parcela, transecto ou sistema de coordenadas local.
distance_to_searchsimple / allDistância local OpenDataBio, geralmente em metros, entre uma localidade e a coordenada usada na busca.
parent_idsimple / allIdentificador numérico interno do registro pai em uma hierarquia.
parent_uuidsimple / allUUID estável do registro pai em uma hierarquia.
parentNamesimple / allNome local OpenDataBio da localidade pai.
higherGeographysimple / allColuna Darwin Core: contexto geográfico superior da localidade, como localidades parentais ou hierarquia administrativa.
footprintWKTsimple / allColuna Darwin Core: geometria da localidade em formato WKT, quando disponível.
locationRemarkssimple / allColuna Darwin Core: observações ou notas sobre a localidade.
decimalLatitudesimple / allColuna Darwin Core: latitude em graus decimais, quando coordenadas estão disponíveis para distribuição.
decimalLongitudesimple / allColuna Darwin Core: longitude em graus decimais, quando coordenadas estão disponíveis para distribuição.
georeferenceRemarkssimple / allColuna Darwin Core: notas descrevendo origem das coordenadas, incerteza ou detalhes de georreferenciamento.
geodeticDatumsimple / allColuna Darwin Core: datum espacial ou sistema de referência de coordenadas usado.

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": [
        {
            "id": 27297,
            "basisOfRecord": "Location",
            "locationName": "Parcela 1105",
            "adm_level": 100,
            "country_adm_level": "Parcela",
            "x": "100.00",
            "y": "100.00",
            "startx": null,
            "starty": null,
            "distance_to_search": null,
            "parent_id": 27277,
            "parentName": "Fazenda Esteio",
            "higherGeography": "Brasil > Amazonas > Rio Preto da Eva > Fazenda Esteio > Parcela 1105",
            "footprintWKT": "POLYGON((-59.81371985 -2.42215752,-59.81360263 -2.42126619,-59.81270751 -2.42136656,-59.81282469 -2.42225788,-59.81371985 -2.42215752))",
            "locationRemarks": "source: Polígono desenhado a partir das coordenadas de GPS dos vértices; georeferencedBy: Diogo Martins Rosa & Ana Andrade; fundedBy: Edital CNPq-Brasil/LBA 458027/2013-8; geometryBy: Alberto Vicentini; geometryDate: 2021-09-29; warning: Conflito com polígono da UC de 2021. Este polígono deveria ter a mesma geometria do polígono correspondente que faz parte da UC ARIE PDBFF, mas como ele foi gerado pelas coordenadas de campo, foi mantida essa geometria. A UC, portanto, não protege adequadamente essa parcela de monitoramento.",
            "decimalLatitude": -2.42215752,
            "decimalLongitude": -59.81371985,
            "georeferenceRemarks": "decimal coordinates are the START POINT in footprintWKT geometry",
            "geodeticDatum": null
        }
    ]
}

measurements (GET)

Medições de traits (GET lista, POST cria via job de importação, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
bibreferenceNãoId ou bibkey da referência.34
datasetNãoId ou sigla do dataset.3 ou FOREST1
date_maxNãoFiltra registros ate esta data (AAAA-MM-DD).2024-12-31
date_minNãoFiltra registros a partir desta data (AAAA-MM-DD).2020-01-01
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
individualNãoId, uuid ou organismID do indivíduo.4521 ou 2ff0e884-3d33
job_idNãoId do job para reutilizar affected_ids ou filtrar resultados.1024
limitNãoQuantidade maxima de registros retornados.100
locationNãoId ou nome do local.Parcela 25ha ou 55
location_rootNãoId/nome do local incluindo descendentes.Amazonas ou 10
measured_idNãoFiltro de measurement: id do objeto medido (coerente com measured_type).4521
measured_typeNãoFiltro de measurement: classe do objeto medido (Individual, Location, Taxon, Voucher, Media).Media
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
personNãoId/abreviação/nome/email de pessoa (aceita lista com | ou ;).Silva, J.B.|Costa, M.
projectNãoId ou sigla do projeto.PDBFF ou 2
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
taxonNãoId ou nome canônico do taxon (lista aceita).Licaria cannela,Licaria armeniaca ou 456,789
taxon_rootNãoId/nome de taxon incluindo descendentes.Lauraceae
traitNãoId ou export_name do trait para filtro.DBH
trait_typeNãoFiltra measurements pelo código do tipo de trait.1
voucherNãoId do voucher para filtrar measurements.102

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
uuidsimple / allUUID estável do registro exportado.
measurementIDsimple / allColuna Darwin Core: identificador estável do registro de medição, formatado pelo OpenDataBio como odb:{installation}:measurement:{uuid}.
dataset_idsimple / allIdentificador numérico interno do dataset que governa o registro exportado.
basisOfRecordsimple / allColuna Darwin Core: valor basisOfRecord indicando o tipo geral de registro biológico.
measured_typesimple / allTipo de modelo local OpenDataBio do objeto medido por um registro de medição.
measured_idsimple / allIdentificador numérico interno do objeto medido por um registro de medição.
measured_uuidsimple / allUUID estável do objeto medido por um registro de medição, quando o objeto possui UUID.
trait_idsimple / allIdentificador numérico interno do trait ligado.
trait_uuidsimple / allUUID estável do trait ligado.
measurementTypesimple / allColuna Darwin Core MeasurementOrFact: nome de exportação do trait ou tipo de medição representado.
measurementValuesimple / allColuna Darwin Core MeasurementOrFact: valor registrado da medição.
measurementUnitsimple / allColuna Darwin Core MeasurementOrFact: unidade associada ao valor da medição.
measurementDeterminedBysimple / allColuna Darwin Core MeasurementOrFact: pessoa ou pessoas que determinaram ou registraram a medição.
measurementDeterminedDatesimple / allColuna Darwin Core MeasurementOrFact: data em que a medição foi determinada ou registrada.
scientificNamesimple / allColuna taxonômica Darwin Core: nome científico associado ao registro no momento da exportação.
familysimple / allColuna taxonômica Darwin Core: família associada ao táxon exportado ou organismo identificado.
datasetIDsimple / allColuna Darwin Core: identificador estável do dataset que governa o registro, formatado pelo OpenDataBio como odb:{installation}:dataset:{uuid}; inclui o UUID do dataset e os prefixos da instalação.
datasetNamesimple / allColuna Darwin Core: nome ou título do dataset que governa o registro exportado.
sourceCitationsimple / allCitação da fonte da qual o registro ou medição foi derivado.
accessRightssimple / allColuna Darwin Core: informação legível sobre permissões, restrições e condições de uso do registro, derivada da licença e da política de dados do dataset que governa o registro.
policyCodesimple / allCódigo compacto da política derivado da licença do dataset e das obrigações de uso.
dataset_uuidallUUID estável do dataset que governa o registro exportado.
measurementRemarksallColuna Darwin Core MeasurementOrFact: notas associadas à medição.
resourceRelationshipallColuna Darwin Core ResourceRelationship: tipo de relação entre o registro exportado e o recurso ao qual ele está ligado.
resourceRelationshipIDallColuna Darwin Core de relação: identificador estável do recurso OpenDataBio relacionado, formatado como odb:{installation}:{type}:{uuid} quando o objeto relacionado possui identificador estável.
resourceRelationshipNameallColuna compatível com Darwin Core ResourceRelationship: nome legível do recurso relacionado.
relationshipOfResourceallValor Darwin Core relationshipOfResource descrevendo como o recurso está relacionado.
measurementMethodallColuna Darwin Core MeasurementOrFact: método ou protocolo usado para obter a medição.
bibreference_idallIdentificador numérico interno da referência bibliográfica ligada.
bibreference_uuidallUUID estável da referência bibliográfica ligada.
measurementLocationIdallIdentificador numérico interno da localidade associada à medição.
measurementLocationUuidallUUID estável da localidade associada à medição.
measurementParentIdallIdentificador numérico interno da medição pai quando esta medição é aninhada.
measurementParentUuidallUUID estável da medição pai quando esta medição é aninhada.
decimalLatitudeallColuna Darwin Core: latitude em graus decimais, quando coordenadas estão disponíveis para distribuição.
decimalLongitudeallColuna Darwin Core: longitude em graus decimais, quando coordenadas estão disponíveis para distribuição.
policyUrlallURL onde a política completa do dataset ou versão pode ser consultada.
policySummaryallResumo curto, em linguagem simples, das permissões e obrigações de uso.

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": [
        {
            "id": 853443,
            "basisOfRecord": "MeasurementsOrFact",
            "measured_type": "App\\Models\\Voucher",
            "measured_id": 1519,
            "measurementType": "HasSilica",
            "measurementValue": "Sim",
            "measurementUnit": null,
            "measurementDeterminedDate": "2014-09-24",
            "measurementDeterminedBy": "Equipe FITO",
            "measurementRemarks": null,
            "resourceRelationship": null,
            "resourceRelationshipID": "3304.8846.Equipe-FITO.PDBFF.PDBFF005425",
            "relationshipOfResource": "measurement of",
            "scientificName": "Pouteria fimbriata",
            "family": "Sapotaceae",
            "datasetName": "SILICOTECA",
            "measurementMethod": "Name: Has sílica-gel sample for DNA extraction | Definition:Has a tissue preserved in sílica-gel for DNA extractions. | Categories: CategoryName: Yes | Definition:Has an associated sample in sílica-gel.",
            "sourceCitation": null,
            "measurementLocationId": 29639,
            "measurementParentId": null,
            "decimalLatitude": -2.36495453,
            "decimalLongitude": -59.97365135
        }
    ]
}

media (GET)

Metadados de mídia (GET lista, POST cria, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
datasetNãoId ou sigla do dataset.3 ou FOREST1
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
individualNãoId, uuid ou organismID do indivíduo.4521 ou 2ff0e884-3d33
job_idNãoId do job para reutilizar affected_ids ou filtrar resultados.1024
limitNãoQuantidade maxima de registros retornados.100
locationNãoId ou nome do local.Parcela 25ha ou 55
location_rootNãoId/nome do local incluindo descendentes.Amazonas ou 10
media_idNãoId numerico de mídia.88
media_uuidNãoUUID da mídia.a3f0a4ac-6b5b-11ed-b8c0-0242ac120002
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
personNãoId/abreviação/nome/email de pessoa (aceita lista com | ou ;).Silva, J.B.|Costa, M.
projectNãoId ou sigla do projeto.PDBFF ou 2
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
tagNãoTag/número/código do indivíduo.A-1234
taxonNãoId ou nome canônico do taxon (lista aceita).Licaria cannela,Licaria armeniaca ou 456,789
taxon_rootNãoId/nome de taxon incluindo descendentes.Lauraceae
uuidNão
voucherNãoId do voucher para filtrar measurements.102

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
uuidsimple / allUUID estável do registro exportado.
model_typesimple / allClasse de modelo local OpenDataBio do objeto ligado a um registro de mídia.
model_idsimple / allIdentificador numérico interno do objeto OpenDataBio ligado a um registro de mídia.
model_uuidsimple / allUUID estável do objeto OpenDataBio ligado a um registro de mídia.
dataset_idsimple / allIdentificador numérico interno do dataset que governa o registro exportado.
dataset_uuidsimple / allUUID estável do dataset que governa o registro exportado.
project_idsimple / allIdentificador numérico interno do projeto ligado ao registro ou dataset.
project_uuidsimple / allUUID estável do projeto ligado ao registro ou dataset.
basisOfRecordsimple / allColuna Darwin Core: valor basisOfRecord indicando o tipo geral de registro biológico.
recordedBysimple / allColuna Darwin Core: coletores ou observadores associados ao registro.
eventDatesimple / allColuna Darwin Core: data ou intervalo em que ocorreu o evento de coleta, observação, captura da mídia ou ocorrência.
dwcTypesimple / allValor Darwin Core / Dublin Core de tipo da mídia ou recurso ligado.
resourceRelationshipsimple / allColuna Darwin Core ResourceRelationship: tipo de relação entre o registro exportado e o recurso ao qual ele está ligado.
resourceRelationshipIDsimple / allColuna Darwin Core de relação: identificador estável do recurso OpenDataBio relacionado, formatado como odb:{installation}:{type}:{uuid} quando o objeto relacionado possui identificador estável.
resourceRelationshipNamesimple / allColuna compatível com Darwin Core ResourceRelationship: nome legível do recurso relacionado.
relationshipOfResourcesimple / allValor Darwin Core relationshipOfResource descrevendo como o recurso está relacionado.
scientificNamesimple / allColuna taxonômica Darwin Core: nome científico associado ao registro no momento da exportação.
familysimple / allColuna taxonômica Darwin Core: família associada ao táxon exportado ou organismo identificado.
datasetIDsimple / allColuna Darwin Core: identificador estável do dataset que governa o registro, formatado pelo OpenDataBio como odb:{installation}:dataset:{uuid}; inclui o UUID do dataset e os prefixos da instalação.
datasetNamesimple / allColuna Darwin Core: nome ou título do dataset que governa o registro exportado.
projectNamesimple / allNome ou sigla do projeto ligado ao registro ou dataset.
taggedWithsimple / allTags ou palavras-chave associadas ao registro.
accessRightssimple / allColuna Darwin Core: informação legível sobre permissões, restrições e condições de uso do registro, derivada da licença e da política de dados do dataset que governa o registro.
policyCodesimple / allCódigo compacto da política derivado da licença do dataset e das obrigações de uso.
licensesimple / allLicença atribuída ao arquivo de mídia ou recurso de dataset.
file_namesimple / allNome do arquivo armazenado para uma mídia ou arquivo de dataset para download.
file_urlsimple / allURL pública para recuperar o arquivo de mídia ou arquivo de download.
citationsimple / allCitação legível associada ao registro ou arquivo de mídia.
recordedDateallColuna legada OpenDataBio equivalente a Darwin Core eventDate. Mantida em exportações all por compatibilidade; prefira eventDate para interoperabilidade.
policyUrlallURL onde a política completa do dataset ou versão pode ser consultada.
policySummaryallResumo curto, em linguagem simples, das permissões e obrigações de uso.
bibliographicCitationallColuna Darwin Core / Dublin Core: citação bibliográfica formatada associada ao registro.
bibtexallRepresentação BibTeX da referência bibliográfica ou citação de mídia.
userNameallNome do usuário OpenDataBio associado à ação no registro.
created_atallData e hora em que o registro foi criado no OpenDataBio.

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": [
        {
            "id": 20211,
            "model_type": "App\\Models\\Individual",
            "model_id": 111785,
            "basisOfRecord": "MachineObservation",
            "recordedBy": "Francisco Javier Farroñay Pacaya",
            "recordedDate": "2025-03-09",
            "dwcType": "StillImage",
            "resourceRelationship": "Organism",
            "resourceRelationshipID": "3402-1134_Pereira_1986",
            "relationshipOfResource": "StillImage of ",
            "scientificName": "Sacoglottis guianensis",
            "family": "Humiriaceae",
            "datasetName": "Unknown dataset",
            "projectName": "Projeto Dinâmica Biológica de Fragmentos Florestais",
            "taggedWith": "Folha abaxial",
            "accessRights": "Open access.",
            "bibliographicCitation": "Sacoglottis guianensis (Humiriaceae). (2025). By Francisco Javier Farroñay Pacaya. Collection: Pereira, M.J.R. #3402-1134 on 1986-01-24, from Quadrante 52, Parcela 3402-3, Reserva 3402, Cabo Frio, Fazenda Porto Alegre, Amazonas, Brasil (PDBFF). Project: PDBFF-Data. Instituto Nacional de Pesquisas da Amazônia (INPA), Manaus, Amazonas, Brasil. Type: Image. License: CC-BY-NC-SA 4.0. uuid: inpa-odb-3f139ba4-f22b-42d8-9e74-c340309061c2, url: http://localhost/opendatabio",
            "license": "CC-BY-NC-SA 4.0",
            "file_name": "67ce28cd76f4a.jpg",
            "file_url": "http://localhost/opendatabio/storage/media/20211/67ce28cd76f4a.jpg",
            "citation": "Sacoglottis guianensis (Humiriaceae). (2025). By Francisco Javier Farroñay Pacaya. Collection: Pereira, M.J.R. #3402-1134 on 1986-01-24, from Quadrante 52, Parcela 3402-3, Reserva 3402, Cabo Frio, Fazenda Porto Alegre, Amazonas, Brasil (PDBFF). Project: PDBFF-Data. Instituto Nacional de Pesquisas da Amazônia (INPA), Manaus, Amazonas, Brasil. Type: Image. License: CC-BY-NC-SA 4.0. uuid: inpa-odb-3f139ba4-f22b-42d8-9e74-c340309061c2, url: http://localhost/opendatabio",
            "uuid": "3f139ba4-f22b-42d8-9e74-c340309061c2",
            "bibtex": "@misc{Farronay_2025_20211,\n{\n    \"title\": \" Sacoglottis guianensis (Humiriaceae)\",\n    \"year\": \"(2025)\",\n    \"author\": \"Francisco Javier Farroñay Pacaya\",\n    \"howpublished\": \"{http:\\/\\/localhost\\/opendatabio\\/media\\/uuid\\/3f139ba4-f22b-42d8-9e74-c340309061c2}\",\n    \"license\": \"CC-BY-NC-SA 4.0\",\n    \"note\": \"Type: Image; Collection: Pereira, M.J.R. #3402-1134 on 1986-01-24, from Quadrante 52, Parcela 3402-3, Reserva 3402, Cabo Frio, Fazenda Porto Alegre, Amazonas, Brasil (PDBFF); Coordinates: POINT(-59.91500315727877 -2.3929141688648765); License: CC-BY-NC-SA 4.0; Project: PDBFF-Data.; Accessed: 2026-02-04\",\n    \"publisher\": \"Instituto Nacional de Pesquisas da Amazônia (INPA), Manaus, Amazonas, Brasil\"\n}\n}",
            "userName": "example",
            "created_at": "2025-03-09T23:48:29.000000Z"
        }
    ]
}

persons (GET)

Pessoas (GET lista, POST cria, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
abbrevNãoBusca por abreviação de pessoa.Silva, J.B.
emailNãoEndereco de email.user@example.org
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
job_idNãoId do job para reutilizar affected_ids ou filtrar resultados.1024
limitNãoQuantidade maxima de registros retornados.100
nameNãoParametro generico de nome (taxon completo, local, export_name de trait, etc.).Ocotea guianensis
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
searchNãoParametro de busca de texto.Silva

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
uuidsimple / allUUID estável do registro exportado.
full_namesimple / allNome completo local OpenDataBio de uma pessoa.
abbreviationsimple / allAbreviação local OpenDataBio de uma pessoa ou biocoleção.
emailAddresssimple / allE-mail local OpenDataBio de pessoa quando está disponível para exportação.
institutionsimple / allInstituição local OpenDataBio associada a uma pessoa.
orcidsimple / allIdentificador ORCID associado a uma pessoa.
notessimple / allNotas locais OpenDataBio associadas ao recurso exportado.

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": [
        {
            "id": 3127,
            "full_name": "Raimundo Afeganistão",
            "abbreviation": "AFEGANISTÃO, R.",
            "emailAddress": null,
            "institution": null,
            "notes": "PDBFF"
        },
        {
            "id": 14,
            "full_name": "Maria de Fátima  Agra",
            "abbreviation": "Agra, M.F.",
            "emailAddress": null,
            "institution": null,
            "notes": null
        },
        {
            "id": 15,
            "full_name": "J. L. A. Aguiar Jr",
            "abbreviation": "Aguiar Jr., J.L.A.",
            "emailAddress": null,
            "institution": null,
            "notes": null
        }
    ]
}

projects (GET)

Projetos (GET lista).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
job_idNãoId do job para reutilizar affected_ids ou filtrar resultados.1024
limitNãoQuantidade maxima de registros retornados.100
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
searchNãoParametro de busca de texto.Silva
tagNãoTag/número/código do indivíduo.A-1234

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
uuidsimple / allUUID estável do registro exportado.
acronymsimple / allSigla local OpenDataBio de um projeto ou biocoleção.
namesimple / allNome local OpenDataBio do recurso exportado.
descriptionsimple / allTexto descritivo local OpenDataBio do recurso exportado.
pagesallMetadados locais OpenDataBio de páginas do projeto.
urlsallLista local OpenDataBio de URLs associadas a um projeto.
created_atallData e hora em que o registro foi criado no OpenDataBio.
updated_atallData e hora da última atualização do registro no OpenDataBio.

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": [
        {
            "id": 1,
            "acronym": "PDBFF-Data",
            "name": "Projeto Dinâmica Biológica de Fragmentos Florestais",
            "description": "Este espaço agrega conjuntos de dados de monitoramentos e pesquisas realizadas nas áreas amostrais do PDBFF,  localizadas na Área de Relevante Interesse Ecológico - ARIE PDBFF.",
            "pages": {
                "en": null,
                "pt-br": null
            },
            "urls": [
                {
                    "url": "https://alfa-pdbff.site/",
                    "label": null,
                    "icon": "fa-solid fa-globe"
                }
            ],
            "created_at": "2022-10-31T07:01:18.000000Z",
            "updated_at": "2023-11-17T21:08:55.000000Z"
        }
    ]
}

taxons (GET)

Nomes taxonômicos (GET lista, POST cria).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
bibreferenceNãoId ou bibkey da referência.34
biocollectionNãoId, nome ou sigla da biocoleção.INPA
datasetNãoId ou sigla do dataset.3 ou FOREST1
externalNãoFlag para incluir ids externos (Tropicos, IPNI, etc.).1
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
job_idNãoId do job para reutilizar affected_ids ou filtrar resultados.1024
levelNãoCódigo ou string do nível taxonômico.210 ou species
limitNãoQuantidade maxima de registros retornados.100
location_rootNãoId/nome do local incluindo descendentes.Amazonas ou 10
nameNãoParametro generico de nome (taxon completo, local, export_name de trait, etc.).Ocotea guianensis
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
personNãoId/abreviação/nome/email de pessoa (aceita lista com | ou ;).Silva, J.B.|Costa, M.
projectNãoId ou sigla do projeto.PDBFF ou 2
rootNãoId raiz para consultas hierarquicas (taxon ou local).120
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
taxon_rootNãoId/nome de taxon incluindo descendentes.Lauraceae
traitNãoId ou export_name do trait para filtro.DBH
validNãoQuando 1 retorna apenas nomes taxonômicos validos.1
vernacularNãoId ou nome de vernacular para filtrar individuals.castanha|12

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
basisOfRecordsimple / allColuna Darwin Core: valor basisOfRecord indicando o tipo geral de registro biológico.
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
uuidsimple / allUUID estável do registro exportado.
scientificNameIDsimple / allColuna taxonômica Darwin Core: identificador estável do registro de nome taxonômico, formatado pelo OpenDataBio como odb:{installation}:taxon:{uuid}.
scientificNamesimple / allColuna taxonômica Darwin Core: nome científico associado ao registro no momento da exportação.
taxonRanksimple / allColuna taxonômica Darwin Core: nível taxonômico do nome científico.
scientificNameAuthorshipsimple / allColuna taxonômica Darwin Core: texto de autoria associado ao nome científico.
namePublishedInsimple / allColuna taxonômica Darwin Core: referência bibliográfica na qual o nome taxonômico foi publicado.
parentNameUsageIDsimple / allColuna taxonômica Darwin Core: identificador estável do táxon pai, formatado pelo OpenDataBio como odb:{installation}:taxon:{uuid}.
parentNameUsagesimple / allColuna taxonômica Darwin Core: nome do táxon pai na hierarquia taxonômica.
familysimple / allColuna taxonômica Darwin Core: família associada ao táxon exportado ou organismo identificado.
higherClassificationsimple / allColuna taxonômica Darwin Core: caminho de classificação taxonômica superior do táxon.
taxonRemarkssimple / allColuna taxonômica Darwin Core: observações sobre o táxon.
taxonomicStatussimple / allColuna taxonômica Darwin Core: status taxonômico do nome, como nome aceito ou sinônimo.
acceptedNameUsagesimple / allColuna taxonômica Darwin Core: nome científico aceito quando o nome exportado não é aceito.
acceptedNameUsageIDsimple / allColuna taxonômica Darwin Core: identificador estável do nome taxonômico aceito, formatado pelo OpenDataBio como odb:{installation}:taxon:{uuid}.
author_uuidallUUID estável da pessoa ligada como autora de um nome taxonômico não publicado.
bibreference_uuidallUUID estável da referência bibliográfica ligada.
parent_idallIdentificador numérico interno do registro pai em uma hierarquia.
parent_uuidallUUID estável do registro pai em uma hierarquia.
senior_idallIdentificador numérico interno do nome taxonômico aceito ou sênior.
externalKeysallIdentificadores de bases externas ligados a um nome taxonômico no OpenDataBio.

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": [
        {
            "id": 16332,
            "senior_id": null,
            "parent_id": 16331,
            "author_id": null,
            "scientificName": "Aiouea grandifolia",
            "taxonRank": "Species",
            "scientificNameAuthorship": "van der Werff",
            "namePublishedIn": null,
            "parentName": "Aiouea",
            "family": "Lauraceae",
            "higherClassification": "Eukaryota > Plantae > Viridiplantae > Embryophytes > Spermatopsida > Angiosperms > Magnoliidae > Laurales > Lauraceae > Aiouea",
            "taxonRemarks": null,
            "taxonomicStatus": "accepted",
            "acceptedNameUsage": null,
            "acceptedNameUsageID": null,
            "parentNameUsage": "Aiouea",
            "scientificNameID": "https://tropicos.org/Name/17806050 | https://www.gbif.org/species/4175896",
            "basisOfRecord": "Taxon"
        }
    ]
}

traits (GET)

Definições de traits (GET lista, POST cria).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
bibreferenceNãoId ou bibkey da referência.34
categoriesNãoLista JSON de categorias de trait com lang/rank/name/description.[{\"lang\":\"en\",\"rank\":1,\"name\":\"small\"}]
datasetNãoId ou sigla do dataset.3 ou FOREST1
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
job_idNãoId do job para reutilizar affected_ids ou filtrar resultados.1024
languageNãoId/código/nome do idioma. Para POST vernaculars, idiomas cadastrados são aceitos; idiomas ausentes são criados a partir de config/languagesISO6393.php apenas quando o valor informado corresponder a código ISO639-3 ou nome configurado, com is_locale=0.en ou 1 ou english ou spa
limitNãoQuantidade maxima de registros retornados.100
nameNãoParametro generico de nome (taxon completo, local, export_name de trait, etc.).Ocotea guianensis
object_typeNãoTipo do objeto medido: Individual, Location, Taxon, Voucher ou Media.Individual
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
searchNãoParametro de busca de texto.Silva
tagNãoTag/número/código do indivíduo.A-1234
taxonNãoId ou nome canônico do taxon (lista aceita).Licaria cannela,Licaria armeniaca ou 456,789
taxon_rootNãoId/nome de taxon incluindo descendentes.Lauraceae
traitNãoId ou export_name do trait para filtro.DBH
typeNãoParametro generico type (código do trait ou tipo de vernacular: use/generic/etimology).use ou 10

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
uuidsimple / allUUID estável do registro exportado.
parent_idsimple / allIdentificador numérico interno do registro pai em uma hierarquia.
parent_uuidsimple / allUUID estável do registro pai em uma hierarquia.
typesimple / allCódigo ou rótulo local OpenDataBio do tipo do recurso exportado.
typenamesimple / allNome legível local OpenDataBio de um tipo de trait.
export_namesimple / allNome de exportação estável local OpenDataBio de um trait, usado como chave pública em medições.
unitsimpleUnidade de medição local OpenDataBio configurada para um trait.
range_minsimple / allValor mínimo válido local OpenDataBio configurado para um trait quantitativo.
range_maxsimple / allValor máximo válido local OpenDataBio configurado para um trait quantitativo.
link_typesimple / allTipo de objeto alvo local OpenDataBio permitido para um trait do tipo link.
value_lengthsimple / allNúmero local OpenDataBio de valores esperados para um trait espectral.
namesimple / allNome local OpenDataBio do recurso exportado.
descriptionsimple / allTexto descritivo local OpenDataBio do recurso exportado.
objectssimple / allLista local OpenDataBio de tipos de objetos aos quais um trait pode se aplicar.
measurementTypesimple / allColuna Darwin Core MeasurementOrFact: nome de exportação do trait ou tipo de medição representado.
categoriessimple / allLista local OpenDataBio de categorias de trait, incluindo rótulos e descrições quando disponíveis.
bibreference_idallIdentificador numérico interno da referência bibliográfica ligada.
bibreference_uuidallUUID estável da referência bibliográfica ligada.
measurementUnitallColuna Darwin Core MeasurementOrFact: unidade associada ao valor da medição.
measurementMethodallColuna Darwin Core MeasurementOrFact: método ou protocolo usado para obter a medição.
MeasurementTypeBibkeysallLista local OpenDataBio de bibkeys que sustentam o tipo de medição do trait.
TaggedWithallLista local OpenDataBio de tags associadas a um trait.

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": [
        {
            "id": 206,
            "type": 1,
            "typename": "QUANT_REAL",
            "export_name": "treeDbh",
            "measurementType": "treeDbh",
            "measurementUnit": "cm",
            "range_min": 0.1,
            "range_max": 700,
            "link_type": null,
            "value_length": null,
            "name": "Diâmetro à altura do peito – DAP",
            "description": "Diâmetro à altura do peito, i.e. medido a ca. 1.3m desde a base do caule",
            "objects": "App\\Models\\Individual | App\\Models\\Voucher | App\\Models\\Location | App\\Models\\Taxon | App\\Models\\Media",
            "measurementMethod": "Name: Diameter at breast height - DBH | Definition:Diameter at breast height,, i.e. ca. 1.3 meters from the base of the trunk",
            "MeasurementTypeBibkeys": "",
            "TaggedWith": "",
            "categories": null
        },
        {
            "id": 207,
            "type": 1,
            "typename": "QUANT_REAL",
            "export_name": "treeDbhPom",
            "measurementType": "treeDbhPom",
            "measurementUnit": "m",
            "range_min": 0,
            "range_max": 15,
            "link_type": null,
            "value_length": null,
            "name": "Ponto de medição do DAP",
            "description": "Ponto de medição do DAP, necessário quando impossível medir a 1.3 m",
            "objects": "App\\Models\\Individual",
            "measurementMethod": "Name: DBH Point of Measurement | Definition:DAP measuring height, necessary when impossible to measure at 1.3 m",
            "MeasurementTypeBibkeys": "",
            "TaggedWith": "",
            "categories": null
        },
        {
            "id": 524,
            "type": 2,
            "typename": "CATEGORICAL",
            "export_name": "stemType",
            "measurementType": "stemType",
            "measurementUnit": null,
            "range_min": null,
            "range_max": null,
            "link_type": null,
            "value_length": null,
            "name": "Tipo de fuste",
            "description": "Tipo de fuste",
            "objects": "App\\Models\\Voucher | App\\Models\\Individual | App\\Models\\Taxon",
            "measurementMethod": "Name: Type of stem | Definition:Type of stem | Categories: CategoryName: Main stem | Definition:The main trunk, usually the thickest. | CategoryName: Secondary stem | Definition:A secondary trunk, there is a thicker one, which defines the area better. A shoot below 1.3 m high is a secondary trunk.",
            "MeasurementTypeBibkeys": "",
            "TaggedWith": "",
            "categories": [
                {
                    "id": 12990,
                    "name": "Fuste principal",
                    "description": "O tronco principal, geralmente o mais grosso.",
                    "rank": 1,
                    "belongs_to_trait": "stemType"
                },
                {
                    "id": 12991,
                    "name": "Fuste secundário",
                    "description": "Um tronco secundário, há outro mais grosso, que define melhor a área. Um rebroto abaixo de 1.3 m de altura é um tronco secundário.",
                    "rank": 2,
                    "belongs_to_trait": "stemType"
                }
            ]
        }
    ]
}

vernaculars (GET)

Nomes vernáculos (GET lista, POST cria).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
individualNãoId, uuid ou organismID do indivíduo.4521 ou 2ff0e884-3d33
job_idNãoId do job para reutilizar affected_ids ou filtrar resultados.1024
limitNãoQuantidade maxima de registros retornados.100
locationNãoId ou nome do local.Parcela 25ha ou 55
location_rootNãoId/nome do local incluindo descendentes.Amazonas ou 10
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
taxonNãoId ou nome canônico do taxon (lista aceita).Licaria cannela,Licaria armeniaca ou 456,789
taxon_rootNãoId/nome de taxon incluindo descendentes.Lauraceae

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
uuidsimple / allUUID estável do registro exportado.
namesimple / allNome local OpenDataBio do recurso exportado.
languageNamesimple / allNome do idioma local OpenDataBio associado a um nome vernacular.
notessimple / allNotas locais OpenDataBio associadas ao recurso exportado.
locationsListsimple / allLista legível local OpenDataBio de localidades ligadas ao registro.
taxonsListsimple / allLista legível local OpenDataBio de táxons ligados ao registro.
individualsListsimple / allLista legível local OpenDataBio de indivíduos ligados ao registro.
citationsArraysimple / allLista estruturada local OpenDataBio de citações ligadas a um nome vernacular.
languageCodeallCódigo de idioma local OpenDataBio associado a um nome vernacular.
taxonsListArrayallArray estruturado local OpenDataBio de táxons ligados ao registro.
individualsListArrayallArray estruturado local OpenDataBio de indivíduos ligados ao registro.
locationsListArrayallArray estruturado local OpenDataBio de localidades ligadas ao registro.
variantsListallLista legível local OpenDataBio de variantes vernaculares ligadas ao registro.
variantsListArrayallArray estruturado local OpenDataBio de variantes vernaculares ligadas ao registro.
createdByallUsuário ou pessoa local OpenDataBio que criou o registro.
created_atallData e hora em que o registro foi criado no OpenDataBio.
updated_atallData e hora da última atualização do registro no OpenDataBio.

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": []
}

vouchers (GET)

Vouchers de coleção (GET lista, POST cria, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
bibreferenceNãoId ou bibkey da referência.34
bibreference_idNãoLista de ids de BibReference para filtrar vouchers.10,11
biocollectionNãoId, nome ou sigla da biocoleção.INPA
biocollection_idNãoLista de ids de biocoleção para filtrar vouchers.1,5
collectorNãoColetor(es) id, abreviação, nome ou email. Separe múltiplos com | ou ;, primeiro e o principal.Silva, J.B.|Costa, M.
datasetNãoId ou sigla do dataset.3 ou FOREST1
date_maxNãoFiltra registros ate esta data (AAAA-MM-DD).2024-12-31
date_minNãoFiltra registros a partir desta data (AAAA-MM-DD).2020-01-01
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
individualNãoId, uuid ou organismID do indivíduo.4521 ou 2ff0e884-3d33
job_idNãoId do job para reutilizar affected_ids ou filtrar resultados.1024
limitNãoQuantidade maxima de registros retornados.100
locationNãoId ou nome do local.Parcela 25ha ou 55
location_rootNãoId/nome do local incluindo descendentes.Amazonas ou 10
main_collectorNãoBooleano (1) para filtrar vouchers apenas pelo coletor principal.1
numberNãoNúmero/código de coletor (voucher ou tag quando diferente).1234A
odbrequest_idNãoFiltra indivíduos vinculados a um request id.12
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
personNãoId/abreviação/nome/email de pessoa (aceita lista com | ou ;).Silva, J.B.|Costa, M.
projectNãoId ou sigla do projeto.PDBFF ou 2
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
taxonNãoId ou nome canônico do taxon (lista aceita).Licaria cannela,Licaria armeniaca ou 456,789
taxon_rootNãoId/nome de taxon incluindo descendentes.Lauraceae
traitNãoId ou export_name do trait para filtro.DBH
vernacularNãoId ou nome de vernacular para filtrar individuals.castanha|12

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
uuidsimple / allUUID estável do registro exportado.
individual_uuidsimple / allUUID estável do indivíduo ou organismo ligado.
basisOfRecordsimple / allColuna Darwin Core: valor basisOfRecord indicando o tipo geral de registro biológico.
occurrenceIDsimple / allColuna Darwin Core: identificador estável do registro de ocorrência biológica. Uma ocorrência representa a presença/registro de um organismo ou táxon em uma localidade.
organismIDsimple / allColuna Darwin Core: identificador estável do organismo/indivíduo, formatado pelo OpenDataBio como odb:{installation}:individual:{uuid}.
organismNamesimple / allColuna Darwin Core: rótulo legível do organismo ou registro de indivíduo.
materialEntityIDsimple / allColuna Darwin Core: identificador estável da entidade material física. Nas exportações de vouchers do OpenDataBio, é o identificador estável do voucher, formatado como odb:{installation}:voucher:{uuid}.
collectionCodesimple / allColuna Darwin Core: código, sigla ou nome que identifica a biocoleção.
catalogNumbersimple / allColuna Darwin Core: número de catálogo ou número de acesso do voucher na biocoleção.
typeStatussimple / allColuna Darwin Core: status nomenclatural de tipo de um voucher.
recordedByMainsimple / allColetor ou observador principal responsável pelo registro.
recordNumbersimple / allColuna Darwin Core: número de coleta ou observação.
eventDatesimple / allColuna Darwin Core: data ou intervalo em que ocorreu o evento de coleta, observação, captura da mídia ou ocorrência.
recordedBysimple / allColuna Darwin Core: coletores ou observadores associados ao registro.
scientificNamesimple / allColuna taxonômica Darwin Core: nome científico associado ao registro no momento da exportação.
familysimple / allColuna taxonômica Darwin Core: família associada ao táxon exportado ou organismo identificado.
identificationQualifiersimple / allColuna Darwin Core: qualificador que expressa incerteza ou condição da identificação.
identifiedBysimple / allColuna Darwin Core: pessoa ou pessoas responsáveis pela identificação taxonômica.
dateIdentifiedsimple / allColuna Darwin Core: data em que a identificação taxonômica foi feita.
identificationRemarkssimple / allColuna Darwin Core: notas associadas à identificação taxonômica.
location_idsimple / allIdentificador numérico interno da localidade ligada.
location_uuidsimple / allUUID estável da localidade ligada.
locationNamesimple / allRótulo de localidade compatível com Darwin Core usado pelo OpenDataBio para a localidade associada ao registro.
higherGeographysimple / allColuna Darwin Core: contexto geográfico superior da localidade, como localidades parentais ou hierarquia administrativa.
decimalLatitudesimple / allColuna Darwin Core: latitude em graus decimais, quando coordenadas estão disponíveis para distribuição.
decimalLongitudesimple / allColuna Darwin Core: longitude em graus decimais, quando coordenadas estão disponíveis para distribuição.
occurrenceRemarkssimple / allColuna Darwin Core: observações sobre a ocorrência.
datasetIDsimple / allColuna Darwin Core: identificador estável do dataset que governa o registro, formatado pelo OpenDataBio como odb:{installation}:dataset:{uuid}; inclui o UUID do dataset e os prefixos da instalação.
datasetNamesimple / allColuna Darwin Core: nome ou título do dataset que governa o registro exportado.
accessRightssimple / allColuna Darwin Core: informação legível sobre permissões, restrições e condições de uso do registro, derivada da licença e da política de dados do dataset que governa o registro.
policyCodesimple / allCódigo compacto da política derivado da licença do dataset e das obrigações de uso.
dataset_idallIdentificador numérico interno do dataset que governa o registro exportado.
individual_idallIdentificador numérico interno do indivíduo ou organismo ligado.
recordedDateallColuna legada OpenDataBio equivalente a Darwin Core eventDate. Mantida em exportações all por compatibilidade; prefira eventDate para interoperabilidade.
scientificNameAuthorshipallColuna taxonômica Darwin Core: texto de autoria associado ao nome científico.
taxon_idallIdentificador numérico interno do nome taxonômico ligado.
taxon_uuidallUUID estável do nome taxonômico ligado.
identification_idallIdentificador numérico interno da identificação taxonômica ligada ao registro.
identification_uuidallUUID estável da identificação taxonômica ligada ao registro.
taxonPublishedStatusallStatus de publicação do nome taxonômico usado na identificação.
genusallColuna taxonômica Darwin Core: gênero associado ao táxon exportado ou organismo identificado.
georeferenceRemarksallColuna Darwin Core: notas descrevendo origem das coordenadas, incerteza ou detalhes de georreferenciamento.
relatedLocationsallOutras localidades relacionadas ao registro, como parcelas, transectos ou localidades de ocorrência ligadas.
policyUrlallURL onde a política completa do dataset ou versão pode ser consultada.
policySummaryallResumo curto, em linguagem simples, das permissões e obrigações de uso.

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": [
        {
            "id": 72209,
            "individual_id": 306246,
            "basisOfRecord": "PreservedSpecimens",
            "occurrenceID": "2639.Spruce.K.K000640463",
            "organismID": "2639_Spruce_1852",
            "collectionCode": "K",
            "catalogNumber": "K000640463",
            "typeStatus": "Tipo",
            "recordedByMain": "Spruce, R.",
            "recordNumber": "2639",
            "recordedDate": "1852-10",
            "recordedBy": "Spruce, R.",
            "scientificName": "Ecclinusa lanceolata",
            "scientificNameAuthorship": "(Mart. & Eichler) Pierre",
            "taxonPublishedStatus": "published",
            "genus": "Ecclinusa",
            "family": "Sapotaceae",
            "identificationQualifier": "",
            "identifiedBy": "Spruce, R.",
            "dateIdentified": "1852-10-00",
            "identificationRemarks": "",
            "locationName": "São Gabriel da Cachoeira",
            "higherGeography": "Brasil > Amazonas > São Gabriel da Cachoeira",
            "decimalLatitude": 1.1841927,
            "decimalLongitude": -66.80167715,
            "georeferenceRemarks": "decimal coordinates are the CENTROID of the footprintWKT geometry",
            "occurrenceRemarks": "OrganismRemarks = prope Panure ad Rio Vaupes Amazonas, Brazil",
            "datasetName": "Exsicatas LABOTAM",
            "uuid": "6302316f-2b48-43b5-816b-005df70d15c9"
        }
    ]
}

userjobs (GET)

Jobs em background (importações/exportações) (GET lista).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
get_fileNãoQuando 1 com userjobs id, retorna o arquivo salvo.1
limitNãoQuantidade maxima de registros retornados.100
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
statusNãoFiltro de status de job (Submitted, Processing, Success, Failed, Cancelled).Success

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
dispatchersimple / allClasse do dispatcher ou tipo de job local OpenDataBio.
statussimple / allStatus local OpenDataBio de um job em segundo plano ou recurso exportado.
percentagesimple / allPercentual de progresso local OpenDataBio de um job em segundo plano.
created_atsimple / allData e hora em que o registro foi criado no OpenDataBio.
affected_ids_countsimple / allContagem local OpenDataBio de registros afetados por um job em segundo plano.
affected_modelsimple / allClasse de modelo ou nome do modelo local OpenDataBio afetado por um job em segundo plano.
updated_atallData e hora da última atualização do registro no OpenDataBio.
affected_idsallLista local OpenDataBio de ids de registros afetados por um job em segundo plano.
logallTexto de log local OpenDataBio produzido por um job em segundo plano.

Exemplo de resposta

{
    "message": "Unauthenticated",
    "0": 401
}

activities (GET)

Lista entradas do log de atividades.

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
descriptionNãoDescrição em texto ou mapa de traducao.{\"en\":\"Leaf length\",\"pt-br\":\"Comprimento da folha\"}
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
individualNãoId, uuid ou organismID do indivíduo.4521 ou 2ff0e884-3d33
languageNãoId/código/nome do idioma. Para POST vernaculars, idiomas cadastrados são aceitos; idiomas ausentes são criados a partir de config/languagesISO6393.php apenas quando o valor informado corresponder a código ISO639-3 ou nome configurado, com is_locale=0.en ou 1 ou english ou spa
limitNãoQuantidade maxima de registros retornados.100
locationNãoId ou nome do local.Parcela 25ha ou 55
log_nameNãoFiltro de activity log name.default
measurementNãoFiltro de atividade: id de measurement.55
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
subjectNãoFiltro de atividade: tipo do subject (basename da classe).Individual
subject_idNãoFiltro de atividade: id do subject.12
taxonNãoId ou nome canônico do taxon (lista aceita).Licaria cannela,Licaria armeniaca ou 456,789
taxon_rootNãoId/nome de taxon incluindo descendentes.Lauraceae
voucherNãoId do voucher para filtrar measurements.102

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
log_namesimple / allNome local OpenDataBio do log de atividade.
descriptionsimple / allTexto descritivo local OpenDataBio do recurso exportado.
subject_typesimple / allClasse de modelo local OpenDataBio do objeto registrado em uma entrada de log de atividade.
subject_namesimple / allNome legível local OpenDataBio do objeto registrado em uma entrada de log de atividade.
subject_idsimple / allIdentificador numérico interno do objeto registrado em uma entrada de log de atividade.
modified_bysimple / allUsuário local OpenDataBio que modificou o objeto do log de atividade.
propertiessimple / allPropriedades estruturadas locais OpenDataBio do log de atividade, geralmente codificadas como JSON.
created_atsimple / allData e hora em que o registro foi criado no OpenDataBio.
updated_atsimple / allData e hora da última atualização do registro no OpenDataBio.

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": [
        {
            "field_key": "taxon_id",
            "field": "Taxon",
            "old_value": "Burseraceae",
            "new_value": "Protium hebetatum forma.b.fito",
            "id": 1411696,
            "log_name": "individual",
            "description": "identification updated",
            "subject_type": "App\\Models\\Individual",
            "subject_id": 301705,
            "subject_name": null,
            "modified_by": "example"
        },
        {
            "field_key": "person_id",
            "field": "Person",
            "old_value": "Macedo, M.T.S",
            "new_value": "Pilco, M.V.",
            "id": 1411696,
            "log_name": "individual",
            "description": "identification updated",
            "subject_type": "App\\Models\\Individual",
            "subject_id": 301705,
            "subject_name": null,
            "modified_by": "example"
        },
        {
            "field_key": "notes",
            "field": "Notes",
            "old_value": "Identificação feita em campo, anotada na planilha de dados.",
            "new_value": null,
            "id": 1411696,
            "log_name": "individual",
            "description": "identification updated",
            "subject_type": "App\\Models\\Individual",
            "subject_id": 301705,
            "subject_name": null,
            "modified_by": "example"
        },
        {
            "field_key": "date",
            "field": "Date",
            "old_value": "2022-06-17",
            "new_value": "2022-11-23",
            "id": 1411696,
            "log_name": "individual",
            "description": "identification updated",
            "subject_type": "App\\Models\\Individual",
            "subject_id": 301705,
            "subject_name": null,
            "modified_by": "example"
        }
    ]
}

tags (GET)

Tags/palavras-chave (GET lista).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
datasetNãoId ou sigla do dataset.3 ou FOREST1
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
job_idNãoId do job para reutilizar affected_ids ou filtrar resultados.1024
languageNãoId/código/nome do idioma. Para POST vernaculars, idiomas cadastrados são aceitos; idiomas ausentes são criados a partir de config/languagesISO6393.php apenas quando o valor informado corresponder a código ISO639-3 ou nome configurado, com is_locale=0.en ou 1 ou english ou spa
limitNãoQuantidade maxima de registros retornados.100
nameNãoParametro generico de nome (taxon completo, local, export_name de trait, etc.).Ocotea guianensis
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
projectNãoId ou sigla do projeto.PDBFF ou 2
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
searchNãoParametro de busca de texto.Silva
traitNãoId ou export_name do trait para filtro.DBH

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
namesimple / allNome local OpenDataBio do recurso exportado.
descriptionsimple / allTexto descritivo local OpenDataBio do recurso exportado.
countsallContagens resumidas locais OpenDataBio associadas a uma tag.

Exemplo de resposta

{
    "meta": {
        "odb_version": "0.10.0-alpha1",
        "api_version": "v0",
        "server": "http://localhost/opendatabio"
    },
    "data": [
        {
            "id": 11,
            "name": "Folhas adaxial",
            "description": "Images of the adaxial surface of leaves",
            "counts": {
                "Media": 1852,
                "Project": 0,
                "Dataset": 0,
                "ODBTrait": 0
            }
        },
        {
            "id": 12,
            "name": "Folha forma",
            "description": "Imagem mostrando uma folha ou o formato da folha.",
            "counts": {
                "Media": 713,
                "Project": 0,
                "Dataset": 0,
                "ODBTrait": 0
            }
        },
        {
            "id": 13,
            "name": "Frutos",
            "description": "Imagens com frutos",
            "counts": {
                "Media": 2595,
                "Project": 0,
                "Dataset": 0,
                "ODBTrait": 0
            }
        }
    ]
}

brahms (GET)

Exportacao de individuos no formato BRAHMS/INPA (GET lista, exportacao em job com save_job).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
brahms_levelNãoNivel da exportacao BRAHMS. Use individual para uma linha por individuo, ou voucher para uma linha por voucher ligado aos individuos encontrados.individual ou voucher
datasetNãoId ou sigla do dataset.3 ou FOREST1
date_maxNãoFiltra registros ate esta data (AAAA-MM-DD).2024-12-31
date_minNãoFiltra registros a partir desta data (AAAA-MM-DD).2020-01-01
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
habitattxt_traitsNãoLista de ids/export_name de traits de medicao ou chaves JSON de notas para o habitattxt do BRAHMS. Chaves JSON sao buscadas nas notas do individuo e da individual-location; medicoes sao buscadas no individuo e na localidade atual. Use all ou none.all ou soil_type,canopy_opening ou none
habitattxt_traits_headerNãoBooleano, ou lista de booleanos separada por virgula, controlando se export_name do trait ou chave JSON entra como prefixo no habitattxt.1 ou 1,0,1
include_taxon_vernacularsNãoQuando 1, o vernacular do BRAHMS tambem inclui nomes ligados ao taxon do individuo.0
include_vernacularsNãoQuando 1, inclui nomes vernaculares na saida BRAHMS.1
include_voucher_individualsNãoPara exportacoes BRAHMS no nivel individual com filtro de dataset, inclui individuos fora do dataset quando eles possuem vouchers no dataset solicitado.1
job_idNãoId do job para reutilizar affected_ids ou filtrar resultados.1024
langNãoCodigo/nome do idioma. Para BRAHMS, deve corresponder a um registro de languages com is_locale=1 e e usado para nomes de categorias de traits e cores; nao afeta nomes vernaculares.pt-br
limitNãoQuantidade maxima de registros retornados.100
locationNãoId ou nome do local.Parcela 25ha ou 55
location_rootNãoId/nome do local incluindo descendentes.Amazonas ou 10
locnotes_traitsNãoLista de ids/export_name de traits de medicao ou chaves JSON de notas para o locnotes do BRAHMS. Chaves JSON sao buscadas nas notas do individuo e da individual-location; medicoes sao buscadas no individuo e na localidade atual. Use all ou none. O padrao none mantem locnotes apenas com notas da individual-location.none ou trail_notes,soil_type
locnotes_traits_headerNãoBooleano, ou lista de booleanos separada por virgula, controlando se export_name do trait ou chave JSON entra como prefixo no locnotes.1 ou 1,0,1
measurement_datasetNãoLista de ids/nomes de datasets usada para limitar as medicoes resumidas nas descricoes BRAHMS.Flora-INPA
odbrequest_idNãoFiltra indivíduos vinculados a um request id.12
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
personNãoId/abreviação/nome/email de pessoa (aceita lista com | ou ;).Silva, J.B.|Costa, M.
plantdesc_traitsNãoLista de ids/export_name de traits de medicao ou chaves JSON de notas do individuo para o plantdesc do BRAHMS. Use all ou none.all ou leaf_color,dbh ou none
plantdesc_traits_headerNãoBooleano, ou lista de booleanos separada por virgula, controlando se export_name do trait ou chave JSON entra como prefixo no plantdesc.1 ou 1,0,1
projectNãoId ou sigla do projeto.PDBFF ou 2
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
tagNãoTag/número/código do indivíduo.A-1234
taxonNãoId ou nome canônico do taxon (lista aceita).Licaria cannela,Licaria armeniaca ou 456,789
taxon_rootNãoId/nome de taxon incluindo descendentes.Lauraceae
traitNãoId ou export_name do trait para filtro.DBH
vernacularNãoId ou nome de vernacular para filtrar individuals.castanha|12

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
odbUuidsimple / allColuna de exportação BRAHMS/INPA: UUID OpenDataBio do registro fonte exportado.
collectorsimple / allColuna de exportação BRAHMS/INPA para nome ou abreviação do coletor principal.
numbersimple / allNúmero de registro, coleta ou BRAHMS; o significado exato depende do endpoint.
addcollsimple / allColuna de exportação BRAHMS/INPA para coletores adicionais.
collddsimple / allColuna de exportação BRAHMS/INPA para dia da coleta.
collmmsimple / allColuna de exportação BRAHMS/INPA para mês da coleta.
collyysimple / allColuna de exportação BRAHMS/INPA para ano da coleta.
familysimple / allColuna taxonômica Darwin Core: família associada ao táxon exportado ou organismo identificado.
genussimple / allColuna taxonômica Darwin Core: gênero associado ao táxon exportado ou organismo identificado.
sp1simple / allColuna de exportação BRAHMS/INPA para o primeiro epíteto específico.
sp2simple / allColuna de exportação BRAHMS/INPA para o segundo epíteto ou nome infraespecífico.
detbysimple / allColuna de exportação BRAHMS/INPA para a pessoa que identificou o espécime ou indivíduo.
countrysimple / allNome ou código do país associado a uma localidade, coleção ou linha de exportação BRAHMS.
majorareasimple / allColuna de exportação BRAHMS/INPA para área geográfica principal.
minorareasimple / allColuna de exportação BRAHMS/INPA para área geográfica secundária.
gazetteersimple / allColuna de exportação BRAHMS/INPA para gazetteer ou localidade nomeada.
locnotessimple / allColuna de exportação BRAHMS/INPA para notas da localidade, localidades relacionadas e informação de posição local.
habitattxtsimple / allColuna de exportação BRAHMS/INPA para texto de habitat, geralmente derivado de medições da localidade atual quando disponíveis.
latsimple / allColuna de exportação BRAHMS/INPA: valor de latitude formatado para a tabela de intercâmbio BRAHMS.
NSsimple / allColuna de exportação BRAHMS/INPA indicando se a latitude está ao norte ou ao sul.
longsimple / allColuna de exportação BRAHMS/INPA: valor de longitude formatado para a tabela de intercâmbio BRAHMS.
EWsimple / allColuna de exportação BRAHMS/INPA indicando se a longitude está a leste ou oeste.
llunitsimple / allColuna de exportação BRAHMS/INPA que descreve a unidade ou formato de latitude/longitude.
altsimple / allColuna de exportação BRAHMS/INPA para elevação ou altitude.
plantdescsimple / allColuna de exportação BRAHMS/INPA para descrição da planta, derivada de medições e notas do indivíduo ou voucher.
vernacularsimple / allColuna de exportação BRAHMS/INPA para nomes vernaculares.
projectsimple / allColuna de exportação BRAHMS/INPA para nome, sigla ou código do projeto.
campoallColuna de exportação BRAHMS/INPA usada por fluxos locais para identificar o campo ou contexto fonte.
accessionallColuna de exportação BRAHMS/INPA para valor de acesso ou accession de coleção.
prefixallColuna de exportação BRAHMS/INPA para prefixo do número de coleta.
suffixallColuna de exportação BRAHMS/INPA para sufixo do número de coleta.
initialallColuna de exportação BRAHMS/INPA para iniciais do coletor ou campo local de iniciais.
detstatusallColuna de exportação BRAHMS/INPA para status da determinação.
rank1allColuna de exportação BRAHMS/INPA para categoria infraespecífica.
detddallColuna de exportação BRAHMS/INPA para dia da identificação.
detmmallColuna de exportação BRAHMS/INPA para mês da identificação.
detyyallColuna de exportação BRAHMS/INPA para ano da identificação.
alt1allColuna de exportação BRAHMS/INPA para valor secundário de elevação ou altitude.
dupsallColuna de exportação BRAHMS/INPA para informação de duplicatas de espécimes.

identification-histories (GET)

Histórico de identificações (GET lista, POST cria linhas manuais de histórico).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros.1,2,3
biocollectionNãoId, nome ou sigla da biocoleção.INPA
date_maxNãoFiltra registros ate esta data (AAAA-MM-DD).2024-12-31
date_minNãoFiltra registros a partir desta data (AAAA-MM-DD).2020-01-01
fieldsNãoLista separada por vírgulas dos campos a serem incluídos na resposta ou uma palavra especial all/simple/raw, padrão: simpleid,scientificName ou all
identification_idNãoId do registro de identificação. Para POST identification-histories é opcional; quando informado, deve pertencer ao individual_id. Quando omitido, a API deriva a identificação a partir de individual_id.123
individualNãoId, uuid ou organismID do indivíduo.4521 ou 2ff0e884-3d33
individual_idNãoIds de indivíduos para ocorrências.12,55,90
job_idNãoId do job para reutilizar affected_ids ou filtrar resultados.1024
limitNãoQuantidade maxima de registros retornados.100
offsetNãoA posição inicial do conjunto de registros a ser exportado. Usado em conjunto com limit para limitar os resultados.10000
personNãoId/abreviação/nome/email de pessoa (aceita lista com | ou ;).Silva, J.B.|Costa, M.
save_jobNãoSe 1, salva a consulta como job para baixar depois via userjobs + get_file = 11
sourceNãoRótulo de origem para registros gerados ou importados.api
taxonNãoId ou nome canônico do taxon (lista aceita).Licaria cannela,Licaria armeniaca ou 456,789
taxon_rootNãoId/nome de taxon incluindo descendentes.Lauraceae

Campos retornados

O perfil simple é a resposta padrão; all acrescenta campos detalhados, técnicos ou de compatibilidade. Use o parâmetro fields para solicitar uma lista explícita.

CampoPerfisSignificado
idsimple / allIdentificador numérico interno do registro exportado nesta instalação OpenDataBio.
identification_idsimple / allIdentificador numérico interno da identificação taxonômica ligada ao registro.
identification_uuidsimple / allUUID estável da identificação taxonômica ligada ao registro.
individual_idsimple / allIdentificador numérico interno do indivíduo ou organismo ligado.
individual_uuidsimple / allUUID estável do indivíduo ou organismo ligado.
organismIDsimple / allColuna Darwin Core: identificador estável do organismo/indivíduo, formatado pelo OpenDataBio como odb:{installation}:individual:{uuid}.
organismNamesimple / allColuna Darwin Core: rótulo legível do organismo ou registro de indivíduo.
taxon_idsimple / allIdentificador numérico interno do nome taxonômico ligado.
taxon_uuidsimple / allUUID estável do nome taxonômico ligado.
scientificNamesimple / allColuna taxonômica Darwin Core: nome científico associado ao registro no momento da exportação.
familysimple / allColuna taxonômica Darwin Core: família associada ao táxon exportado ou organismo identificado.
identificationQualifiersimple / allColuna Darwin Core: qualificador que expressa incerteza ou condição da identificação.
identifiedBysimple / allColuna Darwin Core: pessoa ou pessoas responsáveis pela identificação taxonômica.
dateIdentifiedsimple / allColuna Darwin Core: data em que a identificação taxonômica foi feita.
identificationBiocollectionsimple / allBiocoleção usada como referência para a identificação, quando aplicável.
identificationBiocollectionReferencesimple / allNúmero de catálogo ou referência na biocoleção usada para identificação.
identificationRemarkssimple / allColuna Darwin Core: notas associadas à identificação taxonômica.
replaced_atsimple / allData ou timestamp em que uma linha de histórico de identificação foi substituída.
replacedByNamesimple / allNome local OpenDataBio da identificação que substituiu esta linha de histórico de identificação.
sourcesimple / allRótulo local OpenDataBio da fonte do registro ou linha de histórico de identificação.
scientificNameAuthorshipallColuna taxonômica Darwin Core: texto de autoria associado ao nome científico.
taxonPublishedStatusallStatus de publicação do nome taxonômico usado na identificação.
genusallColuna taxonômica Darwin Core: gênero associado ao táxon exportado ou organismo identificado.
identifiersallLista local OpenDataBio de pessoas responsáveis por uma identificação taxonômica.
modifierallCódigo local OpenDataBio de qualificador/modificador de identificação armazenado em uma linha de histórico de identificação.
dateallData local OpenDataBio associada ao registro exportado; o evento exato depende do endpoint.
biocollection_idallIdentificador numérico interno da biocoleção ligada.
biocollection_uuidallUUID estável da biocoleção ligada.
replaced_byallIdentificador numérico interno da linha de histórico de identificação que substituiu esta linha.
source_idallIdentificador local OpenDataBio do registro fonte ou processo fonte.
source_payloadallConteúdo estruturado local OpenDataBio vindo do processo fonte, geralmente codificado como JSON.
created_atallData e hora em que o registro foi criado no OpenDataBio.
updated_atallData e hora da última atualização do registro no OpenDataBio.

4.3 - Inserir dados - POST

Como importar dados ao OpenDataBio usando a API

Importando dados

Dados estruturados personalizados no campo notes

No campo notes de qualquer modelo, você pode armazenar texto simples ou um texto formatado como um objeto JSON contendo dados estruturados. A opção Json permite que você armazene dados estruturados personalizados em qualquer modelo que tenha o campo notes. Esses dados não serão validados pelo OpenDataBio e a padronização de tags e valores depende de você.

Endpoints POST

bibreferences (POST)

Referências bibliográficas (GET lista, POST cria).

ParâmetroObrigatórioDescriçãoExemplo
bibtexNãoReferência em formato BibTeX. (Provide doi or bibtex.)@article{meuchave,...}
doiNãoNúmero ou URL de DOI. (Provide doi or bibtex.)10.1234/abcd.2020.1

biocollections (POST)

Biocoleções (GET lista, POST cria).

ParâmetroObrigatórioDescriçãoExemplo
acronymSimSigla da biocoleção.INPA
nameSimParametro generico de nome (taxon completo, local, export_name de trait, etc.).Ocotea guianensis

individuals (POST)

Indivíduos (GET lista, POST cria, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
altitudeNãoAltitude em metros.75
angleNãoAzimute em graus a partir do ponto de referência.45
biocollectionNãoId, nome ou sigla da biocoleção.INPA
biocollection_numberNãoNúmero/código do voucher na biocoleção.12345
biocollection_typeNãoCódigo ou nome do tipo nomenclatural.Holotype ou 2
collectorSimColetor(es) id, abreviação, nome ou email. Separe múltiplos com | ou ;, primeiro e o principal.Silva, J.B.|Costa, M.
datasetSimId ou sigla do dataset.3 ou FOREST1
dateSimData (AAAA-MM-DD) ou data incompleta (ex. 1888-05-NA) ou array com year/month/day. (At least the year must be provided.)2024-05-20 ou {\"year\":1888,\"month\":5}
distanceNãoDistância ao ponto de referência em metros.12.5
identification_based_on_biocollectionNãoNome/id da biocoleção usada como referência de identificacao.INPA
identification_based_on_biocollection_numberNãoO catalogNumber do voucher usado como referência.8765
identification_dateNãoData da identificacao (completa ou incompleta).2023-06-NA
identification_individualNãoId/organismID do indivíduo cuja identificacao sera reaproveitada.3245 ou REC-123
identification_notesNãoNotas da identificacao.Conferido em microscopia
identifierNãoPessoa(s) responsavel(is) pela identificacao; aceita id, abreviação, nome ou email; use | ou ;. Obrigatório quando taxon é informado. Use identifier=collector para usar o valor de collector informado no mesmo registro, ou identifier=keep em updates para preservar o identificador existente.A.Costa|B.Lima ou collector ou keep
latitudeNãoLatitude em graus decimais (negativo para sul). (Required when location is not provided.)-3.101
locationNãoId ou nome do local. (Required when latitude/longitude are not provided.)Parcela 25ha ou 55
location_date_timeNãoData ou data+hora do evento de localização/ocorrência. (Required when adding multiple locations or when different from individual date.)2023-08-14 12:30:00
location_notesNãoNotas da ocorrência/local.Perto do marco 10
longitudeNãoLongitude em graus decimais (negativo para oeste). (Required when location is not provided.)-60.12
modifierNãoCódigo/nome do modificador de identificacao (s.s.=1, s.l.=2, cf.=3, aff.=4, vel aff.=5).3
notesNãoNotas em texto ou JSON.{\"expedition\":\"2024-01\",\"tag\":\"P1\"}
tagSimTag/número/código do indivíduo.A-1234
taxonNãoId ou nome canônico do taxon (lista aceita).Licaria cannela,Licaria armeniaca ou 456,789
xNãoCoordenada cartesiana do indivívudo na parcela ou transecto, a partir da origem10
yNãoCoordenada cartesiana do indivívudo na parcela ou transecto. Quando transecto, valores positivos (lado direito), valores negativos (lado esquerdo), a partir da origem5.1

individual-locations (POST)

Ocorrências para indivíduos com múltiplas localizações (GET lista, POST/PUT grava).

ParâmetroObrigatórioDescriçãoExemplo
altitudeNãoAltitude em metros.75
angleNãoAzimute em graus a partir do ponto de referência.45
distanceNãoDistância ao ponto de referência em metros.12.5
individualSimId, uuid ou organismID do indivíduo.4521 ou 2ff0e884-3d33
latitudeNãoLatitude em graus decimais (negativo para sul). (Required when location is not provided.)-3.101
locationNãoId ou nome do local. (Required when latitude/longitude are not provided.)Parcela 25ha ou 55
location_date_timeSimData ou data+hora do evento de localização/ocorrência.2023-08-14 12:30:00
location_notesNãoNotas da ocorrência/local.Perto do marco 10
longitudeNãoLongitude em graus decimais (negativo para oeste). (Required when location is not provided.)-60.12
xNãoCoordenada cartesiana do indivívudo na parcela ou transecto, a partir da origem10
yNãoCoordenada cartesiana do indivívudo na parcela ou transecto. Quando transecto, valores positivos (lado direito), valores negativos (lado esquerdo), a partir da origem5.1

locations (POST)

Localidades (GET lista, POST cria, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
adm_levelSimCódigo do nível administrativo do local (ex. 100=parcela, 10=país).100
altitudeNãoAltitude em metros.75
azimuthNãoAzimute (graus) usado para montar geometria de plot/transecto quando o local e POINT.90
datumNãoDatum/projecao espacial.EPSG:4326-WGS 84
geojsonNãoFeature GeoJSON de entrada, com geometria e pelo menos name + adm_level nas properties. Ela é convertida para a geometria da localidade e não é armazenada em coluna locations.geojson. (Provide geojson, geom or lat+long.){\"type\":\"Feature\",\"properties\":{\"name\":\"Plot A\",\"adm_level\":100},\"geometry\":{...}}
geomNãoGeometria WKT (POINT, LINESTRING, POLYGON, MULTIPOLYGON). (Provide geojson, geom or lat+long.)POLYGON((-60 -3,-60.1 -3,-60.1 -3.1,-60 -3.1,-60 -3))
ismarineNãoFlag para aceitar locais marinhos fora de poligonos de país.1
latNãoLatitude em graus decimais (negativo para sul). (Provide geojson, geom or lat+long.)-3.101
longNãoLongitude em graus decimais (negativo para oeste). (Provide geojson, geom or lat+long.)-60.12
nameSimParametro generico de nome (taxon completo, local, export_name de trait, etc.).Ocotea guianensis
notesNãoNotas em texto ou JSON.{\"expedition\":\"2024-01\",\"tag\":\"P1\"}
parentNãoId ou nome do pai (taxon ou local).Lauraceae ou 210
startxNãoCoordenada X inicial de subparcela em relação ao plot pai.5.5
startyNãoCoordenada Y inicial de subparcela em relação ao plot pai.10.0
xNãoDimensão X para plots ou comprimento transecto100
yNãoDimensão Y para plots ou buffer para transectos (PELD)40

locations-validation (POST)

Valida coordenadas com locais registrados (POST).

ParâmetroObrigatórioDescriçãoExemplo
latitudeSimLatitude em graus decimais (negativo para sul).-3.101
longitudeSimLongitude em graus decimais (negativo para oeste).-60.12

measurements (POST)

Medições de traits (GET lista, POST cria via job de importação, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
bibreferenceNãoId ou bibkey da referência.34
datasetSimID/nome do dataset onde a medição será armazenada; se omitido, usa o dataset padrão do usuário autenticado se existir.3 ou FOREST1
dateSimData da medição; aceita YYYY-MM-DD, YYYY-MM, YYYY, ou campos em array ano-mês-dia (date_year/date_month/date_day).2024-05-10 ou 2024-05 ou {"year":2024,"month":5}
duplicatedNãoNúmero sequencial para permitir medidas duplicadas do mesmo trait/objeto/data.2 para o segundo registro, 3 para o terceiro e assim por diante
link_idNãoObrigatório para traços do tipo LINK: ID do objeto ligado (ex.: ID do Taxon). (Required when trait type is Link.)55
locationNãoId ou nome do local.Parcela 25ha ou 55
notesNãoOpcional. Texto livre ou notas em JSON armazenadas com a medição.{"method":"caliper"}
object_idSimObrigatório. ID numérico do objeto medido (Individual, Location, Taxon, Voucher, Media). Alias: measured_id.4521
object_typeSimObrigatório quando não fornecido no header. Nome da classe ou FQCN do objeto medido (Individual, Location, Taxon, Voucher, Media). Alias: measured_type.Individual
parent_measurementNãoQuando a variável depende de outra medição, informe o ID da medição pai para o mesmo objeto e data.3001
personSimId/abreviação/nome/email de pessoa (aceita lista com | ou ;).Silva, J.B.|Costa, M.
trait_idSimObrigatório. ID ou export_name da variável medida. Alias: também aceita chave “trait”.treeDbh ou 12
valueNãoValor(es) da medida; depende do tipo do trait: QUANT_INTEGER (0) = número inteiro; QUANT_REAL (1) = número decimal, ponto como separator; CATEGORICAL or ORDINAL (2/4) = uma única categoria, pode ser o id ou o nome; CATEGORICAL_MULTIPLE (3) = lista de ids ou nomes de categorias separadas por | ; ou ,; TEXT (5) = um texto livre; COLOR (6) = cor em formato hex #A1B2C3 or #ABC; LINK (7) = enviar o link_id do object (value pode ser vazio neste caso, ou um número); SPECTRAL (8) = valores de absorbânica/reflectância separados por ponto-e-vírgula (;) com mesmo número de valores especificados na definição da variável; GENEBANK (9) = código alfanumérico do accesso do registro no GenBank (ele é validado contra o NCBI). (Required unless trait type is Link.)QUANT_REAL: 23.4 | CATEGORICAL: 15 ou Morta | CATEGORICAL_MULTIPLE: 12;14 ou Simples;Composta | SPECTRAL: 0.12;0.11;0.10

media (POST)

Metadados de mídia (GET lista, POST cria, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
collectorNãoColetor(es) id, abreviação, nome ou email. Separe múltiplos com | ou ;, primeiro e o principal.Silva, J.B.|Costa, M.
datasetNãoId ou sigla do dataset.3 ou FOREST1
dateNãoData (AAAA-MM-DD) ou data incompleta (ex. 1888-05-NA) ou array com year/month/day.2024-05-20 ou {\"year\":1888,\"month\":5}
filenameSimNome exato do arquivo de mídia dentro do ZIP ao importar mídia.IMG_0001.jpg
latitudeNãoLatitude em graus decimais (negativo para sul).-3.101
licenseNãoLicenca publica para mídia (CC0, CC-BY, CC-BY-SA, etc.).CC-BY-SA
locationNãoId ou nome do local.Parcela 25ha ou 55
longitudeNãoLongitude em graus decimais (negativo para oeste).-60.12
notesNãoNotas em texto ou JSON.{\"expedition\":\"2024-01\",\"tag\":\"P1\"}
object_idSimID do objeto ao qual a mídia pertence (Indivíduo, Local, Táxon, Voucher).4521
object_typeSimO tipo de objeto ao qual a mídia pertence, um dos seguintes: Individual, Local, Táxon ou Voucher.Individual
projectNãoId ou sigla do projeto.PDBFF ou 2
tagsNãoIds ou nomes de tags para mídia ou filtros (use | ou ;).flower|leaf
title_enNãoTitulo da mídia em ingles.Leaf detail
title_ptNãoTitulo da mídia em portugues.Detalhe da folha

persons (POST)

Pessoas (GET lista, POST cria, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
abbreviationNãoAbreviação padrão de pessoa ou coleção.Silva, J.B.
biocollectionNãoId, nome ou sigla da biocoleção.INPA
emailNãoEndereco de email.user@example.org
full_nameSimNome completo da pessoa.Joao Silva
institutionNãoInstituicao associada a pessoa.INPA

taxons (POST)

Nomes taxonômicos (GET lista, POST cria).

ParâmetroObrigatórioDescriçãoExemplo
authorNãoString opcional de autoria para nomes publicados. Em nomes publicados costuma ser preenchida automaticamente pela API. Para nomes não publicados, mantenha author nulo e use author_id/person.Nees
author_idNãoAlternativa a person para nomes não publicados. Obrigatório para nomes não publicados quando person não for enviado. (Required for unpublished names (or use person).)25
bibkeyNãoId da referência bibliográfica ou bibkey, opcional, para resolver bibreference_id. Em nomes publicados, dados bibliográficos vindos da API também podem preencher o registro.ducke1953 ou 34
bibreferenceNãoId ou bibkey da referência.34
enforceValidNãoOverride booleano opcional para nomes publicados. Use quando você enviar valid=true e quiser sobrescrever um resultado da API que marca o nome como inválido e define um nome sênior.1 ou true
gbifNãoId opcional do GBIF. No POST ele é armazenado como informado; não há validação adicional por API para esse valor explícito.28792
indexfungorumNãoIdentificador Index Fungorum de um táxon.IF123456
ipniNãoId opcional do IPNI. No POST ele é armazenado como informado; não há validação adicional por API para esse valor explícito.123456-1
levelNãoOpcional para nomes publicados porque a API pode defini-lo. Obrigatório para nomes não publicados exceto quando o nome validado tem duas palavras, caso em que será importado como species. Aceita código numérico do rank ou nome do rank como species/subspecies/clade.210 ou species
mobotNãoId opcional do Tropicos/MOBOT. No POST ele é armazenado como informado; não há validação adicional por API para esse valor explícito.25509881
mycobankNãoId opcional do MycoBank. No POST ele é armazenado como informado; não há validação adicional por API para esse valor explícito.MB123456
nameSimNome do táxon, obrigatório. Para nomes publicados, o POST consulta APIs nomenclaturais externas e pode normalizar nome, parent, rank, valid, senior_id, author, bibreference e ids externos. Para nomes não publicados, informe author_id/person e parent; level é obrigatório exceto quando o nome validado tem duas palavras, caso em que será importado como species.Ocotea guianensis ou Inga sp. 1
parentNãoOpcional para nomes publicados, obrigatório para nomes não publicados. Aceita id do táxon pai ou nome científico. Para nomes publicados, se a API encontrar um pai diferente, o pai informado é mantido e um aviso é registrado no log. (Required for unpublished names.)Ocotea ou 120
parent_idNãoId do pai para consultas hierarquicas.210
parent_nameNãoNome alternativo do táxon pai usado em importações e atualizações de táxons.Ocotea
personNãoUse apenas para nomes não publicados. Aceita id, abreviação, nome completo ou email da pessoa e resolve para author_id. Quando presente, o registro é tratado como não publicado e a busca em API não é usada. (Required for unpublished names (or use author_id).)25 ou Pilco, M.V.
seniorNãoId ou nome do táxon sênior aceito usado ao importar um táxon inválido.Ocotea guianensis
senior_idNãoId opcional do nome aceito quando o táxon importado é inválido. O táxon sênior deve existir, ser válido e ser publicado.345
validNãoBooleano opcional. Quando omitido no POST, a validade é inferida a partir de senior/senior_id ou do resultado da API. Nomes inválidos são permitidos tanto para táxons publicados quanto não publicados. Se você enviar valid=true para um nome publicado e a API disser que o nome é inválido, a importação é rejeitada, a menos que enforceValid=true também seja enviado.1 ou 0
zoobankNãoId opcional do ZooBank. No POST ele é armazenado como informado; não há validação adicional por API para esse valor explícito.urn:lsid:zoobank.org:act:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

traits (POST)

Definições de traits (GET lista, POST cria).

ParâmetroObrigatórioDescriçãoExemplo
bibreferenceNãoId ou bibkey da referência.34
categoriesNãoLista JSON de categorias de trait com lang/rank/name/description. (Required for categorical and ordinal traits.)[{\"lang\":\"en\",\"rank\":1,\"name\":\"small\"}]
descriptionSimDescrição em texto ou mapa de traducao.{\"en\":\"Leaf length\",\"pt-br\":\"Comprimento da folha\"}
export_nameSimNome de exportação unico do trait.DBH
link_typeNãoClasse alvo do trait tipo Link (ex. Taxon). (Required for Link traits.)Taxon
nameSimParametro generico de nome (taxon completo, local, export_name de trait, etc.).Ocotea guianensis
objectsSimObjetos alvo do trait (separados por virgula).Individual,Voucher
parentNãoID da característica pai ou nome de exportação; quando definido, as medições desta característica também devem incluir uma medição para a característica pai.woodDensity
range_maxNãoValor máximo permitido para traits quantitativos.999.9
range_minNãoValor mínimo permitido para traits quantitativos.0.01
tagsNãoIds ou nomes de tags para mídia ou filtros (use | ou ;).flower|leaf
typeSimParametro generico type (código do trait ou tipo de vernacular: use/generic/etimology).use ou 10
unitNão(Required for quantitative and spectral traits.)
value_lengthNãoNúmero de valores para trait espectral. (Required for spectral traits.)1024
wavenumber_maxNãoNúmero de onda máximo para traits espectrais. (Required for spectral traits.)25000
wavenumber_minNãoNúmero de onda mínimo para traits espectrais. (Required for spectral traits.)4000

vernaculars (POST)

Nomes vernáculos (GET lista, POST cria).

ParâmetroObrigatórioDescriçãoExemplo
citationsNãoLista de citacoes (texto + bibreference) para vernaculares.[{\"citation\":\"Silva 2020\",\"bibreference\":12}]
individualsNãoLista de ids/nomes de indivíduos para vincular vernacular.12|23|45
languageSimId/código/nome do idioma. Para POST vernaculars, idiomas cadastrados são aceitos; idiomas ausentes são criados a partir de config/languagesISO6393.php apenas quando o valor informado corresponder a código ISO639-3 ou nome configurado, com is_locale=0.en ou 1 ou english ou spa
nameSimParametro generico de nome (taxon completo, local, export_name de trait, etc.).Ocotea guianensis
notesNãoNotas em texto ou JSON.{\"expedition\":\"2024-01\",\"tag\":\"P1\"}
parentNãoId ou nome do pai (taxon ou local).Lauraceae ou 210
taxonsNãoLista de ids/nomes de taxon (para vernacular).Euterpe edulis|Ocotea guianensis
typeNãoParametro generico type (código do trait ou tipo de vernacular: use/generic/etimology).use ou 10

vouchers (POST)

Vouchers de coleção (GET lista, POST cria, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
biocollectionSimId, nome ou sigla da biocoleção.INPA
biocollection_numberNãoNúmero/código do voucher na biocoleção.12345
biocollection_typeNãoCódigo ou nome do tipo nomenclatural.Holotype ou 2
collectorNãoColetor(es) id, abreviação, nome ou email. Separe múltiplos com | ou ;, primeiro e o principal.Silva, J.B.|Costa, M.
datasetNãoId ou sigla do dataset.3 ou FOREST1
dateNãoData (AAAA-MM-DD) ou data incompleta (ex. 1888-05-NA) ou array com year/month/day.2024-05-20 ou {\"year\":1888,\"month\":5}
individualSimId, uuid ou organismID do indivíduo.4521 ou 2ff0e884-3d33
notesNãoNotas em texto ou JSON.{\"expedition\":\"2024-01\",\"tag\":\"P1\"}
numberNãoNúmero/código de coletor (voucher ou tag quando diferente).1234A

datasets (POST)

Datasets e versões publicadas de datasets (GET lista, POST cria via job de importação).

ParâmetroObrigatórioDescriçãoExemplo
descriptionNãoDescrição em texto ou mapa de traducao. (Required when privacy is 2 or 3.){\"en\":\"Leaf length\",\"pt-br\":\"Comprimento da folha\"}
licenseNãoLicenca publica para mídia (CC0, CC-BY, CC-BY-SA, etc.). (Required when privacy is 2 or 3.)CC-BY-SA
nameSimShort name or nickname for the dataset - make informative, shorter than title.Morphometrics-Aniba
privacySim(Accepted values: 0 (auth), 1 (project), 2 (registered), 3 (public).)
project_idNão(Required when privacy is 1 (project).)
share_taxon_listNãoOpção do dataset que controla se a lista de táxons pode ser compartilhada em contextos públicos de filogenia/lista taxonômica. (Optional boolean; defaults to true.)1 ou true
titleNão(Required when privacy is 2 or 3.)
visibilityNão(Optional for privacy 0 or 1; mandatory true when privacy is 2 or 3.)

identification-histories (POST)

Histórico de identificações (GET lista, POST cria linhas manuais de histórico).

ParâmetroObrigatórioDescriçãoExemplo
biocollection_idNãoLista de ids de biocoleção para filtrar vouchers.1,5
biocollection_referenceNão(Requires biocollection_id when provided.)
dateSimData (AAAA-MM-DD) ou data incompleta (ex. 1888-05-NA) ou array com year/month/day.2024-05-20 ou {\"year\":1888,\"month\":5}
identification_idNãoId do registro de identificação. Para POST identification-histories é opcional; quando informado, deve pertencer ao individual_id. Quando omitido, a API deriva a identificação a partir de individual_id. (Optional. When provided, it must belong to individual_id; otherwise it is derived from individual_id.)123
identifierNãoPessoa(s) responsavel(is) pela identificacao; aceita id, abreviação, nome ou email; use | ou ;. Obrigatório quando taxon é informado. Use identifier=collector para usar o valor de collector informado no mesmo registro, ou identifier=keep em updates para preservar o identificador existente. (Provide identifier, identifier_id, or identifiers.)A.Costa|B.Lima ou collector ou keep
identifier_idNãoId de pessoa ou lista delimitada de ids de pessoas responsáveis pela identificação. (Provide identifier, identifier_id, or identifiers.)4 ou 4|7
identifiersNãoReferência de pessoa ou lista delimitada de pessoas responsáveis pela identificação. Cada item pode ser id, abreviação, nome completo ou email. (Provide identifier, identifier_id, or identifiers.)4|7 ou A.Costa|B.Lima
individual_idSimIds de indivíduos para ocorrências.12,55,90
modifierNãoCódigo/nome do modificador de identificacao (s.s.=1, s.l.=2, cf.=3, aff.=4, vel aff.=5).3
notesNãoNotas em texto ou JSON.{\"expedition\":\"2024-01\",\"tag\":\"P1\"}
replaced_atNãoData/hora em que a identificação foi substituída.2026-06-11 10:30:00
sourceNãoRótulo de origem para registros gerados ou importados.api
taxon_idSim

4.4 - Atualizar dados - PUT

Quais EndPoints permitem PUT na API!

individuals (PUT)

Indivíduos (GET lista, POST cria, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
idNãoID numérico do registro a ser atualizado (Provide id or individual_id.)12
collectorNãoColetor(es) id, abreviação, nome ou email. Separe múltiplos com | ou ;, primeiro e o principal.Silva, J.B.|Costa, M.
datasetNãoId ou sigla do dataset.3 ou FOREST1
dateNãoData (AAAA-MM-DD) ou data incompleta (ex. 1888-05-NA) ou array com year/month/day.2024-05-20 ou {\"year\":1888,\"month\":5}
identification_based_on_biocollectionNãoNome/id da biocoleção usada como referência de identificacao.INPA
identification_based_on_biocollection_numberNãoO catalogNumber do voucher usado como referência.8765
identification_dateNãoData da identificacao (completa ou incompleta).2023-06-NA
identification_individualNãoId/organismID do indivíduo cuja identificacao sera reaproveitada.3245 ou REC-123
identification_notesNãoNotas da identificacao.Conferido em microscopia
identifierNãoPessoa(s) responsavel(is) pela identificacao; aceita id, abreviação, nome ou email; use | ou ;. Obrigatório quando taxon é informado. Use identifier=collector para usar o valor de collector informado no mesmo registro, ou identifier=keep em updates para preservar o identificador existente.A.Costa|B.Lima ou collector ou keep
individual_idNãoID numérico do registro a ser atualizado (Provide id or individual_id.)12
modifierNãoCódigo/nome do modificador de identificacao (s.s.=1, s.l.=2, cf.=3, aff.=4, vel aff.=5).3
notesNãoNotas em texto ou JSON.{\"expedition\":\"2024-01\",\"tag\":\"P1\"}
tagNãoTag/número/código do indivíduo.A-1234
taxonNãoId ou nome canônico do taxon (lista aceita).Licaria cannela,Licaria armeniaca ou 456,789

individual-locations (PUT)

Ocorrências para indivíduos com múltiplas localizações (GET lista, POST/PUT grava).

ParâmetroObrigatórioDescriçãoExemplo
idNãoID numérico do registro a ser atualizado (Provide id or individual_location_id.)12
altitudeNãoAltitude em metros.75
angleNãoAzimute em graus a partir do ponto de referência.45
distanceNãoDistância ao ponto de referência em metros.12.5
individualNãoId, uuid ou organismID do indivíduo.4521 ou 2ff0e884-3d33
individual_location_idNãoId de individual-location para atualizacao. (Provide id or individual_location_id.)44
latitudeNãoLatitude em graus decimais (negativo para sul).-3.101
locationNãoId ou nome do local.Parcela 25ha ou 55
location_date_timeNãoData ou data+hora do evento de localização/ocorrência.2023-08-14 12:30:00
location_notesNãoNotas da ocorrência/local.Perto do marco 10
longitudeNãoLongitude em graus decimais (negativo para oeste).-60.12
xNãoCoordenada cartesiana do indivívudo na parcela ou transecto, a partir da origem10
yNãoCoordenada cartesiana do indivívudo na parcela ou transecto. Quando transecto, valores positivos (lado direito), valores negativos (lado esquerdo), a partir da origem5.1

locations (PUT)

Localidades (GET lista, POST cria, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
idNãoID numérico do registro a ser atualizado (Provide id or location_id.)12
adm_levelNãoCódigo do nível administrativo do local (ex. 100=parcela, 10=país).100
altitudeNãoAltitude em metros.75
datumNãoDatum/projecao espacial.EPSG:4326-WGS 84
geomNãoGeometria WKT (POINT, LINESTRING, POLYGON, MULTIPOLYGON).POLYGON((-60 -3,-60.1 -3,-60.1 -3.1,-60 -3.1,-60 -3))
ismarineNãoFlag para aceitar locais marinhos fora de poligonos de país.1
latNãoLatitude em graus decimais (negativo para sul).-3.101
location_idNãoId do local a atualizar. (Provide id or location_id.)44
longNãoLongitude em graus decimais (negativo para oeste).-60.12
nameNãoParametro generico de nome (taxon completo, local, export_name de trait, etc.).Ocotea guianensis
notesNãoNotas em texto ou JSON.{\"expedition\":\"2024-01\",\"tag\":\"P1\"}
parentNãoId ou nome do pai (taxon ou local).Lauraceae ou 210
startxNãoCoordenada X inicial de subparcela em relação ao plot pai.5.5
startyNãoCoordenada Y inicial de subparcela em relação ao plot pai.10.0
xNãoDimensão X para plots ou comprimento transecto100
yNãoDimensão Y para plots ou buffer para transectos (PELD)40

measurements (PUT)

Medições de traits (GET lista, POST cria via job de importação, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
idNãoID numérico do registro a ser atualizado (Provide id or measurement_id.)12
bibreferenceNãoId ou bibkey da referência.34
datasetNãoId ou sigla do dataset.3 ou FOREST1
dateNãoData (AAAA-MM-DD) ou data incompleta (ex. 1888-05-NA) ou array com year/month/day.2024-05-20 ou {\"year\":1888,\"month\":5}
duplicatedNãoNúmero sequencial para permitir medidas duplicadas do mesmo trait/objeto/data.2 para o segundo registro, 3 para o terceiro e assim por diante
link_idNãoId do objeto ligado quando o trait e do tipo Link.id do taxon 55
locationNãoId ou nome do local.Parcela 25ha ou 55
measurement_idNãoId de measurement para atualizacao. (Provide id or measurement_id.)77
notesNãoNotas em texto ou JSON.{\"expedition\":\"2024-01\",\"tag\":\"P1\"}
object_idNãoId do objeto medido (Individual, Location, Taxon, Voucher ou Media).4521
object_typeNãoTipo do objeto medido: Individual, Location, Taxon, Voucher ou Media.Individual
parent_measurementNãoId de measurement pai.3001
personNãoId/abreviação/nome/email de pessoa (aceita lista com | ou ;).Silva, J.B.|Costa, M.
trait_idNãoId ou export_name do trait para measurements.12 ou DBH
valueNãoValor(es) da medida; depende do tipo do trait: QUANT_INTEGER (0) = número inteiro; QUANT_REAL (1) = número decimal, ponto como separator; CATEGORICAL or ORDINAL (2/4) = uma única categoria, pode ser o id ou o nome; CATEGORICAL_MULTIPLE (3) = lista de ids ou nomes de categorias separadas por | ; ou ,; TEXT (5) = um texto livre; COLOR (6) = cor em formato hex #A1B2C3 or #ABC; LINK (7) = enviar o link_id do object (value pode ser vazio neste caso, ou um número); SPECTRAL (8) = valores de absorbânica/reflectância separados por ponto-e-vírgula (;) com mesmo número de valores especificados na definição da variável; GENEBANK (9) = código alfanumérico do accesso do registro no GenBank (ele é validado contra o NCBI).QUANT_REAL: 23.4 | CATEGORICAL: 15 ou Morta | CATEGORICAL_MULTIPLE: 12;14 ou Simples;Composta | SPECTRAL: 0.12;0.11;0.10

media (PUT)

Metadados de mídia (GET lista, POST cria, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId unico ou lista separada por virgula para filtrar/selecionar registros. (Provide id, media_id or media_uuid.)1,2,3
collectorNãoColetor(es) id, abreviação, nome ou email. Separe múltiplos com | ou ;, primeiro e o principal.Silva, J.B.|Costa, M.
datasetNãoId ou sigla do dataset.3 ou FOREST1
dateNãoData (AAAA-MM-DD) ou data incompleta (ex. 1888-05-NA) ou array com year/month/day.2024-05-20 ou {\"year\":1888,\"month\":5}
latitudeNãoLatitude em graus decimais (negativo para sul).-3.101
licenseNãoLicenca publica para mídia (CC0, CC-BY, CC-BY-SA, etc.).CC-BY-SA
locationNãoId ou nome do local.Parcela 25ha ou 55
longitudeNãoLongitude em graus decimais (negativo para oeste).-60.12
media_idNãoId numerico de mídia. (Provide id, media_id or media_uuid.)88
media_uuidNãoUUID da mídia. (Provide id, media_id or media_uuid.)a3f0a4ac-6b5b-11ed-b8c0-0242ac120002
notesNãoNotas em texto ou JSON.{\"expedition\":\"2024-01\",\"tag\":\"P1\"}
projectNãoId ou sigla do projeto.PDBFF ou 2
tagsNãoIds ou nomes de tags para mídia ou filtros (use | ou ;).flower|leaf
title_enNãoTitulo da mídia em ingles.Leaf detail
title_ptNãoTitulo da mídia em portugues.Detalhe da folha

persons (PUT)

Pessoas (GET lista, POST cria, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
idNãoID numérico do registro a ser atualizado (Provide id or person_id.)12
abbreviationNãoAbreviação padrão de pessoa ou coleção.Silva, J.B.
biocollectionNãoId, nome ou sigla da biocoleção.INPA
emailNãoEndereco de email.user@example.org
full_nameNãoNome completo da pessoa.Joao Silva
institutionNãoInstituicao associada a pessoa.INPA
person_idNãoId da pessoa a atualizar. (Provide id or person_id.)12

vouchers (PUT)

Vouchers de coleção (GET lista, POST cria, PUT atualiza).

ParâmetroObrigatórioDescriçãoExemplo
idNãoID numérico do registro a ser atualizado (Provide id or voucher_id.)12
biocollectionNãoId, nome ou sigla da biocoleção.INPA
biocollection_numberNãoNúmero/código do voucher na biocoleção.12345
biocollection_typeNãoCódigo ou nome do tipo nomenclatural.Holotype ou 2
clear_biocollection_numberNãoQuando 1, limpa o biocollection_number atual na atualização.1
collectorNãoColetor(es) id, abreviação, nome ou email. Separe múltiplos com | ou ;, primeiro e o principal.Silva, J.B.|Costa, M.
datasetNãoId ou sigla do dataset.3 ou FOREST1
dateNãoData (AAAA-MM-DD) ou data incompleta (ex. 1888-05-NA) ou array com year/month/day.2024-05-20 ou {\"year\":1888,\"month\":5}
individualNãoId, uuid ou organismID do indivíduo.4521 ou 2ff0e884-3d33
notesNãoNotas em texto ou JSON.{\"expedition\":\"2024-01\",\"tag\":\"P1\"}
numberNãoNúmero/código de coletor (voucher ou tag quando diferente).1234A
voucher_idNãoId do voucher a atualizar. (Provide id or voucher_id.)55

taxons (PUT)

Nomes taxonômicos (GET lista, POST cria).

ParâmetroObrigatórioDescriçãoExemplo
idNãoId existente do táxon a ser atualizado. taxon_id também é aceito como alias. (Provide id or taxon_id.)12
authorNãoAutoria do nome taxonômico para nomes publicados. Para nomes não publicados, deixe este campo nulo e use author_id/person.Smith & Jones
author_idNãoId opcional do autor de nome não publicado. Quando presente, o táxon é tratado como não publicado para a verificação de duplicidade.25
bibkeyNãoId de referência bibliográfica ou bibkey, opcional, para resolver bibreference_id.ducke1953 ou 34
bibreferenceNãoId ou bibkey da referência.34
bibreference_idNãoLista de ids de BibReference para filtrar vouchers.10,11
enforceValidNãoOverride booleano opcional para atualização de nomes publicados. Use quando você quiser manter valid=true mesmo que a API informe que o nome é inválido e retorne um nome sênior.1 ou true
gbifNãoId explícito opcional do GBIF. Se a mudança de nome de um táxon publicado acionar consulta à API, o valor retornado pela API tem prioridade; caso contrário, o valor informado é salvo sem validação extra.28792
indexfungorumNãoIdentificador Index Fungorum de um táxon.IF123456
ipniNãoId explícito opcional do IPNI. Se a mudança de nome de um táxon publicado acionar consulta à API, o valor retornado pela API tem prioridade; caso contrário, o valor informado é salvo sem validação extra.123456-1
levelNãoNovo código/nome de rank, opcional. Necessário quando a alteração em um táxon não publicado exige revalidar o rank e sempre checado contra o parent.210 ou species
mobotNãoId explícito opcional do Tropicos/MOBOT. Se a mudança de nome de um táxon publicado acionar consulta à API, o valor retornado pela API tem prioridade; caso contrário, o valor informado é salvo sem validação extra.25509881
mycobankNãoId explícito opcional do MycoBank. Se a mudança de nome de um táxon publicado acionar consulta à API, o valor retornado pela API tem prioridade; caso contrário, o valor informado é salvo sem validação extra.MB123456
nameNãoNovo nome do táxon, opcional. Se o táxon for publicado e o nome mudar, as APIs externas são consultadas novamente e podem sobrescrever parent, rank, valid, senior_id, author, bibreference e ids externos informados. Se o táxon for não publicado e o nome mudar, aplica-se verificação de duplicidade em vez de consulta à API.Ocotea guianensis
notesNãoSubstituição opcional de notes. Aceita texto simples ou string JSON.{"reviewed_by":"J. Silva"}
parentNãoNovo pai opcional, aceitando id ou nome científico. Toda mudança de nome e toda mudança de parent passam novamente pela validação de nível taxonômico.Ocotea ou 120
parent_idNãoId do pai para consultas hierarquicas.210
parent_nameNãoNome alternativo do táxon pai usado em importações e atualizações de táxons.Ocotea
personNãoReferência opcional do autor para táxons não publicados. Aceita id, abreviação, nome completo ou email e resolve para author_id.25 ou Pilco, M.V.
senior_idNãoId opcional do nome aceito. Só é permitido quando valid=false. O táxon sênior referenciado deve ser válido e publicado; nomes sênior não publicados são rejeitados.345
taxon_idNãoAlias de id para payloads de atualização. (Provide id or taxon_id.)12
validNãoBooleano opcional. Táxons publicados e não publicados podem ser inválidos. Se valid=true, senior_id é limpo. Se valid=false em um nome publicado, senior_id deve ser informado. Se você enviar valid=true para a mudança de nome de um táxon publicado e a API disser que o nome é inválido, a atualização é rejeitada, a menos que enforceValid=true também seja enviado.1 ou 0
zoobankNãoId explícito opcional do ZooBank. Se a mudança de nome de um táxon publicado acionar consulta à API, o valor retornado pela API tem prioridade; caso contrário, o valor informado é salvo sem validação extra.urn:lsid:zoobank.org:act:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

5 - Modelo conceitual

Visão geral sobre a estrutura da base de dados e das relações entre modelos!

5.1 - Objetos Centrais

Objetos que podem receber Medições de Váriaveis dos usuários

Os objetos centrais são: Localidades, Vouchers, Indivíduos, Taxons e Arquivos de Mídia. Essas entidades são consideradas “centrais” porque podem receber Medições, ou seja, você pode registrar valores para qualquer Variável.

Esses objetos possuem um ID numérico interno e, quando aplicável, um UUID para links estáveis e intercâmbio de dados. Use o ID numérico em operações que o solicitem explicitamente; use o UUID para citar ou compartilhar um registro sem depender da numeração interna da instalação.

  • O objeto Indivíduo refere-se a um organismo individual que foi observado uma vez (uma ocorrência) ou foi marcado para monitoramento, como uma árvore em uma parcela permanente, uma ave anilhada, um morcego rastreado por rádio. Os indivíduos podem ter um ou mais Vouchers em uma BioColeção e um ou vários Localidades e terão uma Identificação taxonômica. Qualquer atributo medido ou tomado para um individuo pode ser associado a este objeto por meio do modelo Medição.

  • O objeto Vouchers é para registros de espécimes coletados de Indivíduo e depositados em uma BioColeção. A identificação taxonômica e a localização de um voucher é aquela do próprio indivíduo a que pertence. Medições podem ser vinculadas a um Voucher quando você deseja registrar explicitamente os dados para aquela amostra específica (por exemplo, medições morfológicas; um marcador molecular de uma extração de uma amostra em um coleta de tecido). Caso contrário, você pode simplesmente registrar a medição para o indivíduo ao qual o voucher pertence. O modelo de voucher também está disponível como tipo especial de Variável, o LinkType, tornando possível registrar contagens para o táxon do voucher em um determinado local.

  • O objeto Localidades contém geometrias espaciais, como pontos e polígonos, e inclui parcelas e transectos como casos especiais. Um Indivíduo pode ter uma localidade (por exemplo, uma planta) ou multiplas localidades (por exemplo, um animal monitorado). As localidades do tipo PARCELA e TRANSECTO podem ser registradas como geometria espacial ou apenas com geometria de ponto, e podem ter dimensões cartesianas (metros) registradas. Os indivíduos também podem ter posições cartesianas (X e Y ou angle e distance) em relação à sua Localidade, permitindo contabilizar o mapeamento tradicional de indivíduos em unidades de amostragem. Medições ecológicas relevantes, como dados de solo ou clima, são exemplos de Medições que podem ser vinculadas a localidades.

  • O objeto Taxon, além de seu uso para a Identificação taxonômica de Indivíduos, pode receber Medições, permitindo a organização de dados secundários publicados ou qualquer tipo de informação ligada a um nome taxonômico. Uma Referência Bibliográfica pode ser incluída para indicar a fonte de dados. Além disso, o modelo Taxon está disponível como tipo especial de Variável, o LinkType, tornando possível registrar contagens de Taxons em um determinado local.


Localidades

O modelo Localidades armazena dados que representam locais do mundo real. Eles podem ser países, cidades, unidades de conservação ou qualquer polígono espacial, ponto ou trilha na superfície da Terra. Esses objetos são hierárquicos e possuem um relacionamento pai-filho implementado pelo Nested Set Model para dados hierárquicos da biblioteca Laravel Baum que facilita tanto a validação quanto as consultas.

Uma localidade pode representar um ambiente terrestre ou marinho. Usuários plenos podem editar localidades somente enquanto elas não possuem indivíduos, vouchers, medições ou mídias relacionados. Depois que uma localidade passa a ser utilizada, apenas superadministradores podem alterá-la. A exclusão também não é permitida quando existem dados relacionados ou localidades descendentes. Algumas localidades criadas automaticamente pela aplicação são identificadas como localidades do sistema. Para pesquisa e visualização espacial, veja Pesquisar e mapear dados. Para cadastrar países, unidades administrativas, unidades de conservação, parcelas ou transectos sem duplicar a biblioteca compartilhada, consulte Curadoria de Localidades.

Tipos de Localidades especiais são parcelas e transectos, que juntamente com pontos permitem diferentes métodos de amostragem usados ​​em estudos de biodiversidade. Esses tipos de Localidades também podem ser vinculados a uma localidade administrativa pai e, além disso, a três tipos adicionais de localidades pai como Unidades de Conservação, Territórios Indígenas e qualquer camada Ambiental representando classes de vegetação, classes de solo , etc … com geometrias espaciais definidas.

Tabela locations

  • As colunas parent_id junto com rgt, lft e deph são usadas para definir o modelo de conjunto aninhado para consultar ancestrais e descendentes de forma rápida. Apenas parent_id é especificado pelo usuário, as outras colunas são calculadas pela biblioteca Baum a partir dos valores id+parent_id que definem a hierarquia. O mesmo modelo hierárquico é usado para o Taxons, mas para locais há uma restrição espacial, ou seja, um filho deve estar dentro de uma geometria pai.
  • A coluna adm_level indica o nível administrativo, ou tipo, de localidade. Por padrão, os seguintes adm_level são configurados no OpenDataBio:
    • 2 para o país, 3 para a primeira divisão dentro do país (província, estado), 4 para a segunda divisão (por exemplo, município), … até adm_level = 10 como áreas administrativas (o código do país é 2 para permitir a padronização com OpenStreeMaps, que é recomendado seguir se sua instalação incluir dados de diferentes países). Os níveis administrativos podem ser configurados em um OpenDataBio antes de importar quaisquer dados para o banco de dados, consulte o guia de instalação para obter detalhes sobre isso.
    • 99 é o código para Unidades de Conservação - uma unidade de conservação é uma location que pode estar vinculada a vários outros locais (qualquer local pode pertencer a uma única UC). Assim, uma localidade pode ter como pai um município e como uc a unidade de conservação a que pertence.
    • 98 é o código para Territórios Indígenas - mesmas propriedades das Unidades de Conservação, mas tratadas separadamente apenas porque algumas UCs ​​e TIs podem se sobrepor amplamente como é o caso da região amazônica
    • 97 é o código para Camadas ambientais - mesmas propriedades das Unidades de Conservação e Territórios Indígenas, ou seja, podem ser vinculadas como localidade pai adicional a qualquer Ponto, Parcela ou Transecto e, portanto, seus indivíduos relacionados. Armazene polígonos e geometrias de multipolígonos representando classes ambientais, como unidades de vegetação, biomas, classes de solo, etc …
    • 100 é o código para parcelas e sub-parcelas - as localidades de tipo parcelas podem ser registradas com geometria de ponto ou polígono, e também devem ter dimensões cartesianas associadas em metros. Se for uma localização de ponto, a geometria é definida a partir do ponto informado. As dimensões cartesianas de uma localidade de tipo parcela também podem ser combinadas com posições cartesianas de subparcelas (ou seja, uma localidade de parcela cujo pai também é uma localidade de parcela) e/ou de indivíduos dentro de tais parcelas, permitindo que indivíduos e subparcelas sejam mapeados dentro de uma subparcela sem especificações de geometria. Em outras palavras, se a geometria espacial da Parcela for desconhecida, ela pode ter como geometria um único ponto GPS ao invés de um polígono, mais suas dimensões x e y. Uma subparcela é uma parcela cuja localidade pai também é uma parcela, e deve consistir em um ponto marcando o início da subparcela mais suas dimensões cartesianas X e Y. Se a geometria do início da subplot for subparcela, ela pode ser armazenada como uma posição relativa à parcela pai usando startx e starty.
    • 101 para transectos - como parcelas, os transectos podem ser registrados tendo uma geometria LineString ou simplesmente uma única coordenada de Latitude e Longitude e uma dimensão. A dimensão cartesiana x para transectos representa o comprimento em metros e é usada para criar linha (orientada para o Norte) quando apenas um ponto é informado. A dimensão y é usada para validar os indivíduos como pertencentes à uma localidade do tipo transecto e representa a distância máxima da linha que um indivíduo deve cair para ser detectado naquele local.
    • 999 para localidades ‘POINT’ como waypoints GPS - isto é para registro de qualquer ponto no espaço
  • A coluna datum pode registrar a propriedade do datum da geometria, se conhecida. Se deixado em branco, o local é considerado armazenado usando o datum WGS84. Porém, não há conversor embutido de outros tipos de dados. Portanto os mapas exibidos podem ficar incorretos se diferentes projeções forem usadas. Fortemente recomendado projetar dados como WSG84 para padronização.
  • A coluna geom armazena a geometria da localização no banco de dados, permitindo consultas espaciais em linguagem SQL, como detecção das localidades pai. A geometria de um local pode ser POINT, POLYGON, MULTIPOLYGON ou LINESTRING e deve ser formatada usando Well-Known-Text representação geométrica da localidade. Quando um POLYGON é informado, o primeiro ponto dentro da string geométrica é privilegiado, ou seja, pode ser utilizado como referência para marcações relativas. Por exemplo, tal ponto será a referência para as colunas startx e starty de uma subparcela. Portanto, para as geometrias plot e transect, importa qual ponto é listado primeiro na geometria WKT

Acesso a dados usuários completos podem registrar novas Localidades, editar detalhes de Localidades e remover registros de Localidades que não têm dados associados. As Localidades têm acesso público.


Indivíduos

O objeto Indivíduo representa um registro para um organismo individual. Pode ser uma única ocorrência no espaço-tempo de um animal, planta ou fungo, ou um indivíduo monitorado ao longo do tempo, como uma planta em parcela florestal permanente, ou um animal de captura-recaptura ou rádio-rastreamento.

Um Indivíduo pode ter um ou mais Vouchers representando amostras físicas do indivíduo armazenadas em uma ou mais BioColeção e pode ter um ou mais Localidades, representando o local ou locais onde o indivíduo foi registrado.

Indivíduos também podem ter uma Identificação taxonômica, que pode ser própria ou pode depender da identificação de outro indivíduo (identificação-dependente). A identificação é herdada por todos os Vouchers registrados para o Indivíduo. Portanto, os vouchers não têm sua identificação própria. A tabela de Identificações agora referencia sempre individual_id (sem relacionamento polimórfico), e os identificadores são vinculados via pivô identification_person.

Tabela individuals

  • Um registro de um Indivíduo deve especificar pelo menos uma Localidade onde foi registrado, a date do registro, o identificador local tag e o collectors do registro e o dataset ao qual o indivíduo pertence.
  • A localidade pode ser qualquer localidade cadastrada, independente do nível, permitindo armazenar registros históricos cujo georreferenciamento é apenas um local administrativo. Localidades são armazenadas na tabela individual_location, tendo colunas date_time, altitude,notes e relative_position.
  • A coluna relative_position armazena as coordenadas cartesianas do Indivíduo em relação à sua localidade. Isso é apenas para indivíduos localizados em locais do tipo plot, transect ou point. Por exemplo, uma parcela com dimensões de 100x100 metros (1ha) pode ter um indivíduo com posição relativa = PONTO (50 50), que colocará o indivíduo no centro do local (isso é mostrado graficamente na interface da web conforme definido pelas coordenadas x e y do indivíduo). Se a localidade for uma subparcela, a posição dentro da parcela pai também pode ser calculada (isso foi projetado com as parcelas do ForestGeo em mente e é uma coluna na API individual GET. Se a localidade for um PONTO, a posição_relativa pode ser informada como angle (= azimute) e distance, atributos frequentemente medidos em métodos de amostragem. Se a localidade for um TRANSECT, a posição_relativa posiciona o indivíduo em relação à linha, sendo x a distância ao longo do transecto a partir do primeiro ponto, e o y a distância perpendicular onde o indivíduo está localizado, também levando em consideração alguns métodos de amostragem;
  • O campo date nos modelos Indivíduo, Voucher, Medição e Identificação pode ser uma Data Incompleta, ou seja, apenas o ano ou ano + mês podem ser registrados.
  • A tabela Collector representa os coletores para um indivíduo ou voucher e está vinculada ao Modelo de pessoa. A tabela de coletores possui uma relação polimórfica com os objetos Voucher e Individual, definidos pelas colunas object_id e object_type, permitindo múltiplos coletores para cada registro individual ou voucher. O main_collector indicado é apenas o primeiro coletor listado para essas entidades.
  • O campo tag é um código identificador para o indivíduo. Pode ser o número escrito na etiqueta de alumínio de uma árvore em uma parcela florestal, o número de uma anilha numa ave, ou o número de coletor de um espécime. A combinação de main_collector + tag + first_location é restrita a ser única no OpenDataBio. A identificação taxonômica de um indivíduo pode ser definida de duas maneiras:
    • para identificação-própria um registro de Identificação taxonômica é criado na tabela de identifications e a coluna identification_individual_id é preenchida com o próprio id do indivíduo
    • para identificação-dependente, o id do Indivíduo que possui a Identificação é armazenado na coluna identification_individual_id.
    • Conseqüentemente, o modelo Indivíduo contém dois métodos para se relacionar com o modelo de Identificação: um que define identificação-própria e outro que recupera as identificações taxonômicas usando a coluna identification_individual_id.
  • Os indivíduos podem ter um ou mais Vouchers depositados em uma BioColeção.

    Acesso a dados Indivíduos pertencem a conjuntos de dados, então a política de acesso do conjuntos de dados se aplica aos indivíduos nele inseridos. Apenas os colaboradores e administradores do Conjunto de Dados podem inserir ou editar indivíduos, mesmo se o conjunto de dados for de acesso público.

Taxons

O modelo Taxon organiza nomes publicados e não publicados em uma hierarquia. Nomes publicados podem ser consultados em serviços nomenclaturais externos; nomes não publicados, como morfotipos, são definidos localmente e precisam de uma Pessoa como autor. Sinônimos são mantidos como Taxons próprios e vinculados ao nome aceito. O nível clado permite representar nós que não correspondem às categorias taxonômicas tradicionais.

A interface permite navegar pela árvore taxonômica sob demanda, expandindo os descendentes sem carregar todo o backbone de uma vez. Em pesquisas, diferencie uma correspondência exata, que usa apenas o Taxon selecionado, de uma busca pela raiz taxonômica, que inclui seus descendentes. Essa escolha altera substancialmente resultados de listas, datasets, mapas e exportações.

Fluxo para cadastrar um nome publicado

  1. Pesquise o nome no OpenDataBio para evitar duplicar um Taxon existente.
  2. Informe o nome científico completo e execute a verificação externa.
  3. O sistema consulta primeiro o GBIF. Para nomes reconhecidos como fungos, consulta o Index Fungorum e o utiliza como fonte nomenclatural principal, complementando o resultado com a chave do GBIF quando possível.
  4. Para plantas, o resultado pode ser complementado por Tropicos e IPNI, especialmente para autoria, publicação e chaves externas.
  5. Se o GBIF não encontrar o nome, o sistema também tenta o Index Fungorum e, depois, Tropicos e IPNI. Outros identificadores externos, como MycoBank e ZooBank, podem ser preservados quando retornados pelas fontes integradas.
  6. Revise nome, autoria, rank, nome aceito, pai, referência de publicação e chaves externas antes de salvar.
  7. Se as fontes discordarem sobre o conceito, autoria, pai ou nome aceito, o sistema não deve decidir silenciosamente: compare as fontes e resolva o conflito manualmente.

As fontes têm coberturas diferentes. Index Fungorum é a referência preferencial no fluxo de fungos; Tropicos e IPNI são particularmente úteis para plantas; GBIF oferece cobertura taxonômica ampla. Uma chave externa documenta a correspondência com a fonte, mas não transfere para ela a decisão curatorial do OpenDataBio.

Revalidar Taxons existentes

A ferramenta de validação externa permite revisar Taxons publicados por projeto, dataset ou raiz taxonômica. Ela separa atualizações aplicáveis, conflitos, nomes aceitos ou pais ausentes e decisões manuais. Usuários plenos podem executar verificações e aplicar mudanças quando possuem permissão sobre o Taxon; nos demais casos, podem registrar sugestões. Alterações amplas e operações administrativas devem ser revisadas por superadministradores.

Veja o fluxo completo em Curadoria de bibliotecas compartilhadas.

Se nenhuma fonte resolver um nome que você sabe ser publicado, confira a grafia, autoria e categoria. O formulário permite confirmar manualmente um nome publicado não resolvido. Não marque como não publicado apenas porque um serviço está indisponível.

Fluxo para nomes não publicados

Marque o Taxon como não publicado, selecione uma Pessoa como autor, defina o rank e escolha o pai apropriado. Não use a consulta externa para transformar um morfotipo ou nome provisório em um nome publicado. Se esse nome for publicado posteriormente, revise o registro e suas relações com cuidado em vez de criar uma duplicata automaticamente.

Tabela Taxon

  • Como, Localidades, o modelo Taxon tem um relacionamento pai-filho, implementado usando o modelo de conjunto aninhado para dados hierárquicos da biblioteca Laravel Baum que permite consultar ancestrais e descendentes. Consequentemente, as colunas rgt, lft e deph da tabela de taxons são preenchidas automaticamente por esta biblioteca na inserção ou atualização dos dados.
  • Para ambos, Taxon author e Taxon bibreference, existem duas opções:
    • Para nomes publicados, a autoria da string recuperada pelas APIs será colocada na coluna author = string. Para nomes não publicados, o autor é uma pessoa e será armazenado na coluna author_id.
    • Somente nomes publicados podem ter relação com BibReferences. O campo de string bibreference da tabela Taxon armazena as strings recuperadas por meio de APIs externas, enquanto o bibreference_id se vincula a um objeto Referência Bibliográfica. Eles são usados ​​para armazenar a publicação onde o nome do táxon é descrito e pode ser inserido em ambos os formatos.
    • Além disso, um registro de táxon também pode ter muitas outras referências de Bib por meio de uma tabela dinâmica (taxons_bibreference), permitindo vincular qualquer número de referências bibliográficas a um nome de táxon.
  • A coluna level representa a classificação taxonômica (como ordem, gênero, etc.). Ele é numericamente codificado e padronizado de acordo com as regras gerais do IAPT, mas deve acomodar também categorias de nível de táxon relacionadas a animais. Consulte os códigos disponíveis na API Taxon para obter a lista de códigos.
  • A coluna parent_id indica o pai do táxon, que pode estar vários níveis acima dele. O nível dos pais deve ser estritamente mais alto do que o nível do táxon, mas você não precisa seguir a hierarquia completa. É possível registrar um táxon sem os pais, por exemplo, um morfotipo não publicado para o qual o gênero e a família são desconhecidos pode ter uma ordem como pai.
  • Os nomes das classificações taxonômicas são traduzidos de acordo com o locale definido pelo sistema, que também traduz a interface da web (atualmente implementados apenas em português e inglês).
  • O campo nome da tabela de táxons contém apenas a parte específica do nome (no caso de espécies, o epíteto específico), mas a inserção e exibição dos táxons por meio da API ou interface web deve ser feito com a combinação fullname.
  • É possível incluir sinônimos na tabela Taxon. Para isso, deve-se preencher o relacionamento senior, que é o id do nome aceito (valid) para um táxon invalid. Se senior_id for preenchido, o táxon é um sinônimo junior e deve ser marcado como invalid.
  • Taxons podem manter chaves de GBIF, Index Fungorum, Tropicos, IPNI, MycoBank e ZooBank. Essas chaves criam links verificáveis para os registros externos e ajudam futuras revisões.
  • Pessoas pode ser definidas como especialistas em táxons por meio de uma tabela dinâmica. Assim, um objeto Taxon pode ter vários especialistas taxonômicos registrados no OpenDataBio.



Acesso a dados: usuários plenos podem registrar um novo táxon e editar os registros existentes se eles não tiverem sido usados ​​para identificação. Atualmente é impossível remover um táxon do banco de dados. A lista de táxons tem acesso público.


Vouchers

O modelo Voucher é usado para armazenar registros de espécimes ou amostras de indivíduos depositados em BioColeções. Portanto, as únicas informações obrigatórias exigidas para registrar um Voucher são individual, biocollection e se o espécime é um tipo de nomenclatural (o padrão é non-type se não informado).

Vouchers table explained

  • O Voucher pertence a um Indivíduo e a uma Biocoleção, portanto o individual_id e o biocollection_id são obrigatórios nesta tabela;
  • biocollection_number é o código alfanumérico do Voucher na Biocoleção, pode ser ’nulo’ para usuários que desejam apenas indicar que um Indivíduo registrado tem Vouchers em uma Bicoleção específica, ou para Vouchers registrados para biocoleções que não tem um código identificador;
  • biocollection_type - é um código numérico que especifica se o Voucher na BioCollection é um tipo nomenclatural. O padrão é 0 (não é um tipo); 1 apenas para ‘Tipo’, uma forma genérica e outros números para outros tipos nomenclaturis
  • collectors, um ou múltiplos, são opcionais para Vouchers, exigidos apenas se forem diferentes dos Coletores do Indivíduo. Caso contrário, os coletores do Indivíduo são herdados pelo Voucher. Como para indivíduos, eles são implementados por meio de uma relações polimórfica com a tabela de collectors e o primeiro coletor é o coletor_principal para o voucher, ou seja, aquele que se relaciona com number.
  • number, este é o número do coletor, mas como coletores, só deve ser preenchido se for diferente do valor da tag do indivíduo. Portanto, collectors, number e date são úteis para registrar Vouchers para Indivíduos que têm Vouchers coletados em momentos diferentes por pessoas diferentes.
  • O campo date nos modelos indivíduos e Voucher pode ser uma data incompleta. Exigido apenas se for diferente do indivíduo a quem o voucher pertence.
  • dataset_id o Voucher pertence a um Dataset, que controla a política de acesso;
  • notes qualquer anotação de texto para o Voucher.
  • O modelo de Voucher interage com o modelo BibReference, permitindo vincular citações múltiplas a Vouchers. Isso é feito através da table voucher_bibreference.



Acesso a dados Os vouchers pertencem a Conjuntos de Dados, portanto, a política de acesso a conjuntos de dados se aplica aos vouchers nele contidos. Os vouchers podem ter um conjunto de dados diferente de seus indivíduos. Se a política do conjunto de dados do Voucher for de acesso aberto e a Indivíduo não, o acesso aos dados do voucher será incompleto, portanto, o conjunto de dados do Voucher deve ter a mesma política de acesso ou uma política de acesso menos restrito do que o conjunto de dados do Indivíduo. Apenas os colaboradores e administradores do conjunto de dados podem inserir ou editar vouchers em um conjunto de dados, mesmo se o conjunto de dados for de acesso público.


Arquivos de Mídia

Arquivos de mídia (imagens, vídeos, áudios) são objetos centrais e podem receber Medições, além de descrições, tags e links para Localidades, Indivíduos, Vouchers ou Taxons.

  • Relacionamento principal: polimórfico (model_type, model_id) para Individual, Voucher, Localidade, Táxon ou Projeto.
  • dataset_id opcional: quando presente, a licença e o acesso herdam do Dataset; quando ausente, a mídia pode usar apenas project_id ou ficar solta (ainda com controles básicos).
  • project_id opcional: útil para agrupar e controlar acesso de mídia mesmo sem dataset.
  • Coletores: créditos via tabela polimórfica collectors (múltiplas Pessoas).
  • Tags: muitas-para-muitas com Tags, facilitando filtros.
  • Custom properties (Spatie Media Library): license (fallback se não houver dataset), date (usada em citações), notes, user_id, voucher_id e location_id auxiliares, citation_fields (define o que entra na citação), além de uuid e URLs gerados pela biblioteca.
  • Citações: geradas automaticamente a partir de autores, táxon, dataset/projeto, localização, licença e uuid; BibTeX disponível (generate_citation).
  • Armazenamento: usa o pacote spatie/laravel-medialibrary; arquivos ficam no disco configurado e metadados na tabela media.
  • Upload: interface web aceita lote (zip + csv) e metadados; API media segue a mesma lógica.
  • Medições: aceitam medições via relação polimórfica.

Acesso a dados: se houver dataset_id, a política/licença seguem o Dataset; caso contrário, valem as permissões do Projeto ou as regras gerais de mídia. Usuários completos podem registrar mídia; administradores do dataset (quando existir) também podem excluí-la.

5.2 - Objetos de Atributos

Objetos para variáveis ​​definidas pelo usuário e suas medições

Medições

A tabela measurements armazena os valores para variáveis medidas para os objetos centrais, incluindo Arquivos de Mídia. Seu relacionamento com os objetos centrais é definido por uma relações polimórficas usando as colunas measured_id e measured_type.

  • medições devem pertencer a um Conjuntos de dados - coluna dataset_id, que controla a política de acesso
  • Uma Pessoa deve ser indicada como o medidor (person_id);
  • A coluna bibreference_id pode ser usada para vincular medições extraídas de publicações à sua fonte fonte Bibliográfica
  • O valor para a variável medida (trait_id) será armazenado em colunas diferentes, dependendo do tipo de variável:
    • value - esta coluna flutuante armazenará valores para características reais quantitativas;
    • value_i - esta coluna inteira armazenará valores para características Quantitative Integer; e é um campo opcional para características do tipo Link, permitindo, por exemplo, armazenar contagens para uma espécie (uma característica Link Taxon) em um local.
    • value_a - esta coluna de texto armazenará valores para os tipos de traço Texto, Cor e Espectral.
  • Valores para variáveis categóricas e ordinais são armazenados na tabela measurement_category
  • data - a data de medição é obrigatória em todos os casos

Acesso a dados As medições pertencem a Conjuntos de dados, portanto, a política de acesso a conjuntos de dados se aplica às medições nele. Apenas os colaboradores e administradores do conjunto de dados podem inserir ou editar medições em um conjunto de dados, mesmo se o conjunto de dados for de acesso público.


Variáveis

A tabela traits representa as variáveis ​​definidas pelo usuário para coletar Mediçõespara um dos objetos centrais.

Essas características personalizadas fornecem enorme flexibilidade aos usuários para registrar suas variáveis ​​de interesse. Obviamente, tal flexibilidade tem um custo na padronização dos dados, pois uma mesma variável pode ser registrada de forma diferentes em qualquer instalação do OpenDataBio. Para minimizar a redundância na ontologia de características, os usuários que criam características são avisados ​​sobre esse problema e uma lista de características semelhantes é apresentada no caso de ser encontrada por comparação de nomes de características.

As variáveis têm restrições de edição para evitar perda de dados ou alteração não intencional do significado dos dados. Portanto, embora a lista de variáveis esteja disponível para todos os usuários, as definições de variáveis não podem ser alteradas se outra pessoa também usou a variável para armazenar medições.

Variáveis são entidades traduzíveis, então seus valores de name e description podem ser armazenados em vários idiomas (veja traduções de usuário. Isso é colocado na tabela user_translations através de uma relação polimórfica.

A definição da variável deve ser tão específica quanto necessário. A medição da altura das árvores usando medição direta ou um clinômetro, por exemplo, pode não ser facilmente convertida de uma para outra e deve ser armazenada em variáveis diferentes. Portanto, é altamente recomendável que o campo de definição de variável inclua informações como instrumento de medição e outros metadados que permitam que outros usuários entendam se podem usar sua variável ou criar uma nova.

  • A definição da variável deve incluir um export_name, que será usado durante as exportações de dados nos formulários de entrada da interface. Os nomes de exportação devem ser únicos e não devem ter tradução. São recomendados nomes de exportação curtos e [camelCase]​​(https://en.wikipedia.org/wiki/Camel_case) ou [PascalCase]​​(https://en.wikipedia.org/wiki/pascal_case).
  • Os seguintes tipos de características estão disponíveis:
    • Quantitativo real - para números reais;
    • Número inteiro quantitativo - para contagens;
    • Categórico - para varáveis categóricas de seleção única;
    • Múltiplo categórico - para muitas categorias selecionáveis;
    • Ordinal categórico - para uma categoria ordenada selecionável (dados semiquantitativos);
    • Texto - para qualquer valor de texto;
    • Cor - para qualquer valor de cor, especificado pelo código de cor hexadecimal (paleta de cores)
    • Link - este é um tipo de variável especial no OpenDataBio. Apenas links para Taxons e Vouchers estão implementados. Exemplo de uso: se você deseja armazenar contagens de espécies conduzidas em uma Localidade, você pode criar uma variável do tipo de link_taxon ou link_voucher. A medição para tal variável terá um campo opcional value para armazenar as contagens. Este tipo de característica também pode ser usado para especificar o hospedeiro de um parasita ou o número de insetos predadores.
    • Espectral - projetado para acomodar dados espectrais, compostos de vários valores de absorbância ou refletância para diferentes números de onda.
    • GenBank - armazena os números de acesso do GenBank que permitem recuperar dados moleculares vinculados a indivíduos ou vouchers armazenados no banco de dados através do GenBank Serviço API.
  • A tabela Traits contém campos que permitem a validação do valor da medição, dependendo do tipo de variável:
    • range_max e range_min - se definido para variáveis quantitativas, as medições terão que se ajustar ao intervalo especificado;
    • value_length - obrigatório apenas para variáveis espectrais, valida o comprimento (número de valores) de uma medição espectral;
    • link_type - se a variável for do tipo Link, a medição em value_i deve ser um id do objeto do tipo de link;
    • Para variáveis do tipo cor, os valores são validados no processo de criação da medição e devem estar em conformidade com um código hexadecimal de cores. Um seletor de cores é apresentado na interface web para inserção e edição de medições de cores;
    • Variáveis categóricas e ordinais serão validadas para as categorias registradas ao importar medições por meio da API;
  • A coluna unit define a unidade de medida para a variável.
  • A coluna bibreference_id é a chave de uma única Referência Bibliográfica que pode ser vinculad à definição da variável.
  • A tabela trait_objects armazena o tipo de objetos centrais para o qual a variável pode ter uma medição;

Acesso aos dados O nome, definição, unidade e categorias de uma variável não podem ser atualizados ou removidos se houver alguma medição registrada no banco de dados. As únicas exceções são: (a) é permitido adicionar novas categorias para variáveis categóricas (não ordinais); (b) o usuário atualizando a variavel é a única pessoa que possui medições para a característica; (c) o usuário que atualiza a variável é um administrador de todos os conjuntos de dados com medições usando a variável.

Unidades de Traits

Unidades são uma biblioteca reutilizável. Pesquise símbolo, nome e significado antes de criar uma nova unidade e não crie outra apenas para mudar maiúsculas, plural ou idioma. A definição de um Trait deve deixar claro como o valor foi medido, porque duas variáveis expressas na mesma unidade não são necessariamente equivalentes.

Usuários plenos podem criar unidades. Uma unidade sem Traits associados, ou associada apenas a Traits ainda sem medições, pode ser corrigida por usuários plenos. Quando já existem medições, a alteração exige que o usuário administre todos os datasets que usam os Traits associados; superadministradores podem intervir globalmente. A exclusão só é permitida quando nenhum Trait usa a unidade.


Formulários (web e coleta móvel)

Formulários definem quais informações serão coletadas, para quais objetos e por quais usuários. Eles não criam um novo tipo de dado: organizam a entrada de Traits, medições e outros campos já definidos pelo OpenDataBio.

Formulários web

Um formulário web reúne Traits para registrar várias medições de um objeto na mesma sessão. Uma Tarefa de Formulário aplica esse protocolo a uma lista de objetos-alvo e pode distribuir o preenchimento entre usuários autorizados. Use uma tarefa quando for importante acompanhar quais objetos ainda não foram medidos.

OpenDataBio Collect

Formulários móveis definem o protocolo usado pelo aplicativo Android OpenDataBio Collect. Eles podem incluir bibliotecas de Taxons e objetos-alvo, geolocalização, fotografias e campos de medição. O usuário baixa a definição e as bibliotecas, coleta offline e sincroniza os registros quando houver conexão.

Fluxo recomendado

  1. defina o dataset de destino e confirme quem pode inserir dados nele;
  2. cadastre ou revise Traits, unidades e categorias antes de criar o formulário;
  3. escolha o tipo de objeto medido e os campos obrigatórios;
  4. atribua somente os usuários que executarão a coleta;
  5. para ODBCollect, prepare a definição e aguarde o UserJob que gera as bibliotecas necessárias;
  6. teste o formulário com poucos objetos e sincronize os resultados;
  7. confira medições, coordenadas, mídias, identificações e avisos do UserJob;
  8. só então distribua o formulário para a coleta completa.

Um usuário pleno pode criar formulários quando possui ao menos um dataset editável. Fora os superadministradores, somente o proprietário pode editar o formulário. Usuários designados para coleta podem consultar sua definição. A exclusão depende também das tarefas e atribuições existentes; não exclua um formulário usado em uma coleta sem revisar essas relações.

5.3 - Objetos de Acesso

Objetos que controlam o acesso e distribuição de dados!

Os objetos centrais são: Localidades, Vouchers, Individual, Taxons e Arquivos de Mídia. Essas entidades são consideradas “centrais” porque podem receber Medições, ou seja, você pode registrar valores para qualquer Variável.

Conjuntos de dados agrupam registros, definem a política de acesso e fornecem versões de publicação explícitas e citáveis. Eles podem conter Medições, Indivíduos, Vouchers e Arquivos de Mídia.

Projetos são apenas grupos de Conjuntos de dados e de Usuários, representando grupos de usuários com acessibilidade comum a conjuntos de dados cuja privacidade é definida para ser controlada por um projeto.

BioColeções - este modelo serve para criar uma lista reutilizável de acrônimos de Coleções Biológicas no registro de Vouchers. Mas tem opcionalmente a possibilidade de gerir uma coleção de registros de Vouchers e seus Indivíduos, paralelamente ao controle provido por Conjuntos de dados. O controle é apenas na edição e na entrada de dados. Neste caso a BioColeção é administrada pelo sistema.

Projetos e BioColeções devem ter pelo menos um Usuário definido como administrador, que tem controle total sobre o conjunto de dados ou projeto, incluindo a atribuição das seguintes funções a outros usuários: administrador, colaborador ouvisualizador:

  • Colaboradores podem inserir e editar objetos, mas não podem excluir registros, nem alterar o conjunto de dados ou a configuração do projeto.
  • Visualizadores têm acesso somente de leitura aos dados que não são de acesso aberto.
  • Apenas usuários plenos e super-admins podem ser designados como administradores ou colaboradores. Assim, se um usuário que era administrador ou colaborador de um conjunto de dados for rebaixado a “Usuário registrado”, ele se tornará um visualizador.
  • Super-admins apenas podem habilitar uma BioColeção para ser administrada pelo sistema.

BioColeções

BioColeções identificam onde Vouchers estão depositados. Elas podem representar herbários, museus, coleções de tecidos e outras coleções formais ou informais.

Fluxo de cadastro e Index Herbariorum

  1. Pesquise a sigla para evitar duplicar uma coleção existente.
  2. Para um herbário registrado no Index Herbariorum, informe a sigla oficial e use a ação de consulta. O OpenDataBio recupera o identificador irn e o nome mantido pelo Index Herbariorum.
  3. Confira se a instituição retornada corresponde ao herbário desejado. A sigla pode ter mudado ou a consulta pode estar temporariamente indisponível.
  4. Para coleções que não pertencem ao Index Herbariorum, informe sigla e nome manualmente. Não use uma correspondência aproximada de herbário para uma coleção zoológica, de tecidos ou outra coleção distinta.
  5. Salve a BioColeção antes de registrar Vouchers nela.

O Index Herbariorum é usado apenas para identificar herbários; ele não valida Taxons. Para fungos, o serviço nomenclatural usado no fluxo taxonômico é o Index Fungorum.

Uma BioColeção também pode ser administrada pelo sistema. Nesse caso, sua equipe controla a edição dos Vouchers nela depositados e dos respectivos Indivíduos. Ela também trata solicitações para registrar Vouchers de material que um usuário deseja depositar e para emprestar material já depositado. Medições e Mídias continuam sob as permissões de seus próprios datasets. Veja o fluxo completo em Fluxos de coleção. Somente um superadministrador pode habilitar esse modo e deve definir pelo menos um administrador da coleção.

O objeto Biocollection também interage com o modelo Person. Quando uma Pessoa está vinculada a uma Biocoleção, ela será listada como especialista taxonômico e pode ter também um vínculo com Taxons.

Acesso a dados - Usuários plenos podem registrar BioColeções, mas apenas superadministradores podem tornar uma BioColeção administrável pelo sistema. Uma BioColeção só pode ser removida quando não possui Vouchers vinculados e não é administrada pelo sistema. Na coleção gerenciada, administradores gerenciam a equipe e as operações administrativas; colaboradores podem tratar solicitações e editar os registros, mas não apagá-los. Registros pertencentes a diferentes datasets podem integrar a mesma coleção: os datasets continuam definindo visibilidade e autoria, enquanto a BioColeção controla a edição dos Vouchers e Indivíduos sob sua responsabilidade.


Conjuntos de Dados

Conjuntos de Dados são grupos de Medições, Indivíduos, Vouchers Arquivos de Mídia, e podem ter um ou mais Usuários administrators, collaborators ou viewers.

Administradores podem definir o nível de acesso para:

  • acesso público
  • restrito à usuários cadastrados
  • restrito à usuários autorizados
  • restrito à usuários do projeto.

Conjuntos de dados podem ter muitas Referências bibliográficas, que junto com os campos policy, metadata permitem anotar o conjunto de dados com informações relevantes para o compartilhamento de dados: * Vincule qualquer publicação que tenha usado o conjunto de dados e, opcionalmente, indique se são de citação obrigatória ao usar os dados; * Defina uma política de dados específica ao usar os dados além de uma licença pública [CreativeCommons.org]((https://creativecommons.org/licenses/) * Detalhe quaisquer metadados relevantes, além daqueles que são automaticamente recuperados do banco de dados, como as definições das Variáveis medidas.

Versões de conjuntos de dados

Um conjunto de dados é gerenciado continuamente; uma versão é um snapshot fixo preparado para distribuição. Cada versão recebe um UUID e preserva seu escopo, data, autores, licença, política, citação, metadados e arquivos. Filtros podem limitar a versão a uma parte documentada do dataset.

O arquivo principal inclui os dados, um README e a descrição dos campos; um arquivo de mídias separado pode estar disponível. Downloads podem exigir a aceitação de um acordo e são registrados para que os administradores do dataset acompanhem seu uso.

Use o UUID da versão para citar conteúdo fixo. Use a página do dataset para o conjunto gerenciado que continua evoluindo. O fluxo completo está em Organizar e publicar datasets.


Projetos

Projetos são apenas grupos de Conjuntos de dados e interagem com Usuários, tendo administradores,colaboradores ou visualizadores. Esses usuários podem controlar todos os conjuntos de dados dentro do Projeto que tenham como política de acesso restrita aos usuários do projeto.


Usuários

O tabela users armazena informações sobre os usuários e administradores do banco de dados. Cada Usuário pode ser associado a uma Pessoa. Quando esse usuário insere novos dados, essa pessoa é usada como a pessoa padrão nos formulários. A pessoa só pode estar associada a um único usuário.

Existem três níveis de acesso possíveis para um usuário: * Usuário registrado (o nível mais baixo) - tem muito poucas permissões * Usuário pleno ou completo - podem ser atribuídos como administradores ou colaboradores de Projetos e Conjuntos de Dados; * SuperAdmin (o nível mais alto). - os superadministradores têm acesso a todos os objetos, independentemente da configuração do conjunto de dados. Categoria para os administradores da instalação.

Cada usuário recebe o nível usuário registrado ao se autocadastrar. Um superadministrador pode promovê-lo a Usuário Pleno ou SuperAdmin. Também pode autorizar um usuário pleno a gerenciar acessos. Esse gestor delegado pode promover usuários registrados a usuários plenos e rebaixá-los novamente, mas não pode alterar superadministradores, outros gestores de acesso nem delegar sua própria permissão. Somente superadministradores podem excluir contas.

Se o adminstrador do sistema configurar a opção EMAIL_VERIFICATION_ENABLED = true nas configurações do Opendatabio, usuários registrados receberão um link via email para validar o email registrado.

Acesso a dados: os usuários são criados no momento do registro e o acesso aos dados são restritos ao próprio usuário e aos administradores. Usuários registrados autorizados tem acesso apenas ao nome.


UserJobs

O modelo UserJob registra tarefas em segundo plano, como importações, exportações e operações de manutenção, independentemente da linha interna da fila do Laravel. Ele armazena progresso e logs e pode guardar resultados estruturados e ordenados para cada registro processado. Os resultados distinguem sucessos, avisos e erros e podem informar o identificador do objeto afetado. Assim, uma tarefa concluída ainda pode conter avisos ou falhas em algumas linhas.

Usuários podem inspecionar suas tarefas e resultados, baixar identificadores afetados, cancelar tarefas em execução e retomar operações que ofereçam suporte explícito à retomada. Excluir um UserJob remove o histórico da tarefa; isso não substitui o cancelamento de um processo que ainda está em execução.

5.4 - Objetos Auxiliares

Bibliotecas de uso comum, como Pessoas, Referências Bibliográficas, BioColeção e Traduções de Usuário!

Referências Bibliográficas

Referências são armazenadas em formato BibTeX e podem ser vinculadas a datasets, Taxons, medições, traits, identificações e outros objetos que precisam documentar uma fonte.

Fluxo de cadastro

  1. Pesquise pelo título, autor, chave BibTeX ou DOI para evitar duplicatas.
  2. Se a publicação possui DOI, informe-o e solicite a busca externa. O sistema tenta recuperar um registro BibTeX por meio dos resolvedores de DOI.
  3. Revise o BibTeX recuperado, principalmente autores, título, ano, tipo da publicação, DOI e chave.
  4. Se a busca não encontrar a publicação, cole um registro BibTeX exportado por seu gerenciador bibliográfico ou importe um arquivo .bib.
  5. Salve e só então vincule a referência aos objetos correspondentes.

A consulta por DOI é uma ajuda de preenchimento, não uma validação editorial. O usuário deve conferir o resultado. DOI repetido e chave BibTeX repetida são tratados como possíveis registros já existentes; não altere a chave apenas para contornar uma duplicata sem antes comparar as referências.

Essas referências podem ser usadas para:

  • Conjuntos de dados - com a opção de definir referências para as quais a citação é obrigatória quando o Conjunto de Dados for usado em publicações; mas todas as referências que usaram o conjunto de dados podem ser vinculadas ao conjunto de dados; os links são feitos com uma tabela dinâmica chamada dataset_bibreference;
  • Taxons:
    • para especificar a referência na qual o nome do táxon foi descrito, atualmente obrigatório em algumas revistas taxonômicas como PhytoTaxa. Esta referência de descrição é armazenada no bibreference_id da tabela Taxons.
    • para registrar qualquer referência a um nome de táxon, que são então vinculados por meio de uma tabela dinâmica chamada taxons_bibreference.
  • Vincule uma Medição a uma fonte publicada;
  • Indique a origem de uma definição de Variável.
  • Indique citações obrigatórias para um conjunto de dados ou vincule referências usando os dados para um conjunto de dados

Autores, título, ano, DOI e chave são extraídos do BibTeX. A chave deve ser única; o formulário pode padronizá-la a partir do primeiro autor, ano e título.

Acesso a dados usuários plenos podem registrar novas referências, editar detalhes de referências e remover registros de referência que não têm dados associados. BibReferences tem acesso público!


Identificação Taxonômica

O modelo Identificação representa a identificação taxonômica de Indivíduos.

Tabela identifications

  • O modelo de Identificação inclui vários campos opcionais, mas além de taxon_id, os identificadores (ligados via pivô identification_person) e a date de identificação são obrigatórios.
  • O valor de date pode ser uma Data Incompleta, por exemplo apenas o ano ou ano + mês podem ser registrados.
  • Os seguintes campos são opcionais:
    • modifier - é um código numérico que anexa um modificador taxonômico ao nome. Valores possíveis ’s.s.’ = 1, ’s.l.’ = 2, ‘cf.’ = 3, ‘aff.’ = 4, ‘vel aff.’ = 5, o padrão é 0 (nenhum).
    • notes - um texto de escolha, útil para adicionar comentários à identificação.
    • biocollection_id e biocollection_reference - esses campos devem ser usados ​​para indicar que a identificação é baseada na comparação com um voucher depositado em uma coleção biológica e cria um link entre o indivíduo identificado e o espécime da BioColeção no qual a identificação foi baseada. biocollection_id armazena o id de BioColeção e biocollection_reference o identificador único do espécime comparado, ou seja, seria o equivalente ao biocollection_number do modelo Voucher, mas esta referência não precisa ser de um voucher registrado no banco de dados.
  • Cada identificação referencia diretamente individual_id; não há mais relacionamentos polimórficos para identificações.
  • Mudanças na identificação atual podem gerar registros no Histórico de Identificações, preservando a interpretação biológica anterior, as pessoas, a data, as referências e as evidências correspondentes.

O Histórico de Identificações e o log de atividades têm finalidades diferentes. O primeiro representa a sequência científica de determinações taxonômicas de um indivíduo. O segundo é uma trilha de auditoria das alterações feitas no sistema. Novas importações de história biológica devem usar o endpoint identification-histories, não atividades.

Acesso aos dados: as identificações são atributos dos Indivíduos e não possuem acesso independente!


Pessoas

O modelo Persons armazena nomes de pessoas que podem ou não ser um Usuário diretamente envolvido com a base de dados. Pessoas podem ser: * coletores de Vouchers, Indivíduos e Arquivos de Mídia * identificadores taxonômicos de Indivíduos; * medidores de Medições; * autores para nomes não publicados de Taxons; * especialistas taxonômicos - ligados ao modelo Taxon pela tabela person_taxon; * autores de Conjuntos de Dados

Antes de criar uma Pessoa, pesquise nome, abreviatura, instituição e ORCID. Uma Pessoa é uma identidade compartilhada para autoria, coleta, medição e identificação; não é apenas um contato dentro de um projeto. Usuários plenos podem editar sua própria Pessoa padrão e registros ainda não utilizados. Uma Pessoa usada como padrão por outro usuário ou já relacionada a dados possui restrições de edição e exclusão.

A união de Pessoas duplicadas é uma operação exclusiva de superadministradores, pois substitui relações em várias partes do sistema. Veja Curadoria de bibliotecas compartilhadas.

Tabela persons

  • as colunas obrigatórias são a pessoa full_name e abbreviation;
  • ao cadastrar uma nova pessoa, o sistema sugere o nome abbreviation, mas o usuário é livre para alterá-lo para melhor adaptá-lo à abreviatura usual de cada pessoa. A ** abreviatura deve ser única ** no banco de dados, duplicatas não são permitidas na tabela Pessoas. Portanto, duas pessoas com exatamente o mesmo nome devem ser diferenciadas de alguma forma na coluna abbreviation.
  • A coluna biocollection_id da tabela Pessoas é usada para listar a qual BioColeção uma pessoa está associada, que pode ser usada quando a Pessoa também é um especialista taxonômico.
  • Adicionalmente, também podem ser informados o e-mail e a institution a que pertence a pessoa.
  • Cada usuário pode ser vinculado a uma pessoa pelo person_id na tabela Usuário. Essa pessoa é então usada como a pessoa ‘padrão’ quando o usuário está logado no sistema.

Acesso a dados usuários plenos podem registrar novas pessoas e editar as pessoas inseridas e remover pessoas que não possuem dados associados. Os administradores podem editar qualquer pessoa. A lista de pessoas tem acesso público.


Tag Model

O modelo Tag permite que os usuários definam palavras-chave traduzíveis que podem ser usadas para sinalizar Conjuntos de dados, Projetos ou Arquivos de Mídia. O modelo Tag está vinculado a esses objetos por meio de uma tabela para cada um, denominada dataset_tag, project_tag e media_tag, respectivamente.

Um Tag pode ter name e description em cada idioma configurado na tabela de Idiomas, que serão armazenados na tabela user_translations. As entradas para cada idioma são mostradas nos formulários da interface.

Acesso a dados usuários plenos podem registrar tags, editar as inseridas e excluir as que não foram usadas. As tags têm acesso público, pois são apenas palavras-chave para facilitar a navegação.


Jobs do usuário

UserJobs representam importações, exportações e outras operações executadas em segundo plano. Cada tarefa apresenta estado, progresso e logs e pode guardar resultados estruturados para cada registro processado, distinguindo sucesso, aviso e erro. Portanto, uma tarefa concluída ainda pode conter linhas que precisam de revisão.

O usuário pode acompanhar suas tarefas, examinar resultados, baixar identificadores afetados e, quando a operação permitir, cancelar ou retomar o processamento. Excluir o registro de um UserJob não substitui o cancelamento de uma tarefa ainda em execução.

Administradores da instalação devem manter os workers da fila e definir uma política para retenção de logs e arquivos. Usuários são responsáveis por revisar os resultados de suas próprias operações.


Traduções do usuário

O modelo UserTranslation armazena as traduções de dados do usuário para: descrições e nomes de Variáveis e de categorias para variáveis categóricas; descrições de Arquivos de Mídia e para Tags. As relações com esses modelos são estabelecidas por relações polimórfica usando os campos translatable_type e translatable_id. Este modelo permite traduções para qualquer idioma listado na tabela languages, atualmente acessível apenas para inserção e edição diretamente no banco de dados SQL. Os formulários de entrada na interface web serão listados para os idiomas registrados.


Os modelos Vernacular e VernacularCitation permitem registrar nomes populares de organismos, relacionando-os à Taxons e/ou Individuals, ou de paisagens e tipos de ambiente e vegetação, relacionando-os à Locations. A combinação nome+idioma deve ser única na tabela vernaculars e cada registro pode ser vinculado a múltiplos Táxons e/ou Indivíduos, ou Localidades, dependendo das fontes de informação. Cada registro também pode ter uma ou mais citações (texto de citação + BibReference + nota).

  • Suporta múltiplos idiomas para o nome popular; o idioma é obrigatório em cada registro e a interface já tem cadastrada uma lista ampla de valores possíveis em config/languagesISO6393.php
  • VernacularCitations permite adicionar várias citações sobre os nomes populares.
  • Formulários ODBCollect podem exigir nomes populares, permitindo capturar o vernacular no campo junto com medições, táxon e/ou indivíduo, e/ou com uma localidade.

O idioma é parte do significado do registro. Antes de criar um nome, procure a mesma grafia e confira suas relações e citações. Em muitos casos, o correto é acrescentar uma nova citação ou relação ao nome existente. Usuários plenos podem criar nomes populares, mas apenas o criador ou um superadministrador pode editá-los. A exclusão não é permitida quando existem citações registradas por outros usuários. Veja o fluxo de curadoria.


Formulários

Consulte a seção de Formulários em Objetos de Atributos, que detalha o uso na interface web e no aplicativo OpenDataBio Collect.


Datas incompletas

Datas para Vouchers, Indivíduos, Medições e Identificações podem ser incompletas, mas pelo menos ano é obrigatório em todos os casos. As colunas date nas tabelas são do tipo ‘date’ e as datas incompletas são armazenadas com 00 na parte ausente: ‘2005-00-00’ quando apenas o ano é conhecido; ‘1988-08-00’ quando apenas o mês é conhecido.


Auditando mudanças

As modificações nos registros do banco de dados são registradas na tabela activity_log. Esta tabela é gerada pelo pacote ActivityLog. As atividades são mostradas em um link ‘Histórico’ fornecido no show.view dos modelos.

  1. O pacote armazena as alterações como json no campo properties, que contém dois elementos: attribute e old, que são basicamente os valores novos vs antigos que foram alterados. Essa estrutura deve ser respeitada.
  2. A classe ActivityFunctions contém funções personalizadas para ler as propriedades do registro Json armazenado na tabela activity_log e encontra os valores para mostrar na tabela de dados History;
  3. A maioria das mudanças são registradas pelo pacote como um ’trait’ chamada dentro da classe. Estes permitem registrar automaticamente a maioria das atualizações e são configurados para registrar apenas os campos que foram alterados, não registros inteiros (opção dirty). Além disso, a criação de registros não é anotada como atividade, apenas as alterações.
  4. Algumas alterações, como de coletores e de identificações indivíduos são registradas separadamente, pois envolvem tabelas relacionadas e o registro é especificado nos arquivos do Controlador;
  5. O registro contém um campo log_name que agrupa os tipos de registro e é usado para distinguir os tipos de atividade e é útil para pesquisar a tabela de dados do histórico;
  6. Dois registros especiais também são feitos para Conjuntos de Dados:
  7. Qualquer download de um Conjunto de Dados pela interface é registrado, então os administradores podem rastrear quem e quando o conjunto de dados foi baixado;
  8. Qualquer solicitação de conjunto de dados também é registrada pelo mesmo motivo

O clean-command do pacote NÃO DEVE ser usado durante uma instalação em produção, caso contrário, apagará todas as alterações registradas. Se executado, apagará os logs anteriores ao tempo especificado no arquivo /config/activitylog.php.


A tabela ActivityLog tem a seguinte estrutura:
{
    "attributes":
    {
        "person_id":"2",
        "taxon_id":"1424",
        "modifier":"2",
        "biocollection_id":"1",
        "biocollection_reference":"1234",
        "notes":"A new fake note has been inserted",
        "date":"2020-02-08"},
    "old":{
        "person_id":674,
        "taxon_id":1413,
        "date":"1995-00-00",
        "modifier":0,
        "biocollection_id":null,
        "notes":null,
        "biocollection_reference":null
    }
}

6 - Como contribuir

Como você pode contribuir com o OpenDataBio

Reportar bugs e sugerir melhorias

Criar um issue em um dos repositórios GitLab abaixo, dependendo do problema.

Antes de postar, verifique se o que você quer relatar, perguntar ou propor já não está num issue aberto.

Identifique seu problema com uma ou mais etiquetas.


Issues para software
Issues para o pacote do R
Issues para este site de documentação

Colabore com o desenvolvimento, traduções de idiomas e documentos

Esperamos que este projeto cresça de forma colaborativa, necessário para o seu desenvolvimento e utilização no longo prazo. Portanto, colaboradores são bem-vindos para ajudar a corrigir e melhorar o OpenDataBio. A lista de problemas ou melhorias é um lugar para começar a saber o que é necessário fazer. Você pode também contribuir com Tutorias, melhorando a documentação.

As seguintes diretrizes são recomendadas se você deseja colaborar:

  1. Comunique-se com o administrador do repositório OpenDataBio indicando em quais questões deseja trabalhar e junte-se à equipe de desenvolvimento.
  2. Faça um Fork do repositório
  3. Boa prática criar um branch para guardar suas modificações ou adições
  4. Quando estiver satisfeito com os resultados, faça uma solicitação de pull-request ao mantenedor do projeto para revisar sua contribuição e mesclá-la com o código do repositório. Consulte a Ajuda do GitLab para obter mais informações sobre pull requests.

Diretivas de programação

  1. Use a instalação do docker para desenvolvimento, compartilhada entre os desenvolvedores. A interface agora usa Livewire 3 + Alpine para formulários e tabelas; novos CRUDs e filtros devem seguir esse padrão.
  2. Este software deve aderir ao Controle de Versão Semântico, a partir da versão 0.1.0-alpha1. O pacote R complementar e a Documentação (este site) devem seguir um esquema de controle de versão semelhante. Ao alterar a versão, uma tag de lançamento (release) deve ser criada com a versão antiga.
  3. Todas as variáveis ​​e funções devem ser nomeadas em Inglês, com as entidades e campos relacionados ao banco de dados sendo nomeados no singular. Todas as tabelas (quando apropriado) devem ter uma coluna “id” e as chaves estrangeiras devem fazer referência à tabela base com o sufixo “_id”, exceto em casos de autojunções (como “taxon.parent_id”) ou chaves estrangeiras polimórficas. O id de cada tabela tem tipo INT e deve ser autoincrementado.
  4. Use a classe laravel migration para adicionar qualquer modificação à estrutura do banco de dados. A migração deve incluir, se aplicável, a manipulação de dados existentes, permitindo upgrades.
  5. Use camelCase para métodos (ou seja, relacionamentos) e snake_case para funções.
  6. Documente o código com comentários e crie páginas de documentação neste site, se necessário.
  7. Deve haver uma estrutura para armazenar quais plugins estão instalados em uma determinada versão do banco de dados quais são as versões de sistema compatíveis.
  8. Este sistema usa Vite para compilar o código SASS e JavaScript. Se você adicionar ou modificar esses arquivos, utilize npm run build (ou npm run dev durante o desenvolvimento).

Colabore com a documentação

Tutoriais para lidar com tarefas específicas são bem vindos!

Para criar um tutorial:

  1. Fork o repositório de documentação. Ao clonar este repositório ou do seu fork inclua a opção de submódulo para obter também o repositório de tema Docsy incluído. Você precisará de Hugo para executar este site em seu localhost.
  2. Crie um branch para confirmar suas modificações ou adições
  3. Adicione seu tutorial:
  • Crie uma pasta dentro de contents/{lang}/docs/Tutorials usando kebab-case para o nome da pasta. Ex. primeiro-tutorial
  • Você pode criar um tutorial em um único idioma ou em vários idiomas. Basta colocá-lo na pasta correta
  • Dentro da pasta criada, crie um arquivo chamado _index.md e crie o conteúdo de markdown com seu tutorial.
  • Você pode começar copiando o conteúdo de um tutorial já incluído ou veja a documentação do Docsy
  1. Quando estiver satisfeito com os resultados, faça uma solicitação de pull para pedir ao mantenedor do projeto para revisar sua contribuição e mesclá-la com o repositório. Consulte a Ajuda do GitLab para obter mais informações sobre o uso de solicitações pull.

Colabore com traduções

Você pode ajudar com as traduções da interface do aplicativo ou deste site com a documentação. Se quiser ter um novo idioma para sua instalação, compartilhe sua tradução, criando um pull request com os novos arquivos.

Novo idioma para a interface da web:

  1. faça um fork e crie um branch para o repositório principal
  2. crie uma pasta para o novo idioma usando o Código ISO 639-1 dentro da pasta resources/lang
cd opendatabio
cd resources/lang
cp en es
  1. traduza todos os valores para todas as variáveis ​​dentro de todos os arquivos na nova pasta (pode usar a tradução do google para começar, apenas certifique-se de que os nomes das variáveis ​​não sejam traduzidos, caso contrário, não funcionará).
  2. adicione o idioma ao array em config/languages.php
  3. adicionar o idioma à tabela de languages do banco de dados criando uma migração laravel
  4. solicite um pull request

Novo idioma para o site de documentação

  1. faça um fork e crie um branch para o repositório de documentação
  2. crie uma pasta para o novo idioma usando o Código ISO 639-1 dentro da pasta content
bash
cd opendatabio.gitlab.io
cd content
cp pt es
  1. verifique todos os arquivos dentro da pasta e traduza onde necessário (pode usar a tradução do google, apenas certifique-se de traduzir apenas o que pode ser traduzido)
  2. Veja se funciona bem na sua máquina local (precisa installar Hugo e servir digitando hugo serve na pasta do site, que ficará visível pelo navegador no endereço http://localhost:1313/.
  3. empurre para o seu branch e faça um pull request

Relações polimóficas

Algumas das relações dentro da OpenDataBio são mapeadas usando Relações polimórficas. Elas são indicadas em um modelo por ter um campo terminando em _id e um campo terminando em _type. Por exemplo, todos os Objetos Centrais podem ter Medições, e essas relações são estabelecidas na tabela measurements pelas colunas measured_id e measured_type, o primeiro armazenando a id do modelo relacionado, o segundo é a classe do modelo medido em strings como ‘App\Models\Individual’, ‘App\Models\Voucher’, ‘App\Models\Taxon’, ‘App\Models\Location’.

Imagens do modelo conceitual

A maioria das figuras para explicar o modelo de dados foram geradas usando Laravel ER Diagram Generator, que permite mostrar todos os métodos implementados em cada modelo e não apenas os links diretos da tabela:

Para gerar essas figuras, um comando personalizado php artisan foi gerado. Esse commando está definido no arquivo app/Console/Commands/GenerateOdbErds.php.

Para atualizar as figuras siga os seguintes passos:

  • As figuras são configuradas no arquivo config/erd-generator-odb.php. Existem muitas opções adicionais para personalizar as figuras alterando ou adicionando variáveis ​​graphviz ao arquivo config/erd-generator-base.php.
  • O comando personalizado é php artisan odb: erd {$ model}, onde model é a chave dos arrays em config / erd-generator-odb.php, ou a palavra" all “, para regenerar todas as figuras doc. `bash cd opendatabio fazer ssh php artisan odb: erd all `
  • As figuras serão salvas em storage / app / public / dev-imgs
  • Copie as novas imagens para a pasta do site de documentação. Eles precisam ser colocados em contents / {lang} / concepts / {subfolder} para todos os idiomas e nas respectivas subpastas.

7 - Tutoriais

Fluxos reproduzíveis com OpenDataBio-R

Os tutoriais transformam os conceitos e guias de uso em fluxos reproduzíveis no R. Eles não substituem a referência da API: a referência define campos e parâmetros, enquanto o tutorial mostra como combiná-los para concluir uma tarefa.

Antes de começar

Para consultas públicas, normalmente basta a URL da API. Para acessar dados restritos ou modificar registros, você precisa de uma conta com as permissões corretas e de um token pessoal. Nunca publique esse token em scripts, repositórios ou relatórios.

Antes de importar dados, leia Primeira vez? e teste o fluxo com poucos registros. Use uma instalação de testes quando estiver aprendendo ou preparando operações destrutivas.

Leia também o Fluxo de importação de dados, que explica a ordem das dependências, a validação prévia de coordenadas e como reconciliar os resultados e IDs de cada UserJob com a tabela enviada.

Fluxos de trabalho com R

1. Obter e conferir dados

O tutorial Obter dados via R ensina a configurar a conexão e consultar taxons, localidades, indivíduos, medições, mídias, vouchers e datasets. Ele complementa o guia Pesquisar e mapear dados.

Ao concluir, você deve conseguir:

  • reproduzir no R uma consulta feita na interface;
  • escolher entre resposta direta e exportação em UserJob;
  • preservar identificadores e metadados necessários para relacionar tabelas;
  • transformar localidades em objetos espaciais e validar geometrias.

2. Preparar e importar dados

O tutorial Importar dados via R apresenta a ordem de dependências e exemplos por tipo de registro. Comece pelo índice e avance apenas pelas seções necessárias ao seu conjunto de dados.

Ao concluir, você deve conseguir:

  • verificar registros que já existem antes de criar novos;
  • montar data.frames com os campos definidos pela API;
  • importar bibliotecas compartilhadas antes dos dados dependentes;
  • acompanhar o UserJob e interpretar sucessos, avisos e erros;
  • consultar uma amostra dos registros importados para validar o resultado.

Sequência recomendada

  1. Configure a conexão sem escrever o token diretamente no script.
  2. Teste uma consulta pública.
  3. Reproduza filtros do Data Explorer no R.
  4. Consulte pessoas, referências, taxons, localidades e traits existentes.
  5. Prepare um lote pequeno.
  6. Importe na ordem indicada em Primeira vez?.
  7. Acompanhe o UserJob e examine os resultados por registro.
  8. Consulte novamente os dados e compare com a entrada.
  9. Só então processe o conjunto completo.

Mapa de melhoria dos tutoriais

Os exemplos existentes cobrem muitos modelos, mas foram escritos em momentos diferentes da evolução da API. A revisão deve seguir esta matriz:

PrioridadeMelhoriaCritério de conclusão
AltaSegurança do token e configuração por variáveis de ambienteNenhum exemplo contém token real ou recomenda salvá-lo no script.
AltaAtualizar saídas, nomes de campos e links para a API atualTodo código usa parâmetros presentes no schema e links válidos.
AltaExplicar UserJobs e resultados estruturadosCada importação mostra como conferir estado, avisos, erros e IDs afetados.
AltaCriar dados de exemplo pequenos e reproduzíveisExemplos não dependem de IDs específicos de uma instalação pública.
MédiaRelacionar Data Explorer, API e RPelo menos uma consulta é construída na interface e reproduzida em R.
MédiaCobrir datasets e versões publicadasExemplo diferencia exportação momentânea de download de versão citável.
MédiaAtualizar localidadesExemplo cobre GeoJSON, localidades marinhas, parcelas, transectos e posições relativas.
MédiaAtualizar identificaçõesExemplo distingue identificação atual, histórico de identificações e auditoria.
MédiaAcrescentar validação pós-importaçãoCada capítulo termina consultando e comparando registros criados.
FuturaFilogeniasCriar um fluxo separado quando houver suporte estável no cliente R.

Enquanto essa revisão não estiver completa, confirme sempre os campos na referência da API e execute os exemplos em lotes pequenos.

Como contribuir

Um tutorial deve declarar pré-requisitos, permissões necessárias, dados de entrada, resultado esperado e como desfazer ou corrigir uma execução de teste. Consulte Como contribuir antes de enviar um novo exemplo.

7.1 - Obter dados via R

Obter dados com o pacote OpenDataBio-R

O pacote Opendatabio-R foi criado para permitir aos usuários interagir com um servidor OpenDataBio, para obter (GET) dados, importar (POST) dados para a base de dados e atualizar dados (PUT). Este tutorial é um exemplo básico de como obter dados.

Este tutorial continua o fluxo Pesquisar e mapear dados. Antes de executar uma consulta grande, construa os filtros na interface, confira alguns registros e decida se precisa de uma resposta direta ou de uma exportação em UserJob.

Configure a conexão

  1. Configure a conexão com o servidor OpenDataBio usando a função odb_config() do pacote. Os parâmetros mais importantes para esta função são base_url, que deve apontar para a URL da API do seu servidor OpenDataBio e token, que é o token de acesso usado para autenticar seu usuário.
  2. O token só é necessário para obter dados de conjuntos de dados que possuem uma das políticas de acesso restrito. Os dados dos conjuntos de dados de acesso público podem ser extraídos sem a especificação do token.
  3. Seu token está disponível em seu perfil na interface web
library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)

A configuração mais avançada envolve a definição de uma versão de API específica, um agente de usuário personalizado ou outros cabeçalhos HTTP, mas isso não é coberto aqui.

Teste sua conexão

A função odb_test() pode ser usada para verificar se a conexão foi bem sucedida e se seu usuário foi identificado corretamente:

odb_test(cfg)
#will output
Host: https://opendb.inpa.gov.br/api/v0
Versions: server 0.9.1-alpha1 api v0
$message
[1] "Success!"

$user
[1] "admin@example.org"

Como alternativa, você pode especificar esses parâmetros como variáveis ​​de sistema. Antes de iniciar o R, configure isso em seu shell (ou adicione ao final de seu arquivo .bashrc):

export ODB_TOKEN="YourToken"
export ODB_BASE_URL="https://opendb.inpa.gov.br/api"
export ODB_API_VERSION="v0"

Obter dados

Verifique a Referência rápida da API GET para obter uma lista completa de endpoints e parâmetros de solicitação. Veja também os parâmetros genéricos, em especial save_job que é importante para baixar grandes conjuntos de dados.

Na documentação GET, cada endpoint lista os campos dos perfis simple e all e explica o significado de cada coluna. Prefira informar explicitamente apenas os campos necessários à análise. Isso reduz o tamanho da resposta e torna o script menos dependente de colunas técnicas. Preserve UUIDs e as chaves usadas para relacionar os resultados.

Para dados de acesso público o token é opcional. Abaixo alguns exemplos. Siga um raciocínio semelhante para usar os demais endpoints. Veja a ajuda do pacote R para todas as funções odb_get_{endpoint} disponíveis.

Obtendo nomes de táxons

Consulte GET API Taxon Endpoint para uma lista dos parâmetros de solicitação e uma lista de campos de resposta.

base_url="https://opendb.inpa.gov.br/api"
cfg = odb_config(base_url=base_url)
#get id for a taxon
mag.id = odb_get_taxons(params=list(name='Magnoliidae',fields='id,name'),odb_cfg = cfg)
#use this id to get all descendants of this taxon
odb_taxons = odb_get_taxons(params=list(root=mag.id$id,fields='id,scientificName,taxonRank,parent_id,parentName'),odb_cfg = cfg)
head(odb_taxons)

Algo como, dependo da sua base:

  id scientificName taxonRank parent_id  parentName
1 25    Magnoliidae     Clado        20 Angiosperms
2 43     Canellales     Ordem        25 Magnoliidae
3 62       Laurales     Ordem        25 Magnoliidae
4 65    Magnoliales     Ordem        25 Magnoliidae
5 74      Piperales     Ordem        25 Magnoliidae
6 93  Chloranthales     Ordem        25 Magnoliidae

Obtendo Localidades e geometrias

Consulte GET API Location Endpoint para os parâmetros de solicitação e uma lista de campos de resposta.

Obtenha alguns campos listando todas as Unidades de Conservação (adm_level=99) registradas no servidor:

base_url="https://opendb.inpa.gov.br/api"
cfg = odb_config(base_url=base_url)
odblocais = odb_get_locations(params = list(fields='id,name,parent_id,parentName',adm_level=99),odb_cfg = cfg)
head(odblocais)

Se o servidor usar os dados de seed fornecidos o resultado será:

id                                                           name
1 5628                              Estação Ecológica Mico-Leão-Preto
2 5698          Área de Relevante Interesse Ecológico Ilha do Ameixal
3 5700 Área de Relevante Interesse Ecológico da Mata de Santa Genebra
4 5703     Área de Relevante Interesse Ecológico Buriti de Vassununga
5 5707                                Reserva Extrativista do Mandira
6 5728                                   Floresta Nacional de Ipanema
parent_id parentName
1         6  São Paulo
2         6  São Paulo
3         6  São Paulo
4         6  São Paulo
5         6  São Paulo
6         6  São Paulo

Localidades como objetos espaciais em R

Para obter um objeto espacial em R, use o pacote sf. O exemplo abaixo plota um gráfico e seus subgráficos e também exporta as localizações como kml e shapefile.

library(sf)
library(opendatabio)

#download dados de uma parcela
cfg <- odb_config(base_url = "https://opendb.inpa.gov.br/api")

#daddos da parcela
parcela = odb_get_locations(params = list(fields='all',name='Parcela 25ha'), odb_cfg = cfg)
parcela$type = 'main plot'

#subparcelas
subplots = odb_get_locations(params = list(fields='all',location_root=parcela$id), odb_cfg = cfg)
subplots = subplots[subplots$adm_level==100 & subplots$id!=parcela$id,]
subplots$type = 'sub plot'

#convert footprintWKT para sf geometries
geoms <- st_as_sfc(parcela$footprintWKT, crs = 4326)
parcela_sf <- st_sf(parcela, geometry = geoms)

geoms <- st_as_sfc(subplots$footprintWKT, crs = 4326)
subplots_sf <- st_sf(subplots, geometry = geoms)

#imprime
png("plots_with_subplots.png", width = 15, height = 15,units='cm',res=300)
  par(mar=c(2,2,3,2))
  plot(st_geometry(subplots_sf),border='green',main = parcela$locationName)
  plot(st_geometry(parcela_sf),border='red',add=T)
  labs = gsub("Quadrat ","",subplots_sf$locationName)
  text(
   st_coordinates(st_centroid(subplots_sf)),
   labels = labs,
   cex = 0.2, col = "blue"
  )
dev.off()


#salva como kml
locais = rbind(parcela_sf,subplots_sf)
locais$name <- locais$locationName
cols_to_include <- setdiff(names(locais), c("footprintWKT",'locationName'))
locais_kml <- locais[, c("name", cols_to_include[cols_to_include != "name"])]
st_write(locais_kml, "plots_and_subplots.kml", layer=parcela$locationName, driver = "KML", delete_dsn = TRUE)
#salva como shapefile
st_write(locais_kml, "plots_and_subplots.shp", layer=parcela$locationName, delete_layer = TRUE)

Figura gerada:

Parcelas e subparcelas obtidas no OpenDataBio

Validando coordendas geográficas

Ver POST Locations-Validation Endpoint para parametros e campos resposta.

#sua conexao
library(opendatabio)
base_url="http://localhost/opendatabio/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)
odb_test(cfg)

#dados fake
dados = data.frame(
  latitude = sample(seq(-2,2,by=0.00001),10),
  longitude = sample(seq(-60,-59,by=0.00001),10)
)

#envia para validar
jb = odb_validate_locations(dados,odb_cfg = cfg)

#monitora execução
odb_get_jobs(params=list(id=jb$id),odb_cfg = cfg)

#pega resultado
dadosValidados = odb_get_jobs(params=list(id=jb$id,get_file=T),odb_cfg = cfg)
head(dados)
  latitude longitude
1  0.12975 -59.65745
2  1.77469 -59.77757
3 -0.89154 -59.80179
4 -1.25632 -59.87084
5  0.77085 -59.22740
6 -0.74237 -59.64591

head(dadosValidados)
  latitude longitude withinLocationName withinLocationParent withinLocationCountry withinLocationHigherGeography  withinLocationType
1  0.12975 -59.65745  Trombetas/Mapuera               Brasil                Brazil    Brasil > Trombetas/Mapuera Território Indígena
2  0.12975 -59.65745     Bioma Amazônia               Brasil                Brazil       Brasil > Bioma Amazônia           Ambiental
3  0.12975 -59.65745           Amazonia                World                                            Amazonia           Ambiental
4  0.12975 -59.65745            Urucará             Amazonas                Brazil   Brasil > Amazonas > Urucará           Município
5  1.77469 -59.77757            Jacamim              Roraima                Brazil    Brasil > Roraima > Jacamim Território Indígena
6  1.77469 -59.77757     Bioma Amazônia               Brasil                Brazil       Brasil > Bioma Amazônia           Ambiental
  withinLocationID withinLocationTypeAdmLevel searchObs
1             6393                         98        NA
2             6583                         97        NA
3            16597                         97        NA
4             1570                          8        NA
5             6121                         98        NA
6             6583                         97        NA

Obtendo dados de Individuos

Consulte GET API Individual Endpoint para as listas completas das opções de parâmetros de busca e dos campos de reposta.

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")

#estabelece a configuração da conexao
cfg = odb_config(base_url=base_url, token = token)

#BAIXA DIRETAMENTE - se forem poucos dados que voce quer baixar
inds = odb_get_individuals(params=list(limit=100),odb_cfg=cfg)

#PREPARA ARQUIVO NO SERVIDOR - se tua busca implicar em muito registros
    #baixando todos os registros aos quais voce tem acesso ou publicos
    #salvando o processo, pois neste caso devem ser muitos
    jobid = odb_get_individuals(params=list(save_job=T),odb_cfg=cfg)
    #verificando o status do processo
    odb_get_jobs(params=list(id=jobid$job_id),odb_cfg=cfg)
    #qual terminr, pega os dados aqui (ou baixe o arquivo gerado pela interface web)
    todos.inds = odb_get_jobs(params=list(id=jobid$job_id),odb_cfg=cfg)

#BUSCANDO DADOS ESPECIFICOS
    
    #todos os individuos identificados como o taxon X
    params = list(taxon = "Licaria cannela tenuicarpa")
    licarias = odb_get_individuals(params=params,odb_cfg=cfg)

    #todos os individuos identificados como o taxon X ou seus descendentes
    params = list(taxon_root = "Licaria")
    licarias = odb_get_individuals(params=params,odb_cfg=cfg)

    #todos individuos do conjunto de dados X
    params = list(dataset = "MyDataset name or id")
    inds = odb_get_individuals(params=params,odb_cfg=cfg)
    #ou use o save_job acima se forem muitos dados

    #pode ver a lista dos conjuntos de dados existentes
    datasets = odb_get_datasets(odb_cfg = cfg)

Obtendo dados de Vouchers

Consulte GET API Voucher Endpoint para as listas completas das opções de parâmetros de busca e dos campos de reposta.

Siga o exemplo de indivíduos acima, mas usando a função odb_get_vouchers.

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")

#estabelece a configuração da conexao
cfg = odb_config(base_url=base_url, token = token)

#100 primeiros vouchers com registro numa biocoleção
vouchers = odb_get_vouchers(params=list(biocollection="INPA",limit=100),odb_cfg=cfg)

#vouchers na localidade x (id, ou nome, como registrado na base)
vouchers = odb_get_vouchers(params=list(location="Reserva Florestal Adolpho Ducke, Parcela PDBFF-100ha",limit=100),odb_cfg=cfg)

Obtendo Medições

Consulte GET API Measurement Endpoint para as listas completas das opções de parâmetros de busca e dos campos de reposta.

Use a função odb_get_measurements.

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api" 
token = Sys.getenv("ODB_TOKEN")

#estabelece a configuração da conexao
cfg = odb_config(base_url=base_url, token = token)

#100 primeiras medições do conjunto de dados X com id=10
medicoes = odb_get_measurements(params=list(dataset=10,limit=100),odb_cfg=cfg)

#100 primeiras medições do conjunto de dados X com id=10 para a variavel cujo export_name é treeDbh
medicoes = odb_get_measurements(params=list(trait="treeDbh",dataset=10,limit=100),odb_cfg=cfg)

#Medições do conjunto de dados X com id=10 para a variavel cujo export_name é treeDbh
#apenas para Lauraceae
medicoes = odb_get_measurements(params=list(trait="treeDbh",dataset=10,taxon_root="Lauraceae"),odb_cfg=cfg)

#ligando dados de individuos medicoes
louros = odb_get_individuals(params=list(dataset=10,taxon_root="Lauraceae"),odb_cfg=cfg)
filtro = grep("Individu",medicoes$measured_type) #opcional, depende do que esta em medicoes
g = match(medicoes$measured_id[filtro],louros$id)
medicoes$location = NA
medicoes$location[filtro] = louros$locationName[g]

Obtendo Mídia

Consulte GET API Media Endpoint para as listas completas das opções de parâmetros de busca e dos campos de reposta.

Use a função odb_get_media do pacote do R.

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api" 
token = Sys.getenv("ODB_TOKEN")

#estabelece a configuração da conexao
cfg = odb_config(base_url=base_url, token = token)

#os 50 primeiros arquivos de mídia de um conjunto de dados que tem imagens 
imgs = odb_get_media(params=list(dataset=97,limit=50),odb_cfg=cfg)

#veja esses metadados
head(imgs)

#a partir desses metadados, baixa os arquivos de media
#cria uma função para isso:
getImagesByURL <- function(url,downloadFolder='img') {
  dir.create(downloadFolder,showWarnings = F)
  fn = strsplit(url,"\\/")[[1]]
  fn = fn[length(fn)]
  nname = paste(downloadFolder,fn,sep="/")
  img = httr::GET(url=url)    
  writeBin(httr::content(img, "raw"), nname)
}
#usa a função para baixar as imagens numa pasta
sapply(imgs$file_url,getImagesByURL,downloadFolder='testeImgsFromOdb') 

Obter Conjuntos de dados

Versões publicadas de conjuntos de dados, são arquivos já prontos no servidor para uso. Essas versões, se disponíveis, podem ter acesso aberto ou restrito.

7.2 - Importar dados via R

Importar dados com o pacote OpenDataBio-R

O pacote Opendatabio-R foi criado para permitir aos usuários interagir com um servidor OpenDataBio, tanto para obter (GET) dados ou para importar (POST) dados para o banco de dados. Este tutorial é um exemplo básico de como importar dados.

Este tutorial continua o fluxo Inserir e importar dados. Faça os primeiros testes com poucos registros e confirme que sua conta tem permissão no projeto e dataset de destino.

Configure a conexão

  1. Configure a conexão com o servidor OpenDataBio usando a função odb_config() do pacote. Os parâmetros mais importantes para esta função são base_url, que deve apontar para a URL da API do seu servidor OpenDataBio e token, que é o token de acesso usado para autenticar seu usuário.
  2. O token só é necessário para obter dados de conjuntos de dados que possuem uma das políticas de acesso restrito. Os dados dos conjuntos de dados de acesso público podem ser extraídos sem a especificação do token.
  3. Seu token está disponível em seu perfil na interface web
library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
#create a config object
cfg = odb_config(base_url=base_url, token = token)
#test connection
odb_test(cfg)

Importar Dados (POST API)

Verifique a Referência rápida da API para obter uma lista completa dos endpoints POST e dos campos necessários para importar dados.

Funções de importação OpenDataBio-R

Todas as funções de importação têm a mesma assinatura: o primeiro argumento é um data.frame com os dados a serem importados, e o segundo parâmetro é um objeto de configuração gerado por odb_config.

Ao escrever uma solicitação de importação, verifique os documentos da API POST para entender quais colunas podem ser declaradas no data.frame.

As funções de importação retornam o identificador de um UserJob. Use-o para acompanhar a execução e consulte também a página da tarefa na interface. Uma tarefa concluída não significa que todas as linhas foram importadas: examine os resultados estruturados, avisos, erros e identificadores afetados. As funções disponíveis no cliente R dependem de sua versão; confira a ajuda instalada e a API atual.

Trabalhando com datas e datas incompletas

Para Indivíduos, Vouchers e identificações, você pode usar datas incompletas.

O formato de data usado no OpenDataBio é AAA-MM-DD (ano - mês - dia), portanto, uma entrada válida seria 2018-05-28.

Particularmente em dados históricos, o dia (ou mês) exato pode não ser conhecido, então você pode substituir esses campos por NA: ‘1979-05-NA’ significa “um dia desconhecido, em maio de 1979” e ‘1979-NA- NA ‘significa “dia e mês desconhecidos, 1979”. Você não pode adicionar uma data para a qual tenha apenas o dia, mas pode, se tiver apenas o mês, se for realmente significativo de alguma forma.

7.2.1 - Importar Localidades

Importar Localidades usando o pacote OpenDataBio R

OpenDataBio é distribuído com um conjunto de dados de localidades para o Brasil, que inclui estados, municípios, unidades de conservação federais, terras indígenas e os biomas.

Trabalhar com dados espaciais é uma área delicada, por isso tentamos tornar o fluxo de trabalho para inserir Localidades o mais fácil possível.

Se você deseja fazer upload dos limites administrativos de um país, você também pode baixar um arquivo geojson em OSM-Boundaries e carregue-o diretamente através da interface da web. Ou use o repositório GADM exemplificado abaixo.

A importação é direta, mas os principais problemas a serem considerados:

  1. OpenDataBio armazena as geometrias de localidades usando representação de texto conhecido (WKT).
  2. As localidades são hierárquicas, portanto, uma localidade DEVE estar completamente dentro de sua localidade pai. O método de importação tentará detectar as localidades pai com base em sua geometria. Portanto, você não precisa informar um pai. No entanto, às vezes a localidade pai e a localidade filho compartilham uma borda ou têm pequenas erros que evitam a detecção. Portanto, se a importação não colocar o local onde você esperava, pode-se atualizar ou importar informando o pai correto. Quando você informar a localidade pai, uma segunda verificação será realizada adicionando um buffer à localidade pai e deverá resolver o problema.
  3. Os polígonos de países podem ser importados sem detecção ou definição dos pais, e registros marítimos podem ser vinculados a um pai, mesmo que não estejam contidos no polígono pai. Isso requer informar um campo específico (ismarine) e deve ser usado nestes casos.
  4. Padronizar a geometria para uma projeção comum de uso no sistema. Fortemente recomendado o uso de EPSG:4326 WGS84. Padronize antes de importar.
  5. Considere enviar seus polígonos político-administrativos antes de adicionar PONTOS, PLOTS ou TRANSECTOS específicos;
  6. Unidades de Conservação, Territórios Indígenas e Camadas Ambientais podem ser adicionados como locais e serão tratados como casos especiais, pois alguns desses locais abrangem diferentes unidades administrativas. Portanto, uma localidade de tipo POINT, PLOT ou TRANSECTpode pertencer a umA UC, umA TI e muitas camadas ambientais se estas estiverem armazenadas no banco de dados. Essas localidades relacionadas são detectadas automaticamente a partir da geometria da localidade.

Verifique a POST API de localidades para entender quais colunas podem ser declaradas ao importar localidades.

Adm_level define o tipo de localidade

O nível administrativo (adm_level) de um local é um número:

  • 2 para país;3 à 10 como outras como ‘áreas administrativas’, seguindo a convenção OpenStreeMap para facilitar a importação de dados externos e traduções locais (À SER IMPLEMENTADO) . Portanto, para o Brasil, os códigos são (Estados = 4, Municípios = 8);
  • 999 para locais de ‘POINT’ como waypoints GPS;
  • 101 para transectos
  • 100 é o código para PARCELAS e SUBPARCELAS;
  • 99 é o código para Unidades de Conservação
  • 98 para Territórios Indígenas
  • 97 para polígonos ambientais (por exemplo, Floresta Ombrofila Densa ou Bioma Amazônia)

Importando polígonos espaciais

Limites administrativos do GADM

Limites administrativos também podem ser importados sem sair de R, obtendo dados de GDAM e usando as funções odb_import*

library(raster)
library(opendatabio)

#download áreas administrativas do GADM para um país

#get country codes
crtcodes = getData('ISO3')
bra = crtcodes[crtcodes$NAME%in%"Brazil",]

#define a path where to save the downloaded spatial data
path = "GADMS"
dir.create(path,showWarnings = F)

#o número de admin_levels em cada país varia
#obter todos os níveis existentes em seu computador
runit =T
level = 0
while(runit) {
   ocrt <- try(getData('GADM', country=bra, level=level,path=path),silent=T)
   if (class(ocrt)=="try-error") {
      runit = FALSE
   }
   level = level+1
}

#read downloaded data and format to odb
files = list.files(path, full.name=T)
locations.to.odb = NULL
for(f in 1:length(files)) {
   ocrt <- readRDS(files[f])
   #class(ocrt)
   #convert the SpatialPolygonsDataFrame to OpenDataBio format
   ocrt.odb = opendatabio:::sp_to_df(ocrt)  #only for GADM data
   locations.to.odb = rbind(locations.to.odb,ocrt.odb)
}
#see without geometry
head(locations.to.odb[,-ncol(locations.to.odb)])

#you may add a note to location
locations.to.odb$notes = paste("Source gdam.org via raster::get_data()",Sys.Date())

#adjust the adm_level to fit the OpenStreeMap categories
ff = as.factor(locations.to.odb$adm_level)
(lv = levels(ff))
levels(ff) = c(2,4,8,9)
locations.to.odb$adm_level = as.vector(ff)

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)
odb_import_locations(data=locations.to.odb,odb_cfg=cfg)

Atenção: você pode querer verificar se há exclusividade de nome + pai em vez de apenas nome, já que nome + pai é uma combinação única. Você não pode salvar dois locais com o mesmo nome dentro do mesmo pai.

Example usando um shapefile

library(rgdal)

#read your shape file
path = 'mymaps'
file = 'myshapefile.shp'
layer = gsub(".shp","",file,ignore.case=TRUE)
data = readOGR(dsn=path, layer= layer)

#you may reproject the geometry to standard of your system if needed
data = spTransform(data,CRS=CRS("+proj=longlat +datum=WGS84"))

#convert polygons to WKT geometry representation
library(rgeos)
geom = rgeos::writeWKT(data,byid=TRUE)

#prep import
names = data@data$name  #or the column name of the data
shape.to.odb = data.frame(name=names,geom=geom,stringsAsFactors = F)

#need to add the admin_level of these locations
shape.to.odb$admin_level = 2

#and may add parent and note if your want
library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)
odb_import_locations(data=shape.to.odb,odb_cfg=cfg)

Example importando de um KML

#read file as SpatialPolygonDataFrame
file = "myfile.kml"
file.exists(file)
mykml = readOGR(file)
geom = rgeos::writeWKT(mykml,byid=TRUE)

#prep import
names = mykml@data$name  #or the column name of the data
to.odb = data.frame(name=names,geom=geom,stringsAsFactors = F)

#need to add the admin_level of these locations
to.odb$admin_level = 2

#and may add parent or any other valid field

#import
library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)
odb_import_locations(data=to.odb,odb_cfg=cfg)

Importar Parcelas e SubParcelas

Parcelas e transectos são casos especiais no OpenDataBio:

  1. Eles podem ser definidas com uma geometria do tipo Polygon ou LineString, respectivamente;
  2. Ou eles podem ser registrados apenas como localidaes de tipo POINT. Nesse caso, o OpenDataBio criará o polígono ou linestring para você;
  3. Dimensões (x e y) são armazenadas em metros para PARCELAS. Portanto elas devem ser quadradas ou retangulares.
  4. SubParcelas são localidades do tipo PARCELA tendo outra localidade do tipo PARCELA como pai e também devem ter posições cartesianas (startX, startY) dentro da localidade pai além das dimensões. A posição cartesiana refere-se às posições X e Y dentro da PARCELA pai e, portanto, DEVE ser menor do que o pai X e Y.
  5. SubParcela é o único tipo de localidade que pode ser registrado sem uma coordenada geográfica ou geometria, que será calculada a partir da geometria da PARCELA pai usando os valores startx e starty.

Parcela e SubParcela - exemplo 01

Você precisa de pelo menos uma coordenada geográfica para registrar uma localidade do tipo PLOT. A geometria (ou latitude e longitude) não pode estar vazia.

Este exemplo registra uma parcela em Manaus de 100x100m, informando sua geometria e depois importa algumas subparcelas sem especificação de geometria.

#geometry of a plot in Manaus
southWestCorner = c(-59.987747, -3.095764)
northWestCorner = c(-59.987747, -3.094822)
northEastCorner = c(-59.986835,-3.094822)
southEastCorner = c(-59.986835,-3.095764)
geom = rbind(southWestCorner,northWestCorner,northEastCorner,southEastCorner)
library(sp)
geom = Polygon(geom)
geom = Polygons(list(geom), ID = 1)
geom = SpatialPolygons(list(geom))
library(rgeos)
geom = writeWKT(geom)
to.odb = data.frame(name='A 1ha example plot',x=100,y=100,notes='a fake plot',geom=geom, adm_level = 100,stringsAsFactors=F)
library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)
odb_import_locations(data=to.odb,odb_cfg=cfg)

Aguarde alguns segundos e, em seguida, importe subtramas para esta plotagem.

#importar subparcelas de 20x20m para a PARCELA acima sem indicar uma geometria.

(parent = odb_get_locations(params = list(name='A 1ha example plot',fields='id,name',adm_level=100),odb_cfg = cfg))

sub1 = data.frame(name='sub plot 40x40',parent=parent$id,x=20,y=20,adm_level=100,startx=40,starty=40,stringsAsFactors=F)
sub2 = data.frame(name='sub plot 0x0',parent=parent$id,x=20,y=20,adm_level=100,startx=0,starty=0,stringsAsFactors=F)
sub3 = data.frame(name='sub plot 80x80',parent=parent$id,x=20,y=20,adm_level=100,startx=80,starty=80,stringsAsFactors=F)
dt = rbind(sub1,sub2,sub3)

#import
odb_import_locations(data=dt,odb_cfg=cfg)

Capturas de tela das parcelas importadas

Abaixo capturas de tela para as parcelas importadas com o código acima

Parcelas e subparcelas importadas: visão geral

Detalhes das subparcelas importadas

Mapa das parcelas e subparcelas importadas

Parcela e SubParcela - exemplo 02

Importe uma parcela e suas subparcelas tendo apenas:

  1. a coordenada geográfica de um único ponto, representando a coordenada [0,0] da parcela.
  2. um azimute ou ângulo da direção da parcela (se não informar, Norte será usado
library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)


#the plot
geom = "POINT(-59.973841 -2.929822)"
to.odb = data.frame(name='Example Point PLOT',x=100, y=100, azimuth=45,notes='OpenDataBio point plot example',geom=geom, adm_level = 100,stringsAsFactors=F)
odb_import_locations(data=to.odb,odb_cfg=cfg)

#define 20x20 subplots cartesian coordinates
x = seq(0,80,by=20)
xx = rep(x,length(x))
yy = rep(x,each=length(x))
names = paste(xx,yy,sep="x")

#importar esses subplots sem ter uma geometria, mas especificando a localidade pai
parent = odb_get_locations(params = list(name='Example Point PLOT',adm_level=100),odb_cfg = cfg)
to.odb = data.frame(name=names,startx=xx,starty=yy,x=20,y=20,notes="OpenDataBio 20x20 subplots example",adm_level=100,parent=parent$id)
odb_import_locations(data=to.odb,odb_cfg=cfg)

#obter os locais importados usando o parâmetro root
locais = odb_get_locations(params=list(root=parent$id),odb_cfg = cfg)
locais[,c('id','locationName','parentName')]
colnames(locais)
for(i in 1:nrow(locais)) {
  geom = readWKT(locais$footprintWKT[i])
  if (i==1) {
    plot(geom,main=locais$locationName[i],cex.main=0.8,col='yellow')
    axis(side=1,cex.axis=0.7)
    axis(side=2,cex.axis=0.7,las=2)
  } else {
    plot(geom,add=T,border='red')
  }
}

A figura gerada acima:

Parcela importada a partir de ponto e dimensões

Importar transectos

Este código importará dois transectos, um definido por uma geometria (LINESTRING), e o outro apenas por uma única coordenada geográfica (POINT). Veja as figuras abaixo para o resultado importado.

#geometry of transect in Manaus

#read trail from a kml file
  #library(rgdal)
  #file = "acariquara.kml"
  #file.exists(file)
  #mykml = readOGR(file)
  #library(rgeos)
  #geom = rgeos::writeWKT(mykml,byid=TRUE)

#above will output:
geom = "LINESTRING (-59.9616459699999993 -3.0803612500000002, -59.9617394400000023 -3.0805952900000002, -59.9618530300000003 -3.0807376099999999, -59.9621049400000032 -3.0808563200000001, -59.9621949100000009 -3.0809758500000002, -59.9621587999999974 -3.0812666800000001, -59.9621092399999966 -3.0815010400000000, -59.9620656999999966 -3.0816403499999998, -59.9620170600000009 -3.0818584699999998, -59.9620740699999999 -3.0819864099999998)";

#prep data frame
#o valor y refere-se a um buffer em metros aplicado à trilha
#y é usado para validar a inserção de indivíduos relacionados
to.odb = data.frame(name='A trail-transect example',y=20, notes='OpenDataBio transect example',geom=geom, adm_level = 101,stringsAsFactors=F)

#import
library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)
odb_import_locations(data=to.odb,odb_cfg=cfg)

#IMPORTA UM SEGUNDO TRANSECTO SEM GEOMETRIA
# então você precisa informar o valor x, que é o comprimento do transecto
#ODB irá mapear este transecto orientado pelo parâmetro azimute (sul no exemplo abaixo)
#point geometry = ponto inicial
geom = "POINT(-59.973841 -2.929822)"
to.odb = data.frame(name='A transect point geometry',x=300, y=20, azimuth=180,notes='OpenDataBio point transect example',geom=geom, adm_level = 101,stringsAsFactors=F)
odb_import_locations(data=to.odb,odb_cfg=cfg)

locais = odb_get_locations(params=list(adm_level=101),odb_cfg = cfg)
locais[,c('id','locationName','parentName','levelName')]

O código acima resultará nas duas localidades a seguir:

Transecto importado com geometria de linha

Transecto importado a partir de ponto e dimensões

7.2.2 - Importar BibReferences

Importar Referências Bibliográficas usando o pacote OpenDataBio R

O endpoint POST bibreferences aceita duas formas de entrada:

  • doi: número ou URL de DOI; o OpenDataBio tenta recuperar o BibTeX usando serviços externos;
  • bibtex: registro bibliográfico completo em formato BibTeX.

Pelo menos uma dessas colunas deve estar preenchida em cada linha. Para o fluxo por DOI mostrado abaixo, envie somente a coluna doi. Antes de importar, pesquise o DOI ou a chave BibTeX para evitar referências duplicadas.

Exemplo fictício: importar apenas DOIs

library(opendatabio)

base_url = "http://localhost/opendatabio/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url = base_url, token = token)

# Uma linha por referência. O endpoint aceita tanto o número quanto a URL.
references_by_doi = data.frame(
  doi = c(
    "10.1234/exemplo.2026.001",
    "https://doi.org/10.1234/exemplo.2026.002"
  ),
  stringsAsFactors = FALSE
)

# Proteção para que DOIs fictícios não sejam enviados por acidente.
if (FALSE) {
  job = odb_import_bibreferences(references_by_doi, odb_cfg = cfg)

  # Acompanhe a tarefa e examine resultados, avisos e erros por registro.
  odb_get_jobs(params = list(id = job$id), odb_cfg = cfg)
  odb_get_affected_ids(job_id = job$id, odb_cfg = cfg)
}

Quando um DOI real é resolvido, o OpenDataBio recupera o BibTeX, extrai seus metadados e cria a Referência Bibliográfica. A conclusão do UserJob não garante que todas as linhas foram importadas; confira especialmente DOIs não encontrados e referências já cadastradas.

Importar um arquivo BibTeX

#sua conexao
library(opendatabio)
base_url="http://localhost/opendatabio/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)
odb_test(cfg)

#leia no R as referencias bibliograficas
library(rbibutils)
bibs = readBib(file="yourFileWithReferences.bib")
formatbib <- function(x) {
  con <- textConnection("bibref", "w")
  writeBib(x,con=con)
  bibref = paste(bibref,collapse = " ")
  close(con)
  return(bibref)
}

#prepara para importar ao odb
bibtexts = sapply(bibs,formatbib)
data = data.frame(bibtex=bibtexts,standardize=1,stringsAsFactors = F)

#importa
jobid = odb_import_bibreferences(data,odb_cfg = cfg)
#aguarda finalizacao
odb_get_jobs(params=list(id=jobid$id),odb_cfg = cfg)
#pega o log da importacao
dt = odb_get_affected_ids(job_id=jobid$id,odb_cfg = cfg)

7.2.3 - Importar Vernacular

Importar Vernacular usando o pacote OpenDataBio R

library(opendatabio)
base_url="http://localhost/opendatabio/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)
odb_test(cfg)

#gerar um dado fake para teste
name = c('pau rosa',"casca preciosa")
taxons = c("Aniba roseaodora,Aniba panurensis,Aniba parvifolia","Aniba canelilla")

#pega o id de alguns individuos
inds = odb_get_individuals(params=list(taxon="Aniba roseaodora,Aniba panurensis,Aniba parvifolia",fields='id,scientificName',limit=10),odb_cfg = cfg)
individuals=c(paste(inds$id,collapse = ","),NA)

idiomas = odb_get_languages(odb_cfg = cfg)
language= c('pt-br','en')  

#cria um data.frame com essas informacoes
verna = data.frame(name,taxons,language,taxons,individuals)

#citatcoes (basta gerar um data.frame para cada vernacular)
umaCitatcao = data.frame(
  citation='Este seria o texto citado', 
  bibreference="Riberiroetal1999FloraDucke",   #bibkey ou o id
  type='generic',   #pode ser: generic, use, etimology
  notes='minhas observações sobre essa citação')

#adiciona uma coluna do tipo lista 
verna$citations  = list(umaCitatcao,NA) 

#importar para o opendatabio
odb_import_vernaculars(verna,odb_cfg = cfg)

7.2.4 - Importar Media

Importar Media usando o pacote OpenDataBio R

Importanto mídia através da API

O método abaixo pode ser feito tanto pela API usando o pacote do R, como pela interface web. Teste e use o que for mais rápido para enviar os arquivos de imagem.

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api" 
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url)

#caminho do folder onde estao as imagens
folder = 'imagesParaOdb'

#vejas os nomes
filenames = dir(folder,full.names=F)

#tabela de atributos
atributos = read.table('arquivoAtributos.csv',sep=',',header=T,as.is=T,na.strings=c("","NA","-"))

#todos arquivos estao na tabela de atributos?
print(paste(sum( filenames %in% atributos$filename ),"de",length(filenames),'arquivos estão listados na tabela de atributos'))

#importa para o odb
odb_upload_media_zip(folder=folder,attribute_table = atributos,odb_cfg = cfg)

7.2.5 - Importar Taxons

Importar Taxons usando o pacote OpenDataBio R

Um exemplo simples de nome publicado

Os scripts abaixo foram testados, estando a base já populada com até o nível de Ordem para Angiospermas.

Na tabela de táxons, as famílias Moraceae, Lauraceae e Solanaceae ainda não estavam registradas:

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
cfg = odb_config(base_url=base_url)
exists = odb_get_taxons(params=list(root="Moraceae,Lauraceae,Solanaceae"),odb_cfg=cfg)

Retornou:

data frame with 0 columns and 0 rows

Agora importe algumas espécies e uma infraespécie para as famílias acima, especificando seu nome completo (canonicalName):

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)
spp = c("Ficus schultesii", "Ocotea guianensis","Duckeodendron cestroides","Licaria canella tenuicarpa")
splist = data.frame(name=spp)
odb_import_taxons(splist, odb_cfg=cfg)

Agora verifique se foi importado (note o argumento root):

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
cfg = odb_config(base_url=base_url)
exists = odb_get_taxons(params=list(root="Moraceae,Lauraceae,Chrysobalanaceae"),odb_cfg=cfg)
head(exists[,c('id','scientificName', 'taxonRank','taxonomicStatus','parentNameUsage')])

Retorno:

id                    scientificName  taxonRank taxonomicStatus      parentName
1  252                          Moraceae     Family        accepted         Rosales
2  253                             Ficus      Genus        accepted        Moraceae
3  254                  Ficus schultesii    Species        accepted           Ficus
4  258                        Solanaceae     Family        accepted       Solanales
5  259                     Duckeodendron      Genus        accepted      Solanaceae
6  260          Duckeodendron cestroides    Species        accepted   Duckeodendron
7  255                         Lauraceae     Family        accepted        Laurales
8  256                            Ocotea      Genus        accepted       Lauraceae
9  257                 Ocotea guianensis    Species        accepted          Ocotea
10 261                           Licaria      Genus        accepted       Lauraceae
11 262                   Licaria canella    Species        accepted         Licaria
12 263 Licaria canella subsp. tenuicarpa Subspecies        accepted Licaria canella

Observe que embora tenhamos especificado apenas os nomes das espécies e infra-espécies, a API importou também toda a hierarquia parental necessária até a família, porque as ordens já estavam registradas.

Um exemplo de nome publicado inválido

O nome Licania octandra pallida (Chrysobalanaceae) foi recentemente movido com sinônimo de Leptobalanus octandrus pallidus.

O roteiro a seguir exemplifica o que acontece nesses casos.

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)

#lets check
exists = odb_get_taxons(params=list(root="Chrysobalanaceae"),odb_cfg=cfg)
exists
#in this test returns an empty data frame
#data frame with 0 columns and 0 rows

#now import
spp = c("Licania octandra pallida")
splist = data.frame(name=spp)
odb_import_taxons(splist, odb_cfg=cfg)

#see the results
exists = odb_get_taxons(params=list(root="Chrysobalanaceae"),odb_cfg=cfg)
exists[,c('id','scientificName', 'taxonRank','taxonomicStatus','parentName')]

Retorno:

id                         scientificName  taxonRank taxonomicStatus             parentName
1 264                       Chrysobalanaceae     Family        accepted           Malpighiales
2 265                           Leptobalanus      Genus        accepted       Chrysobalanaceae
3 267                 Leptobalanus octandrus    Species        accepted           Leptobalanus
4 269 Leptobalanus octandrus subsp. pallidus Subspecies        accepted Leptobalanus octandrus
5 266                                Licania      Genus        accepted       Chrysobalanaceae
6 268                       Licania octandra    Species         invalid                Licania
7 270        Licania octandra subsp. pallida Subspecies         invalid       Licania octandra

Observe que, embora tenhamos especificado apenas um nome de infra-espécie, a API importou também toda a hierarquia pai necessária até a família e, como o nome é inválido, também importou o nome aceito para esta infra-espécie e seus pais.

Uma espécie ou morfotipo não publicado

É comum ter nomes de espécies locais não publicados (morfotipos) para plantas em parcelas, ou ainda trabalhos taxonômicos ainda não publicados. As designações não publicadas são específicas do projeto e, portanto, DEVEM também fornecer um autor, pois diferentes projetos podem usar o mesmo código ‘sp.1’ ou ‘sp.A’ para seus táxons não publicados.

Você pode vincular um nome não publicado como qualquer nível de táxon e não precisa usar a lógica de gênero + espécie para atribuir um morfotipo para o qual o gênero ou taxonomia de nível superior é indefinida. Por exemplo, você pode armazenar um nível de ’espécie’ com o nome ‘Indet sp.1’ e parent_name ‘Laurales’, se a determinação formal de nível mais baixo que você tem é o nível de ordem. Neste exemplo, não há necessidade de armazenar um gênero Indet e táxons da família Indet apenas para contabilizar este morfotipo não identificado.

##assign an unpublished name for which you only know belongs to the Angiosperms and you have this node in the Taxon table already
library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
cfg = odb_config(base_url=base_url)

#check that angiosperms exist
odb_get_taxons(params=list(name='Angiosperms'),odb_cfg = cfg)

#if it is there, start creating a data.frame to import
to.odb = data.frame(name='Morphotype sp.1', parent='Angiosperms', stringsAsFactors=F)

#get species level numeric code
to.odb$level=odb_taxonLevelCodes('species')

#you must provide an author that is a Person in the Person table. Get from server
odb.persons = odb_get_persons(params=list(search='João Batista da Silva'),odb_cfg=cfg)
#found
head(odb.persons)

#add the author_id to the data.frame
#NOTE it is not author, but author_id or person)
#this makes odb understand it is an unpublished name
to.odb$author_id = odb.persons$id

#import
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)
odb_import_taxons(to.odb,odb_cfg = cfg)

Verifique o registro importado:

exists = odb_get_taxons(params=list(name='Morphotype sp.1'),odb_cfg = cfg)
exists[,c('id','scientificName', 'taxonRank','taxonomicStatus','parentName','scientificNameAuthorship')]

Algumas colunas para o registro importado:

id  scientificName taxonRank taxonomicStatus  parentName              scientificNameAuthorship
1 276 Morphotype sp.1   Species     unpublished Angiosperms João Batista da Silva - Silva, J.B.D.

Importar um clado publicado

Você pode adicionar um clado Taxon e pode referenciar uma publicação usando a entrada bibkey. Portanto, é possível armazenar de fato todos os nós relevantes de qualquer filogenia na hierarquia do Taxon.

#parent já deve estar armazenado
odb_get_taxons(params=list(name='Pagamea'),odb_cfg = cfg)

#define o clado a ser armazenado
to.odb = data.frame(name='Guianensis core', parent_name='Pagamea', stringsAsFactors=F)
to.odb$level = odb_taxonLevelCodes('clade')

#adicione uma referência à publicação onde está publicado
#importe a referência do bib para o banco de dados de antemão
odb_get_bibreferences(params(bibkey='prataetal2018'),odb_cfg=cfg)
to.odb$bibkey = 'prataetal2018'

#então adicione nomes de espécies válidos como filhos deste clado em vez do nível de gênero
children = data.frame(name = c('Pagamea guianensis','Pagamea angustifolia','Pagamea puberula'),stringsAsFactors=F)
children$parent_name = 'Guianensis core'
children$level = odb_taxonLevelCodes('species')
children$bibkey = NA

#merge
to.odb = rbind(to.odb,children)

#import
odb_import_taxons(to.odb,odb_cfg = cfg)

7.2.6 - Importar Pessoas

Importar Pessoas usando o pacote OpenDataBio R

Ver o POST Persons API docs para entender quais colunas podem ser declaradas ao importar Pessoas.

A API verificará por abreviações idênticas, que é a única restrição da classe Pessoa. Abreviações são exclusivas e duplicações não são permitidas. Isso não impede que os dados baixados de repositórios tenham abreviações ou nomes completos diferentes para a mesma pessoa. Portanto, você deve padronizar os dados secundários antes de importá-los para o servidor para minimizar esses erros comuns.

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)

one = data.frame(full_name='Adolpho Ducke',abbreviation='DUCKE, A.',notes='Grande botânico da Amazônia',stringsAsFactors = F)
two = data.frame(full_name='Michael John Gilbert Hopkins',abbreviation='HOPKINKS, M.J.G.',notes='Curador herbário INPA',stringsAsFactors = F)
to.odb= rbind(one,two)
odb_import_persons(to.odb,odb_cfg=cfg)

#pode adicionar um email

Pegar os dados

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
cfg = odb_config(base_url=base_url)
persons = odb_get_persons(odb_cfg=cfg)
persons = persons[order(persons$id,decreasing = T),]
head(persons,2)

resultado:

id                    full_name     abbreviation email institution                       notes
613 1582 Michael John Gilbert Hopkins HOPKINKS, M.J.G.  <NA>          NA       Curador herbário INPA
373 1581                Adolpho Ducke        DUCKE, A.  <NA>          NA Grande botânico da Amazônia

7.2.7 - Importar Variáveis

Importar Variáveis usando o pacote OpenDataBio R

As características podem ser importadas usando odb_import_traits().

Leia atentamente o Traits POST API.

Tipos de variáveis

Veja odb_traitTypeCodes() para os códigos numéricos possíveis tipos de variáveis

Traduções Nome da Variável e de Categorias

Os campos name e description podem ter um dos seguintes conteúdos:

  1. usando o código do idioma como chaves: list("en" = "Diameter at Breast Height","pt-br" ="Diâmetro a Altura do Peito")
  2. ou usando os nomes dos idiomas como chaves: list("English" ="Diameter at Breast Height","Portuguese" ="Diâmetro a Altura do Peito").

    O campo categories deve incluir para cada categoria + classificação + idioma os seguintes campos:
  3. lang = misto - obrigatório, o id, código ou nome do idioma da tradução
  4. name = string - obrigatório, o nome da categoria traduzido obrigatório (name + rank + lang deve ser único)
  5. rank = número - obrigatório, a classificação é importante para indicar a mesma categoria entre os idiomas e define variáveis ordinais;
  6. description = string - opcional para categorias, uma definição da categoria.

Isso pode ser formatado como um data.frame e colocado na coluna categories de outro data.frame:

data.frame(
  rbind(
    c("lang"="en","rank"=1,"name"="small","description"="smaller than 1 cm"),
    c("lang"="pt-br","rank"=1,"name"="pequeno","description"="menor que 1 cm"),
    c("lang"="en","rank"=2,"name"="big","description"="bigger than 10 cm"),
    c("lang"="pt-br","rank"=2,"name"="grande","description"="maior que 10 cm")
  ),
  stringsAsFactors=FALSE
)

Variável quantitativa

Para variáveis quantitativas para valores integers ou real (type 0 ou 1).

odb_traitTypeCodes()

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)

#do this first to build a correct data.frame as it will include translations list
to.odb = data.frame(type=1,export_name = "dbh", unit='centimeters',stringsAsFactors = F)

#add translations (note double list)
#format is language_id = translation (and the column be a list with the translation lists)
to.odb$name[[1]]= list('1' = 'Diameter at breast height', '2' = 'Diâmetro à altura do peito')
to.odb$description[[1]]= list('1' = 'Stem diameter measured at 1.3m height','2' = 'Diâmetro do tronco medido à 1.3m de altura')

#measurement validations
to.odb$range_min = 10  #this will restrict the minimum measurement value allowed in the trait
to.odb$range_max = 400 #this will restrict the maximum value

#measurements can be linked to (classes concatenated by , or a list)
to.odb$objects = "Individual,Voucher,Taxon"  #makes no sense link such measurements to Locations

to.odb$notes = 'this is quantitative trait example'

#import
odb_import_traits(to.odb,odb_cfg=cfg)

Variável categórica

  1. Deve incluir categorias. A única diferença entre as características ordinais e categóricas é que as categorias ordinais terão um rank, ou ordem. Observe que as variáveis ordinais são semiquantitativas e, portanto, se você tiver categorias, pergunte-se se elas não são realmente ordinais e registre de acordo.
  2. Assim como o name e a description da variável, as categorias também podem ter traduções em diferentes idiomas, e você DEVE inserir as traduções para os idiomas disponíveis (odb_get_languages ​​()) para que a variável esteja acessível em todos os idiomas. O inglês é obrigatório, portanto, pelo menos o nome em inglês deve ser informado. As categorias podem ter uma descrição associada, mas às vezes o nome da categoria é autoexplicativo, portanto, as descrições das categorias não são obrigatórias.
odb_traitTypeCodes()

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)

#do this first to build a correct data.frame as it will include translations list

#do this first to build a correct data.frame as it will include translations list
to.odb = data.frame(type=3,export_name = "specimenFertility", stringsAsFactors = F)

#trait name and description
to.odb$name =  data.frame("en"="Specimen Fertility","pt-br"="Fertilidade do especímene",stringsAsFactors=F)
to.odb$description =  data.frame("en"="Kind of reproductive stage of a collected plant","pt-br"="Estágio reprodutivo de uma amostra de planta coletada",stringsAsFactors=F)

#categories (if your trait is ORDINAL, the add categories in the wanted order here)
categories = data.frame(
  rbind(
    c('en',1,"Sterile"),
    c('pt-br',1,"Estéril"),
    c('en',2,"Flowers"),
    c('pt-br',2,"Flores"),
    c('en',3,"Fruits"),
    c('pt-br',3,"Frutos"),
    c('en',4,"Flower buds"),
    c('pt-br',4,"Botões florais")
  ),
  stringsAsFactors =FALSE
)
colnames(categories) = c("lang","rank","name")

#descriptions not included for categories as they are obvious,
# but you may add a 'description' column to the categories data.frame

#objects for which the trait may be used for
to.odb$objects = "Individual,Voucher"

to.odb$notes = 'a fake note for a multiselection categorical trait'
to.odb$categories = list(categories)

#import
odb_import_traits(to.odb,odb_cfg=cfg)

Um variável de tipo LINK permite vincular um Táxon ou Voucher como uma medição de outro objeto. Por exemplo, você pode conduzir um inventário de plantas para o qual possui apenas contagens para o táxon associado a uma localidade. Portanto, você pode criar uma variável do tipo LINK, que permitirá que você armazene os valores de contagem para qualquer Táxon como medições para um local específico (PONTO, POLÍGONO).

Use a interface ou siga o exemplo para as demais variáveis.

Variáveis do tipo texto ou cor

Variáveis de texto permitem o armazenamento de observações textuais. A cor permitirá apenas códigos de cores.

odb_traitTypeCodes()

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)


to.odb = data.frame(type=5,export_name = "taxonDescription", stringsAsFactors = F)

#trait name and description
to.odb$name =  data.frame("en"="Taxonomic descriptions","pt-br"="Descrições taxonômicas",stringsAsFactors=F)
to.odb$description =  data.frame("en"="Taxonomic descriptions from the literature","pt-br"="Descrições taxonômicas da literatura",stringsAsFactors=F)

#will only be able to use this trait for a measurment associated with a Taxon
to.odb$objects = "Taxon"

#import
odb_import_traits(to.odb,odb_cfg=cfg)

Variáveis espectrais

Variáveis espectrais são específicos para dados espectrais. Você deve especificar a amplitude dos números de ondas para os quais você pode ter dados de absorbância ou refletância e o comprimento dos espectros a serem armazenados como medições para permitir a validação durante a entrada. Portanto, para cada intervalo e espaçamento dos valores espectrais que você tem, uma variável ESPECTRAL diferente deve ser criada.

Use a interface ou siga o exemplo para as demais variáveis.

7.2.8 - Importar Indivíduos & Vouchers

Importar Indivíduos & Vouchers usando o OpenDataBio R

Indivíduos podem ser importados usando odb_import_individuals() e vouchers com odb_import_vouchers().

Leia atentamente o Individual POST API e o Voucher POST API.

Exemplo simples

Inventando dados para 1 registro de um indivíduo:

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)

#the number in the aluminium tag in the forest
to.odb = data.frame(tag='3405.L1', stringsAsFactors=F)

#the collectors (get ids from the server)
(joao = odb_get_persons(params=list(search='joao batista da silva'),odb_cfg=cfg)$id)
(ana = odb_get_persons(params=list(search='ana cristina sega'),odb_cfg=cfg)$id)
#ids concatenated by | pipe
to.odb$collector = paste(joao,ana,sep='|')

#tagged date (lets use an incomplete).
to.odb$date = '2018-07-NA'

#lets place in a Plot location imported with the Location post tutorial
plots = odb_get_locations(params=list(name='A 1ha example plot'),odb_cfg=cfg)
head(plots)
to.odb$location = plots$id


#relative position within parent plot
to.odb$x = 10.4
to.odb$y = 32.5
#or could be
#to.odb$relative_position = paste(x,y,sep=',')

#taxonomic identification
taxon = 'Ocotea guianensis'
#check that exists
(odb_get_taxons(params=list(name='Ocotea guianensis'),odb_cfg=cfg)$id)

#person that identified the individual
to.odb$identifier = odb_get_persons(params=list(search='paulo apostolo'),odb_cfg=cfg)$id
#or you also do to.odb$identifier = "Assunção, P.A.C.L."
#the used form only guarantees the persons is there.

#may add modifers as well [may need to use numeric code instead]
to.odb$modifier = 'cf.'
#or check with  to see you spelling is correct
odb_detModifiers()
#and submit the numeric code instaed
to.odb$modifier = 3

#an incomplete identification date
to.odb$identification_date = list(year=2005)
#or  to.odb$identification_date =  "2005-NA-NA"

Importando esse indivíduo

odb_import_individuals(to.odb,odb_cfg = cfg)
#lets import this individual
odb_import_individuals(to.odb,odb_cfg = cfg)

#check the job status
odb_get_jobs(params=list(id=130),odb_cfg = cfg)

Ops, esqueci de informar um dataset e meu usuário não tem um dataset default definido.

Aviso de dataset ausente durante a importação

Então, eu apenas informo um conjunto de dados existente e tento novamente:

dataset = odb_get_datasets(params=list(name="Dataset test"),odb_cfg=cfg)
dataset
to.odb$dataset = dataset$id
odb_import_individuals(to.odb,odb_cfg = cfg)

Indivíduo importado visualizado no mapa

Importando Indivíduos e Vouchers de uma vez

Indivíduos são o objeto real que possui a maior parte das informações relacionadas aos Vouchers, que são amostras em uma Biocoleção. Portanto, você pode importar um registro de um indivíduo com a especificação de um ou mais vouchers.

#a fake plant record somewhere in the Amazon
aplant =  data.frame(taxon="Duckeodendron cestroides", date="2021-09-09", latitude=-2.34, longitude=-59.845,angle=NA,distance=NA, collector="Oliveira, A.A. de|João Batista da Silva", tag="3456-A",dataset=1)

#a fake set of vouchers for this individual
herb = data.frame(biocollection=c("INPA","NY","MO"),biocollection_number=c("12345A","574635","ANOTHER FAKE CODE"),biocollection_type=c(2,3,3))

#add this dataframe to the object
aplant$biocollection = NA
aplant$biocollection = list(herb)

#another fake plant
asecondplant =  data.frame(taxon="Ocotea guianensis", date="2021-09-09", latitude=-2.34, longitude=-59.89,angle=240,distance=50, collector="Oliveira, A.A. de|João Batista da Silva", tag="3456",dataset=1)
asecondplant$biocollection = NA

#merge the fake data
to.odb = rbind(aplant,asecondplant)

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)

odb_import_individuals(to.odb, odb_cfg=cfg)

Verifique os dados importados

O script acima criou registros para o modelo Indivíduo e Voucher:

#get the imported individuals using a wildcard
inds = odb_get_individuals(params = list(tag='3456*'),odb_cfg = cfg)
inds[,c("basisOfRecord","scientificName","organismID","decimalLatitude","decimalLongitude","higherGeography") ]

Retorna:

basisOfRecord           scientificName                               organismID decimalLatitude decimalLongitude                      higherGeography
1      Organism        Ocotea guianensis   3456 - Oliveira - UnnamedPoint_5989234         -2.3402         -59.8904 Brasil | Amazonas | Rio Preto da Eva
2      Organism Duckeodendron cestroides 3456-A - Oliveira - UnnamedPoint_5989234         -2.3400         -59.8900 Brasil | Amazonas | Rio Preto da Eva

E Vouchers

#get the vouchers imported with the first plant data
vouchers = odb_get_vouchers(params = list(individual=inds$id),odb_cfg = cfg)
vouchers[,c("basisOfRecord","scientificName","organismID","collectionCode","catalogNumber") ]

Retorna:

basisOfRecord           scientificName                            occurrenceID collectionCode     catalogNumber
1 PreservedSpecimens Duckeodendron cestroides          3456-A - Oliveira -INPA.12345A           INPA            12345A
2 PreservedSpecimens Duckeodendron cestroides 3456-A - Oliveira -MO.ANOTHER FAKE CODE             MO ANOTHER FAKE CODE
3 PreservedSpecimens Duckeodendron cestroides            3456-A - Oliveira -NY.574635             NY            574635

Importar Vouchers para Indivíduos registrados

Os campos obrigatórios são:

  1. individual = id do indivíduo ou nome completo (organismID);
  2. biocollection = sigla ou id da Biocoleção - useodb_get_biocollections()para verificar se está registrado, caso contrário, primeiro registre a Biocoleção no banco de dados;

Para campos adicionais veja Voucher POST API.

Uma importação de voucher simples

#a holotype voucher with same collector and date as individual
onevoucher = data.frame(individual=1,biocollection="INPA",biocollection_number=1234,biocollection_type=1,dataset=1)
library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)

odb_import_vouchers(onevoucher, odb_cfg=cfg)

#get the imported voucher
voucher = odb_get_vouchers(params=list(individual=1),cfg)
vouchers[,c("basisOfRecord","scientificName","occurrenceID","collectionCode","catalogNumber") ]

Voucher diferente para um indivíduo

Dois vouchers para o mesmo Indivíduo, um com o mesmo coletor e data de coleta do Indivíduo, outro em data diferente e por outros cobradores.

#one with same date and collector as individual
one = data.frame(individual=2,biocollection="INPA",biocollection_number=1234,dataset=1,collector=NA,number=NA,date=NA)
#this one with different collector and date
two= data.frame(individual=2,biocollection="INPA",biocollection_number=4435,dataset=1,collector="Oliveira, A.A. de|João Batista da Silva",number=3456,date="1991-08-01")


library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)


to.odb = rbind(one,two)
odb_import_vouchers(to.odb, odb_cfg=cfg)

#get the imported voucher
voucher = odb_get_vouchers(params=list(individual=2),cfg)
voucher[,c("basisOfRecord","scientificName","occurrenceID","collectionCode","catalogNumber") ]

Registros importados:

basisOfRecord scientificName                     occurrenceID collectionCode catalogNumber    recordedByMain
1 PreservedSpecimens   Unidentified plot tree - Vicentini -INPA.1234           INPA          1234     Vicentini, A.
2 PreservedSpecimens   Unidentified       3456 - Oliveira -INPA.4435           INPA          4435 Oliveira, A.A. de

7.2.9 - Importar Medições

Importar Medições com o pacote OpenDataBio R

As medições podem ser importadas usando odb_import_measurements(). Leia atentamente o Measurements POST API.

Variáveis Quantitativas

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)

#obter o id do trait do servidor (verifique se o trait existe)
#gerar alguns dados falsos para 10 medições

dbhs = sample(seq(10,100,by=0.1),10)
object_ids = sample(1:3,length(dbhs),replace=T)
dates = sample(as.Date("2000-01-01"):as.Date("2000-03-31"),length(dbhs))
dates = lapply(dates,as.Date,origin="1970-01-01")
dates = lapply(dates,as.character)
dates = unlist(dates)


to.odb = data.frame(
  trait_id = 'dbh',
  value = dbhs,
  date = dates,
  object_type = 'Individual',
  object_id=object_ids,
  person="Oliveira, A.A. de",
  dataset = 1,
  notes = "some fake measurements",
  stringsAsFactors=F)

  #isso só funcionará se a pessoa existir, os ids individuais existirem
  #e se a característica com export_name = dbh existe
  odb_import_measurements(to.odb,odb_cfg=cfg)

Baixar os dados importados:

dad = odb_get_measurements(params = list(dataset=1),odb_cfg=cfg)
dad[,c("id","basisOfRecord", "measured_type", "measured_id", "measurementType",
  "measurementValue", "measurementUnit", "measurementDeterminedDate",
  "datasetName", "license")]
id      basisOfRecord           measured_type measured_id measurementType measurementValue measurementUnit measurementDeterminedDate
1   1 MeasurementsOrFact App\\Models\\Individual           3             dbh             86.8     centimeters                2000-02-19
2   2 MeasurementsOrFact App\\Models\\Individual           2             dbh             84.8     centimeters                2000-03-25
3   3 MeasurementsOrFact App\\Models\\Individual           2             dbh             65.7     centimeters                2000-03-15
4   4 MeasurementsOrFact App\\Models\\Individual           3             dbh             88.0     centimeters                2000-03-05
5   5 MeasurementsOrFact App\\Models\\Individual           3             dbh             35.3     centimeters                2000-01-04
6   6 MeasurementsOrFact App\\Models\\Individual           2             dbh             36.0     centimeters                2000-03-23
7   7 MeasurementsOrFact App\\Models\\Individual           2             dbh             78.6     centimeters                2000-03-22
8   8 MeasurementsOrFact App\\Models\\Individual           2             dbh             69.7     centimeters                2000-03-09
9   9 MeasurementsOrFact App\\Models\\Individual           3             dbh             12.3     centimeters                2000-01-30
10 10 MeasurementsOrFact App\\Models\\Individual           3             dbh             14.7     centimeters                2000-01-18
   datasetName   license
1  Dataset test CC-BY 4.0
2  Dataset test CC-BY 4.0
3  Dataset test CC-BY 4.0
4  Dataset test CC-BY 4.0
5  Dataset test CC-BY 4.0
6  Dataset test CC-BY 4.0
7  Dataset test CC-BY 4.0
8  Dataset test CC-BY 4.0
9  Dataset test CC-BY 4.0
10 Dataset test CC-BY 4.0

Medidas categóricas

As categorias DEVEM ser informadas por seus ids ou nome no campo value. Para características CATEGORICAL ou ORDINAL, value deve ser um valor único. Para CATEGORICAL_MULTIPLE, value pode ser um ou vários ids de categorias ou nomes separados por um de | ou ; ou,.

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)

#a categorical trait
(odbtraits = odb_get_traits(params=list(name="specimenFertility"),odb_cfg = cfg))

#base line
to.odb = data.frame(trait_id = odbtraits$id, date = '2021-07-31', stringsAsFactors=F)

#the plant was collected with both flowers and fruits, so the value are the two categories
value = c("Flowers","Fruits")

#get categories for this trait if found
(cats = odbtraits$categories[[1]])
#check that your categories are registered for the trait and get their ids
value = cats[match(value,cats$name),'id']
#make multiple categories ids a string value
value = paste(value,collapse=",")

to.odb$value = value

#this links to a voucher
to.odb$object_type = "Voucher"

#get voucher id from API (must be ID).
#Search for collection number 1234
odbspecs = odb_get_vouchers(params=list(number="3456-A"),odb_cfg=cfg)
to.odb$object_id = odbspecs$id[1]

#get dataset id
odbdatasets = odb_get_datasets(params=list(name='Dataset test'),odb_cfg=cfg)
head(odbdatasets)
to.odb$dataset = odbdatasets$id

#person that measured
odbperson = odb_get_persons(params=list(search='ana cristina sega'),odb_cfg=cfg)
to.odb$person = odbperson$id

#import'
odb_import_measurements(to.odb,odb_cfg=cfg)

#get imported
dad = odb_get_measurements(params = list(voucher=odbspecs$id[1]),odb_cfg=cfg)
dad[,c("id","basisOfRecord", "measured_type", "measured_id", "measurementType",
       "measurementValue", "measurementUnit", "measurementDeterminedDate",
       "datasetName", "license")]
id      basisOfRecord        measured_type measured_id   measurementType measurementValue measurementUnit
1 11 MeasurementsOrFact App\\Models\\Voucher           1 specimenFertility  Flowers, Fruits              NA
  measurementDeterminedDate  datasetName   license
1                2021-07-31 Dataset test CC-BY 4.0

Cores

Para valores de cor, você deve inserir cor como seus códigos de strings RGB hexadecimal, para que possam ser renderizados graficamente e na interface da web. Portanto, qualquer valor de cor é permitido e seria mais fácil usar as cores da paleta na interface da web para inserir tais medidas. O pacote gplots permite que você converta nomes de cores em códigos RGB hexadecimais se você quiser fazer isso por meio da API.

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)

#get the trait id from the server (check that trait exists)
odbtraits = odb_get_traits(odb_cfg=cfg)
(m = match(c("fruitColor"),odbtraits$export_name))

#base line
to.odb = data.frame(trait_id = odbtraits$id[m], date = '2014-01-13', stringsAsFactors=F)

#get color value
#install.packages("gplots",dependencies = T)
library(gplots)
(value =  col2hex("red"))
to.odb$value = value

#this links to a specimen
to.odb$object_type = "Individual"
#get voucher id from API (must be ID). Search for collection number 1234
odbind = odb_get_individuals(params=list(tag='3456'),odb_cfg=cfg)
odbind$scientificName
to.odb$object_id = odbind$id[1]

#get dataset id
odbdatasets = odb_get_datasets(params=list(name='Dataset test'),odb_cfg=cfg)
head(odbdatasets)
to.odb$dataset = odbdatasets$id

#person that measured
odbperson = odb_get_persons(params=list(search='ana cristina sega'),odb_cfg=cfg)
to.odb$person = odbperson$id

odb_import_measurements(to.odb,odb_cfg=cfg)

Medição de cor importada

O tipo de variável LINK permite registrar dados de contagem, como por exemplo o número de indivíduos de uma espécie em um determinado local. Você deve fornecer o objeto vinculado (link_id), que pode ser um Táxon ou um Voucher, dependendo da definição da variável, e então o value recebe a contagem numérica.

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)

#get the trait id from the server (check that trait exists)
odbtraits = odb_get_traits(odb_cfg=cfg)
(m = match(c("taxonCount"),odbtraits$export_name))

#base line
to.odb = data.frame(trait_id = odbtraits$id[m], date = '2014-01-13', stringsAsFactors=F)

#the taxon to link the count value
odbtax = odb_get_taxons(params=list(name='Ocotea guianensis'),odb_cfg=cfg)
to.odb$link_id = odbtax$id

#now add the count value for this trait type
#this is optional for this measurement,
#however, it would make no sense to include such link without a count in this example
to.odb$value = 23

#a note to clarify the measurement (optional)
to.odb$notes = 'No voucher, field identification'

#this measurement will link to a location
to.odb$object_type = "Location"
#get location id from API (must be ID).
#lets add this to a transect
odblocs = odb_get_locations(params=list(adm_level=101,limit=1),odb_cfg=cfg)
to.odb$object_id = odblocs$id

#get dataset id
odbdatasets = odb_get_datasets(params=list(name='Dataset test'),odb_cfg=cfg)
head(odbdatasets)
to.odb$dataset = odbdatasets$id

#person that measured
odbperson = odb_get_persons(params=list(search='ana cristina sega'),odb_cfg=cfg)
to.odb$person = odbperson$id

odb_import_measurements(to.odb,odb_cfg=cfg)

Medição do tipo link importada

Medições espectrais

value deve ser uma string de valores do espectro separados por “;”. O número de valores concatenados deve corresponder ao atributo value_length da variável, que é extraído da especificação do intervalo de número de onda para a variável. Portanto, você pode verificar isso facilmente antes de importar com odb_get_traits(params=list (fields = 'all', type = 9),cfg)

library(opendatabio)
base_url="https://opendb.inpa.gov.br/api"
token = Sys.getenv("ODB_TOKEN")
cfg = odb_config(base_url=base_url, token = token)

#read a spectrum
spectrum = read.table("1_Sample_Planta-216736_TAG-924-1103-1_folha-1_abaxial_1.csv",sep=",")

#second column are  NIR leaf absorbance values
#the spectrum has 1557 values
nrow(spectrum)
#[1] 1557
#collapse to single string
value = paste(spectrum[,2],collapse = ";")
substr(value,1,100)
#[1] "0.6768057;0.6763237;0.6755353;0.6746023;0.6733549;0.6718447;0.6701176;0.6682984;0.6662288;0.6636459;"

#get the trait id from the server (check that trait exists)
odbtraits = odb_get_traits(odb_cfg=cfg)
(m = match(c("driedLeafNirAbsorbance"),odbtraits$export_name))

#see the trait
odbtraits[m,c("export_name", "unit", "range_min", "range_max",  "value_length")]
#export_name       unit range_min range_max value_length
#6 driedLeafNirAbsorbance absorbance   3999.64  10001.03         1557

#must be true
odbtraits$value_length[m]==nrow(spectrum)
#[1] TRUE

#base line
to.odb = data.frame(trait_id = odbtraits$id[m], value=value, date = '2014-01-13', stringsAsFactors=F)

#this links to a voucher
to.odb$object_type = "Voucher"
#get voucher id from API (must be ID).
#search for a collection number
odbspecs = odb_get_vouchers(params=list(number="3456-A"),odb_cfg=cfg)
to.odb$object_id = odbspecs$id[1]

#get dataset id
odbdatasets = odb_get_datasets(params=list(name='Dataset test'),odb_cfg=cfg)
to.odb$dataset = odbdatasets$id

#person that measured
odbperson = odb_get_persons(params=list(search='adolpho ducke'),odb_cfg=cfg)
to.odb$person = odbperson$id

#import
odb_import_measurements(to.odb,odb_cfg=cfg)

Medição espectral importada

Texto e notas

Basta adicionar o texto ao campo value e proceder como para os outros tipos de variável.

Conferir o resultado

Depois de concluir os exemplos, consulte as medições na interface ou pela API e confira Trait, valor, unidade, objeto medido, data, Pessoa e dataset. A lista abaixo ilustra os diferentes tipos de medição importados neste tutorial.

Lista de medições importadas