+
+class BookInfo(WorkInfo):
+ FIELDS = (
+ Field(DCNS('audience'), 'audiences', salias='audience', multiple=True, required=False),
+
+ Field(DCNS('subject.period'), 'epochs', salias='epoch', multiple=True, required=False),
+ Field(DCNS('subject.type'), 'kinds', salias='kind', multiple=True, required=False),
+ Field(DCNS('subject.genre'), 'genres', salias='genre', multiple=True, required=False),
+
+ Field(DCNS('contributor.translator'), 'translators',
+ as_person, salias='translator', multiple=True, required=False),
+ Field(DCNS('relation.hasPart'), 'parts', WLURI, strict=as_wluri_strict, multiple=True, required=False),
+ Field(DCNS('relation.isVariantOf'), 'variant_of', WLURI, strict=as_wluri_strict, required=False),
+
+ Field(DCNS('relation.coverImage.url'), 'cover_url', required=False),
+ Field(DCNS('relation.coverImage.attribution'), 'cover_by', required=False),
+ Field(DCNS('relation.coverImage.source'), 'cover_source', required=False),
+ # WLCover-specific.
+ Field(WLNS('coverBarColor'), 'cover_bar_color', required=False),
+ Field(WLNS('coverBoxPosition'), 'cover_box_position', required=False),
+ Field(WLNS('coverClass'), 'cover_class', default=['default']),
+ Field('pdf-id', 'isbn_pdf', required=False),
+ Field('epub-id', 'isbn_epub', required=False),
+ Field('mobi-id', 'isbn_mobi', required=False),
+ Field('txt-id', 'isbn_txt', required=False),
+ Field('html-id', 'isbn_html', required=False),
+ )
+
+
+def parse(file_name, cls=BookInfo):
+ return cls.from_file(file_name)