Código Natural/Identificação taxonômica: mudanças entre as edições

m
 
(12 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
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 estáveis também precisam ser únicos e padronizados'''. A governança de dados [[wikipedia:Data Mesh|Data Mesh]] apoia a estabilização e controle das taxonomias básicas de uma empresa.
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 estáveis também precisam ser únicos e padronizados'''. A governança de dados [[wikipedia:Data Mesh|Data Mesh]] apoia a estabilização e controle das taxonomias básicas de uma empresa.


Objetivos deste tutorial, para uso do código natural como identificador inteligente, com classificação embutida:
Objetivos deste tutorial, para uso do código natural como [[osmc:Convenções/Identificadores inteligentes|identificador inteligente]], com classificação embutida:
* '''apresentar mais didaticamente as aplicações taxonômicas''' do hInt e hCount;
* '''apresentar mais didaticamente as aplicações taxonômicas''' do hInt e hCount;
* descrever as '''técnicas inovadoras de indexação''' de banco de dados, por hInt e hCount;
* descrever as '''técnicas inovadoras de indexação''' de banco de dados, por hInt e hCount;
* demonstrar que é possível '''unificar identificadores de diversas tabelas''' (classes) num banco de dados SQL;  
* demonstrar que é possível '''unificar identificadores de diversas tabelas''' (classes) num banco de dados SQL;  
* demonstrar que é possível resgatar '''ramos desejados de uma hierarquia com alta performance''' em Big Data.
* demonstrar que é possível resgatar '''ramos desejados de uma hierarquia com alta performance''' em Big Data.]
* demonstrar que a taxonomia embutida no ID '''acrescenta integridade semântica''', similar a [[wikipedia:Check digit|dígitos verificadores]].


A chave para o sucesso está na integração inteligente de informações relacionadas à taxonomia da entidade identificada, dentro desses identificadores.<!-- Elucidamos a verdadeira vantagem dessa abordagem &mdash; especialmente quando aplicada aos identificadores ligados a grupos taxonômicos. Aqui, a singularidade e a padronização emergem como imperativos. Ao enriquecer esses identificadores com um contexto taxonômico rico, não apenas a precisão da indexação se eleva, mas também a coesão de toda a estrutura de dados. -->
A chave para o sucesso está na integração inteligente de informações relacionadas à taxonomia da entidade identificada, dentro desses identificadores.<!-- Elucidamos a verdadeira vantagem dessa abordagem &mdash; especialmente quando aplicada aos identificadores ligados a grupos taxonômicos. Aqui, a singularidade e a padronização emergem como imperativos. Ao enriquecer esses identificadores com um contexto taxonômico rico, não apenas a precisão da indexação se eleva, mas também a coesão de toda a estrutura de dados. -->
Linha 38: Linha 39:
   
   
===Reserva de bits para o prefixo do contador===
===Reserva de bits para o prefixo do contador===
A noção realista de "taxonomia estável" requer um ''prazo de validade'': estimamos que ao final do prazo aumenta o risco de instabilidade, e, tipicamente, a necessidade de se incluir mais itens. Ao final do prazo já é prevista a revisão da taxonomia, mas o ideal é que possa haver uma transição suave da antiga para a nova (e novamente estável).
A solução é a reserva. Se a taxonomia é sujeita a modificações, podemos '''reservar mais bits para cada um dos grupos taxonômicos''' (''taxons'').
No exemplo acima as laranjas fizeram uso de um prefixo de apenas 1 bit e as maçãs uso de um prefixo de 2 bits.
No exemplo acima as laranjas fizeram uso de um prefixo de apenas 1 bit e as maçãs uso de um prefixo de 2 bits.
Se a taxonomia é sujeita a modificações, podemos '''reservar mais bits para cada um dos grupos taxonômicos''' (''taxons'').


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:  
Linha 48: Linha 51:
*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.
*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'''.  
 
<!-- A reserva não contradiz a noção de estabilidade, que requer ''prazo de validade''. Como nenhum prazo é infinito, o risco nunca será nulo, e a reserva, portanto, dá uma margem de segurança para a transição ou revisão de taxonomia no final do prazo de validade. -->


===Prefixos lexicográficos===
===Prefixos lexicográficos===
Linha 114: Linha 119:


===Atribuição dos IDs lexicográficos dentro de uma taxonomia ===
===Atribuição dos IDs lexicográficos dentro de uma taxonomia ===
A técnica descrita a seguir é similar ao tradicional "[[wikipedia:Nested set model|modelo de conjuntos aninhados]]", porém otimizada por utilizar apenas o ID, ao invés de duas colunas auxiliares.


Supor que a partir de ''k'' bits, digamos ''k''=4, seja possível destacar prefixos válidos para conjuntos e subconjuntos alinhados.
Supor que a partir de ''k'' bits, digamos ''k''=4, seja possível destacar prefixos válidos para conjuntos e subconjuntos alinhados.
Linha 126: Linha 132:


[[Arquivo:NatCod-taxon-produtos1.png|centro|miniaturadaimagem|680px|Códigos Naturais de 11 bits na base 4h: de <code>0</code> até <code>33333Q</code>, identificando produtos.<br />
[[Arquivo:NatCod-taxon-produtos1.png|centro|miniaturadaimagem|680px|Códigos Naturais de 11 bits na base 4h: de <code>0</code> até <code>33333Q</code>, identificando produtos.<br />
Futas: prefixo <code>0</code>. Roupas: prefixo <code>3</code>. Demais produtos: prefixos <code>1</code> e <code>2</code> disponíveis. Maçãs: prefixo <code>00</code>. Demais frutas: prefixos <code>01</code>, <code>02</code> <code>03</code> disponíveis.<br /> Maçãs vermelhas, prefixo <code>000</code>; maçãs verdes, prefixo <code>001</code>. Roupas de mulher, prefixo <code>30</code>: vestidos <code>300</code>; camisas femininas <code>302</code>. Demais roupas: camisetas, prefixo <code>31</code>; e jeans prefixo <code>32</code>. <br />Cada maçã vermelha recebe um ID no intervalo <code>000</code> até <code>00033Q</code>; cada maçã verde de <code>001</code> até <code>00133Q</code>; ...;  cada jeans de <code>32</code> até <code>32333Q</code>.]]
Futas: prefixo <code>0</code>. Roupas: prefixo <code>3</code>. Demais produtos: prefixos <code>1</code> e <code>2</code> disponíveis. <br/>Maçãs: prefixo <code>00</code>; maçãs vermelhas, prefixo <code>000</code>; maçãs verdes, prefixo <code>001</code>. Demais frutas: prefixos <code>01</code>, <code>02</code> <code>03</code>, sem especialização.<br />  Roupas de mulher, prefixo <code>30</code>: vestidos <code>300</code>; camisas femininas <code>302</code>. Demais roupas: camisetas, prefixo <code>31</code>; e jeans prefixo <code>32</code>. <br />O ID de cada produto é expresso pelo prefixo seguido de um ou mais dígitos, respeitando limite dos 11 bits. Por exemplo o ID <code>001.123</code> é relativo a maçã verde, todas elas estarão no intervalo <code>001.0</code> até <code>001.33Q</code>.]]


Neste cenário, no inventário inicial foram suficientes 11 bits para identificar todos os produtos com seus prefixos. Por exemplo os IDs das maçãs vermelhas ficaram no intervalo <code>000</code> até <code>00033Q</code>, e as maçãs verdes de <code>001</code> até <code>00133Q</code>.  
Neste cenário, no inventário inicial foram suficientes 11 bits para identificar todos os produtos com seus prefixos. Por exemplo os IDs das maçãs vermelhas ficaram no intervalo <code>000</code> até <code>00033Q</code>, e as maçãs verdes de <code>001</code> até <code>00133Q</code>. Para facilitar a visualização do prefixo no valor do ID podemos usar o ponto, por exemplo <code>001.33Q</code>.
 
Resumindo a definição da hierarquia apresentada pelo catálogo da loja:
 
{| class="wikitable sortable"
! Item da árvore || Prefixo|| Bits/ID || Min ID || Max ID
|-
| Futas || <code>0</code>|| - || -|| -
|-
| &nbsp; Maçãs || <code>00</code>|| - || - || -
|-
| &nbsp;  &nbsp; Maçãs vermelhas || <code>000</code>|| 5 || <code>000.0</code> || <code>000.33Q</code>
|-
| &nbsp;  &nbsp; Maçãs verdes || <code>001</code>|| 5 || <code>001.0</code> || <code>001.33Q</code>
|-
| &nbsp; Demais frutas || <code>01</code>,<code>02</code>,<code>03</code>|| 6 || <code>01.0</code> || <code>03.333Q</code>
|-
| Roupas || <code>3</code>|| - ||  -|| -
|-
| &nbsp; Roupas de mulher || <code>30</code>|| - ||  -|| -
|-
| &nbsp;  &nbsp; Vestidos || <code>300</code>|| 5 || <code>300.0</code> || <code>300.33Q</code>
|-
| &nbsp;  &nbsp; Camisas femininas || <code>302</code>|| 5 || <code>302.0</code> || <code>302.33Q</code>
|-
| &nbsp; Camisetas unisex || <code>31</code>|| 6 || <code>31.0</code> || <code>31.333Q</code>
|-
| &nbsp; Jean unisex || <code>32</code>|| 6 || <code>32.0</code> || <code>32.333Q</code>
|}


Abaixo ilustrando ao invés das classes algumas instâncias de produtos, cada qual com seu ID, e a posição do ID na "régua base 4h". Para destacar classe e contador foi adotada a notação com ponto separador. Por exemplo a maçã verde com ID=<code>00133</code> pode ser destacada como <code>001.33</code>. Ela vem depois da maçã <code>001.0</code> e bem antes por exemplo do jeans <code>32.101</code>. Todos ficam dentro do intervalo das respectivas classes.
Abaixo ilustrando ao invés das classes algumas instâncias de produtos, cada qual com seu ID, e a posição do ID na "régua base 4h". Para destacar classe e contador foi adotada a notação com ponto separador. Por exemplo a maçã verde com ID=<code>00133</code> pode ser destacada como <code>001.33</code>. Ela vem depois da maçã <code>001.0</code> e bem antes por exemplo do jeans <code>32.101</code>. Todos ficam dentro do intervalo das respectivas classes.
Reparar que os códigos de instância não precisam ocupar todos os 4 dígitos, isso facilita a leitura humana dos códigos. Como eles vão sendo consumidos na ordem hierárquica, se um dia forem necessárias mais classes, podem ser alocados os ainda não utilizados.


[[Arquivo:NatCod-taxons-InstanceIntervals1.png|centro|semmoldura|582px]]
[[Arquivo:NatCod-taxons-InstanceIntervals1.png|centro|semmoldura|582px]]


A ampliação do banco de dados, adotando o dobro, 22 bits, acarretou a ampliação do intervalo da mesma classe, seus IDs passaram a ser de <code>000</code> até <code>00033333333</code>. '''O aumento de bits não afeta os identificadores''', apenas amplia a possibilidade de incluir mais produtos dentro da mesma classe. Ao contrário da estratégia similar adotada com números, os '''prefixos de código são [[wikipedia:Scalability|escaláveis]]'''.
A mesma flexibilidade vale no acréscimo de mais bits. A ampliação do banco de dados, adotando o dobro, 22 bits, acarretou a ampliação do intervalo da mesma classe, seus IDs passaram a ser de <code>000</code> até <code>00033333333</code>. '''O aumento de bits não afeta os identificadores''', apenas amplia a possibilidade de incluir mais produtos dentro da mesma classe. Ao contrário da [[Código Natural/Comparação com números|estratégia similar adotada com números]], os '''prefixos de código são [[wikipedia:Scalability|escaláveis]]'''.


===Atribuição dos IDs hCount  ===
===Atribuição dos IDs hCount  ===
Em sistemas tradicionais, sempre que for possível o uso de IDs de até 32 bits, podemos usar a representação interna [[hCount]] e o recurso da base híbrida na representação textual.
Em sistemas tradicionais, sempre que for possível o uso de IDs de até 32 bits, podemos usar a representação interna [[hCount]] e o recurso da base híbrida na representação textual.
No exemplo podemos usar a base32 para o contador e manter a base 4 para a classificação.


==Identificadores sem contador==
==Identificadores sem contador==
Linha 176: Linha 213:


===Questão do uso dos intermediários ===
===Questão do uso dos intermediários ===
Se eu posso classificar a maçã como planta da espécie ''M. domestica'', não faz sentido ter uma outra maçã classificada apenas como Malus,  ou simplesmente Plantae. Isso causaria risco de duplicidade das entradas, com uma parte do sistema atribuindo IDs  de alta especificidade de outra parte atribuindo IDs com classe mais genérica. A boa prática neste caso seria de nunca utilizar os níveis intermediários. <br/> PS: nesse caso há que se questionar se precisamos de um sistema tão sofisticado de ID, se na prática nunca vamos usar níveis intermediários.
Se eu posso classificar a maçã como planta da espécie ''M. domestica'', não faz sentido ter uma outra maçã classificada apenas como Malus,  ou simplesmente Plantae. Isso causaria risco de duplicidade das entradas, com uma parte do sistema atribuindo IDs  de alta especificidade de outra parte atribuindo IDs com classe mais genérica. A boa prática neste caso seria de nunca utilizar os níveis intermediários.  
:<small>PS: nesse caso há que se questionar se precisamos de um sistema tão sofisticado de ID, se na prática nunca vamos usar níveis intermediários. Sem esquecer, por outro lado, que os taxons intermediários podem ser (sem certas aplicações) importantes nas buscas e relatórios com agregação taxonômica.</small>


Por outro lado se apenas a ''M. domestica'' é popular e com classificação confiável, e existem dezenas de outras maçãs com classificação indefinida, melhor que se adote a convenção de usar Malus para as indefinidas.
Por outro lado se apenas a ''M. domestica'' é popular e com classificação confiável, e existem dezenas de outras maçãs com classificação indefinida, melhor que se adote a convenção de usar Malus para as indefinidas.


O uso das classes intermediárias deve ser reservado a esse segundo caso, onde não queremos onerar o sistema de classificação, e essa é uma decisão estável.
O uso das classes intermediárias deve ser reservado a esse segundo caso, onde não queremos onerar o sistema de classificação, e onde a decisão estável.


===Estabilidade estatística ===
===Estabilidade estatística ===
Métodos estatísticos ([[wikipedia:cluster analysis]]) permitem avaliar a través de atributos de cada candidato a classe a sua relação com os demais e sua posição dentro de uma "hierarquia de semelhança", conhecida como dendrograma.  
 
Árvores taxonômicas se alongam quando há demanda por especialização, mas o custo de ampliar a árvore requer relevância nessa especialização. No contexto da quitanda por exemplo, a relevância pode ser determinada pelo ponto de vista do volume de vendas ou volume de estoque. Do ponto de vista semântico, todavia, a preocupação é quanto à ambiguidade: é '''mais estável''' a taxonomia que garante menor grau de '''ambiguidade''' e menor '''risco de mudança'''. Essa análise precisa preceder a análise volumétrica.
 
O julgamento de quem classifica um produto depende de atributos objetivos do produto.
'''Métodos estatísticos''' ([[wikipedia:cluster analysis|''cluster analysis'']] e [[wikipedia:Numerical taxonomy|taxonomia numérica]]) permitem avaliar a través de atributos de cada candidato a classe a sua relação com os demais e sua posição dentro de uma "hierarquia de semelhança", conhecida como dendrograma.  


[[Arquivo:Dendrograma-cluster.png|centro|semmoldura|680px]]
[[Arquivo:Dendrograma-cluster.png|centro|semmoldura|680px]]
Linha 194: Linha 236:


===Caso de uso ilustrativo===
===Caso de uso ilustrativo===
:: <small>Resumo e amostras de [[Código Natural/Identificação taxonômica/Casos de uso]].</small>
É muito comum em Big Data a adoção de uma visão unificada dos dados de uma grande empresa, que pode conter, por exemplo, mais de um [[wikipedia:Customer relationship management|sistema de CRM]] para a gestão dos seus clientes.
É muito comum em Big Data a adoção de uma visão unificada dos dados de uma grande empresa, que pode conter, por exemplo, mais de um [[wikipedia:Customer relationship management|sistema de CRM]] para a gestão dos seus clientes.


Linha 200: Linha 243:
O primeiro passo nesse caso é estabelecer em UML qual a estratégia semântica de unificação. Pode-se optar por exemplo por não misturar B2C com B2B, e optar por classificar os clientes B2B conforme o o primeiro e segundo níveis do padrão SchemaOrg, ou seja, conforme [https://schema.org/Organization sch:Organization]. Pode-se também reservar para o sistema interno, de RH por exemplo, a classe ''InternalOrganization'', para mapear subsidiárias e departamentos.
O primeiro passo nesse caso é estabelecer em UML qual a estratégia semântica de unificação. Pode-se optar por exemplo por não misturar B2C com B2B, e optar por classificar os clientes B2B conforme o o primeiro e segundo níveis do padrão SchemaOrg, ou seja, conforme [https://schema.org/Organization sch:Organization]. Pode-se também reservar para o sistema interno, de RH por exemplo, a classe ''InternalOrganization'', para mapear subsidiárias e departamentos.


Optou-se também por adotar, como medida de apoio à transição do ID convencional (inteiro de 32 bits) para o [[Código_natural/Representação_interna#Cache-length_strategy|hInt de 64 bits]], a classe Other. Nela os clientes com cadastro indefinido ou onde caberiam outras classificações, ficam de "quarentena". Na representação base16h  seria necessário mais de um dígito para o primeiro e segundo níveis, de modo que uma opção mais amigável (1 dígito por nível hierárquico) é a base32nvu:
Optou-se também por adotar, como medida de apoio à transição do ID convencional (inteiro de 32 bits) para o [[Código_natural/Representação_interna#Cache-length_strategy|hInt de 64 bits]], a classe Other. Nela os clientes com cadastro indefinido ou onde caberiam outras classificações, ficam de "quarentena". Na representação base16h  seria necessário mais de um dígito para o primeiro e segundo níveis, de modo que uma opção mais amigável (1 dígito por nível hierárquico) é a [[base32nvu]]:


*<code>0</code> - InternalOrganization (classe para a gestão interna de departamentos e empresas controladas)
*<code>0</code> - InternalOrganization (classe para a gestão interna de departamentos e empresas controladas)
Linha 227: Linha 270:
***<code>754</code> - [https://schema.org/MiddleSchool MiddleSchool]
***<code>754</code> - [https://schema.org/MiddleSchool MiddleSchool]
***<code>755</code> - [https://schema.org/Preschool Preschool]
***<code>755</code> - [https://schema.org/Preschool Preschool]
***<code>756</code> - [https://schema.org/School School]
 
**<code>78</code> - Gov. LibrarySystem
**<code>7B</code> - Gov. MedicalOrganization (and optional recurrent specializations)
***<code>7B1</code> - Gov. [https://schema.org/Dentist Dentist]
***<code>7B2</code> - Gov. [https://schema.org/DiagnosticLab DiagnosticLab]
***<code>7B3</code> - Gov. [https://schema.org/Hospital Hospital]
***<code>7B4</code> - Gov. [https://schema.org/MedicalClinic MedicalClinic]
***<code>7B5</code> - Gov. [https://schema.org/Pharmacy Pharmacy]
***<code>7B6</code> - Gov. [https://schema.org/Physician Physician]
***<code>7B7</code> - Gov. [https://schema.org/VeterinaryCare VeterinaryCare]
** <code>7D</code> - Gov. NewsMediaOrganization
** ...
** ...
** <code>7H</code> - Gov. SportsOrganization
*<code>8</code> - [https://schema.org/LibrarySystem LibrarySystem]
*<code>9</code> - [https://schema.org/LocalBusiness LocalBusiness]
**<code>90</code> - LocalBusiness partner.
**<code>91</code> - [https://schema.org/AnimalShelter AnimalShelter]
**<code>92</code> - [https://schema.org/ArchiveOrganization ArchiveOrganization]
**<code>93</code> - [https://schema.org/AutomotiveBusiness AutomotiveBusiness]
**<code>94</code> - [https://schema.org/ChildCare ChildCare]
**<code>95</code> - [https://schema.org/DryCleaningOrLaundry DryCleaningOrLaundry]
**<code>96</code> - [https://schema.org/EmergencyService EmergencyService]
**<code>97</code> - [https://schema.org/EmploymentAgency EmploymentAgency]
**<code>98</code> - [https://schema.org/EntertainmentBusiness EntertainmentBusiness]
**<code>99</code> - [https://schema.org/FinancialService FinancialService]
**<code>9B</code> - [https://schema.org/FoodEstablishment FoodEstablishment]
**<code>9C</code> - [https://schema.org/GovernmentOffice GovernmentOffice]
**<code>9D</code> - [https://schema.org/HealthAndBeautyBusiness HealthAndBeautyBusiness]
**<code>9F</code> - [https://schema.org/HomeAndConstructionBusiness HomeAndConstructionBusiness]
**<code>9G</code> - [https://schema.org/InternetCafe InternetCafe]
**<code>9H</code> - [https://schema.org/LegalService LegalService]
**<code>9J</code> - [https://schema.org/Library Library]
**<code>9K</code> - [https://schema.org/LodgingBusiness LodgingBusiness]
**<code>9L</code> - [https://schema.org/MedicalBusiness MedicalBusiness]
**<code>9M</code> - [https://schema.org/ProfessionalService ProfessionalService]
**<code>9N</code> - [https://schema.org/RadioStation RadioStation]
**<code>9P</code> - [https://schema.org/RealEstateAgent RealEstateAgent]
**<code>9Q</code> - [https://schema.org/RecyclingCenter RecyclingCenter]
**<code>9R</code> - [https://schema.org/SelfStorage SelfStorage]
**<code>9S</code> - [https://schema.org/ShoppingCenter ShoppingCenter]
**<code>9T</code> - [https://schema.org/SportsActivityLocation SportsActivityLocation]
**<code>9U</code> - [https://schema.org/Store Store]
**<code>9V</code> - [https://schema.org/TelevisionStation TelevisionStation]
**<code>9W</code> - [https://schema.org/TouristInformationCenter TouristInformationCenter]
**<code>9X</code> - [https://schema.org/TravelAgency TravelAgency]
*<code>B</code> - [https://schema.org/MedicalOrganization MedicalOrganization]
**<code>B0</code> - MedicalOrganization partner
**<code>B1</code> - [https://schema.org/Dentist Dentist]
**<code>B2</code> - [https://schema.org/DiagnosticLab DiagnosticLab]
**<code>B3</code> - [https://schema.org/Hospital Hospital]
**<code>B4</code> - [https://schema.org/MedicalClinic MedicalClinic]
**<code>B5</code> - [https://schema.org/Pharmacy Pharmacy]
**<code>B6</code> - [https://schema.org/Physician Physician]
**<code>B7</code> - [https://schema.org/VeterinaryCare VeterinaryCare]
*<code>C</code> - [https://schema.org/NGO NGO]
*<code>D</code> - [https://schema.org/NewsMediaOrganization NewsMediaOrganization]
*<code>F</code> - [https://schema.org/OnlineBusiness OnlineBusiness]
**<code>F0</code> - OnlineBusiness partner
**<code>F1</code> - [https://schema.org/OnlineStore OnlineStore]
*<code>G</code> - [https://schema.org/PerformingGroup PerformingGroup]
**<code>G0</code> - PerformingGroup partner
**<code>G1</code> - [https://schema.org/DanceGroup DanceGroup]
**<code>G2</code> - [https://schema.org/DanceGroup DanceGroup]
**<code>G3</code> - [https://schema.org/MusicGroup MusicGroup]
**<code>G4</code> - [https://schema.org/TheaterGroup TheaterGroup]
*<code>H</code> - [https://schema.org/PoliticalParty PoliticalParty]
*<code>J</code> - [https://schema.org/Project Project]
**<code>J0</code> - Project partnership
**<code>J1</code> - [https://schema.org/FundingAgency FundingAgency]
**<code>J2</code> - [https://schema.org/ResearchProject ResearchProject]
*<code>K</code> - [https://schema.org/ResearchOrganization ResearchOrganization]
*<code>L</code> - [https://schema.org/SearchRescueOrganization SearchRescueOrganization]
*<code>M</code> - [https://schema.org/SportsOrganization SportsOrganization]
**<code>M0</code> - SportsOrganization partner
**<code>M1</code> - [https://schema.org/SportsTeam SportsTeam]
*<code>N</code> - [https://schema.org/WorkersUnion WorkersUnion]
* ... (até 10 outras classificações futuras do SchemaOrg, ou obtidas na Wikidata)
*<code>Z</code> - Other (classe '''temporária''' para a gestão de cadastros incompletos)
** <code>Z1</code> - Generic partner (para distinguir de terceirizados ou franquiados ainda indefinidos - sem especialização)


Devido à ambiguidade nos domínios, a empresa precisa definir qual a subclasse canônica, quando o SchemaOrg oferecer mais de uma alternativa. Por exemplo "Dentist" pode ser subclasse de "LocalBusiness" ou de "MedicalOrganization", no exemplo foi adotada a classe "MedicalOrganization".
Devido à ambiguidade nos domínios, a empresa precisa definir qual a subclasse canônica, quando o SchemaOrg oferecer mais de uma alternativa. Por exemplo "Dentist" pode ser subclasse de "LocalBusiness" ou de "MedicalOrganization", no exemplo foi adotada a classe "MedicalOrganization".
2 536

edições