Skip to content

Criar validações para o elemento <journal-meta> #1089

@Rossi-Luciano

Description

@Rossi-Luciano

Objetivo

Implementar validações para o elemento <journal-meta> conforme a especificação SPS 1.10, aumentando a conformidade de X% para 75% (9 de 12 regras).

Nota: Algumas validações para <journal-meta> podem já estar parcialmente implementadas no repositório. Este Issue visa reavaliar, complementar e garantir cobertura completa das regras SPS 1.10.


Contexto

O elemento <journal-meta> identifica os metadados do periódico registrados na SciELO, incluindo IDs, títulos, ISSNs e publisher. Validações corretas garantem que todos os elementos obrigatórios estejam presentes, que ISSNs tenham formato válido, e que atributos obrigatórios estejam corretos.

Conformidade atual: X de 12 regras implementadas (X%)
Meta após implementação: 9 de 12 regras (75%)


Documentação SPS

Referência oficial: https://docs.google.com/document/d/1GTv4Inc2LS_AXY-ToHT3HmO66UT0VAHWJNOIqzBNSgA/edit?tab=t.0#heading=h.journalmeta

Regras principais conforme SPS 1.10:

  1. Ocorrência:

    • <journal-meta> deve aparecer exatamente uma vez em <front>
  2. Elementos obrigatórios:

    • <journal-id journal-id-type="publisher-id"> - Acrônimo oficial do periódico na SciELO
    • <journal-title> - Título do periódico registrado na SciELO
    • <abbrev-journal-title abbrev-type="publisher"> - Título abreviado registrado na SciELO
    • Pelo menos um <issn> (epub ou ppub)
    • <publisher-name> - Nome do publisher registrado na SciELO
  3. Elementos condicionais:

    • <journal-id journal-id-type="nlm-ta"> - Obrigatório se o periódico for indexado no PubMed (usar título abreviado do PubMed)
  4. Valores permitidos para @journal-id-type:

    • publisher-id - Acrônimo oficial SciELO (obrigatório)
    • nlm-ta - Título abreviado PubMed (condicional)
  5. Valores permitidos para @pub-type em <issn>:

    • epub - ISSN online
    • ppub - ISSN print
  6. Valores permitidos para @abbrev-type em <abbrev-journal-title>:

    • publisher - Título abreviado do publisher (obrigatório)
  7. Formato de ISSN:

    • Padrão: XXXX-XXXX (4 dígitos, hífen, 4 dígitos)
    • Total de 8 dígitos + 1 hífen (9 caracteres)
  8. Fonte de dados:

    • Metadados disponíveis em CSV: title-tab-v2 (atualização semanal)

Regras a Implementar

P0 – Críticas (implementar obrigatoriamente)

# Regra Nível Descrição
1 Validar presença de <journal-meta> CRITICAL O elemento <journal-meta> é obrigatório em <front>
2 Validar unicidade de <journal-meta> CRITICAL O elemento <journal-meta> deve aparecer exatamente uma vez em <front>
3 Validar presença de <journal-id @journal-id-type="publisher-id"> CRITICAL O elemento <journal-id> com @journal-id-type="publisher-id" é obrigatório
4 Validar presença de <journal-title> CRITICAL O elemento <journal-title> é obrigatório
5 Validar presença de <abbrev-journal-title @abbrev-type="publisher"> CRITICAL O elemento <abbrev-journal-title> com @abbrev-type="publisher" é obrigatório
6 Validar presença de pelo menos um <issn> CRITICAL Pelo menos um elemento <issn> (epub ou ppub) é obrigatório
7 Validar presença de <publisher-name> CRITICAL O elemento <publisher-name> é obrigatório
8 Validar formato de ISSN ERROR Valor de <issn> deve seguir formato XXXX-XXXX (4 dígitos, hífen, 4 dígitos)

P1 – Importantes (implementar se possível)

# Regra Nível Descrição
9 Validar valores permitidos de @journal-id-type ERROR Quando presente, @journal-id-type deve ser publisher-id ou nlm-ta
10 Validar valores permitidos de @pub-type em <issn> ERROR Quando presente, @pub-type deve ser epub ou ppub
11 Validar unicidade de tipos de <issn> WARNING Não deve haver múltiplos <issn> com o mesmo @pub-type

P2 – Futuras (fora do escopo deste Issue)

# Regra Motivo de exclusão
12 Validar presença de nlm-ta quando indexado no PubMed Alta complexidade - requer integração com API do PubMed ou base de dados externa
13 Validar consistência com title-tab-v2 Média complexidade - requer download e parsing de CSV externo
14 Validar checksum de ISSN Baixa prioridade - formato básico já é validado

Arquivos a Criar/Modificar

Avaliar existentes (podem ter validações parciais):

  • packtools/sps/models/journal_meta.py ou similar – Verificar se modelo existe
  • packtools/sps/validation/journal_meta.py – Verificar validações existentes
  • packtools/sps/validation/rules/journal_meta_rules.json ou similar – Verificar configuração

Criar (se não existirem):

  • packtools/sps/models/journal_meta.py – Modelo de extração de dados
  • packtools/sps/validation/journal_meta.py – Validações
  • packtools/sps/validation/rules/journal_meta_rules.json – Configuração de níveis de erro
  • tests/sps/validation/test_journal_meta.py – Testes unitários

Referenciar (implementações similares):

  • packtools/sps/validation/article_doi.py – Validação de unicidade e presença
  • packtools/sps/validation/utils.py – Funções auxiliares (build_response)

Exemplos de XML

XML Válido (deve passar sem erros):

<!-- Exemplo 1: Periódico completo indexado no PubMed -->
<front>
    <journal-meta>
        <journal-id journal-id-type="nlm-ta">Braz J Med Biol Res</journal-id>
        <journal-id journal-id-type="publisher-id">bjmbr</journal-id>
        <journal-title-group>
            <journal-title>Brazilian Journal of Medical and Biological Research</journal-title>
            <abbrev-journal-title abbrev-type="publisher">Braz. J. Med. Biol. Res.</abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="epub">1414-431X</issn>
        <issn pub-type="ppub">0100-879X</issn>
        <publisher>
            <publisher-name>Associação Brasileira de Divulgação Científica</publisher-name>
        </publisher>
    </journal-meta>
</front>

<!-- Exemplo 2: Periódico sem indexação PubMed, apenas ISSN online -->
<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">scielo</journal-id>
        <journal-title-group>
            <journal-title>SciELO Journal</journal-title>
            <abbrev-journal-title abbrev-type="publisher">SciELO J.</abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="epub">2234-5678</issn>
        <publisher>
            <publisher-name>SciELO Publisher</publisher-name>
        </publisher>
    </journal-meta>
</front>

<!-- Exemplo 3: Periódico apenas com ISSN print -->
<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">revista</journal-id>
        <journal-title-group>
            <journal-title>Revista de Exemplo</journal-title>
            <abbrev-journal-title abbrev-type="publisher">Rev. Ex.</abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="ppub">0100-0200</issn>
        <publisher>
            <publisher-name>Editora Exemplo</publisher-name>
        </publisher>
    </journal-meta>
</front>

<!-- Exemplo 4: ISSN com dígito verificador X -->
<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">test</journal-id>
        <journal-title-group>
            <journal-title>Test Journal</journal-title>
            <abbrev-journal-title abbrev-type="publisher">Test J.</abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="epub">1234-567X</issn>
        <publisher>
            <publisher-name>Test Publisher</publisher-name>
        </publisher>
    </journal-meta>
</front>

XML Inválido – Caso 1: Sem (CRITICAL)

<front>
    <article-meta>
        <!-- sem journal-meta -->
    </article-meta>
</front>

Erro esperado: Elemento <journal-meta> é obrigatório em <front>

XML Inválido – Caso 2: Múltiplos (CRITICAL)

<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">bjmbr</journal-id>
        <journal-title>Journal Title</journal-title>
        <abbrev-journal-title abbrev-type="publisher">J. Title</abbrev-journal-title>
        <issn pub-type="epub">1414-431X</issn>
        <publisher>
            <publisher-name>Publisher</publisher-name>
        </publisher>
    </journal-meta>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">other</journal-id>
        <journal-title>Other Journal</journal-title>
        <abbrev-journal-title abbrev-type="publisher">Other J.</abbrev-journal-title>
        <issn pub-type="epub">1234-5678</issn>
        <publisher>
            <publisher-name>Other Publisher</publisher-name>
        </publisher>
    </journal-meta>
</front>

Erro esperado: Elemento <journal-meta> deve aparecer exatamente uma vez em <front>

XML Inválido – Caso 3: Sem (CRITICAL)

<front>
    <journal-meta>
        <journal-id journal-id-type="nlm-ta">Braz J Med Biol Res</journal-id>
        <journal-title-group>
            <journal-title>Journal Title</journal-title>
            <abbrev-journal-title abbrev-type="publisher">J. Title</abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="epub">1414-431X</issn>
        <publisher>
            <publisher-name>Publisher</publisher-name>
        </publisher>
    </journal-meta>
</front>

Erro esperado: Elemento <journal-id> com @journal-id-type="publisher-id" é obrigatório

XML Inválido – Caso 4: Sem (CRITICAL)

<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">bjmbr</journal-id>
        <journal-title-group>
            <abbrev-journal-title abbrev-type="publisher">J. Title</abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="epub">1414-431X</issn>
        <publisher>
            <publisher-name>Publisher</publisher-name>
        </publisher>
    </journal-meta>
</front>

Erro esperado: Elemento <journal-title> é obrigatório

XML Inválido – Caso 5: Sem (CRITICAL)

<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">bjmbr</journal-id>
        <journal-title-group>
            <journal-title>Journal Title</journal-title>
        </journal-title-group>
        <issn pub-type="epub">1414-431X</issn>
        <publisher>
            <publisher-name>Publisher</publisher-name>
        </publisher>
    </journal-meta>
</front>

Erro esperado: Elemento <abbrev-journal-title> com @abbrev-type="publisher" é obrigatório

XML Inválido – Caso 6: sem @abbrev-type (CRITICAL)

<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">bjmbr</journal-id>
        <journal-title-group>
            <journal-title>Journal Title</journal-title>
            <abbrev-journal-title>J. Title</abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="epub">1414-431X</issn>
        <publisher>
            <publisher-name>Publisher</publisher-name>
        </publisher>
    </journal-meta>
</front>

Erro esperado: Elemento <abbrev-journal-title> deve ter @abbrev-type="publisher"

XML Inválido – Caso 7: Sem (CRITICAL)

<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">bjmbr</journal-id>
        <journal-title-group>
            <journal-title>Journal Title</journal-title>
            <abbrev-journal-title abbrev-type="publisher">J. Title</abbrev-journal-title>
        </journal-title-group>
        <publisher>
            <publisher-name>Publisher</publisher-name>
        </publisher>
    </journal-meta>
</front>

Erro esperado: Pelo menos um elemento <issn> (epub ou ppub) é obrigatório

XML Inválido – Caso 8: Sem (CRITICAL)

<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">bjmbr</journal-id>
        <journal-title-group>
            <journal-title>Journal Title</journal-title>
            <abbrev-journal-title abbrev-type="publisher">J. Title</abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="epub">1414-431X</issn>
        <publisher>
            <!-- sem publisher-name -->
        </publisher>
    </journal-meta>
</front>

Erro esperado: Elemento <publisher-name> é obrigatório

XML Inválido – Caso 9: ISSN formato inválido (sem hífen) (ERROR)

<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">bjmbr</journal-id>
        <journal-title-group>
            <journal-title>Journal Title</journal-title>
            <abbrev-journal-title abbrev-type="publisher">J. Title</abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="epub">1414431X</issn>
        <publisher>
            <publisher-name>Publisher</publisher-name>
        </publisher>
    </journal-meta>
</front>

Erro esperado: ISSN deve seguir formato XXXX-XXXX. Valor encontrado: 1414431X

XML Inválido – Caso 10: ISSN formato inválido (hífen na posição errada) (ERROR)

<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">bjmbr</journal-id>
        <journal-title-group>
            <journal-title>Journal Title</journal-title>
            <abbrev-journal-title abbrev-type="publisher">J. Title</abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="epub">14-14431X</issn>
        <publisher>
            <publisher-name>Publisher</publisher-name>
        </publisher>
    </journal-meta>
</front>

Erro esperado: ISSN deve seguir formato XXXX-XXXX. Hífen deve estar na posição 5.

XML Inválido – Caso 11: ISSN muito curto (ERROR)

<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">bjmbr</journal-id>
        <journal-title-group>
            <journal-title>Journal Title</journal-title>
            <abbrev-journal-title abbrev-type="publisher">J. Title</abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="epub">1414-43</issn>
        <publisher>
            <publisher-name>Publisher</publisher-name>
        </publisher>
    </journal-meta>
</front>

Erro esperado: ISSN deve ter 9 caracteres (8 dígitos + 1 hífen). Valor encontrado tem 7 caracteres.

XML Inválido – Caso 12: ISSN muito longo (ERROR)

<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">bjmbr</journal-id>
        <journal-title-group>
            <journal-title>Journal Title</journal-title>
            <abbrev-journal-title abbrev-type="publisher">J. Title</abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="epub">1414-431XX</issn>
        <publisher>
            <publisher-name>Publisher</publisher-name>
        </publisher>
    </journal-meta>
</front>

Erro esperado: ISSN deve ter 9 caracteres (8 dígitos + 1 hífen). Valor encontrado tem 10 caracteres.

XML Inválido – Caso 13: ISSN com caractere inválido (ERROR)

<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">bjmbr</journal-id>
        <journal-title-group>
            <journal-title>Journal Title</journal-title>
            <abbrev-journal-title abbrev-type="publisher">J. Title</abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="epub">141A-431X</issn>
        <publisher>
            <publisher-name>Publisher</publisher-name>
        </publisher>
    </journal-meta>
</front>

Erro esperado: ISSN deve conter apenas dígitos (0-9) e X no último dígito. Caractere A inválido na posição 4.

XML Inválido – Caso 14: @journal-id-type inválido (ERROR)

<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">bjmbr</journal-id>
        <journal-id journal-id-type="doi">10.1234/journal</journal-id>
        <journal-title-group>
            <journal-title>Journal Title</journal-title>
            <abbrev-journal-title abbrev-type="publisher">J. Title</abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="epub">1414-431X</issn>
        <publisher>
            <publisher-name>Publisher</publisher-name>
        </publisher>
    </journal-meta>
</front>

Erro esperado: Valor "doi" não permitido para @journal-id-type. Valores permitidos: publisher-id, nlm-ta

XML Inválido – Caso 15: @pub-type inválido em (ERROR)

<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">bjmbr</journal-id>
        <journal-title-group>
            <journal-title>Journal Title</journal-title>
            <abbrev-journal-title abbrev-type="publisher">J. Title</abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="online">1414-431X</issn>
        <publisher>
            <publisher-name>Publisher</publisher-name>
        </publisher>
    </journal-meta>
</front>

Erro esperado: Valor "online" não permitido para @pub-type em <issn>. Valores permitidos: epub, ppub

XML Inválido – Caso 16: Múltiplos com mesmo @pub-type (WARNING)

<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id">bjmbr</journal-id>
        <journal-title-group>
            <journal-title>Journal Title</journal-title>
            <abbrev-journal-title abbrev-type="publisher">J. Title</abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="epub">1414-431X</issn>
        <issn pub-type="epub">2234-5678</issn>
        <publisher>
            <publisher-name>Publisher</publisher-name>
        </publisher>
    </journal-meta>
</front>

Erro esperado: Múltiplos elementos <issn> com @pub-type="epub". Deve haver no máximo um ISSN de cada tipo.

XML Inválido – Caso 17: Elementos vazios (CRITICAL)

<front>
    <journal-meta>
        <journal-id journal-id-type="publisher-id"></journal-id>
        <journal-title-group>
            <journal-title></journal-title>
            <abbrev-journal-title abbrev-type="publisher"></abbrev-journal-title>
        </journal-title-group>
        <issn pub-type="epub"></issn>
        <publisher>
            <publisher-name></publisher-name>
        </publisher>
    </journal-meta>
</front>

Erro esperado: Elementos obrigatórios não podem estar vazios


Padrão de Implementação

Diretrizes Gerais:

  1. Seguir padrões existentes no repositório:

    • Consultar implementações similares como article_doi.py (validação de unicidade e presença)
    • Usar estrutura de classes já estabelecida no packtools
    • IMPORTANTE: Verificar se já existem validações parciais para <journal-meta> e integrá-las ou complementá-las
  2. Internacionalização (i18n):

    • OBRIGATÓRIO: Todas as mensagens devem suportar internacionalização
    • Usar advice_text e advice_params em build_response()
    • Consultar conversas anteriores sobre implementação de i18n no packtools
    • Referência: validações em article_contribs.py que já implementam i18n completo
  3. Validações condicionais:

    • Validações que dependem de contexto devem retornar None quando não aplicável
    • Exemplo: validação de formato de ISSN só se aplica se ISSN existir
    • Usar filter_results() nos testes para remover None
  4. Uso de build_response():

    • Sempre usar parent=self.data (dict completo, nunca string)
    • Campo response deve conter: "OK", "WARNING", "ERROR", "CRITICAL"
    • Sempre fornecer advice_text e advice_params para i18n
  5. Modelo de dados:

    • Criar propriedade que retorna dicionário com todos os metadados do periódico
    • Dict deve conter: journal_ids (lista de dicts com type e value), journal_title, abbrev_journal_title, issns (lista de dicts com pub_type e value), publisher_name, parent, parent_id, parent_lang
  6. Validação de formato de ISSN:

    • Regex: ^\d{4}-\d{3}[\dX]$
    • Verificar:
      • Comprimento exato: 9 caracteres
      • Hífen na posição 5 (índice 4)
      • Primeiros 4 caracteres são dígitos
      • Caracteres 6-8 são dígitos
      • Último caractere é dígito ou X (maiúsculo)
  7. Validação de presença condicional:

    • Verificar se pelo menos um <issn> existe (epub ou ppub ou ambos)
    • Verificar se <journal-id publisher-id> existe especificamente
  8. Validação de unicidade de tipos:

    • Contar ocorrências de cada @pub-type em <issn>
    • Alertar se houver mais de um ISSN com o mesmo tipo

Testes Esperados

Casos de teste obrigatórios:

Presença e unicidade de :

  • Um <journal-meta> em <front> (OK)
  • Sem <journal-meta> em <front> (CRITICAL)
  • Múltiplos <journal-meta> em <front> (CRITICAL)

Elementos obrigatórios:

  • Com todos os elementos obrigatórios (OK)
  • Sem <journal-id publisher-id> (CRITICAL)
  • Sem <journal-title> (CRITICAL)
  • Sem <abbrev-journal-title> (CRITICAL)
  • Sem <issn> (CRITICAL)
  • Sem <publisher-name> (CRITICAL)

Atributos obrigatórios:

  • <journal-id> com @journal-id-type="publisher-id" (OK)
  • <journal-id> sem @journal-id-type (CRITICAL)
  • <abbrev-journal-title> com @abbrev-type="publisher" (OK)
  • <abbrev-journal-title> sem @abbrev-type (CRITICAL)
  • <abbrev-journal-title> com @abbrev-type diferente de "publisher" (ERROR)

Tipos de :

  • <journal-id publisher-id> e <journal-id nlm-ta> (OK)
  • Apenas <journal-id publisher-id> (OK)
  • Apenas <journal-id nlm-ta> sem publisher-id (CRITICAL)
  • @journal-id-type com valor inválido (ERROR)

Presença de :

  • Com <issn epub> (OK)
  • Com <issn ppub> (OK)
  • Com <issn epub> e <issn ppub> (OK)
  • Sem nenhum <issn> (CRITICAL)

Tipos de :

  • <issn> com @pub-type="epub" (OK)
  • <issn> com @pub-type="ppub" (OK)
  • <issn> sem @pub-type (WARNING)
  • @pub-type com valor inválido (ERROR)

Formato de ISSN:

  • ISSN válido 1414-431X (OK)
  • ISSN válido 0100-879X (OK)
  • ISSN válido com X 1234-567X (OK)
  • ISSN sem hífen 1414431X (ERROR)
  • ISSN com hífen errado 14-14431X (ERROR)
  • ISSN muito curto 1414-43 (ERROR)
  • ISSN muito longo 1414-431XX (ERROR)
  • ISSN com letra inválida 141A-431X (ERROR)
  • ISSN com caractere especial 1414@431X (ERROR)
  • ISSN com espaços 1414 431X (ERROR)
  • ISSN com x minúsculo 1234-567x (ERROR - deve ser X maiúsculo)

Unicidade de tipos de ISSN:

  • Um epub e um ppub (OK)
  • Dois epub (WARNING)
  • Dois ppub (WARNING)
  • Três ou mais do mesmo tipo (WARNING)

Elementos vazios:

  • <journal-id> vazio (CRITICAL)
  • <journal-title> vazio (CRITICAL)
  • <abbrev-journal-title> vazio (CRITICAL)
  • <issn> vazio (CRITICAL)
  • <publisher-name> vazio (CRITICAL)
  • Elementos apenas com espaços (CRITICAL)

Casos de borda:

  • Múltiplos <journal-id> de tipos diferentes (OK)
  • <journal-title> com caracteres especiais (OK)
  • <publisher-name> com caracteres Unicode (OK)
  • ISSN de diferentes países (OK - formato padrão)

Total esperado: ~55 testes unitários

Estrutura de testes:

  • Usar filter_results() para remover None dos resultados
  • Asserções devem usar campo response (não is_valid)
  • Testes devem ser autocontidos e descritivos
  • Agrupar testes por categoria (presença, formatos, unicidade)

Critérios de Aceite

O PR será aceito quando:

  • Verificação de validações existentes: Código existente para <journal-meta> foi analisado e integrado ou substituído adequadamente
  • Todas as regras P0 implementadas (8 validações CRITICAL/ERROR)
  • Todas as regras P1 implementadas (3 validações ERROR/WARNING)
  • Testes unitários passando com cobertura mínima de ~55 casos
  • Nenhum teste existente quebrado
  • Arquivo journal_meta_rules.json criado com todos os níveis de erro
  • Internacionalização completa em todas as mensagens (i18n obrigatório)
  • Código seguindo padrões do packtools (build_response, filter_results, validações condicionais)
  • Modelo de dados criado com extração adequada de todos os metadados
  • Validação de formato de ISSN funcionando com regex
  • Validação de presença de elementos obrigatórios funcionando
  • Validação de unicidade de tipos funcionando
  • Documentação inline clara (docstrings)

Referências

Documentação SPS:

Padrões JATS:

Padrões externos:

Referências internas packtools:

  • Internacionalização: Consultar conversas anteriores sobre implementação de i18n
  • Implementações similares: article_doi.py (unicidade e presença)
  • Funções auxiliares: utils.py (build_response)

Labels Sugeridas

enhancement validation SPS-1.10 good-first-issue


Impacto Esperado

Antes:

  • Conformidade SPS 1.10 para <journal-meta>: X% (verificar validações existentes)
  • Elementos obrigatórios podem estar ausentes
  • ISSNs com formato inválido podem passar
  • Atributos obrigatórios podem estar ausentes
  • Múltiplos ISSNs do mesmo tipo não detectados

Depois:

  • Conformidade SPS 1.10 para <journal-meta>: 75% (9 de 12 regras)
  • Validação CRITICAL de presença de elementos obrigatórios
  • Validação ERROR de formato de ISSN (padrão XXXX-XXXX)
  • Validação ERROR de valores permitidos em atributos
  • Validação WARNING de unicidade de tipos de ISSN
  • ~55 testes unitários garantindo qualidade
  • Internacionalização completa (PT/EN/ES)

Benefícios:

  • Melhora a qualidade dos XMLs SciELO
  • Garante completude de metadados do periódico
  • Detecta ISSNs malformados antes da publicação
  • Previne ausência de informações críticas de identificação
  • Facilita interoperabilidade com bases de dados externas
  • Melhora indexação em sistemas bibliográficos
  • Garante conformidade com padrões internacionais (ISO 3297)
  • Facilita integração com PubMed e outras bases
  • Facilita manutenção e depuração de XMLs

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions