Objetivo
Implementar validações para o elemento <related-article> conforme a especificação SPS 1.10, aumentando a conformidade de X% para 70% (8 de 12 regras).
Nota: Algumas validações para <related-article> 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 <related-article> indica documentos relacionados ao que está sendo publicado (erratas, retratações, adendos, comentários, cartas, pareceres, preprints). Quando o documento relacionado também está publicado em SciELO, deve-se adicionar o <related-article> em ambos os documentos. Validações corretas garantem presença de atributos obrigatórios, valores corretos, e uso adequado de DOI vs URI.
Conformidade atual: X de 12 regras implementadas (X%)
Meta após implementação: 8 de 12 regras (70%)
Documentação SPS
Referência oficial: https://docs.google.com/document/d/1GTv4Inc2LS_AXY-ToHT3HmO66UT0VAHWJNOIqzBNSgA/edit?tab=t.0#heading=h.relatedarticle
Regras principais conforme SPS 1.10:
-
Ocorrência:
<related-article> pode aparecer zero ou mais vezes em <article-meta> e <front-stub>
-
Atributos obrigatórios:
@related-article-type (obrigatório)
@id (obrigatório)
@ext-link-type (obrigatório, valores: doi ou uri)
-
Valores permitidos para @related-article-type:
corrected-article - Errata
correction-forward - Documento corrigido pela errata
retracted-article - Retratação (total ou parcial)
retraction-forward - Documento retratado totalmente
partial-retraction - Documento retratado parcialmente
addended-article - Adendo
addendum - Documento objeto do adendo
expression-of-concern - Manifestação de preocupação
object-of-concern - Documento objeto de manifestação de preocupação
commentary-article - Comentário ou carta
commentary - Documento comentado ou resposta
reply - Resposta (para comentário ou carta)
letter - Carta ou resposta para carta
reviewed-article - Parecer (revisão por pares)
reviewer-report - Documento com parecer
preprint - Manuscrito em servidor de preprints
-
Regras de @ext-link-type:
- Padrão:
@ext-link-type="doi"
- Exceções que permitem
uri:
@related-article-type="reviewer-report" (parecer com link externo)
@related-article-type="preprint" (preprint)
- Preferência: usar
doi se existir, mesmo para exceções
-
Ordem obrigatória de atributos:
@related-article-type
@id
@xlink:href
@ext-link-type
-
Posicionamento:
- Deve ser inserido abaixo de
<permissions> ou acima de <counts>
-
Tradução (<sub-article>):
- Documentos com tradução devem ter
<related-article> também no idioma traduzido
- Não repetir mesmo
@id de <article> em <sub-article>
Regras a Implementar
P0 – Críticas (implementar obrigatoriamente)
| # |
Regra |
Nível |
Descrição |
| 1 |
Validar presença de @related-article-type |
CRITICAL |
O atributo @related-article-type é obrigatório em <related-article> |
| 2 |
Validar presença de @id |
CRITICAL |
O atributo @id é obrigatório em <related-article> |
| 3 |
Validar presença de @ext-link-type |
CRITICAL |
O atributo @ext-link-type é obrigatório em <related-article> |
| 4 |
Validar valores permitidos de @related-article-type |
ERROR |
O valor de @related-article-type deve estar na lista de valores permitidos |
| 5 |
Validar valores permitidos de @ext-link-type |
ERROR |
O valor de @ext-link-type deve ser "doi" ou "uri" |
| 6 |
Validar uso de doi como padrão |
WARNING |
@ext-link-type deve ser "doi" (exceto para reviewer-report e preprint que podem usar "uri") |
P1 – Importantes (implementar se possível)
| # |
Regra |
Nível |
Descrição |
| 7 |
Validar presença de @xlink:href |
ERROR |
O atributo @xlink:href é obrigatório em <related-article> |
| 8 |
Recomendar ordem de atributos |
INFO |
Atributos devem seguir a ordem: @related-article-type, @id, @xlink:href, @ext-link-type |
P2 – Futuras (fora do escopo deste Issue)
| # |
Regra |
Motivo de exclusão |
| 9 |
Validar posicionamento após <permissions> ou antes de <counts> |
Média complexidade - requer análise de ordem de elementos irmãos |
| 10 |
Validar presença em <sub-article> quando há no artigo principal |
Alta complexidade - requer análise cross-document |
| 11 |
Validar unicidade de @id entre <article> e <sub-article> |
Média complexidade - requer análise cross-document |
| 12 |
Validar formato de DOI em @xlink:href quando @ext-link-type="doi" |
Baixa prioridade - validação de formato já pode existir em outras partes |
Arquivos a Criar/Modificar
Avaliar existentes (podem ter validações parciais):
packtools/sps/models/related_article.py ou similar – Verificar se modelo existe
packtools/sps/validation/related_article.py – Verificar validações existentes
packtools/sps/validation/rules/related_article_rules.json ou similar – Verificar configuração
Criar (se não existirem):
packtools/sps/models/related_article.py – Modelo de extração de dados
packtools/sps/validation/related_article.py – Validações
packtools/sps/validation/rules/related_article_rules.json – Configuração de níveis de erro
tests/sps/validation/test_related_article.py – Testes unitários
Referenciar (implementações similares):
packtools/sps/validation/ext_link.py – Validação de links similar
packtools/sps/validation/utils.py – Funções auxiliares (build_response)
Exemplos de XML
XML Válido (deve passar sem erros):
<!-- Exemplo 1: Preprint relacionado (pode usar uri) -->
<article-meta>
<related-article related-article-type="preprint"
id="r1"
xlink:href="https://preprints.scielo.org/index.php/scielo/preprint/view/11166"
ext-link-type="uri"/>
</article-meta>
<!-- Exemplo 2: Errata relacionada (usar doi) -->
<article-meta>
<related-article related-article-type="corrected-article"
id="r1"
xlink:href="10.1590/123436773822"
ext-link-type="doi"/>
</article-meta>
<!-- Exemplo 3: Documento corrigido por errata -->
<article-meta>
<related-article related-article-type="correction-forward"
id="r1"
xlink:href="10.1590/123456720182998e"
ext-link-type="doi"/>
</article-meta>
<!-- Exemplo 4: Resposta para carta -->
<article-meta>
<related-article related-article-type="letter"
id="r1"
xlink:href="10.1590/123456720182998e"
ext-link-type="doi"/>
</article-meta>
<!-- Exemplo 5: Carta com múltiplos relacionamentos -->
<article-meta>
<related-article related-article-type="commentary"
id="r1"
xlink:href="10.1590/123456720182998e"
ext-link-type="doi"/>
<related-article related-article-type="reply"
id="r2"
xlink:href="10.1590/123456720182999r"
ext-link-type="doi"/>
</article-meta>
<!-- Exemplo 6: Retratação total -->
<article-meta>
<related-article related-article-type="retracted-article"
id="r1"
xlink:href="10.1590/original-article"
ext-link-type="doi"/>
</article-meta>
<!-- Exemplo 7: Documento retratado -->
<article-meta>
<related-article related-article-type="retraction-forward"
id="r1"
xlink:href="10.1590/retraction-notice"
ext-link-type="doi"/>
</article-meta>
<!-- Exemplo 8: Retratação parcial -->
<article-meta>
<related-article related-article-type="partial-retraction"
id="r1"
xlink:href="10.1590/partial-retraction"
ext-link-type="doi"/>
</article-meta>
<!-- Exemplo 9: Adendo -->
<article-meta>
<related-article related-article-type="addended-article"
id="r1"
xlink:href="10.1590/original-article"
ext-link-type="doi"/>
</article-meta>
<!-- Exemplo 10: Documento objeto de adendo -->
<article-meta>
<related-article related-article-type="addendum"
id="r1"
xlink:href="10.1590/addendum-notice"
ext-link-type="doi"/>
</article-meta>
<!-- Exemplo 11: Manifestação de preocupação -->
<article-meta>
<related-article related-article-type="expression-of-concern"
id="r1"
xlink:href="10.1590/original-article"
ext-link-type="doi"/>
</article-meta>
<!-- Exemplo 12: Documento objeto de manifestação -->
<article-meta>
<related-article related-article-type="object-of-concern"
id="r1"
xlink:href="10.1590/concern-notice"
ext-link-type="doi"/>
</article-meta>
<!-- Exemplo 13: Parecer (revisão por pares) com uri -->
<article-meta>
<related-article related-article-type="reviewer-report"
id="r1"
xlink:href="https://example.com/review/123"
ext-link-type="uri"/>
</article-meta>
<!-- Exemplo 14: Artigo revisado -->
<article-meta>
<related-article related-article-type="reviewed-article"
id="r1"
xlink:href="10.1590/original-article"
ext-link-type="doi"/>
</article-meta>
<!-- Exemplo 15: Comentário -->
<article-meta>
<related-article related-article-type="commentary-article"
id="r1"
xlink:href="10.1590/original-article"
ext-link-type="doi"/>
</article-meta>
XML Inválido – Caso 1: Sem @related-article-type (CRITICAL)
<article-meta>
<related-article id="r1"
xlink:href="10.1590/123456"
ext-link-type="doi"/>
</article-meta>
Erro esperado: Atributo @related-article-type é obrigatório em <related-article>
XML Inválido – Caso 2: Sem @id (CRITICAL)
<article-meta>
<related-article related-article-type="corrected-article"
xlink:href="10.1590/123456"
ext-link-type="doi"/>
</article-meta>
Erro esperado: Atributo @id é obrigatório em <related-article>
XML Inválido – Caso 3: Sem @ext-link-type (CRITICAL)
<article-meta>
<related-article related-article-type="corrected-article"
id="r1"
xlink:href="10.1590/123456"/>
</article-meta>
Erro esperado: Atributo @ext-link-type é obrigatório em <related-article>
XML Inválido – Caso 4: @related-article-type com valor inválido (ERROR)
<article-meta>
<related-article related-article-type="related"
id="r1"
xlink:href="10.1590/123456"
ext-link-type="doi"/>
</article-meta>
Erro esperado: Valor "related" não está na lista de valores permitidos para @related-article-type
XML Inválido – Caso 5: @ext-link-type com valor inválido (ERROR)
<article-meta>
<related-article related-article-type="corrected-article"
id="r1"
xlink:href="10.1590/123456"
ext-link-type="url"/>
</article-meta>
Erro esperado: Valor "url" não permitido para @ext-link-type. Valores permitidos: "doi", "uri"
XML Inválido – Caso 6: Usando uri quando deveria usar doi (WARNING)
<article-meta>
<related-article related-article-type="corrected-article"
id="r1"
xlink:href="https://doi.org/10.1590/123456"
ext-link-type="uri"/>
</article-meta>
Erro esperado: (WARNING) Para @related-article-type="corrected-article", use @ext-link-type="doi". Valor "uri" só é permitido para reviewer-report e preprint
XML Inválido – Caso 7: Sem @xLink:href (ERROR)
<article-meta>
<related-article related-article-type="corrected-article"
id="r1"
ext-link-type="doi"/>
</article-meta>
Erro esperado: Atributo @xlink:href é obrigatório em <related-article>
XML Inválido – Caso 8: Atributos vazios (CRITICAL)
<article-meta>
<related-article related-article-type=""
id=""
xlink:href=""
ext-link-type=""/>
</article-meta>
Erro esperado: Atributos obrigatórios não podem estar vazios
XML Inválido – Caso 9: @related-article-type apenas espaços (CRITICAL)
<article-meta>
<related-article related-article-type=" "
id="r1"
xlink:href="10.1590/123456"
ext-link-type="doi"/>
</article-meta>
Erro esperado: Atributo @related-article-type não pode conter apenas espaços
XML Inválido – Caso 10: Valor com uppercase (ERROR)
<article-meta>
<related-article related-article-type="Corrected-Article"
id="r1"
xlink:href="10.1590/123456"
ext-link-type="doi"/>
</article-meta>
Erro esperado: Valor de @related-article-type deve estar em minúsculas. Use corrected-article ao invés de Corrected-Article
XML Inválido – Caso 11: @ext-link-type uppercase (ERROR)
<article-meta>
<related-article related-article-type="corrected-article"
id="r1"
xlink:href="10.1590/123456"
ext-link-type="DOI"/>
</article-meta>
Erro esperado: Valor de @ext-link-type deve estar em minúsculas. Use doi ao invés de DOI
XML Inválido – Caso 12: @xLink:href vazio (ERROR)
<article-meta>
<related-article related-article-type="corrected-article"
id="r1"
xlink:href=""
ext-link-type="doi"/>
</article-meta>
Erro esperado: Atributo @xlink:href não pode estar vazio
XML Inválido – Caso 13: Preprint com doi mas poderia ser uri (OK - preferência)
<article-meta>
<related-article related-article-type="preprint"
id="r1"
xlink:href="10.12345/preprint.123"
ext-link-type="doi"/>
</article-meta>
Nota: Este é válido (OK) porque doi é sempre preferido, mesmo para preprint
Padrão de Implementação
Diretrizes Gerais:
-
Seguir padrões existentes no repositório:
- Consultar implementações similares como
ext_link.py (validação de links)
- Usar estrutura de classes já estabelecida no packtools
- IMPORTANTE: Verificar se já existem validações parciais para
<related-article> 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 preferência por
doi é WARNING, não ERROR
- Exemplo: validação de ordem de atributos é INFO
- 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
<related-article>)
- Cada dict deve conter:
related_article_type, id, xlink_href, ext_link_type, parent, parent_id, parent_lang
-
Lista de valores permitidos:
- Criar constante com valores de
@related-article-type: ["corrected-article", "correction-forward", "retracted-article", "retraction-forward", "partial-retraction", "addended-article", "addendum", "expression-of-concern", "object-of-concern", "commentary-article", "commentary", "reply", "letter", "reviewed-article", "reviewer-report", "preprint"]
- Criar constante com valores de
@ext-link-type: ["doi", "uri"]
-
Validação de uso de doi vs uri:
- Tipos que permitem
uri: ["reviewer-report", "preprint"]
- Para outros tipos, se
ext-link-type="uri", gerar WARNING recomendando doi
- Comparação deve ser case-sensitive (valores devem ser minúsculos)
-
Validação de ordem de atributos:
- Ordem esperada:
related-article-type, id, xlink:href, ext-link-type
- Nível: INFO (informativo, não bloqueia)
- Pode usar análise de XML source ou ordem de atributos do elemento
Testes Esperados
Casos de teste obrigatórios:
Atributos obrigatórios:
Valores de @related-article-type:
Valores de @ext-link-type:
Preferência doi vs uri:
Múltiplos related-articles:
Contextos:
Casos de borda:
Total esperado: ~50 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 (atributos, valores, preferências, múltiplos)
Critérios de Aceite
O PR será aceito quando:
Referências
Documentação SPS:
Padrões JATS:
Referências internas packtools:
- Internacionalização: Consultar conversas anteriores sobre implementação de i18n
- Implementações similares:
ext_link.py (validação de links)
- 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
<related-article>: X% (verificar validações existentes)
- Atributos obrigatórios podem estar ausentes
- Valores incorretos podem passar sem detecção
- Uso inadequado de
uri vs doi não alertado
- Tipos de relacionamento inválidos não detectados
Depois:
- Conformidade SPS 1.10 para
<related-article>: 70% (8 de 12 regras)
- Validação CRITICAL de atributos obrigatórios
- Validação ERROR de valores permitidos
- Validação WARNING de preferência por
doi
- ~50 testes unitários garantindo qualidade
- Internacionalização completa (PT/EN/ES)
Benefícios:
- Melhora a qualidade dos XMLs SciELO
- Garante relacionamentos corretos entre documentos
- Detecta tipos inválidos de relacionamento
- Promove uso de DOI (mais estável que URIs)
- Facilita navegação entre documentos relacionados
- Melhora rastreabilidade de erratas, retratações, etc.
- Garante conformidade com padrões SPS
- Facilita processamento automatizado de relacionamentos
- Melhora experiência do usuário na plataforma SciELO
- 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
<related-article>conforme a especificação SPS 1.10, aumentando a conformidade de X% para 70% (8 de 12 regras).Nota: Algumas validações para
<related-article>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
<related-article>indica documentos relacionados ao que está sendo publicado (erratas, retratações, adendos, comentários, cartas, pareceres, preprints). Quando o documento relacionado também está publicado em SciELO, deve-se adicionar o<related-article>em ambos os documentos. Validações corretas garantem presença de atributos obrigatórios, valores corretos, e uso adequado de DOI vs URI.Conformidade atual: X de 12 regras implementadas (X%)
Meta após implementação: 8 de 12 regras (70%)
Documentação SPS
Referência oficial: https://docs.google.com/document/d/1GTv4Inc2LS_AXY-ToHT3HmO66UT0VAHWJNOIqzBNSgA/edit?tab=t.0#heading=h.relatedarticle
Regras principais conforme SPS 1.10:
Ocorrência:
<related-article>pode aparecer zero ou mais vezes em<article-meta>e<front-stub>Atributos obrigatórios:
@related-article-type(obrigatório)@id(obrigatório)@ext-link-type(obrigatório, valores:doiouuri)Valores permitidos para
@related-article-type:corrected-article- Erratacorrection-forward- Documento corrigido pela errataretracted-article- Retratação (total ou parcial)retraction-forward- Documento retratado totalmentepartial-retraction- Documento retratado parcialmenteaddended-article- Adendoaddendum- Documento objeto do adendoexpression-of-concern- Manifestação de preocupaçãoobject-of-concern- Documento objeto de manifestação de preocupaçãocommentary-article- Comentário ou cartacommentary- Documento comentado ou respostareply- Resposta (para comentário ou carta)letter- Carta ou resposta para cartareviewed-article- Parecer (revisão por pares)reviewer-report- Documento com parecerpreprint- Manuscrito em servidor de preprintsRegras de
@ext-link-type:@ext-link-type="doi"uri:@related-article-type="reviewer-report"(parecer com link externo)@related-article-type="preprint"(preprint)doise existir, mesmo para exceçõesOrdem obrigatória de atributos:
@related-article-type@id@xlink:href@ext-link-typePosicionamento:
<permissions>ou acima de<counts>Tradução (
<sub-article>):<related-article>também no idioma traduzido@idde<article>em<sub-article>Regras a Implementar
P0 – Críticas (implementar obrigatoriamente)
@related-article-type@related-article-typeé obrigatório em<related-article>@id@idé obrigatório em<related-article>@ext-link-type@ext-link-typeé obrigatório em<related-article>@related-article-type@related-article-typedeve estar na lista de valores permitidos@ext-link-type@ext-link-typedeve ser"doi"ou"uri"doicomo padrão@ext-link-typedeve ser"doi"(exceto parareviewer-reportepreprintque podem usar"uri")P1 – Importantes (implementar se possível)
@xlink:href@xlink:hrefé obrigatório em<related-article>@related-article-type,@id,@xlink:href,@ext-link-typeP2 – Futuras (fora do escopo deste Issue)
<permissions>ou antes de<counts><sub-article>quando há no artigo principal@identre<article>e<sub-article>@xlink:hrefquando@ext-link-type="doi"Arquivos a Criar/Modificar
Avaliar existentes (podem ter validações parciais):
packtools/sps/models/related_article.pyou similar – Verificar se modelo existepacktools/sps/validation/related_article.py– Verificar validações existentespacktools/sps/validation/rules/related_article_rules.jsonou similar – Verificar configuraçãoCriar (se não existirem):
packtools/sps/models/related_article.py– Modelo de extração de dadospacktools/sps/validation/related_article.py– Validaçõespacktools/sps/validation/rules/related_article_rules.json– Configuração de níveis de errotests/sps/validation/test_related_article.py– Testes unitáriosReferenciar (implementações similares):
packtools/sps/validation/ext_link.py– Validação de links similarpacktools/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 @related-article-type (CRITICAL)
Erro esperado: Atributo
@related-article-typeé obrigatório em<related-article>XML Inválido – Caso 2: Sem @id (CRITICAL)
Erro esperado: Atributo
@idé obrigatório em<related-article>XML Inválido – Caso 3: Sem @ext-link-type (CRITICAL)
Erro esperado: Atributo
@ext-link-typeé obrigatório em<related-article>XML Inválido – Caso 4: @related-article-type com valor inválido (ERROR)
Erro esperado: Valor
"related"não está na lista de valores permitidos para@related-article-typeXML Inválido – Caso 5: @ext-link-type com valor inválido (ERROR)
Erro esperado: Valor
"url"não permitido para@ext-link-type. Valores permitidos:"doi","uri"XML Inválido – Caso 6: Usando uri quando deveria usar doi (WARNING)
Erro esperado: (WARNING) Para
@related-article-type="corrected-article", use@ext-link-type="doi". Valor"uri"só é permitido parareviewer-reportepreprintXML Inválido – Caso 7: Sem @xLink:href (ERROR)
Erro esperado: Atributo
@xlink:hrefé obrigatório em<related-article>XML Inválido – Caso 8: Atributos vazios (CRITICAL)
Erro esperado: Atributos obrigatórios não podem estar vazios
XML Inválido – Caso 9: @related-article-type apenas espaços (CRITICAL)
Erro esperado: Atributo
@related-article-typenão pode conter apenas espaçosXML Inválido – Caso 10: Valor com uppercase (ERROR)
Erro esperado: Valor de
@related-article-typedeve estar em minúsculas. Usecorrected-articleao invés deCorrected-ArticleXML Inválido – Caso 11: @ext-link-type uppercase (ERROR)
Erro esperado: Valor de
@ext-link-typedeve estar em minúsculas. Usedoiao invés deDOIXML Inválido – Caso 12: @xLink:href vazio (ERROR)
Erro esperado: Atributo
@xlink:hrefnão pode estar vazioXML Inválido – Caso 13: Preprint com doi mas poderia ser uri (OK - preferência)
Nota: Este é válido (OK) porque doi é sempre preferido, mesmo para preprint
Padrão de Implementação
Diretrizes Gerais:
Seguir padrões existentes no repositório:
ext_link.py(validação de links)<related-article>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áveldoié WARNING, não ERRORfilter_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:
<related-article>)related_article_type,id,xlink_href,ext_link_type,parent,parent_id,parent_langLista de valores permitidos:
@related-article-type:["corrected-article", "correction-forward", "retracted-article", "retraction-forward", "partial-retraction", "addended-article", "addendum", "expression-of-concern", "object-of-concern", "commentary-article", "commentary", "reply", "letter", "reviewed-article", "reviewer-report", "preprint"]@ext-link-type:["doi", "uri"]Validação de uso de doi vs uri:
uri:["reviewer-report", "preprint"]ext-link-type="uri", gerar WARNING recomendandodoiValidação de ordem de atributos:
related-article-type,id,xlink:href,ext-link-typeTestes Esperados
Casos de teste obrigatórios:
Atributos obrigatórios:
<related-article>com todos os atributos (OK)@related-article-type(CRITICAL)@id(CRITICAL)@ext-link-type(CRITICAL)@xlink:href(ERROR)Valores de @related-article-type:
corrected-article(OK)correction-forward(OK)retracted-article(OK)retraction-forward(OK)partial-retraction(OK)addended-article(OK)addendum(OK)expression-of-concern(OK)object-of-concern(OK)commentary-article(OK)commentary(OK)reply(OK)letter(OK)reviewed-article(OK)reviewer-report(OK)preprint(OK)"related"(ERROR)"errata"(ERROR - use corrected-article)"Corrected-Article"(ERROR)Valores de @ext-link-type:
@ext-link-type="doi"(OK)@ext-link-type="uri"(OK para reviewer-report/preprint)"url"(ERROR)"link"(ERROR)"DOI"(ERROR)"URI"(ERROR)Preferência doi vs uri:
corrected-articlecomdoi(OK)corrected-articlecomuri(WARNING - use doi)preprintcomdoi(OK - preferido)preprintcomuri(OK)reviewer-reportcomdoi(OK - preferido)reviewer-reportcomuri(OK)retracted-articlecomuri(WARNING - use doi)addendumcomuri(WARNING - use doi)Múltiplos related-articles:
<related-article>(OK)<related-article>(OK)<related-article>(OK)<related-article>(OK - zero ou mais vezes)Contextos:
<related-article>em<article-meta>(OK)<related-article>em<front-stub>(OK)Casos de borda:
@idcom caracteres especiais (OK)@xlink:hrefcom URL completa (OK)@xlink:hrefapenas com DOI (OK)@xlink:hrefcom prefixo https://doi.org/ (OK)Total esperado: ~50 testes unitários
Estrutura de testes:
filter_results()para removerNonedos resultadosresponse(nãois_valid)Critérios de Aceite
O PR será aceito quando:
<related-article>foi analisado e integrado ou substituído adequadamenterelated_article_rules.jsoncriado com todos os níveis de errobuild_response,filter_results, validações condicionais)<related-article>(zero ou mais vezes)Referências
Documentação SPS:
<related-article>: Relação entre DocumentosPadrões JATS:
<related-article>Referências internas packtools:
ext_link.py(validação de links)utils.py(build_response)Labels Sugeridas
enhancementvalidationSPS-1.10good-first-issueImpacto Esperado
Antes:
<related-article>: X% (verificar validações existentes)urivsdoinão alertadoDepois:
<related-article>: 70% (8 de 12 regras)doiBenefícios:
Observações importantes:
packtools/sps/validation/utils.py;packtools/sps/validation/xml_validations.pyepacktools/sps/validation/xml_validator.py