Entities & relationships


Main entity, a Book have many fields with a lot of relationships, here an example with Vingt ans après from Alexandre Dumas in Les Trois Mousquetaires. Some of fields are from OPF file (which is into EPUB file), if you want to change these values you will have to update EPUB file.

The badge extracted indicate information have exist into scanned file. The badge OPF show the information is from OPF.
The badge OPF Calibre show the information is from OPF updated with Calibre.

  • title: string title of book, example: Vingt ans après extracted required
  • slug: string slug of book's title with language code, example: vingt-ans-apres-fr generated

    language code associated with book is useful to avoid override books, API routes offer show routes with this syntax: /books/{author_slug}/{book_slug}. If the author write a book with a specific title, this book can have a translation with same title: Dune of Frank Herbert, the volume 1 have title Dune in english (dune-en) and in french (dune-fr).

  • slug_sort: string formated[^1] slug title of the book with formated[^1] slug title of series (if book have a series) with volume, example: trois-mousquetaires-02_vingt-ans-apres-fr generated

    to sort with natural order a list of books, it's possible to list by title but all books of same series can begin with a specific title, to avoid a heavy process of groupBy, Bookshelves offer a generated sorting title to keep all books of same series together based on series' title.

  • contributor: string EPUB contributions. extracted
  • description: text abstract of book, can be a long text with HTML. extracted
  • released_on: datetime release date when Book have been published. extracted
  • rights: string EPUB copyrights. extracted
  • volume: integer volume number into a series. extracted
  • page_count: integer API
  • maturity_rating: string API
  • disabled: boolean to hide a Book from API
  • type: enum can be comic, essay, handbook or novel
  • isbn10: string extracted API
  • isbn13: string extracted API
  • identifiers: json extracted
  • medias:
    • cover


  • authors extracted
  • language extracted
  • serie extracted
  • publisher extracted
  • tags extracted

[^1] : formated: when slug will be generated all determiner words will be removed, to sort by relevant words. Example: La fureur du fleuve from Les Cités des Anciens, vol. 3, series from Robin Hobb will become cites-des-anciens-03_fureur-du-fleuve

Edit this page on GitHub Updated at Tue, Apr 12, 2022