Summary
If anyone has experienced seemingly random behavior concerning DOI look-ups, exchanges, or requests, hopefully this will help. Through troubleshooting, we have found that brackets ( [
or ]
) in DOIs can cause serious problems if they are not properly encoded as %5B
and %5D
, respectively.
ORCID API
When posting a new ORCID work via the API, we noticed that 5 items were rejected due to an ‘invalid anyURI’. Here is the complete error returned by ORCID’s API:
400 - Bad Request https://api.orcid.org/v2.1/0000-0002-7591-7898/work
Body: { "response-code" : 400, "developer-message" : "400 Bad request: invalid JSON - cvc-datatype-valid.1.2.1: 'https://doi.org/10.1638/1042-7260(2002)033[0029:pofils]2.0.co;2' is not a valid value for 'anyURI'.", "user-message" : "Invalid JSON.", "error-code" : 9047, "more-info" : "https://members.orcid.org/api/resources/troubleshooting"}
After encoding the brackets https://doi.org/10.1638/1042-7260(2003)34%5B0003:pofils%5D2.0.co;2
we were able to successfully post the new work.
Full post
POST https://api.sandbox.orcid.org/v2.1/0000-0002-9361-548X/work
Body: {"title":{"title":{"value":"Pharmacokinetics of florfenicol in loggerhead sea turtles (Caretta caretta) after single intravenous and intramuscular injections"},"subtitle":null,"translated-title":null},"journal-title":"Journal of Zoo and Wildlife Medicine","short-description":null,"type":"JOURNAL_ARTICLE","publication-date":{"year":{"value":2003}},"citation":{"citation-type":"BIBTEX","citation-value":" @article{stamper_papich_lewbart_may_plummer_stoskopf_2003, title={Pharmacokinetics of florfenicol in loggerhead sea turtles (Caretta caretta) after single intravenous and intramuscular injections}, volume={34}, DOI={10.1638/1042-7260(2003)34[0003:pofils]2.0.co;2}, number={1}, journal={Journal of Zoo and Wildlife Medicine}, author={Stamper, M. A. and Papich, M. G. and Lewbart, G. A. and May, S. B. and Plummer, D. D. and Stoskopf, M. K.}, year={2003}, month={Mar}, pages={3–8}}"},"external-ids":{"external-id":[{"external-id-type":"doi","external-id-value":"10.1638/1042-7260(2003)34[0003:pofils]2.0.co;2","external-id-url":{"value":"https://doi.org/10.1638/1042-7260(2003)34%5B0003:pofils%5D2.0.co;2"},"external-id-relationship":"SELF"}]},"contributors":{"contributor":[{"contributor-orcid":null,"credit-name":"M. A. Stamper","contributor-email":null,"contributor-attributes":{"contributor-sequence":null,"contributor-role":"AUTHOR"}},{"contributor-orcid":"0000-0002-7591-7898","credit-name":"M. G. Papich","contributor-email":null,"contributor-attributes":{"contributor-sequence":null,"contributor-role":"AUTHOR"}},{"contributor-orcid":"0000-0003-0716-1387","credit-name":"G. A. Lewbart","contributor-email":null,"contributor-attributes":{"contributor-sequence":null,"contributor-role":"AUTHOR"}},{"contributor-orcid":null,"credit-name":"S. B. May","contributor-email":null,"contributor-attributes":{"contributor-sequence":null,"contributor-role":"AUTHOR"}},{"contributor-orcid":null,"credit-name":"D. D. Plummer","contributor-email":null,"contributor-attributes":{"contributor-sequence":null,"contributor-role":"AUTHOR"}},{"contributor-orcid":null,"credit-name":"M. K. Stoskopf","contributor-email":null,"contributor-attributes":{"contributor-sequence":null,"contributor-role":"AUTHOR"}}]}}
Response
201 - Created https://api.sandbox.orcid.org/v2.1/0000-0002-9361-548X/work
Crossref Search & Link
We believe this might also be affecting Crossref’s Search & Link workflow. For some time, we had noticed that it was impossible to add certain citations using the “Add to ORCID” button in Crossref.
Screen Shot 2019-04-18 at 3.14.10 PM.png768×289 47.6 KB
Clicking ‘Yes’, shows an error that the user’s ORCID sign-in has expired, even though the user can immediately add the next citation.
The cause of this error may be that Crossref’s payload to ORCID is being rejected because of the unencoded brackets. This may be affecting other third parties as well.
Crossref API
The Crossref API does not require encoded brackets (copy and paste the url below
https://api.crossref.org/v1/works/10.1638/1042-7260(2003)34[0003:pofils]2.0.co;2
But, depending on your application’s HTTP request library, a call to the API might cause your application to balk. For example, a simple CURL call requires encoded characters:
$ curl -X GET -k -H 'Content-Type: application/vnd.orcid+json' -i 'https://api.crossref.org/v1/works/10.1638/1042-7260(2003)34[0003:pofils]2.0.co;2'
curl: (3) [globbing] bad range in column 61
$ curl -X GET -k -H 'Content-Type: application/vnd.orcid+json' -i 'https://api.crossref.org/v1/works/10.1638/1042-7260(2003)34%5B0003:pofils%5D2.0.co;2'
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Vary: Accept
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With
Content-Length: 1347
Server: http-kit
Date: Thu, 18 Apr 2019 18:47:23 GMT
X-Rate-Limit-Limit: 50
X-Rate-Limit-Interval: 1s
Connection: close
{"status":"ok","mes
...
Website URLs
Additionally, the article’s DOI does not resolve on either Pubmed or the publisher’s own site!
However, this was difficult to assess because some text editors, markdown parsers, and even email applications (such as Gmail) automatically encoded the URL, but displayed the un-encoded text.
For example, this post was written in markdown, and the markdown parser used to convert the text to html has encoded the brackets. Therefore, clicking the link will resolve, but copy and pasting the link into your address back will cause it to fail.
https://doi.org/10.1638/1042-7260(2003)34[0003:pofils]2.0.co;2
In short, always encode the brackets of a DOI.
<a href="https://doi.org/10.1638/1042-7260(2003)34%5B0003:pofils%5D2.0.co;2">
https://doi.org/10.1638/1042-7260(2003)34[0003:pofils]2.0.co;2?
</a>