packages feed

epub-metadata-5.0: README.md

# epub-metadata


## Synopsis

Library for parsing epub document metadata (Haskell)


## Description

Library for parsing and manipulating epub document metadata. Supports epub versions 2 and 3.

This library was constructed by studying the IDPF specifications for epub documents found [here for version 2.0.1](http://www.idpf.org/epub/20/spec/OPF_2.0.1_draft.htm) and [here for version 3.0](http://www.idpf.org/epub/30/spec/epub30-publications.html)


### Why was this done?

The motivation for this project grew out of my desire to take charge
of missing or incorrect epub metadata in books I have purchased. I
started out using the Calibre open source tools for examining this
info. Limitations and incomplete implementation of those tools led
me here to build a more complete library in one of the best
programming languages ever created.


### Why didn't I just use existing solutions?

#### Calibre ebook-meta utility

I experienced various problems using this software, such as:

* Incomplete and in some cases incorrect handling of tags that can
  exist more than once (creator, contributor), particularly when they
  are differentiated using attributes according to the spec.

* Unable to display many fields in the OPF Package Document metadata
  specification. Unable to manipulate data that is represented as
  attributes of tags in the OPF spec.

* Astonishingly slow performance. A command-line renaming tool built with
  epub-metadata is more than 45 times faster at parsing and displaying
  epub metadata. I'm going to blame Python here for Calibre's
  performance. This has had a big impact on projects where I've been
  processing hundreds of epubs in batch operations.


#### epub on Hackage, epub E-Book construction support library

* The focus of this project seems to be with building new documents,
  not parsing existing files. And there is a specific attempt to do more
  than the metadata, to gather up the content and other metafiles that
  make up an epub for creation.

* Examining Codec.Ebook.OPF.Types, most of the metadata fields
  from the OPF Package Document spec are missing or aren't modeled
  thoroughly. I felt that to contribute to this project, I would have
  had to significantly rip up the types and redesign them.

* At this time it seemed like a better solution for me to
  start fresh with modelling the types and code to manipulate them. That
  said, I would be very interested in combining the epub and epub-metadata
  projects at some point in some way that makes sense.


### Using this library

   Please see the [Haddock documentation](https://hackage.haskell.org/package/epub-metadata) or source code for [Codec.Epub](https://github.com/dino-/epub-metadata/blob/master/src/lib/Codec/Epub.hs)

   This file has a working example of using this library.


## Getting source

- Download the cabalized source package [from Hackage](http://hackage.haskell.org/package/epub-metadata)
- Get the source with git: `$ git clone https://github.com/dino-/epub-metadata.git`
- Get the source with cabal-install: `$ cabal get epub-metadata`
- Get the source with stack: `$ stack unpack epub-metadata`
- If you're just looking, [browse the source](https://github.com/dino-/epub-metadata)

And once you have it, building the usual way:

    $ stack build
    $ stack test
    $ stack haddock

### Generating tags

    $ hasktags --ctags .


## Contact

Dino Morelli <[dino@ui3.info](mailto:dino@ui3.info)>