DOIs and "public URL identifier"

OJS here. We are about to set up DOIs with Crossref.

Our preferred suffix would be the same as the “public URL identifier” that is in the metadata for each published article. We always add one on publication and it is unique and informative.

Is this possible to do automatically?

Thanks, Brendan.

See the option in the DOI plugin settings, specifically the “%x” pattern.

Use the pattern entered below to generate DOI suffixes. Use %j for journal initials, %v for the volume number, %i for the issue number, %Y for the year, %a for the OJS article ID, %g for the OJS galley ID, %f for the OJS file ID, %p for the page number and %x for “Custom Identifier”.

Note, though, that a DOI is intended to be an opaque identifier, and generally shouldn’t be “informative”.

Thanks, I was hoping that would be your answer but I needed to ask because the instructions at don’t say what “custom identifier” means. If you revise that page, I recommend you identify “%x” as “public URL identifier”, and also in key=“plugins.pubIds.urn.manager.settings.urnSuffixPattern”.

Our public URL identifiers are like v13i4p7, where the final 7 is the article number within the issue. So, not much different from the default pattern.

Cheers, Brendan.

That is a link to a proprietary fork of our software and documentation from a for-profit vendor. We can’t change anything there.

You’ll find our official documentation for the DOI plugin here:

Can you recommend some updated phrasing for the section “Custom identifiers”? Everyone is welcome to contribute to this documentation.

Oops, sorry to link to that company. I think all that is needed is for the plugin explanation of “%x” to match the name used for that attribute in the article metadata.


Another documentation problem: says “Currently, registration for Crossref requires OJS users to export their metadata using the Crossref XML Export Plugin and then submit it to Crossref’s backend system using credentials assigned to Crossref registrants.”

However, the CrossRef XML Export Plugin has a check box for “OJS will deposit assigned DOIs automatically to CrossRef. Please note that this may take a short amount of time after publication to process (e.g. depending on your cronjob configuration). You can check for all unregistered DOIs.”

Which is correct? Thanks, Brendan.

Both are correct, though I think the first could be phrased better. The intent of the first statement is that assigning DOIs within OJS is not sufficient to get them registered with CrossRef. The metadata must be transmitted to CrossRef after the DOI is assigned in OJS.

The intent of the second statement is that OJS can do this transmission on your behalf, if you give OJS the Crossref username and password.

But anyway, please forgive me for another documentation question. All our articles have DOIs assigned (within OJS). We have also set up the Crossref plugin with our Crossref login and password, and we checked the box “OJS will deposit assigned DOIs automatically to CrossRef”. Manual deposits on the “Articles” page work fine.

The question is how to register our existing content (over 3700 articles). At it says “OJS will deposit assigned DOIs as content in your journal is published”. That suggests that the deposit action is triggered by publishing content, which won’t help pre-existing content. Am I reading it correctly? I hope we don’t have to individually click on 3700 articles to deposit them.

Thanks, Brendan.

For automatic registration, this actually happens via a scheduled task, and not at the moment of publication. For smaller numbers of articles, you could also use the “select all” option or select multiple in the plugin UI. But, for 3700, you’ll prefer the scheduled task or a database update.

Running the Crossref scheduled task when that checkbox is enabled will automatically attempt to deposit any DOI which is assigned within OJS to a published article, but not marked as registered within OJS.

Registration of an already registered DOI will effectively be a metadata update within Crossref.

The scheduled task may be run by Acron, or via a cron job (php tools/runScheduledTasks.php plugins/importexport/crossref/scheduledTasks.xml), or via the CLI (php tools/importExport.php ...)

If you have migrated your articles from another system/URL to OJS, you will want to re-register the metadata. If you have already manually registered the articles and the metadata and URL has not changed, you may want to simply mark the articles as registered within OJS, to avoid extra processing of updating metadata which doesn’t need an update. This can be done in the UI, but would probably be easiest via a mysql query, which we can discuss if needed.