2 583
edições
Sem resumo de edição |
|||
Linha 1: | Linha 1: | ||
Identificadores únicos, tais como [https://www.postgresql.org/docs/current/functions-sequence.html contadores sequenciais em bases de dados], são fundamentais para a indexação e controle de registros. O ideal, todavia, é que esse identificador traga embutida alguma informação relativa à taxonomia da entidade identificada. Isso porque '''os identificadores de grupos taxonômicos também precisam ser únicos e padronizados'''. | Identificadores únicos, tais como [https://www.postgresql.org/docs/current/functions-sequence.html contadores sequenciais em bases de dados], são fundamentais para a indexação e controle de registros. O ideal, todavia, é que esse identificador traga embutida alguma informação relativa à taxonomia da entidade identificada. Isso porque '''os identificadores de grupos taxonômicos também precisam ser únicos e padronizados'''. | ||
A ilustração do conjunto de frutas | A ilustração do conjunto de frutas ajuda a entender os agrupamentos (taxons). | ||
==Taxonomias bit a bit== | ==Taxonomias bit a bit== | ||
Linha 7: | Linha 7: | ||
A cada prefixo pode-se expressar uma regra. Por exemplo: | A cada prefixo pode-se expressar uma regra. Por exemplo: | ||
* Primeiro bit do ID: define se é laranja (1) ou maçã (0). <br/>Os conjuntos ''L'' dos identificadores de laranjas e ''M'' das maçãs da ilustração ao lado são definidos por: <math>L=\{1, 10\}</math> e <math>M=\{0, 00, 000, 01, 010, 011\}</math>. | *Primeiro bit do ID: define se é laranja (1) ou maçã (0). <br />Os conjuntos ''L'' dos identificadores de laranjas e ''M'' das maçãs da ilustração ao lado são definidos por: <math>L=\{1, 10\}</math> e <math>M=\{0, 00, 000, 01, 010, 011\}</math>. | ||
* Primeiro bit do ID de maçã: | *Primeiro bit do ID de maçã: especializa como vermelha (0) ou verde (1). Portanto IDs com prefixos "00" (maçã ''red''), "01" (maçã ''green'') e "0" para maçã genérica. Daí rotular uma maçã com ID "0" é uma falha, é um código exclusivo de taxon. <br />Os conjuntos ''R'' dos identificadores de maçãs ''red'' e ''G'' das maçãs ''green'' da ilustração ao lado são definidos por: <math>R=\{0, 00, 000\} \subset M</math> e <math>G=\{01, 010, 011\} \subset M</math>. Ambos subconjuntos de ''M'', estabelecendo portanto uma hierarquia taxonômica entre as maçãs. | ||
Os identificadores de frutas são livres, podem ter qualquer quantidade de bits, podem ter tamanho fixo ou variável, e não precisam percorrer uma sequência especial. '''A taxonomia só impõe a existência de prefixos e regras de interpretação para esses prefixos'''. | Os identificadores de frutas são livres, podem ter qualquer quantidade de bits, podem ter tamanho fixo ou variável, e não precisam percorrer uma sequência especial. '''A taxonomia só impõe a existência de prefixos e regras de interpretação para esses prefixos'''. | ||
Linha 22: | Linha 22: | ||
No exemplo poderíamos no futuro '''distinguir laranjas''', entre ''comuns'' e ''avermelhadas''. Todas elas com prefixo <code>1</code> mas reservando mais bits para futuras diferenciações: duas estratégias são possíveis: | No exemplo poderíamos no futuro '''distinguir laranjas''', entre ''comuns'' e ''avermelhadas''. Todas elas com prefixo <code>1</code> mas reservando mais bits para futuras diferenciações: duas estratégias são possíveis: | ||
* | *Se as existentes são comuns, batizamos elas de <code>10</code> e reservamos <code>11</code> para as avermelhadas. Não fica nenhuma reserva de segurança. | ||
* | *Se as existentes são misturadas, batizamos a mistura de <code>100</code> e reservamos <code>101</code> para as identificadas como comuns e <code>110</code> para as avermelhadas; ficando ainda a reserva <code>111</code> para outra eventual variedade de laranja. | ||
Quanto maior o risco de uma futura diferenciação, maior a demanda por reserva. | Quanto maior o risco de uma futura diferenciação, maior a demanda por reserva. | ||
===Prefixos lexicográficos=== | |||
Na sintaxe "<code>$prefixo$contador</code>", '''o prefixo é necessariamente um código''' e a contagem para identificação dos taxons é '''necessariamente lexicográfica'''. Ver função ''hsucc'' em [https://github.com/osm-codes/NaturalCodes/blob/main/src/step01def-lib_NatCod.sql step01def-lib_NatCod.sql]. Exemplos: | |||
*Dois taxons requerem no mínimo 1 bit. O primeiro é ''hsucc''("")="0", o segundo é seu sucessor, ''hsucc''("0")="1". | |||
*Dois taxons com reserva de 2 bits, requerindo portanto 3 bits. Com reserva balanceada: taxons "001" e "101". | |||
*Três taxons e todos com até 5 subtaxons cada. Pode-se adotar um prefixo de 2 bits fixos para os pais, mais dois variáveis para os filhos, ou balancear valores de zero a 3*5=15 entre 4 ou mais bits. | |||
===Contadores numéricos=== | ===Contadores numéricos=== | ||
Linha 33: | Linha 40: | ||
Sendo um número, podemos calcular o sucessor <code>succ($contador)</code> através da aritmética usual, <code>$contador+1</code>. | Sendo um número, podemos calcular o sucessor <code>succ($contador)</code> através da aritmética usual, <code>$contador+1</code>. | ||
===Contadores lexicográficos=== | === Contadores lexicográficos=== | ||
Na sintaxe "<code>$prefixo$contador</code>", o contador pode ser mantido como código. | Na sintaxe "<code>$prefixo$contador</code>", o contador pode ser mantido como código. | ||
Sendo um código, podemos calcular <code>succ($contador)</code> através do "sucessor lexicográfico" (também denominado "hierarchical successor"). Ver função ''hsucc'' em [https://github.com/osm-codes/NaturalCodes/blob/main/src/step01def-lib_NatCod.sql step01def-lib_NatCod.sql]. | Sendo um código, podemos calcular <code>succ($contador)</code> através do "sucessor lexicográfico" (também denominado "hierarchical successor"). Ver função ''hsucc'' em [https://github.com/osm-codes/NaturalCodes/blob/main/src/step01def-lib_NatCod.sql step01def-lib_NatCod.sql]. | ||
==Taxonomias Base N== | ==Taxonomias Base N == | ||
[[Arquivo:KraEtAll2019-fig03-new-bitsBase4.png|thumb|220px|Reserving 2 bits for all taxon-prefixes, and later representation in Base4h.]] | [[Arquivo:KraEtAll2019-fig03-new-bitsBase4.png|thumb|220px|Reserving 2 bits for all taxon-prefixes, and later representation in Base4h.]] | ||
<!-- | <!-- | ||
Linha 50: | Linha 57: | ||
[[Arquivo:KraEtAll2019-fig15-GreenApples.png|thumb|220px|''Green apples'', IDs na Base4h.]] | [[Arquivo:KraEtAll2019-fig15-GreenApples.png|thumb|220px|''Green apples'', IDs na Base4h.]] | ||
A conversão para Base4h resulta na segunda coluna da tabela abaixo, com prefixos em negrito, e conjunto "Green apples" ilustrado. | A conversão para Base4h resulta na segunda coluna da tabela abaixo, com prefixos em negrito, e conjunto "Green apples" ilustrado. | ||
:{| class="wikitable" | :{| class="wikitable" | ||
|'''Base2h''' | |'''Base2h''' | ||
|'''Base4h''' | |'''Base4h''' | ||
|'''''Taxon''''' | |'''''Taxon''''' | ||
|- | |- | ||
|00 | |00||'''0'''||Red Apple (illustrated) | ||
|- | |- | ||
|000 | |000||'''0'''G|| Red Apple (illustrated) | ||
|- | |- | ||
|0000 | |0000||'''0'''0||Red Apple (illustrated) | ||
|- | |- | ||
|0001101 || '''0'''12Q || Red Apple | |0001101||'''0'''12Q||Red Apple | ||
|- | |- | ||
|0010101 || '''0'''22Q || Red Apple | |0010101||'''0'''22Q||Red Apple | ||
|- | |- | ||
|01 | |01||'''1'''||Green apple (illustrated) | ||
|- | |- | ||
|0101 | |0101||'''1'''1||Green apple | ||
|- | |- | ||
|010 | |010||'''1'''G||Green apple (illustrated) | ||
|- | |- | ||
|011 | |011||'''1'''Q||Green apple (illustrated) | ||
|- | |- | ||
|10 | |10||'''2'''||Organge (illustrated) | ||
|- | |- | ||
|10101 | |10101||'''2'''2Q||Organge | ||
|- | |- | ||
|1011 | |1011||'''2'''3||Organge | ||
|- | |- | ||
|101 | |101||'''2'''Q||Organge (illustrated) | ||
|} | |} | ||
Linha 87: | Linha 94: | ||
A sintaxe "<code>$prefixo$contador</code>" não deve ser confundida com a sintaxe interna do prefixo. Havendo necessidade de se identificar apenas os grupos taxonômicos, com sua hierarquia, podemos fazer uso do prefixo como identificador, | A sintaxe "<code>$prefixo$contador</code>" não deve ser confundida com a sintaxe interna do prefixo. Havendo necessidade de se identificar apenas os grupos taxonômicos, com sua hierarquia, podemos fazer uso do prefixo como identificador, | ||
== Modelagem dos níveis hierárquicos == | ===Prefixo e contador ao mesmo tempo=== | ||
Exemplo. Ao identificar as partições recursivas de um quadrado, estamos identificando as células (como instâncias) e os taxons ao mesmo tempo. Abaixo usando a base4 para rotular. A célula "0" tem as filhas "00", "01", "02" e "03". | |||
[[Arquivo:GGeohash-ilustra9-basic.png|centro|semmoldura|580x580px]] | |||
==Modelagem dos níveis hierárquicos== | |||
Uniforme vs heterogêneo... | Uniforme vs heterogêneo... | ||
* Por base N de referência: exemplo do geocódigo quadrilátero que precisa preserva compatibilidade com a base4 | *Por base N de referência: exemplo do geocódigo quadrilátero que precisa preserva compatibilidade com a base4 | ||
* Por agregação: ... junta 2 ou mais níveis hierárquicos da base N para obter um nível... | *Por agregação: ... junta 2 ou mais níveis hierárquicos da base N para obter um nível... |
edições