AcademicIdentifiers.jl

Structured and validated types for common identifiers used in and around academic work.

Built on FastIdentifiers.jl, each type provides parsing (from shortcodes, prefixed forms, and URLs), canonical string output, persistent URL generation, and round-trip guarantees.

Index

Identifier Types

Bibliographic

AcademicIdentifiers.ArXivType
ArXiv <: AcademicIdentifier

An ArXiv identifier is a unique identifier for preprints in the arXiv repository. It consists of a YYMM.NNNNN format, where YY is the year, MM is the month, and NNNNN is the number of the preprint. Preprints prior to 2015 have a 4-digit number, while those from 2015 onwards have a 5-digit number.

Prior to 2007, ArXiv identifiers were in the form archive.class/YYMMNNN, where archive is the name of the archive (e.g., math, hep-th) and class is a two-letter class code (e.g., CO, EP).

A version number can be appended to the identifier, separated by a 'v'.

As of 2022, all ArXiv identifiers have a corresponding DOI (which has been backdated to include all ArXiv entries).

Examples

julia> parse(ArXiv, "1411.1607v4")
ArXiv:1411.1607v4

julia> parse(ArXiv, "https://arxiv.org/abs/1411.1607")
ArXiv:1411.1607

julia> purl(parse(ArXiv, "arXiv:1411.1607"))
"https://arxiv.org/abs/1411.1607"

julia> parse(ArXiv, "math.GT/0309136") # pre-2007 form
ArXiv:math.GT/0309136

julia> parse(ArXiv, "arxiv:hep-th/9901001v1")
ArXiv:hep-th/9901001v1
source
AcademicIdentifiers.DOIType
DOI <: AcademicIdentifier

A Digital Object Identifier (DOI) is a persistent identifier for digital objects.

Standardised in ISO 26324 and built on the Handle System, DOIs are managed by the International DOI Foundation and assigned by registration agencies such as Crossref and DataCite. A DOI consists of a registrant prefix (digits and periods, e.g. 10.1038) and an object suffix separated by a slash. The object suffix is unrestricted but treated as ASCII case-insensitive.

Examples

julia> parse(DOI, "10.1145/3276490")
DOI:10.1145/3276490

julia> parse(DOI, "https://doi.org/10.1137/141000671")
DOI:10.1137/141000671

julia> string(parse(DOI, "10.1145/3276490"))
"doi:10.1145/3276490"

julia> purl(parse(DOI, "10.1145/3276490"))
"https://doi.org/10.1145/3276490"

julia> parse(DOI, "10.123/abc") == parse(DOI, "10.123/AbC")
true
source
AcademicIdentifiers.EAN13Type
EAN13 <: AcademicIdentifier

A European Article Number (EAN-13) is a 13-digit barcode used globally for product identification.

Defined by GS1 and standardised in ISO/IEC 15420, EAN-13 is a superset of the original 12-digit Universal Product Code (UPC) system. It consists of a 12-digit code followed by a check digit calculated with a weighted mod-10 algorithm. ISBN-13 codes are a subset of EAN-13 (prefixes 978/979). Hyphens in the input are accepted and stripped during parsing.

Examples

julia> parse(EAN13, "9780596520687")
EAN13:9780596520687

julia> parse(EAN13, "978-0-596-52068-7")
EAN13:9780596520687

julia> println(parse(EAN13, "9780596520687"))
9780596520687

julia> parse(EAN13, "9780596520688")
ERROR: ChecksumViolation{EAN13}: expected 7, got 8
source
AcademicIdentifiers.ISBNType
ISBN <: AcademicIdentifier

An International Standard Book Number (ISBN) is a unique identifier for books and book-like publications.

Standardised in ISO 2108 and managed by the International ISBN Agency, ISBNs come in two forms: 10-digit (ISBN-10, with a mod-11 check digit that may be X) and 13-digit (ISBN-13, an EAN13 code with prefix 978 or 979). ISBN-10 inputs are automatically converted to ISBN-13 for storage. Output is hyphenated according to the official range data.

Examples

julia> parse(ISBN, "0141439564")
ISBN:0-14-143956-4

julia> parse(ISBN, "978-1-7185-0276-5")
ISBN:978-1-7185-0276-5

julia> string(parse(ISBN, "9781718502765"))
"ISBN 978-1-7185-0276-5"
source
AcademicIdentifiers.ISSNType
ISSN <: AcademicIdentifier

An International Standard Serial Number (ISSN) is a unique identifier for serial publications.

Standardised in ISO 3297 and managed by the ISSN International Centre, an ISSN consists of seven digits followed by a check digit (0–9 or X) computed with a weighted mod-11 algorithm. The canonical display form groups the digits as NNNN-NNNC. ISSNs are used to identify journals, newspapers, and other periodicals regardless of medium.

Examples

julia> parse(ISSN, "1095-5054")
ISSN:1095-5054

julia> string(parse(ISSN, "10955054"))
"ISSN 1095-5054"

julia> purl(parse(ISSN, "1095-5054"))
"https://portal.issn.org/resource/ISSN/1095-5054"
source
AcademicIdentifiers.OCNType
OCN <: AcademicIdentifier

An OCLC control number (OCN) is the primary key that identifies a bibliographic master record in WorldCat, the global union catalogue maintained by the Online Computer Library Center (OCLC).

Depending on the number of digits, OCNs may be prefixed with ocm, ocn, or on.

Examples

julia> parse(OCN, "ocm00045678")
OCN:45678

julia> parse(OCN, "(OCoLC)ocn148290923")
OCN:148290923

julia> print(parse(OCN, "https://www.worldcat.org/oclc/12345678901"))
on12345678901
source
AcademicIdentifiers.PMCIDType
PMCID <: AcademicIdentifier

A PubMed Central Identifier (PMCID) is a unique identifier for a publication in the PubMed Central database. It consists of an 8-digit integer. Invalid PMCIDs will throw a MalformedIdentifier exception.

PMCID identifiers should not be confused with PubMed identifiers (PMIDs), which are specifically used by PubMed but are distinct from PMCIDs.

Examples

julia> parse(PMCID, "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC12345678")
PMCID:12345678

julia> println(PMCID(12345678))
PMC12345678

julia> PMCID(123456789)
ERROR: ArgumentError: Value 123456789 is above maximum 99999999
source
AcademicIdentifiers.PMIDType
PMID <: AcademicIdentifier

A PubMed Identifier (PMID) is a unique identifier for a publication in the PubMed database. It consists of an 8-digit integer. Invalid PMIDs will throw a MalformedIdentifier exception.

PMID identifiers should not be confused with PubMed Central identifiers (PMCIDs), which are specifically used by PubMed Central but are distinct from PMIDs.

Examples

julia> PMID(28984872)
PMID:28984872

julia> parse(PMID, "https://pubmed.ncbi.nlm.nih.gov/28984872")
PMID:28984872

julia> PMID(123456789)
ERROR: ArgumentError: Value 123456789 is above maximum 99999999
source

People & Organisations

AcademicIdentifiers.ISNIType
ISNI <: AcademicIdentifier

An International Standard Name Identifier (ISNI, ISO 27729) uniquely identifies natural persons and organisations engaged in creative activities.

It is a 16-character string formed by a 15-digit base number followed by a single checksum digit calculated with the ISO 7064 MOD 11-2 algorithm. The check digit can be 0–9 or X (representing the value 10).

Standardised in ISO 27729

Examples

julia> parse(ISNI, "0000 0001 2103 2683")
ISNI:0000 0001 2103 2683

julia> parse(ISNI, "https://isni.org/isni/0000000121032683")
ISNI:0000 0001 2103 2683
source
AcademicIdentifiers.OpenAlexIDType
OpenAlexID{kind} <: AcademicIdentifier

An OpenAlex identifier for entities in the OpenAlex scholarly metadata database.

Operated by OurResearch, OpenAlex provides free and open bibliographic data. Each identifier consists of a single-letter category prefix followed by a positive integer. The seven entity categories are: W (works), A (authors), S (sources), I (institutions), C (concepts), P (publishers), and F (funders).

Examples

julia> parse(OpenAlexID, "W2741809807")
OpenAlexID:W2741809807

julia> parse(OpenAlexID, "A5092938886")
OpenAlexID:A5092938886

julia> purl(parse(OpenAlexID, "W2741809807"))
"https://openalex.org/W2741809807"
source
AcademicIdentifiers.ORCIDType
ORCID <: AcademicIdentifier

An Open Researcher and Contributor ID (ORCID) is a persistent identifier for researchers and scholarly contributors.

Operated by ORCID, Inc. and conforming to ISO 27729 (ISNI), an ORCID consists of 15 base digits followed by an ISO 7064 MOD 11-2 check character (0–9 or X), displayed in four groups of four separated by hyphens (e.g. 0000-0001-5109-3700). The ORCID consortium specifies the full https://orcid.org/ URL as the canonical representation.

Examples

julia> parse(ORCID, "https://orcid.org/0000-0001-5109-3700")
ORCID:0000-0001-5109-3700

julia> shortcode(parse(ORCID, "0000-0001-5109-3700"))
"0000-0001-5109-3700"

julia> println(parse(ORCID, "0000-0001-5109-3700"))
https://orcid.org/0000-0001-5109-3700
source
AcademicIdentifiers.RORType
ROR <: AcademicIdentifier

A Research Organization Registry (ROR) identifier is a persistent identifier for research organisations.

Operated by ROR as an open community-led registry, ROR IDs provide a stable reference for affiliations in scholarly metadata. Each identifier consists of a leading 0, six Crockford base-32 characters, and a two-digit ISO 7064 MOD 97-10 checksum. The full https://ror.org/ URL is the canonical representation.

Examples

julia> parse(ROR, "https://ror.org/05cy4wa09")
ROR:05cy4wa09

julia> print(parse(ROR, "05cy4wa09"))
https://ror.org/05cy4wa09

julia> parse(ROR, "05cy4wa08")
ERROR: ChecksumViolation{ROR}: expected 09, got 08
source
AcademicIdentifiers.VIAFType
VIAF <: AcademicIdentifier

A Virtual International Authority File (VIAF) identifier is a numeric key for authority records in the library domain.

Hosted by OCLC at viaf.org, VIAF links the national authority files of libraries worldwide into a single virtual authority file. Each VIAF cluster merges records for the same person, corporate body, or work from participating institutions (Library of Congress, BnF, DNB, etc.), providing a shared identifier for bibliographic entities.

Examples

julia> parse(VIAF, "113230702")
VIAF:113230702

julia> parse(VIAF, "https://viaf.org/viaf/113230702/")
VIAF:113230702

julia> purl(parse(VIAF, "113230702"))
"https://viaf.org/viaf/113230702"
source

Research Activities & Entities

AcademicIdentifiers.RAiDType
RAiD <: AcademicIdentifier

A Research Activity Identifier (RAiD) is a persistent identifier for research projects and activities.

Standardised in ISO 23527 and operated by the Australian Research Data Commons, RAiDs link together the people, organisations, outputs, and funding associated with a research activity. Each RAiD is implemented as a DOI and can be converted to one via convert(DOI, raid).

Examples

julia> parse(RAiD, "10.25.10.1234/a1b2c")
RAiD:10.25.10.1234/a1b2c

julia> parse(RAiD, "https://raid.org/10.25.10.1234/a1b2c")
RAiD:10.25.10.1234/a1b2c

julia> print(parse(RAiD, "10.25.10.1234/a1b2c"))
https://raid.org/10.25.10.1234/a1b2c
source
AcademicIdentifiers.WikidataType
Wikidata <: AcademicIdentifier

A Wikidata identifier (QID) is a unique key for entities in the Wikidata knowledge base.

Operated by the Wikimedia Foundation, Wikidata is a free, collaborative, multilingual knowledge graph. Each entity (item, property, or lexeme) receives a stable QID consisting of Q followed by a positive integer. QIDs are widely used for authority control, linked open data, and scholarly knowledge graphs. Common prefixes wd: and wikidata: are accepted during parsing.

Examples

julia> parse(Wikidata, "Q42")
Wikidata:Q42

julia> purl(parse(Wikidata, "Q42"))
"https://www.wikidata.org/wiki/Q42"

julia> parse(Wikidata, "wd:Q42")
Wikidata:Q42
source

Abstract Types

AcademicIdentifiers.AcademicIdentifierType
AcademicIdentifier <: AbstractIdentifier

An abstract type representing an academic identifier.

Academic identifiers are unique identifiers referring to resources used in academic and scholarly contexts. They can refer to a wide variety of resources, including publications, researchers, and organisations.

See also: AbstractIdentifier.

source