epub-metadata-3.0: src/Codec/Epub2/Opf/Package/Metadata.hs
-- Copyright: 2010-2013 Dino Morelli
-- License: BSD3 (see LICENSE)
-- Author: Dino Morelli <dino@ui3.info>
{- | Data types for working with the metadata of ePub documents
These data types were constructed by studying the IDPF OPF
specification for ePub documents found here:
<http://www.idpf.org/epub/20/spec/OPF_2.0.1_draft.htm>
-}
module Codec.Epub2.Opf.Package.Metadata
( Creator (..)
, Date (..)
, Description (..)
, Identifier (..)
, Metadata (..)
, Title (..)
, emptyMetadata
)
where
{- | package\/metadata\/dc:creator tag, opf:role attr, opf:file-as attr,
content
-}
data Creator = Creator (Maybe String) (Maybe String) String
deriving (Eq, Show)
-- | package\/metadata\/dc:date tag, opf:event attr, content
data Date = Date (Maybe String) String
deriving (Eq, Show)
-- | package\/metadata\/dc:description tag, xml:lang attr, content
data Description = Description (Maybe String) String
deriving (Eq, Show)
{- | package\/metadata\/dc:identifier tag, id attr, opf:scheme attr,
content
-}
data Identifier = Identifier String (Maybe String) String
deriving (Eq, Show)
-- | package\/metadata\/dc:title tag, xml:lang attr, content
data Title = Title (Maybe String) String
deriving (Eq, Show)
-- | package\/metadata tag
data Metadata = Metadata
{ metaTitles :: [Title] -- ^ at least one required
, metaCreators :: [Creator]
, metaContributors :: [Creator]
, metaSubjects :: [String] -- ^ dc:subject tags
, metaDescriptions :: [Description]
, metaPublishers :: [String] -- ^ dc:publisher tags
, metaDates :: [Date]
, metaTypes :: [String] -- ^ dc:type tags
, metaFormats :: [String] -- ^ dc:format tags
, metaIds :: [Identifier] -- ^ at least one required
, metaSources :: [String] -- ^ dc:source tags
, metaLangs :: [String] -- ^ dc:language tags, at least one required
, metaRelations :: [String] -- ^ dc:relation tags
, metaCoverages :: [String] -- ^ dc:coverage tags
, metaRights :: [String] -- ^ dc:rights tags
}
deriving (Eq, Show)
-- | Note: This isn't valid as-is, some required values are empty lists!
emptyMetadata :: Metadata
emptyMetadata = Metadata
{ metaTitles = [] -- one required
, metaCreators = []
, metaContributors = []
, metaSubjects = []
, metaDescriptions = []
, metaPublishers = []
, metaDates = []
, metaTypes = []
, metaFormats = []
, metaIds = [] -- one required
, metaSources = []
, metaLangs = [] -- one required
, metaRelations = []
, metaCoverages = []
, metaRights = []
}