Skip to content

Add XMLCrossmarkPipe for Crossref XML with crossmark support#321

Draft
Copilot wants to merge 3 commits intomasterfrom
copilot/add-crossmark-xml-generation
Draft

Add XMLCrossmarkPipe for Crossref XML with crossmark support#321
Copilot wants to merge 3 commits intomasterfrom
copilot/add-crossmark-xml-generation

Conversation

Copy link
Contributor

Copilot AI commented Mar 6, 2026

O que esse PR faz?

Implementa o elemento <crossmark> na geração de XML para Crossref, permitindo que artigos SciELO registrem histórico de atualizações (errata, retratações, correções etc.) conforme o protocolo Crossmark.

Novos componentes:

  • CROSSMARK_UPDATE_TYPES — constante com os 12 tipos reconhecidos pelo Crossref: addendum, clarification, correction, corrigendum, erratum, expression_of_concern, new_edition, new_version, partial_retraction, removal, retraction, withdrawal

  • XMLCrossmarkPipe — novo pipe que:

    • É ignorado quando CROSSMARK_POLICY (env var) não está definida
    • Gera <crossmark_version>1</crossmark_version>
    • Gera <crossmark_policy> a partir da env var CROSSMARK_POLICY
    • Gera <crossmark_domains> a partir de raw.scielo_domain
    • Gera <updates> a partir do campo related_articles no JSON do artigo
    • Integra com XMLFundingDataPipe: dados de fomento são inseridos dentro do <crossmark> quando ele existe

O pipe foi inserido no pipeline de export.py após XMLPermissionsPipe.

Formato de related_articles esperado no JSON do artigo:

{
  "related_articles": [
    {"type": "erratum",    "doi": "10.1590/erratum-001",    "date": "2024-06"},
    {"type": "retraction", "doi": "10.1590/retraction-001", "date": "2025-03"}
  ]
}

XML gerado:

<crossmark>
  <crossmark_version>1</crossmark_version>
  <crossmark_policy>https://www.scielo.br/crossmark-policy</crossmark_policy>
  <crossmark_domains>
    <crossmark_domain><domain>www.scielo.br</domain></crossmark_domain>
  </crossmark_domains>
  <crossmark_domain_exclusive>true</crossmark_domain_exclusive>
  <updates>
    <update type="erratum">
      <doi>10.1590/erratum-001</doi>
      <date media_type="online"><month>06</month><year>2024</year></date>
    </update>
  </updates>
</crossmark>

Onde a revisão poderia começar?

articlemeta/export_crossref.py — classe XMLCrossmarkPipe (adicionada antes de XMLFundingDataPipe).

Como este poderia ser testado manualmente?

  1. Definir a variável de ambiente CROSSMARK_POLICY=https://www.scielo.br/crossmark-policy
  2. Incluir related_articles no JSON de um artigo (ver formato acima)
  3. Gerar o XML Crossref via Export.pipeline_crossref() e verificar a presença e estrutura do elemento <crossmark>

Sem CROSSMARK_POLICY definida, o pipe é ignorado e nenhum <crossmark> é gerado.

Algum cenário de contexto que queira dar?

O XMLFundingDataPipe já tinha lógica para detectar e usar o elemento <crossmark> se presente (publisher_item.find("../crossmark")), mas o elemento nunca era criado. Este PR implementa o pipe que faltava.

Os dados de artigos relacionados (related_articles) devem ser populados na camada de ingestão do articlemeta — este PR define o contrato de formato esperado.

Screenshots

N/A

Quais são tickets relevantes?

Geração de XML para Crossref com crossmark

Referências

Original prompt

This section details on the original issue you should resolve

<issue_title>Geração de XML para Crossref com crossmark</issue_title>
<issue_description>### Descrição da tarefa

Criar para o formato do xmlcrossref, o elemento crossmark, considerando os campos de histórico e os campos de relacionamento entre outros artigos no json do articlemeta e/ou xylose.Document.

<doi_data>
  <doi>10.xxxx/xxxx</doi>
  <resource>http://sua-url.com/artigo</resource>
  <collection property="crawler-based">
    <item>
      <resource>http://sua-url.com/artigo.pdf</resource>
    </item>
  </collection>
  <!-- Início do Crossmark -->
  <crossmark>
    <crossmark_policy>10.xxxx/sua-politica-doi</crossmark_policy>
    <crossmark_domains>
      <crossmark_domain>
        <domain>sua-url.com</domain>
      </crossmark_domain>
    </crossmark_domains>
    <crossmark_domain_exclusive>true</crossmark_domain_exclusive>
    <!-- Opcional: metadados adicionais, como correções, podem ser incluídos aqui -->
  </crossmark>
</doi_data>

Crossmark – 12 tipos de update (Crossref)

Referência: https://www.crossref.org/documentation/crossmark/


1. addendum

Informação adicional relevante publicada após o artigo original.

<crossmark>
  <crossmark_version>1</crossmark_version>
  <crossmark_policy>https://www.scielo.br/crossmark-policy</crossmark_policy>
  <updates>
    <update type="addendum">
      <doi>10.1590/addendum-example-001</doi>
      <date media_type="online">
        <month>03</month><year>2025</year>
      </date>
    </update>
  </updates>
</crossmark>

2. clarification

Esclarece ambiguidade ou trecho confuso sem alterar conclusões.

<crossmark>
  <crossmark_version>1</crossmark_version>
  <crossmark_policy>https://www.scielo.br/crossmark-policy</crossmark_policy>
  <updates>
    <update type="clarification">
      <doi>10.1590/clarification-example-002</doi>
      <date media_type="online">
        <month>04</month><year>2025</year>
      </date>
    </update>
  </updates>
</crossmark>

3. correction

Termo genérico para correção de erro não classificado abaixo.

<crossmark>
  <crossmark_version>1</crossmark_version>
  <crossmark_policy>https://www.scielo.br/crossmark-policy</crossmark_policy>
  <updates>
    <update type="correction">
      <doi>10.1590/correction-example-003</doi>
      <date media_type="online">
        <month>05</month><year>2025</year>
      </date>
    </update>
  </updates>
</crossmark>

4. corrigendum

Correção formal de erros introduzidos pelos autores.

<crossmark>
  <crossmark_version>1</crossmark_version>
  <crossmark_policy>https://www.scielo.br/crossmark-policy</crossmark_policy>
  <updates>
    <update type="corrigendum">
      <doi>10.1590/corrigendum-example-004</doi>
      <date media_type="online">
        <month>06</month><year>2025</year>
      </date>
    </update>
  </updates>
</crossmark>

5. erratum

Correção de erros introduzidos pela editora (tipografia, etc.).

<crossmark>
  <crossmark_version>1</crossmark_version>
  <crossmark_policy>https://www.scielo.br/crossmark-policy</crossmark_policy>
  <updates>
    <update type="erratum">
      <doi>10.1590/erratum-example-005</doi>
      <date media_type="online">
        <month>07</month><year>2025</year>
      </date>
    </update>
  </updates>
</crossmark>

6. expression_of_concern

Editor expressa preocupação com integridade dos dados/metodologia.

<crossmark>
  <crossmark_version>1</crossmark_version>
  <crossmark_policy>https://www.scielo.br/crossmark-policy</crossmark_policy>
  <updates>
    <update type="expression_of_concern">
      <doi>10.1590/eoc-example-006</doi>
      <date media_type="online">
        <month>08</month><year>2025</year>
      </date>
    </update>
  </updates>
</crossmark>

7. new_edition

Nova edição do trabalho (livro/monografia); substitui a anterior.

<crossmark>
  <crossmark_version>1</crossmark_version>
  <crossmark_policy>https://www.scielo.br/crossmark-policy</crossmark_policy>
  <updates>
    <update type="new_edition">
      <doi>10.1590/new-edition-example-007</doi>
      <date media_type="online">
        <month>09</month><year>2025</year>
      </date>
    </update>
  </updates>
</crossmark>

8. new_version

Nova versão do registro (preprint → VoR, dataset atualizado, etc.).

<crossmark>
  <crossmark_version>1</crossmark_version>
  <crossmark_policy>https://www.scielo.br/crossmark-policy</crossmark_policy>
  <updates>
    <update type="new_version">
      <doi>10.1590/new-version-example-008</doi>
      <date media_type="online">
        <month>10</month><year>2025</year>
      </date>
    </update>
  </updates>
</crossmark>

9. partial_retraction

Retratação de parte do artigo (seção, figura, experimento).

<crossmark>
  <crossmark_version>1</crossmark_version>
  <crossmark_policy>https://www.scielo.b...

</details>



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

- Fixes scieloorg/articles_meta#318

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

✨ Let Copilot coding agent [set things up for you](https://github.com/scieloorg/articles_meta/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 March 6, 2026 10:36
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 XML generation for Crossref with Crossmark Add XMLCrossmarkPipe for Crossref XML with crossmark support Mar 6, 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