Objetivo
Implementar validações para o elemento <sec> conforme a especificação SPS 1.10, aumentando a conformidade de X% para 70% (7 de 10 regras).
Nota: Algumas validações para <sec> 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 <sec> representa seções de texto do documento. Para acessibilidade, cada seção deve obrigatoriamente conter <title>. Seções de primeiro nível que correspondem a tipos específicos (métodos, resultados, etc.) devem ter o atributo @sec-type. Alguns tipos de documentos requerem obrigatoriamente seção de disponibilidade de dados (@sec-type="data-availability"). Validações corretas garantem acessibilidade, presença de elementos obrigatórios, e conformidade com requisitos de tipos de documentos.
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.sec
Regras principais conforme SPS 1.10:
-
Ocorrência:
<sec> pode aparecer zero ou mais vezes em: <abstract>, <app>, <back>, <bio>, <body>, <boxed-text>, <sec>, <trans-abstract>
-
Elemento obrigatório (Acessibilidade):
<title> é mandatório em <sec> para criar títulos acessíveis
-
Atributo @sec-type:
- Obrigatório apenas para seções de primeiro nível que correspondem aos valores da lista
- Caso haja seção de primeiro nível diferente, o atributo não deve ser inserido
-
Valores permitidos para @sec-type:
cases - Relatos/casos/estudos de caso
conclusions - Conclusões/considerações finais/comentários
data-availability - Declaração de Disponibilidade de Dados
discussion - Discussões/interpretações
intro - Introdução/sinopse
materials - Materiais
methods - Metodologias/métodos/procedimentos
results - Resultados/descobertas
subjects - Participantes/Pacientes
supplementary-material - Material suplementar/material adicional
transcript - Transcrição de vídeo ou áudio
-
Seções combinadas:
- Quando título é composto por mais de um item, usar pipe
| como separador
- Exemplo:
materials|methods
- Exceção:
supplementary-material, transcript e data-availability não podem ser combinados
-
@sec-type="data-availability" obrigatório:
- Mandatório para tipos de documentos:
data-article, brief-report, case-report, rapid-communication, research-article, review-article
- Deve também ter
@specific-use
-
@sec-type="transcript" exige @id:
- Seções de transcrição devem ter atributo
@id obrigatório
-
Estrutura:
- Título (
<title>) seguido de um ou mais parágrafos (<p>)
Regras a Implementar
P0 – Críticas (implementar obrigatoriamente)
| # |
Regra |
Nível |
Descrição |
| 1 |
Validar presença de <title> |
CRITICAL |
O elemento <title> é mandatório em <sec> (requisito de acessibilidade) |
| 2 |
Validar valores permitidos de @sec-type |
ERROR |
Quando presente, @sec-type deve ter valor da lista permitida |
| 3 |
Validar presença de @id em transcript |
ERROR |
Seção com @sec-type="transcript" deve ter atributo @id |
| 4 |
Validar presença de data-availability em documentos indexáveis |
ERROR |
Documentos indexáveis (research-article, case-report, etc.) devem ter seção @sec-type="data-availability" |
P1 – Importantes (implementar se possível)
| # |
Regra |
Nível |
Descrição |
| 5 |
Validar formato de seções combinadas |
WARNING |
Seções combinadas devem usar pipe ` |
| 6 |
Validar que transcript, supplementary-material e data-availability não são combinados |
WARNING |
Tipos especiais não devem aparecer em seções combinadas (sem pipe) |
| 7 |
Validar presença de conteúdo |
WARNING |
Seção deve conter pelo menos um parágrafo <p> após <title> |
P2 – Futuras (fora do escopo deste Issue)
| # |
Regra |
Motivo de exclusão |
| 8 |
Validar que @sec-type só é usado em seções de primeiro nível |
Média complexidade - requer análise de hierarquia de elementos |
| 9 |
Validar presença de @specific-use quando @sec-type="data-availability" |
Baixa prioridade - validação específica de data-availability |
| 10 |
Validar ordem lógica de seções (intro, methods, results, discussion, conclusions) |
Baixa prioridade - ordem é recomendação, não regra rígida |
Arquivos a Criar/Modificar
Avaliar existentes (podem ter validações parciais):
packtools/sps/models/sec.py ou similar – Verificar se modelo existe
packtools/sps/validation/sec.py – Verificar validações existentes
packtools/sps/validation/rules/sec_rules.json ou similar – Verificar configuração
Criar (se não existirem):
packtools/sps/models/sec.py – Modelo de extração de dados
packtools/sps/validation/sec.py – Validações
packtools/sps/validation/rules/sec_rules.json – Configuração de níveis de erro
tests/sps/validation/test_sec.py – Testes unitários
Referenciar (implementações similares):
packtools/sps/validation/article_and_subarticles.py – Validação condicional por article-type
packtools/sps/validation/utils.py – Funções auxiliares (build_response)
Exemplos de XML
XML Válido (deve passar sem erros):
<!-- Exemplo 1: Seção simples de métodos -->
<body>
<sec sec-type="methods">
<title>Métodos de Pesquisa</title>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ornare magna a enim dapibus.</p>
</sec>
</body>
<!-- Exemplo 2: Seção combinada (materiais e métodos) -->
<body>
<sec sec-type="materials|methods">
<title>Materials and Methods</title>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</sec>
</body>
<!-- Exemplo 3: Seção de material suplementar -->
<body>
<sec sec-type="supplementary-material" id="sec1">
<title>Supplementary Materials</title>
<supplementary-material id="suppl1">
<label>Supplementary material 1</label>
<caption>
<title>Video 1</title>
</caption>
<media mimetype="video" mime-subtype="mp4" xlink:href="video.mp4"/>
</supplementary-material>
</sec>
</body>
<!-- Exemplo 4: Seção de transcrição com @id -->
<body>
<sec sec-type="transcript" id="TR1">
<title>Interview with Gabriel and Denise</title>
<p>Nam convallis dolor sed ligula mollis vulputate.</p>
<speech>
<speaker>Gabriel</speaker>
<p>Etiam ac arcu at nunc lacinia fermentum.</p>
</speech>
<speech>
<speaker>Denise</speaker>
<p>Pellentesque at bibendum nibh.</p>
</speech>
</sec>
</body>
<!-- Exemplo 5: Seção de disponibilidade de dados -->
<body>
<sec sec-type="data-availability" id="sec-data" specific-use="data-available-on-request">
<title>Data Availability Statement</title>
<p>The data that support the findings of this study are available on request from the corresponding author.</p>
</sec>
</body>
<!-- Exemplo 6: Seção com subseção -->
<body>
<sec sec-type="methods">
<title>Methodology</title>
<sec>
<title>Methodology in Science</title>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</sec>
</sec>
</body>
<!-- Exemplo 7: Seção sem @sec-type (título livre) -->
<body>
<sec>
<title>Biologia Marinha</title>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</sec>
</body>
<!-- Exemplo 8: Todas as seções principais de um artigo -->
<article article-type="research-article">
<front>
<!-- metadados -->
</front>
<body>
<sec sec-type="intro">
<title>Introduction</title>
<p>Introduction content.</p>
</sec>
<sec sec-type="materials|methods">
<title>Materials and Methods</title>
<p>Methods content.</p>
</sec>
<sec sec-type="results">
<title>Results</title>
<p>Results content.</p>
</sec>
<sec sec-type="discussion">
<title>Discussion</title>
<p>Discussion content.</p>
</sec>
<sec sec-type="conclusions">
<title>Conclusions</title>
<p>Conclusions content.</p>
</sec>
<sec sec-type="data-availability" specific-use="data-available-on-request">
<title>Data Availability</title>
<p>Data available on request.</p>
</sec>
</body>
</article>
<!-- Exemplo 9: Seção de casos -->
<body>
<sec sec-type="cases">
<title>Case Studies</title>
<p>Case description.</p>
</sec>
</body>
<!-- Exemplo 10: Seção de participantes -->
<body>
<sec sec-type="subjects">
<title>Participants</title>
<p>Participant information.</p>
</sec>
</body>
XML Inválido – Caso 1: Sem <title> (CRITICAL)
<body>
<sec sec-type="methods">
<p>Lorem ipsum dolor sit amet.</p>
</sec>
</body>
Erro esperado: Elemento <title> é mandatório em <sec> (requisito de acessibilidade)
XML Inválido – Caso 2: <title> vazio (CRITICAL)
<body>
<sec sec-type="methods">
<title></title>
<p>Lorem ipsum dolor sit amet.</p>
</sec>
</body>
Erro esperado: Elemento <title> não pode estar vazio
XML Inválido – Caso 3: <title> apenas espaços (CRITICAL)
<body>
<sec sec-type="methods">
<title> </title>
<p>Lorem ipsum dolor sit amet.</p>
</sec>
</body>
Erro esperado: Elemento <title> não pode conter apenas espaços
XML Inválido – Caso 4: @sec-type com valor inválido (ERROR)
<body>
<sec sec-type="methodology">
<title>Methodology</title>
<p>Lorem ipsum dolor sit amet.</p>
</sec>
</body>
Erro esperado: Valor "methodology" não está na lista de valores permitidos para @sec-type. Use methods para metodologias.
XML Inválido – Caso 5: @sec-type="transcript" sem @id (ERROR)
<body>
<sec sec-type="transcript">
<title>Interview</title>
<p>Interview content.</p>
</sec>
</body>
Erro esperado: Seção com @sec-type="transcript" deve ter atributo @id
XML Inválido – Caso 6: research-article sem data-availability (ERROR)
<article article-type="research-article">
<front>
<!-- metadados -->
</front>
<body>
<sec sec-type="intro">
<title>Introduction</title>
<p>Content.</p>
</sec>
<sec sec-type="methods">
<title>Methods</title>
<p>Content.</p>
</sec>
<!-- falta sec sec-type="data-availability" -->
</body>
</article>
Erro esperado: Artigo com @article-type="research-article" deve conter seção @sec-type="data-availability" (Critério SciELO Brasil)
XML Inválido – Caso 7: Seção combinada com formato incorreto (WARNING)
<body>
<sec sec-type="materials methods">
<title>Materials and Methods</title>
<p>Content.</p>
</sec>
</body>
Erro esperado: (WARNING) Seções combinadas devem usar pipe | como separador. Use materials|methods ao invés de materials methods
XML Inválido – Caso 8: transcript combinado (WARNING)
<body>
<sec sec-type="transcript|discussion" id="TR1">
<title>Interview Discussion</title>
<p>Content.</p>
</sec>
</body>
Erro esperado: (WARNING) @sec-type="transcript" não deve ser combinado com outros tipos (sem pipe)
XML Inválido – Caso 9: data-availability combinado (WARNING)
<body>
<sec sec-type="data-availability|supplementary-material">
<title>Data and Materials</title>
<p>Content.</p>
</sec>
</body>
Erro esperado: (WARNING) @sec-type="data-availability" não deve ser combinado com outros tipos (sem pipe)
XML Inválido – Caso 10: Seção vazia (sem conteúdo) (WARNING)
<body>
<sec sec-type="methods">
<title>Methods</title>
</sec>
</body>
Erro esperado: (WARNING) Seção deve conter pelo menos um parágrafo <p> ou outro conteúdo após <title>
XML Inválido – Caso 11: @sec-type vazio (ERROR)
<body>
<sec sec-type="">
<title>Title</title>
<p>Content.</p>
</sec>
</body>
Erro esperado: Atributo @sec-type não pode estar vazio
XML Inválido – Caso 12: @sec-type com uppercase (ERROR)
<body>
<sec sec-type="Methods">
<title>Methods</title>
<p>Content.</p>
</sec>
</body>
Erro esperado: Valor de @sec-type deve estar em minúsculas. Use methods ao invés de Methods
XML Inválido – Caso 13: case-report sem data-availability (ERROR)
<article article-type="case-report">
<front>
<!-- metadados -->
</front>
<body>
<sec sec-type="intro">
<title>Introduction</title>
<p>Content.</p>
</sec>
<!-- falta data-availability -->
</body>
</article>
Erro esperado: Artigo com @article-type="case-report" deve conter seção @sec-type="data-availability"
XML Inválido – Caso 14: Combinação com três tipos (WARNING)
<body>
<sec sec-type="materials|methods|results">
<title>Materials, Methods and Results</title>
<p>Content.</p>
</sec>
</body>
Erro esperado: (WARNING) Seções combinadas normalmente usam apenas dois tipos. Verifique se materials|methods|results é apropriado.
XML Inválido – Caso 15: @id vazio em transcript (ERROR)
<body>
<sec sec-type="transcript" id="">
<title>Interview</title>
<p>Content.</p>
</sec>
</body>
Erro esperado: Atributo @id não pode estar vazio em seção @sec-type="transcript"
Padrão de Implementação
Diretrizes Gerais:
-
Seguir padrões existentes no repositório:
- Consultar implementações similares como
article_and_subarticles.py (validação condicional)
- Usar estrutura de classes já estabelecida no packtools
- IMPORTANTE: Verificar se já existem validações parciais para
<sec> e integrá-las ou complementá-las
-
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
-
Validações condicionais:
- Validações que dependem de contexto devem retornar
None quando não aplicável
- Exemplo: validação de
data-availability só se aplica para tipos específicos de artigos
- Exemplo: validação de
@id só se aplica quando @sec-type="transcript"
- Usar
filter_results() nos testes para remover None
-
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
-
Modelo de dados:
- Criar propriedade que retorna lista de dicionários (um para cada
<sec>)
- Cada dict deve conter:
sec_type, has_title, title_text, id, has_content, level, parent, parent_id, parent_lang
-
Lista de valores permitidos:
- Criar constante:
SEC_TYPES = ["cases", "conclusions", "data-availability", "discussion", "intro", "materials", "methods", "results", "subjects", "supplementary-material", "transcript"]
- Tipos que não podem ser combinados:
["transcript", "supplementary-material", "data-availability"]
-
Detecção de article-type:
- Tipos que requerem
data-availability: ["data-article", "brief-report", "case-report", "rapid-communication", "research-article", "review-article"]
- Usar XPath ou navegação DOM para acessar elemento raiz
<article>
-
Validação de seções combinadas:
- Detectar presença de pipe
| no valor de @sec-type
- Validar que cada parte da combinação é um valor válido
- Alertar se tipos especiais aparecem combinados
-
Detecção de nível de seção:
- Seção de primeiro nível:
<body>/<sec>, <back>/<sec>, etc.
- Subseção:
<sec>/<sec>
- Validação de
@sec-type normalmente só se aplica a primeiro nível
-
Validação de conteúdo:
- Verificar presença de pelo menos um elemento após
<title>
- Elementos aceitos:
<p>, <sec>, <supplementary-material>, etc.
Testes Esperados
Casos de teste obrigatórios:
Presença de <title>:
Valores de @sec-type:
Seções combinadas:
Tipos não combináveis:
Atributo @id em transcript:
data-availability obrigatório:
Presença de conteúdo:
Hierarquia:
Casos de borda:
Total esperado: ~60 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 (title, sec-type, combinadas, data-availability, conteúdo)
Critérios de Aceite
O PR será aceito quando:
Referências
Documentação SPS:
Padrões JATS:
Acessibilidade:
Referências internas packtools:
- Internacionalização: Consultar conversas anteriores sobre implementação de i18n
- Implementações similares:
article_and_subarticles.py (validação condicional por article-type)
- Funções auxiliares:
utils.py (build_response)
Labels Sugeridas
enhancement validation SPS-1.10 accessibility scielo-brasil
Impacto Esperado
Antes:
- Conformidade SPS 1.10 para
<sec>: X% (verificar validações existentes)
<title> pode estar ausente (problema de acessibilidade)
- Valores incorretos de
@sec-type podem passar
- Seção
data-availability pode estar ausente em documentos que a requerem
@id pode estar ausente em transcrições
- Seções combinadas podem ter formato incorreto
- Tipos especiais podem ser combinados inadequadamente
Depois:
- Conformidade SPS 1.10 para
<sec>: 70% (7 de 10 regras)
- Validação CRITICAL de
<title> obrigatório (acessibilidade)
- Validação ERROR de valores permitidos de
@sec-type
- Validação ERROR de presença de
data-availability em documentos indexáveis
- Validação ERROR de
@id obrigatório em transcrições
- Validação WARNING de formato de seções combinadas
- Validação WARNING de tipos não combináveis
- ~60 testes unitários garantindo qualidade
- Internacionalização completa (PT/EN/ES)
Benefícios:
- Garante acessibilidade com títulos obrigatórios em seções
- Melhora conformidade com Critérios SciELO Brasil (data-availability)
- Detecta valores incorretos de
@sec-type antes da publicação
- Assegura identificação adequada de transcrições (com @id)
- Promove estruturação correta de seções combinadas
- Facilita navegação e compreensão do documento
- Melhora experiência para usuários com tecnologias assistivas
- Garante presença de declaração de disponibilidade de dados
- Facilita processamento automatizado de seções
- Facilita manutenção e depuração de XMLs
Observações importantes:
- Implementar internacionalização ajustando as respostas das validações ao formato da função build_response em
packtools/sps/validation/utils.py;
- Verificar e adicionar as validações no orquestrador:
packtools/sps/validation/xml_validations.py e packtools/sps/validation/xml_validator.py
- Verificar a corretude dos testes exsitentes para a validação e complementar caso necessário;
- Realizar ajustes, caso necessário, nos modelos que são utilizados pelas validações, garantindo que o ajuste não interfira em possíveis usos atuais desses modelos.
Objetivo
Implementar validações para o elemento
<sec>conforme a especificação SPS 1.10, aumentando a conformidade de X% para 70% (7 de 10 regras).Nota: Algumas validações para
<sec>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
<sec>representa seções de texto do documento. Para acessibilidade, cada seção deve obrigatoriamente conter<title>. Seções de primeiro nível que correspondem a tipos específicos (métodos, resultados, etc.) devem ter o atributo@sec-type. Alguns tipos de documentos requerem obrigatoriamente seção de disponibilidade de dados (@sec-type="data-availability"). Validações corretas garantem acessibilidade, presença de elementos obrigatórios, e conformidade com requisitos de tipos de documentos.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.sec
Regras principais conforme SPS 1.10:
Ocorrência:
<sec>pode aparecer zero ou mais vezes em:<abstract>,<app>,<back>,<bio>,<body>,<boxed-text>,<sec>,<trans-abstract>Elemento obrigatório (Acessibilidade):
<title>é mandatório em<sec>para criar títulos acessíveisAtributo
@sec-type:Valores permitidos para
@sec-type:cases- Relatos/casos/estudos de casoconclusions- Conclusões/considerações finais/comentáriosdata-availability- Declaração de Disponibilidade de Dadosdiscussion- Discussões/interpretaçõesintro- Introdução/sinopsematerials- Materiaismethods- Metodologias/métodos/procedimentosresults- Resultados/descobertassubjects- Participantes/Pacientessupplementary-material- Material suplementar/material adicionaltranscript- Transcrição de vídeo ou áudioSeções combinadas:
|como separadormaterials|methodssupplementary-material,transcriptedata-availabilitynão podem ser combinados@sec-type="data-availability"obrigatório:data-article,brief-report,case-report,rapid-communication,research-article,review-article@specific-use@sec-type="transcript"exige@id:@idobrigatórioEstrutura:
<title>) seguido de um ou mais parágrafos (<p>)Regras a Implementar
P0 – Críticas (implementar obrigatoriamente)
<title><title>é mandatório em<sec>(requisito de acessibilidade)@sec-type@sec-typedeve ter valor da lista permitida@idemtranscript@sec-type="transcript"deve ter atributo@iddata-availabilityem documentos indexáveis@sec-type="data-availability"P1 – Importantes (implementar se possível)
transcript,supplementary-materialedata-availabilitynão são combinados<p>após<title>P2 – Futuras (fora do escopo deste Issue)
@sec-typesó é usado em seções de primeiro nível@specific-usequando@sec-type="data-availability"Arquivos a Criar/Modificar
Avaliar existentes (podem ter validações parciais):
packtools/sps/models/sec.pyou similar – Verificar se modelo existepacktools/sps/validation/sec.py– Verificar validações existentespacktools/sps/validation/rules/sec_rules.jsonou similar – Verificar configuraçãoCriar (se não existirem):
packtools/sps/models/sec.py– Modelo de extração de dadospacktools/sps/validation/sec.py– Validaçõespacktools/sps/validation/rules/sec_rules.json– Configuração de níveis de errotests/sps/validation/test_sec.py– Testes unitáriosReferenciar (implementações similares):
packtools/sps/validation/article_and_subarticles.py– Validação condicional por article-typepacktools/sps/validation/utils.py– Funções auxiliares (build_response)Exemplos de XML
XML Válido (deve passar sem erros):
XML Inválido – Caso 1: Sem <title> (CRITICAL)
Erro esperado: Elemento
<title>é mandatório em<sec>(requisito de acessibilidade)XML Inválido – Caso 2: <title> vazio (CRITICAL)
Erro esperado: Elemento
<title>não pode estar vazioXML Inválido – Caso 3: <title> apenas espaços (CRITICAL)
Erro esperado: Elemento
<title>não pode conter apenas espaçosXML Inválido – Caso 4: @sec-type com valor inválido (ERROR)
Erro esperado: Valor
"methodology"não está na lista de valores permitidos para@sec-type. Usemethodspara metodologias.XML Inválido – Caso 5: @sec-type="transcript" sem @id (ERROR)
Erro esperado: Seção com
@sec-type="transcript"deve ter atributo@idXML Inválido – Caso 6: research-article sem data-availability (ERROR)
Erro esperado: Artigo com
@article-type="research-article"deve conter seção@sec-type="data-availability"(Critério SciELO Brasil)XML Inválido – Caso 7: Seção combinada com formato incorreto (WARNING)
Erro esperado: (WARNING) Seções combinadas devem usar pipe
|como separador. Usematerials|methodsao invés dematerials methodsXML Inválido – Caso 8: transcript combinado (WARNING)
Erro esperado: (WARNING)
@sec-type="transcript"não deve ser combinado com outros tipos (sem pipe)XML Inválido – Caso 9: data-availability combinado (WARNING)
Erro esperado: (WARNING)
@sec-type="data-availability"não deve ser combinado com outros tipos (sem pipe)XML Inválido – Caso 10: Seção vazia (sem conteúdo) (WARNING)
Erro esperado: (WARNING) Seção deve conter pelo menos um parágrafo
<p>ou outro conteúdo após<title>XML Inválido – Caso 11: @sec-type vazio (ERROR)
Erro esperado: Atributo
@sec-typenão pode estar vazioXML Inválido – Caso 12: @sec-type com uppercase (ERROR)
Erro esperado: Valor de
@sec-typedeve estar em minúsculas. Usemethodsao invés deMethodsXML Inválido – Caso 13: case-report sem data-availability (ERROR)
Erro esperado: Artigo com
@article-type="case-report"deve conter seção@sec-type="data-availability"XML Inválido – Caso 14: Combinação com três tipos (WARNING)
Erro esperado: (WARNING) Seções combinadas normalmente usam apenas dois tipos. Verifique se
materials|methods|resultsé apropriado.XML Inválido – Caso 15: @id vazio em transcript (ERROR)
Erro esperado: Atributo
@idnão pode estar vazio em seção@sec-type="transcript"Padrão de Implementação
Diretrizes Gerais:
Seguir padrões existentes no repositório:
article_and_subarticles.py(validação condicional)<sec>e integrá-las ou complementá-lasInternacionalização (i18n):
advice_texteadvice_paramsembuild_response()article_contribs.pyque já implementam i18n completoValidações condicionais:
Nonequando não aplicáveldata-availabilitysó se aplica para tipos específicos de artigos@idsó se aplica quando@sec-type="transcript"filter_results()nos testes para removerNoneUso de
build_response():parent=self.data(dict completo, nunca string)responsedeve conter:"OK","WARNING","ERROR","CRITICAL"advice_texteadvice_paramspara i18nModelo de dados:
<sec>)sec_type,has_title,title_text,id,has_content,level,parent,parent_id,parent_langLista de valores permitidos:
SEC_TYPES = ["cases", "conclusions", "data-availability", "discussion", "intro", "materials", "methods", "results", "subjects", "supplementary-material", "transcript"]["transcript", "supplementary-material", "data-availability"]Detecção de article-type:
data-availability:["data-article", "brief-report", "case-report", "rapid-communication", "research-article", "review-article"]<article>Validação de seções combinadas:
|no valor de@sec-typeDetecção de nível de seção:
<body>/<sec>,<back>/<sec>, etc.<sec>/<sec>@sec-typenormalmente só se aplica a primeiro nívelValidação de conteúdo:
<title><p>,<sec>,<supplementary-material>, etc.Testes Esperados
Casos de teste obrigatórios:
Presença de <title>:
<sec>com<title>(OK)<sec>sem<title>(CRITICAL)<title>vazio (CRITICAL)<title>apenas espaços (CRITICAL)<title>com conteúdo válido (OK)Valores de @sec-type:
@sec-type(OK - opcional)cases(OK)conclusions(OK)data-availability(OK)discussion(OK)intro(OK)materials(OK)methods(OK)results(OK)subjects(OK)supplementary-material(OK)transcript(OK)"methodology"(ERROR)"introduction"(ERROR - use intro)"conclusion"(ERROR - use conclusions)"Methods"(ERROR)Seções combinadas:
materials|methods(OK)results|discussion(OK)materials|methods|results(WARNING - três tipos)materials methods(WARNING - falta pipe)materials-methods(ERROR - usar pipe não hífen)Tipos não combináveis:
transcriptsozinho (OK)transcript|discussion(WARNING - não combinar)data-availabilitysozinho (OK)data-availability|methods(WARNING - não combinar)supplementary-materialsozinho (OK)supplementary-material|results(WARNING - não combinar)Atributo @id em transcript:
transcriptcom@id(OK)transcriptsem@id(ERROR)transcriptcom@idvazio (ERROR)@id(OK - opcional)data-availability obrigatório:
research-articlecomdata-availability(OK)research-articlesemdata-availability(ERROR)case-reportcomdata-availability(OK)case-reportsemdata-availability(ERROR)brief-reportsemdata-availability(ERROR)rapid-communicationsemdata-availability(ERROR)data-articlesemdata-availability(ERROR)review-articlesemdata-availability(ERROR)editorialsemdata-availability(OK - não requerido)lettersemdata-availability(OK - não requerido)Presença de conteúdo:
<sec>com<title>e<p>(OK)<sec>com<title>e subseção (OK)<sec>com<title>e<supplementary-material>(OK)<sec>apenas com<title>(WARNING - sem conteúdo)Hierarquia:
Casos de borda:
<sec>vazio completo (CRITICAL - falta title)@sec-typevazio (ERROR)@sec-typeapenas espaços (ERROR)Total esperado: ~60 testes unitários
Estrutura de testes:
filter_results()para removerNonedos resultadosresponse(nãois_valid)Critérios de Aceite
O PR será aceito quando:
<sec>foi analisado e integrado ou substituído adequadamentesec_rules.jsoncriado com todos os níveis de errobuild_response,filter_results, validações condicionais)data-availabilitypor article-type funcionando@sec-typefuncionando@idobrigatório em transcript funcionandoReferências
Documentação SPS:
<sec>: Seção de Texto<sec sec-type="transcript"><supplementary-material>: Material Suplementar<article>Padrões JATS:
<sec><title>Acessibilidade:
Referências internas packtools:
article_and_subarticles.py(validação condicional por article-type)utils.py(build_response)Labels Sugeridas
enhancementvalidationSPS-1.10accessibilityscielo-brasilImpacto Esperado
Antes:
<sec>: X% (verificar validações existentes)<title>pode estar ausente (problema de acessibilidade)@sec-typepodem passardata-availabilitypode estar ausente em documentos que a requerem@idpode estar ausente em transcriçõesDepois:
<sec>: 70% (7 de 10 regras)<title>obrigatório (acessibilidade)@sec-typedata-availabilityem documentos indexáveis@idobrigatório em transcriçõesBenefícios:
@sec-typeantes da publicaçãoObservações importantes:
packtools/sps/validation/utils.py;packtools/sps/validation/xml_validations.pyepacktools/sps/validation/xml_validator.py