⬇️ 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.
| OJS version | Branch | Plugin release |
|---|---|---|
| OJS 3.5.x | stable-3_5_0 (default) |
1.0.0.0 |
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.
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:
contributorscomes beforetitles— the reverse ofjournal_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.
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.
- Download the package from the link at the top of this README.
- In OJS, go to Settings → Website → Plugins → Upload a new plugin and upload the
.tar.gz. - Enable Crossref: Conference Proceedings in the plugin list.
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.phpAdd --reinstall if you have edited filterConfig.xml — installFilterGroups() 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.
Settings → Distribution → DOIs.
- Set the DOI prefix.
- 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.
- Enable DOIs for Issues as well as Articles. Issue DOIs are required: the proceedings DOI is what the papers hang off.
- 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_nameandproceedings_titlecome from it; - fill in the acronym, the edition number (blank uses the volume) and the theme.
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.xmlAssembling that local copy means patching the JATS module's imports for xlink.xsd,
xml.xsd and ali.xsd by hand.
- OJS 3.5.0
- The core
crossrefplugin 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.
- 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.
Issues and pull requests are welcome. Please target the branch matching the OJS version you
are working against. See CONTRIBUTING.md.
Distributed under the GNU GPL v3. See LICENSE and docs/COPYING.
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.
| Versão do OJS | Branch | Release do plugin |
|---|---|---|
| OJS 3.5.x | stable-3_5_0 (padrão) |
1.0.0.0 |
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.
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.
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.
- Baixe o pacote pelo link no topo deste README.
- No OJS, vá em Configurações → Website → Plugins → Enviar um novo plugin e envie o
.tar.gz. - Habilite o Crossref: Anais de Eventos na lista de plugins.
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.phpUse --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ções → Distribuição → DOIs.
- Defina o prefixo DOI.
- 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.
- Habilite DOI para Edições, além de Artigos. O DOI de edição é obrigatório: é nele que os trabalhos se penduram.
- 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_nameeproceedings_titlesaem dali; - preencha a sigla, o número da edição (em branco usa o volume) e o tema.
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- OJS 3.5.0
- O plugin
crossrefnativo 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.
- 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.
Distribuído sob a GNU GPL v3. Veja LICENSE e docs/COPYING.