Skip to content

Implementar validações para elemento <list> conforme SPS 1.10#1099

Draft
Copilot wants to merge 3 commits intomasterfrom
copilot/implement-list-validations
Draft

Implementar validações para elemento <list> conforme SPS 1.10#1099
Copilot wants to merge 3 commits intomasterfrom
copilot/implement-list-validations

Conversation

Copy link
Contributor

Copilot AI commented Feb 13, 2026

O que esse PR faz?

Implementa validações completas para o elemento <list> conforme especificação SPS 1.10, atingindo 70% de conformidade (7 de 10 regras). O sistema agora valida presença e valores do atributo @list-type, quantidade mínima de itens, e recomenda boas práticas de acessibilidade.

Regras implementadas:

  • P0 (Críticas): Presença de @list-type (CRITICAL), valores permitidos (ERROR), mínimo 2 <list-item> (ERROR), ausência de <label> (WARNING)
  • P1 (Importantes): Conteúdo em <list-item> (WARNING), recomendação de <title> (INFO)

Valores permitidos para @list-type: order, bullet, alpha-lower, alpha-upper, roman-lower, roman-upper, simple

Onde a revisão poderia começar?

  1. packtools/sps/validation/list.py - Lógica de validação (6 regras)
  2. packtools/sps/models/list.py - Modelo de extração de dados
  3. tests/sps/validation/test_list.py - Suite de testes (11 testes)

Como este poderia ser testado manualmente?

from lxml import etree
from packtools.sps.validation.list import ArticleListValidation

# Caso inválido: @list-type ausente
xml = etree.fromstring("""
<article article-type="research-article" xml:lang="pt">
<body>
<list>
    <list-item><p>Item 1</p></list-item>
    <list-item><p>Item 2</p></list-item>
</list>
</body>
</article>
""")

results = list(ArticleListValidation(xml, {}).validate())
# Esperado: CRITICAL para @list-type ausente

# Caso válido: todos os 7 tipos permitidos
for list_type in ["order", "bullet", "alpha-lower", "alpha-upper", 
                   "roman-lower", "roman-upper", "simple"]:
    xml = etree.fromstring(f"""
    <article article-type="research-article" xml:lang="pt">
    <body>
    <list list-type="{list_type}">
        <list-item><p>Item 1</p></list-item>
        <list-item><p>Item 2</p></list-item>
    </list>
    </body>
    </article>
    """)
    results = list(ArticleListValidation(xml, {}).validate())
    # Esperado: Todas validações passam (response="OK")

Execute os testes unitários: python -m unittest tests.sps.validation.test_list

Algum cenário de contexto que queira dar?

Arquitetura: Segue padrão existente de fig.py e tablewrap.py. O modelo ArticleLists agrega listas de article, sub-articles translation e non-translation. Validações são independentes por lista, suportando aninhamento.

Acessibilidade: A regra sobre <label> é WARNING (não ERROR) porque o atributo @list-type gera marcadores automaticamente - mais acessível para screen readers.

Listas aninhadas: Validadas independentemente. Uma lista order contendo lista bullet resulta em 2 conjuntos de validações.

Quais são tickets relevantes?

Issue sobre validações para elemento <list> conforme SPS 1.10

Referências

  • SPS 1.10 - Elemento list
  • Implementações de referência: packtools/sps/validation/fig.py, packtools/sps/models/tablewrap.py

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • api.crossref.org
    • Triggering command: /usr/bin/python python -m unittest discover tests/sps/validation -p test_*.py -v py, to enable prgit (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

This section details on the original issue you should resolve

<issue_title>Criar validações para o elemento </issue_title>
<issue_description>## Objetivo

Implementar validações para o elemento <list> conforme a especificação SPS 1.10, aumentando a conformidade de X% para 70% (7 de 10 regras).

Nota: Algumas validações para <list> 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 <list> identifica listas com dois ou mais itens no documento. Validações corretas garantem acessibilidade através do uso adequado do atributo @list-type ao invés de <label>, presença de elementos mínimos necessários, e uso correto de valores permitidos para tipos de lista.

Conformidade atual: X de 10 regras implementadas (X%)
Meta após implementação: 7 de 10 regras (70%)


Documentação SPS

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

Regras principais conforme SPS 1.10:

  1. Atributo obrigatório:

    • @list-type é obrigatório em todos os <list>
  2. Valores permitidos para @list-type:

    • order - Lista ordenada com números (1, 2, 3...)
    • bullet - Lista desordenada com símbolos (•, -, etc.)
    • alpha-lower - Lista ordenada alfabética minúscula (a, b, c...)
    • alpha-upper - Lista ordenada alfabética maiúscula (A, B, C...)
    • roman-lower - Lista ordenada romana minúscula (i, ii, iii...)
    • roman-upper - Lista ordenada romana maiúscula (I, II, III...)
    • simple - Lista simples sem prefixo
  3. Estrutura mínima:

    • <list> deve conter pelo menos dois <list-item>
  4. Elementos permitidos:

    • <title> (opcional, mas recomendado quando disponível)
    • <list-item> (obrigatório, mínimo 2)
  5. Acessibilidade:

    • Não usar <label> dentro de <list-item> para rótulos
    • O atributo @list-type gera automaticamente os prefixos/rótulos
    • Uso de <label> é menos acessível e menos legível por máquina
  6. Listas aninhadas:

    • Permitido ter <list> dentro de <list-item>

Regras a Implementar

P0 – Críticas (implementar obrigatoriamente)

# Regra Nível Descrição
1 Validar presença de @list-type CRITICAL O atributo @list-type é obrigatório em <list>
2 Validar valores permitidos de @list-type ERROR O valor de @list-type deve estar na lista de valores permitidos
3 Validar presença mínima de <list-item> ERROR O elemento <list> deve conter pelo menos dois <list-item>
4 Validar ausência de <label> em <list-item> WARNING Para acessibilidade, não use <label> em <list-item> (o atributo @list-type gera rótulos automaticamente)

P1 – Importantes (implementar se possível)

# Regra Nível Descrição
5 Validar que cada <list-item> tem conteúdo WARNING Cada <list-item> deve conter pelo menos um elemento filho (tipicamente <p>)
6 Recomendar uso de <title> quando apropriado INFO Quando a lista tiver um título descritivo, recomenda-se usar <title>

P2 – Futuras (fora do escopo deste Issue)

# Regra Motivo de exclusão
7 Validar profundidade de aninhamento de listas Baixa prioridade - formato livre permite múltiplos níveis
8 Validar consistência de tipo em listas aninhadas Baixa prioridade - não há restrição SPS
9 Validar que <list-item> contém <p> ao invés de texto direto Média complexidade - schema permite várias estruturas
10 Validar que lista com um único item deveria ser parágrafo Baixa prioridade - decisão editorial

Arquivos a Criar/Modificar

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

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

Criar (se não existirem):

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

Referenciar (implementações similares):

  • packtools/sps/validation/fig.py – Validação de atributos obrigatórios
  • packtools/sps/validation/utils.py – Funções auxiliares (build_response)

Exemplos de XML

XML Válido (deve passar sem erros):

<!-- Exemplo 1: Lista com bullet -->
<list list-type="bullet">
    <title>Nam commodo</title>
    <list-item>
        <p>Morbi luctus elit enim.</p>
    </list-item>
    <list-item>
        <p>Nullam nunc leo.</p>
    </list-item>
    <list-item>
        <p>Proin...

</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

- Fixes scieloorg/packtools#1090

<!-- START COPILOT CODING AGENT TIPS -->
---

✨ Let Copilot coding agent [set things up for you](https://github.com/scieloorg/packtools/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 2 commits February 13, 2026 12:41
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Co-authored-by: robertatakenaka <505143+robertatakenaka@users.noreply.github.com>
Copilot AI changed the title [WIP] Add validations for the <list> element Implementar validações para elemento <list> conforme SPS 1.10 Feb 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants