Skip to content

Repository files navigation

Crossref Conference Proceedings — OJS plugin

OJS Version License

⬇️ Install package: OJS 3.5 — or browse all Releases.

A DOI registration agency plugin for Open Journal Systems (OJS) that deposits with Crossref as conference proceedings<conference>, <event_metadata>, <proceedings_series_metadata> and <conference_paper> — instead of as a journal.

Developed and maintained by OJSBR. See the Credits & authorship section below.

Compatibility & branches

OJS version Branch Plugin release
OJS 3.5.x stable-3_5_0 (default) 1.0.0.0

The problem

A great many OJS installations are not journals at all: they are the proceedings of an annual congress. Volume 6 is the sixth edition of the event, the "articles" are papers presented at it, and the thing has a date, a city and a promoting association.

Crossref has a record type for exactly this. OJS cannot produce it. The core Crossref plugin only knows how to emit <journal> — there is no code path to <conference> — so proceedings are deposited as if each edition were an issue of a periodical. The event name, its edition number, when and where it happened: none of it reaches Crossref, and none of it reaches anything that reads Crossref afterwards.

What it does

Registers itself as a DOI registration agency, so proceedings and papers are deposited from the ordinary DOIs page — bulk selection, status badges, retry of failures, automatic deposit on publication — rather than from a separate import/export screen.

doi_batch
 └ body
    └ conference
       ├ event_metadata
       │    conference_name        issue title
       │    conference_theme       issue field
       │    conference_acronym     issue field
       │    conference_sponsor     plugin setting
       │    conference_number      issue field, defaults to the volume
       │    conference_location    city, country
       │    conference_date        start/end attributes
       ├ proceedings_series_metadata
       │    series_metadata        journal name + ISSN
       │    proceedings_title      issue title
       │    volume                 issue volume
       │    publisher_name         publisherInstitution
       │    publication_date       issue date published
       │    noisbn                 reason="simple_series"
       │    doi_data               issue DOI
       └ conference_paper …        one per submission

proceedings_series_metadata has two branches in the Crossref schema. This plugin takes the one carrying proceedings_title and volume; that branch also makes an ISBN declaration mandatory, hence the noisbn — proceedings identified by an ISSN have no ISBN. The other branch would save two elements and cost the volume and the proceedings DOI.

Papers are built by the core Crossref filter and re-emitted as conference_paper, so abstracts, pages, ORCIDs, ROR affiliations, alt-names, licence, crawler-based and text-mining collections and component lists behave exactly as in a journal deposit, and keep tracking whatever PKP improves upstream. Two differences are forced by the schema:

  • contributors comes before titles — the reverse of journal_article;
  • only one <titles> is allowed, so on multilingual submissions the non-primary titles are dropped. The core filter puts the submission locale first, so the one kept is the right one.

Event metadata, and the TIB plugin

Crossref's event_metadata needs seven pieces of data OJS has no native field for. Six are already provided by TIB's Conference publishing plugin, so this plugin reuses its exact issue_settings keys instead of inventing parallel ones:

Field Owner
conferenceDateBegin, conferenceDateEnd TIB
conferencePlaceStreet, conferencePlaceCity, conferencePlaceCountry TIB
conferenceOnline TIB
conferenceAcronym, conferenceNumber, conferenceTheme this plugin

The TIB plugin is optional. When it is enabled, this plugin renders only its own three fields and reads the other six off the issue. When it is disabled, this plugin takes over all nine — registering Schema::get::issue and issuedao::getAdditionalFieldNames as well as the form, because without those the values stay in the database but stop being loaded onto the Issue, and deposits would quietly lose the date and the place.

Turning the TIB plugin on or off never deletes anything: the issue_settings rows are shared and survive in both directions.

Validated against TIB stable-3_5_0 at commit 88eb2492. There is no 3.5 tag upstream, only that branch, so check the key names in its classes/PluginSchema.php if it moves.

This plugin does not touch the public issue page. Showing the event date and place there is the TIB plugin's job, or the theme's.

Installation

  1. Download the package from the link at the top of this README.
  2. In OJS, go to Settings → Website → Plugins → Upload a new plugin and upload the .tar.gz.
  3. Enable Crossref: Conference Proceedings in the plugin list.

Installing by hand

Unpacking the plugin into plugins/generic/ yourself is not equivalent. Uploading through the interface runs the version installer, which fires Installer::postInstall and registers the plugin's export filters. Dropping the files on disk and enabling the plugin does not: the row lands in versions, but filter/filterConfig.xml is never processed, and every export then fails with Call to a member function setDeployment() on null, because the filter cannot be found by its symbolic name.

If you installed by hand, register the filters once:

php plugins/generic/crossrefConference/tools/installFilters.php

Add --reinstall if you have edited filterConfig.xmlinstallFilterGroups() skips groups that already exist, so an edited output type is otherwise ignored. Run it as the account that owns the files, never as root.

Configuration

Settings → Distribution → DOIs.

  1. Set the DOI prefix.
  2. Choose Crossref (Conference Proceedings) as the registration agency. Only one agency can be configured per journal — this one replaces the core Crossref plugin for that journal, which is the right trade for a journal that publishes nothing but proceedings.
  3. Enable DOIs for Issues as well as Articles. Issue DOIs are required: the proceedings DOI is what the papers hang off.
  4. Fill in the depositor name, depositor email, Crossref credentials, and the sponsoring organization.

The journal also needs a publisher name and at least one ISSN; the settings page warns if either is missing.

Then, per edition, in Issues → (the issue) → Issue Data:

  • set the issue title to the name of that specific event — "VI Congresso Brasileiro de Patologia das Construções", not the series name — because both conference_name and proceedings_title come from it;
  • fill in the acronym, the edition number (blank uses the volume) and the theme.

Schema and validation

Crossref 5.4.0, matching the core plugin in OJS 3.5.0-5. Note that metadata_distribution_opts, present on conference_paper in 4.3.6 and carried by some older conference plugins, was removed in 5.x and will be rejected.

The filter groups declare outputType="xml::*" — no validation — rather than xml::schema(crossref5.4.0.xsd). The filter framework validates by passing that URL to DOMDocument::schemaValidate(), which makes libxml fetch it over the network. Where allow_url_fopen is off this fails, and the failure is not harmless: the libxml error buffer ends up non-empty, exportXML() reports it as xmlErrors, and PKPDoiController turns that into HTTP 400 — an Export button that silently does nothing. The core Crossref plugin has the same defect on such a server.

Even where the fetch works it drags in a multi-megabyte schema chain (Crossref → JATS → MathML at w3.org) on every export, and a crossref.org outage breaks the button. Core treats this validation as opt-in for the same reason: the import/export UI defaults to $noValidation = true unless the operator asks for it. The real check is Crossref's own validation on deposit, whose failures this plugin surfaces through the DOI status.

To validate output during development, use a local copy of the schema:

xmllint --noout --schema crossref5.4.0.xsd export.xml

Assembling that local copy means patching the JATS module's imports for xlink.xsd, xml.xsd and ali.xsd by hand.

Requirements

  • OJS 3.5.0
  • The core crossref plugin present on disk — this plugin extends its filters and its deposit client. It ships with OJS, so nothing extra is needed, and it does not have to be enabled.

Credits & authorship

  • Developed and maintained by OJSBR — original plugin.
  • The paper-level metadata is produced by PKP's Crossref plugin, which this one extends.
  • Interoperates with withanage/conference (TIB).
  • Distributed under the GNU GPL v3.

Contributing

Issues and pull requests are welcome. Please target the branch matching the OJS version you are working against. See CONTRIBUTING.md.

License

Distributed under the GNU GPL v3. See LICENSE and docs/COPYING.


🇧🇷 Português

Plugin de agência de registro de DOI para o Open Journal Systems (OJS) que deposita no Crossref como anais de evento<conference>, <event_metadata>, <proceedings_series_metadata> e <conference_paper> — em vez de como periódico.

Desenvolvido e mantido pela OJSBR. Veja a seção Créditos e autoria abaixo.

Compatibilidade e branches

Versão do OJS Branch Release do plugin
OJS 3.5.x stable-3_5_0 (padrão) 1.0.0.0

O problema

Boa parte das instalações de OJS não é revista: são os anais de um congresso anual. O volume 6 é a sexta edição do evento, os "artigos" são trabalhos apresentados nele, e a coisa tem data, cidade e uma associação promotora.

O Crossref tem um tipo de registro exatamente para isso. O OJS não sabe produzi-lo. O plugin nativo do Crossref só emite <journal> — não existe caminho de código para <conference> — e os anais acabam depositados como se cada edição fosse um fascículo de periódico. O nome do evento, o número da edição, quando e onde aconteceu: nada disso chega ao Crossref, nem a nada que leia o Crossref depois.

O que faz

Registra-se como agência de registro de DOI, então anais e trabalhos são depositados pela tela de DOIs — seleção em massa, status, reenvio de falhas, depósito automático na publicação — e não por uma tela separada de importação/exportação.

O proceedings_series_metadata tem dois ramos no schema do Crossref. Este plugin usa o que carrega proceedings_title e volume; esse ramo torna obrigatória a declaração de ISBN, daí o noisbn — anais identificados por ISSN não têm ISBN. O outro ramo economizaria dois elementos e custaria o volume e o DOI da edição.

Os trabalhos são montados pelo filtro nativo do Crossref e reemitidos como conference_paper, então resumo, páginas, ORCID, afiliação com ROR, licença, coleções de crawler e text-mining e lista de componentes se comportam exatamente como num depósito de periódico, e continuam acompanhando o que o PKP melhorar. Duas diferenças são impostas pelo schema: contributors vem antes de titles (o inverso do journal_article), e só é permitido um <titles> — em submissões multilíngues, os títulos não primários caem.

Metadados do evento e o plugin da TIB

O event_metadata do Crossref precisa de sete dados que o OJS não tem campo nativo. Seis já são fornecidos pelo plugin Conference publishing da TIB, então este plugin reaproveita as chaves dele em issue_settings em vez de criar paralelas:

Campo Dono
conferenceDateBegin, conferenceDateEnd TIB
conferencePlaceStreet, conferencePlaceCity, conferencePlaceCountry TIB
conferenceOnline TIB
conferenceAcronym, conferenceNumber, conferenceTheme este plugin

O plugin da TIB é opcional. Com ele ativo, este aqui desenha só os três campos próprios e lê os outros seis da edição. Com ele desativado, este assume os nove — registrando também Schema::get::issue e issuedao::getAdditionalFieldNames, além do formulário, porque sem isso os valores continuam no banco mas param de ser carregados na edição, e o depósito perderia a data e o local silenciosamente.

Ligar ou desligar o plugin da TIB não apaga nada: as linhas de issue_settings são compartilhadas e sobrevivem nos dois sentidos.

Instalação

  1. Baixe o pacote pelo link no topo deste README.
  2. No OJS, vá em Configurações → Website → Plugins → Enviar um novo plugin e envie o .tar.gz.
  3. Habilite o Crossref: Anais de Eventos na lista de plugins.

Instalando na mão

Descompactar em plugins/generic/ não é equivalente. O envio pela interface roda o instalador de versão, que dispara o Installer::postInstall e registra os filtros de exportação do plugin. Largar os arquivos no disco e habilitar não faz isso: a linha entra em versions, mas o filter/filterConfig.xml nunca é processado, e toda exportação passa a falhar com Call to a member function setDeployment() on null, porque o filtro não é encontrado pelo nome simbólico.

Se instalou na mão, registre os filtros uma vez:

php plugins/generic/crossrefConference/tools/installFilters.php

Use --reinstall se tiver editado o filterConfig.xml — o installFilterGroups() pula grupos que já existem, então um outputType alterado seria ignorado. Rode como o dono dos arquivos, nunca como root.

Configuração

Configurações → Distribuição → DOIs.

  1. Defina o prefixo DOI.
  2. Escolha Crossref (Anais de Eventos) como agência de registro. Só uma agência por revista — esta substitui o plugin nativo do Crossref naquela revista, o que é a troca certa para uma revista que só publica anais.
  3. Habilite DOI para Edições, além de Artigos. O DOI de edição é obrigatório: é nele que os trabalhos se penduram.
  4. Preencha nome e e-mail do depositante, as credenciais do Crossref e a entidade promotora.

A revista também precisa de nome de editora e ao menos um ISSN; a tela avisa se faltar.

Depois, por edição, em Edições → (a edição) → Dados da Edição:

  • ponha no título da edição o nome daquele evento específico — "VI Congresso Brasileiro de Patologia das Construções", não o nome da série — porque conference_name e proceedings_title saem dali;
  • preencha a sigla, o número da edição (em branco usa o volume) e o tema.

Schema e validação

Crossref 5.4.0, o mesmo do plugin nativo no OJS 3.5.0-5. O metadata_distribution_opts, que existia no conference_paper do 4.3.6 e é carregado por plugins de anais mais antigos, foi removido no 5.x e é rejeitado.

Os grupos de filtro declaram outputType="xml::*" — sem validação — em vez de xml::schema(crossref5.4.0.xsd). O framework valida passando essa URL para o DOMDocument::schemaValidate(), o que faz o libxml buscá-la pela rede. Onde o allow_url_fopen está desligado isso falha, e a falha não é inofensiva: o buffer de erro do libxml fica sujo, o exportXML() devolve isso como xmlErrors e o PKPDoiController transforma em HTTP 400 — um botão Exportar que não faz nada. O plugin nativo do Crossref tem o mesmo defeito nesses servidores.

Mesmo onde a busca funciona, ela arrasta uma cadeia de schemas de vários megabytes (Crossref → JATS → MathML no w3.org) a cada exportação, e uma queda do crossref.org quebra o botão. O próprio core trata essa validação como opcional pelo mesmo motivo. Quem valida de verdade é o Crossref no depósito, e essas falhas o plugin mostra no status do DOI.

Para validar durante o desenvolvimento, use uma cópia local do schema:

xmllint --noout --schema crossref5.4.0.xsd export.xml

Requisitos

  • OJS 3.5.0
  • O plugin crossref nativo presente no disco — este estende os filtros e o cliente de depósito dele. Vem junto com o OJS, então nada mais é preciso, e ele não precisa estar habilitado.

Créditos e autoria

  • Desenvolvido e mantido pela OJSBR — plugin autoral.
  • Os metadados de nível de trabalho são produzidos pelo plugin Crossref do PKP, que este estende.
  • Interopera com o withanage/conference (TIB).
  • Distribuído sob a GNU GPL v3.

Licença

Distribuído sob a GNU GPL v3. Veja LICENSE e docs/COPYING.

About

OJS 3.5 plugin: deposits DOIs with Crossref as conference proceedings (<conference>/<conference_paper>) instead of journal records, as a DOI registration agency.

Topics

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages