Skip to content

Open Library identifiers

Archive-reader recognizes OpenLibrary as a known identifier scheme when a publication states it explicitly. A publication can also carry an Open Library reference as a general URL identifier.

Publication metadata Resolved identifier
EPUB 3 identifier explicitly typed OpenLibrary { value: key, scheme: "OpenLibrary" }
Absolute Open Library URL in an EPUB identifier { value: url, scheme: "URL" }
Absolute Open Library URL in ComicInfo Web { value: url, scheme: "URL" }

Open Library addresses a record by its key path, and that path is the value this scheme carries:

Key Record
/works/OL45883W The work — the book as a text, across editions
/books/OL7353617M One edition of it
/authors/OL23919A An author

The trailing letter says which collection an id belongs to, so a bare OL7353617M is unambiguous and is canonicalized to /books/OL7353617M.

<dc:identifier id="open-library-id">/works/OL45883W</dc:identifier>
<meta refines="#open-library-id" property="identifier-type">
OpenLibrary
</meta>

Resolves to:

{
value: "/works/OL45883W",
scheme: "OpenLibrary",
}

In EPUB metadata:

<dc:identifier>https://openlibrary.org/works/OL45883W</dc:identifier>

In a CBZ or CBR ComicInfo.xml:

<ComicInfo>
<Web>https://openlibrary.org/works/OL45883W</Web>
</ComicInfo>

Both resolve to the literal URL:

{
value: "https://openlibrary.org/works/OL45883W",
scheme: "URL",
}

Because the same identifier arrives either explicitly typed or as a reference URL, read it with identifierValue rather than filtering on the scheme:

import { identifierValue } from "@prose-reader/archive-reader"
const key = identifierValue(metadata.identifiers, "OpenLibrary")
// "/works/OL45883W" | undefined

A URL that names a record beyond the key — https://openlibrary.org/books/OL7353617M/Moby_Dick — still answers with the key alone, since the trailing slug is a title, not part of the identifier.

See Publication identifiers for the shared scheme resolution rules, custom schemes, URLs, and the Unknown fallback.