středa 19. prosince 2012

Hodí se epub k dlouhodobé archivaci?

Jedním ze základních předpokladů formátu vhodného pro dlouhodobou archivaci je dostupnost kvalitních validátorů, (vedle dalších věcí jako jsou standardizace, rozšířenost, podpora SW, metadat atd. k tomu viz nedávný příspěvek na tomto blogu). V praxi nemusí být vždy jednoduché rozhodnout, co je validní  nebo nevalidní. Který soubor bychom měli pustit do dlouhodobého archivu, a který má už vlastnosti, jež ohrozí trvalou dostupnost uloženého obsahu?

Na příkladě born digital dokumentů si ukážeme, jak velkou roli mohou hrát právě validátory. Použili jsme soubor 595 dokumentů ve formátu epub z různých zdrojů, část je v českém jazyce z volných zdrojů a část je v cizích jazycích. Tento soubor jsme identifikovali DROIDem verze 6.01, signature files v 65. Pak jsme zkusili dva nejrozšířenější validátory, Epubcheck a Flightcrew v posledních verzích. S obvyklými nástroji jako je Jhove tady moc nepořídíme, Jhove označuje všechny epuby za bytestreamy a pokud je tedy nerozbalíme, a nevalidujeme jejich obsah samostatně, nemá jeho použití moc smysl.

A co jsme se dozvěděli?



1. Droid
Droid umí poměrně slušně identifikovat obsahy objektů ve formátu epub, v našem souboru našel následující formáty, vše identifikováno na základě signatures. Gui verze je ovšem nepoužitelná pro velké počty souborů na běžném PC zamrzá pokud chceme vidět jak identifikoval všechny soubory, je lépe použít reporty nebo exporty.

puid
typ
count
alterntivní identifikace
x-fmt/423
JavaScript file
2
x-fmt/263
ZIP Format
595
x-fmt/224
Cascading Style Sheet
601
x-fmt/145
x-fmt/111
Plain Text File
16
fmt/96
HTML
837
fmt/92
Scalable Vector Graphics
4
fmt/91
Scalable Vector Graphics
1
fmt/44
JPEG File Interchange Format
1076
fmt/43
JPEG File Interchange Forma
1475
fmt/42
JPEG File Interchange Format
2
fmt/41
Raw JPEG Stream
174
fmt/4
GIF
19
fmt/394
DS_store file (MAC)
2
fmt/207
Obsidium Project File
18
fmt/12
PNG 1.1
40
fmt/11
PNG 1.0
694
fmt/103
XHTML (1.1)
2
fmt/102
XHTML (1.0)
5
fmt/101
XML (1.0)
11015
unidentified
unknown (mime-type file, fonty?)
711

2. Epubcheck
Pro validátory náš obsah už nevypadá tak pěkně, jako pro DROID. Epubcheck hlásí 93tis chyb v 538 souborech. Typické chyby jsou v elementech a atributech x/html, jako chybějící atributy nebo nekompletní elementy (v head chybí title - 6700 krát, chybí atribut “alt” u tagu img 900krát, atd.), objevují se ale i zajímavější věci jako nepovolené kódování, chybějící soubor .NCX, chybná identifikace html souborů, chybějící mime-type soubor, linkování na neexistující soubory atd.

Dále hlásí 36 upozornění v 9 souborech.  Týkají se nelinkovaných souborů existujících v zipu bez vazby na OPF, názvů souborů s mezerami, chybné deklaraci DTD, cryptovaného soubory s fonty. Některé dokumenty obsahovaly podle Epubchecku astronomický počet chyb, nezřídka stovky, nejvíce přes 6,5 tisíce chyb.

Epubcheck reportuje v XML ve formátu docMD, podobně jako Jhove. Tzn., že report obsahuje i některé informace o dokumentu, metadata, a výsledek validace. Mírné rozšíření o další informace o textu (počet odstavců, obrázků apod.) by mohlo ještě pomoci. Epubchecku by také prospělo chyby nějak číselně kategorizovat, pak se daly výstupy snáze hromadně analyzovat.

3. FlightCrew
Flightcrew je trochu lepší v kategorizaci chyb a umožní snazší analýzu. Posílá pouze textový report se seznamem chyb, ale ty jsou lépe kategorizovány. Reportuje 26tisic chyb v 557 souborech, také zde má jeden soubor 6670 chyb. Také hlásí 91 warnings, upozornění.
Na větším souboru se ukazuje, že klasifikace chyb ve FlightCrew je poměrně hrubá. Záběr chyby 301 je velmi široký. Obsahuje jak nepovolené elementy, chybějící atributy, chybějící elementy v content modelu, zprávu “no character data is allowed in content model”, atd.
počet 
ukázka reportu
typ chyby
místo
error 908
3
epub/Tsut_9780307476715_epub_opf_r1.opf(1): error 908: The file declares the use of the "iso-8859-1" encoding, but only UTF-8 and UTF-16 are allowed.
kódování
opf
error 907
18
epub/content.opf(23): error 907: An ID value of "13328" is not a valid value for an ID.
ID v OPF
opf
error 905
0
error 904
2
.epub/Blink/package.opf(55): error 904: The "page-map" attribute is not an allowed attribute of the <spine> element.
spine in OPF
opf
error 900
67
invalid byte, unsuported protocol, exceeded byte, atd.
bitové
html, ncx
error 301
26153
missing element in model, not allowed element, missing atribute
tagy html
html, xhtml, htm
error 1500
5
The file specifies an incorrect DTD.
deklarace dtd
html
error 1301
7
.epub/toc.ncx(18): error 1301: This <content> element's "src" attribute value is "index_split_000.html#2", but an element with an ID the fragment is referring to does not exist in that file.
chybný link na casti dokumentu
ncx
error 1300
61
.epub/toc.ncx(36): error 1300: This <content> element's "src" attribute value is "_Toc51172592", but that file does not exist.
chbyný link na soubor
ncx
error 1118
83
.epub/_Toc51172591: error 1118: This resource is reachable but not present in the OPF <manifest>. "Reachable" means that a reference of some kind that points to this resource exists in the epub.
chyby v opf
opf
error 1117
3
.epub/OEBPS/Text/Section0004.xhtml: error 1117: This OPS document is reachable but not present in the OPF <spine>.
chyby v opf
opf
error 1111
7
invalid uri in href
chbyný link
opf
error 1110
3
invalid format of date
neplatný formát datumu
opf
error 1109
47
neplatné hodnoty v atributech elementu "type" nebo neplatne antributy v OPF
atributy type
opf
error 1107
11
chyby elementu "item" a jeho atributu media-type
atributy  item
opf


Na první pohled velký rozdíl mezi počtem chyb Epubchecku (93tis) a Flightcrew (26tis) je dán zdá se větší citlivostí na chyby v x/html syntaxi u Epubchecku.

4. Jhove 
Rozbalit se nám podařilo 16770 souborů, a 1372 složek. Jhove má modul pro zpracování html, xml souborů, dále zde byly relevantní ASCII modul a bytestream. Téměř 12tis souborů bylo Well-Formed, but not valid a 4900 bylo Well-Formed and valid. Jhove neoznačil žádné soubory za not well formed, ty které neumí ale zpracuje jako bytestreamy a tak je validuje.
Většina souborů x/html a html s textem elektronických knih byla Well-Formed, but not valid. 

XHTML
10095
XML
1816
ASCII 
1214
(css, mimetype soubor)
JPEG 
2726
GIF
19
bytestream 
899
(png,fonty atd.) 


Klíčové a pro epub specifické jsou především soubory .opf .nxc a container.xml.
Soubory .opf validoval Jhove jako Well-Formed, but not valid a u všech našel chybu Cannot find the declaration of element 'package', v 26ti případech soubor nenašel.
Soubory .ncx byly v 549 případech také označeny za Well-Formed, but not valid kvůli chybě Cannot find the declaration of element 'ncx', 20 bylo zcela v pořádku Well-Formed and valid, a 26 nebylo k nalezení.
Soubory container.xml byly ve všech případech Well-Formed, but not valid kvůli chybě Cannot find the declaration of element 'container'.

Jhove tedy označuje většinu html souborů za well-formed ale neplatné. Specifické soubory, které tvoří formát epub, označuje stejně na základě jednoho typu chyby v deklaraci jednoho elementu.

Když se na výsledky validace podíváme, tak se můžeme jen ptát: 
  • Pokud je 90 %  souborů validovaných speciálními validátory „nevalidních“ a obsahuje „chyby“ má validace těmito nástroji jako proces zpracování před archivací vůbec smysl? 
  • Nakolik jsou chyby v syntaxi x/html podstatné pro budoucí použitelnost epubů? 
  • Je opravdu epub formátem, ve kterém bychom chtěli něco dlouhodobě uchovávat? Pokud jsou reálná data takto „nestandardní“ nebylo by lepší převést pro archivaci obsah elektronických knih do txt nebo html? Jaké vlastnosti e-knih bychom museli opustit a kolika e-knih by se to týkalo? 

A jaké jsou alternativy k epubu? 

1. html (resp. htmlz) 
Zajímavou alternativou k epubu pro dlouhodobou archivaci by mohl být formát htmlz, zazipovaný html soubor index.html s textem knihy a odkazy, vedle něj je pak  style.css, cover.jpg, metadata.opf, a složka images. Jednoduchá struktura, kterou produkuje Calibre. Při migraci z epubu se obvykle zachovají (kromě textu a informace o pořadí čtení)  také obrázky, jejich pozice v textu, dokument má základní stylování (nadpisy apod.), a vnitřní odkazy, ztratíme fonty, původní názvy.

Využití htmlz je cesta, která znamená ztrátu přímé použitelnosti v mnoha čtečkách, na druhou stranu současné prohlížeč si s ním poradí. Jednoduchost případného převodu do jiného formátu mluví pro tohle řešení. Tento formát není ovšem nijak standardizovaný, výstupy z Calibre neobsahují v hlavičce deklaraci DOCTYPE. (Není jasné, zda obsah má vyhovět syntaxi xhtml nebo některé z verzi html). Pokud tedy nezavedeme lokální standard, není to asi dobrá cesta.

2. txt (resp.txtz) 
Převod do čistého textu znamená kompletní ztrátu veškerých metadat a netextového obsahu, především obrázků, odkazů, přijdeme o stylování a vizuální vlastnosti dokumentu. Txtz obsahuje text v zipu  index.txt, cover.jpg a metadata.opf, a složku OCF s podsložkou images s obrázky.

3.pdf
PDF především nezachová základní specifickou vlastnost formátů elektronických knih, protože je to formát s pevnou šířkou. Na druhou stranu je to formát standardní, dokonce s archivní verzí standardu pdf/a, je to formát kontejnerový, umožňuje zachovat snadno strukturu a netextový obsah, umožňuje zachovat fonty nebo formátování. V neposlední řadě je to také formát, který umožňuje zachovat metadata uvnitř souboru.

Místo závěru
Pro dlouhodobou ochranu elektronických knih bude bezpochyby třeba ukládat více reprezentací jednoho souboru. Pokud je zdrojovým souborem epub, je asi dobré uložit také pdf reprezentaci, epub projít DROIDem, validovat některým z validátorů a rozbalený obsah validovat Jhovem a uložit jejich výstupy.

Je třeba ale klasifikovat typy chyb v preservation policy, tedy přesně specifikovat, které chyby jsou důvodem k odmítnutí souboru, a které chyby lze považovat za marginální a stačí o nich vědět. Chyby v syntaxi html, htm a xhml  a typické chyby 301 z FlightCrew nebo chyby, které Jhove hlásí v našem pokusu při validaci opf, ncx, a countainer.xml, by neměly být záminkou pro odmítnutí dokumentu. Rozhodující bude integrita souborů, kompletnost (přebytečné nebo chybějící soubory, neplatné odkazy)a úplnost strukturální informace.

Jiná otázka je, jak by měl vypadat archivní balíček pro elektronické knihy. Měli bychom se držet standardu METS nebo ho nějak kombinovat s formátem Open Container Format /OCF/?
To už je ale úvaha na jiný příspěvek.



Ukázky výstupu:

epubcheck:
<?xml version="1.0" encoding="UTF-8"?>
<doc>
<!-- An extension of documentMD (http://www.fcla.edu/dls/md/docmd.xsd) -->
<document creationDateTime="2008-12-06T23:45:42+01:00">
<documentInformation>
<fileName>(2).epub</fileName>
<identifier>urn:uuid:3973c338-3914-4d83-99de-c669e17f3e7a</identifier>
<title>Tajemství ostrova Ji (ukázka)</title>
<creator>Pierre Grimbert</creator>
<date>2008-11-6</date>
</documentInformation>
<formatDesignation>
<formatName>application/epub+zip</formatName>
<formatVersion>2.0</formatVersion>
</formatDesignation>
<assessmentInformation agentName="epubcheck" agentVersion="3.0-RC-1">
<outcome>Valid</outcome>
<outcomeDetailNote>WARN: /OEBPS/part1.xhtml: Irregular DOCTYPE: found '-//W3C//DTD XHTML 1.0 Transitional//EN', expecting '&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"&gt;'.</outcomeDetailNote>
<outcomeDetailNote>WARN: /OEBPS/part2.xhtml: Irregular DOCTYPE: found '-//W3C//DTD XHTML 1.0 Transitional//EN', expecting '&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"&gt;'.</outcomeDetailNote>
</assessmentInformation>
<CharacterCount>97959</CharacterCount>
<Language>cz</Language>
<Reference>http://palmknihy.cz/index.php?x=2148</Reference>
</document>
</doc>


FlightCrew
(2).epub/OEBPS/content.opf(7): error 1110: The <date> element's value is "2008-1
1-6", which is not a valid date format.
(2).epub/OEBPS/content.opf(8): error 1110: The <date> element's value is "2008-1
1-6", which is not a valid date format.
(2).epub/OEBPS/part1.xhtml(2): error 1500: The file specifies an incorrect DTD.
The correct public ID for the DTD is "-//W3C//DTD XHTML 1.1//EN", while the corr
ect system ID is "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd". Do note that us
ing a DTD is optional; but if used, it must be correct.
(2).epub/OEBPS/part1.xhtml(2): error 900: unsupported protocol in URL
(2).epub/OEBPS/part2.xhtml(2): error 1500: The file specifies an incorrect DTD.
The correct public ID for the DTD is "-//W3C//DTD XHTML 1.1//EN", while the corr
ect system ID is "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd". Do note that us
ing a DTD is optional; but if used, it must be correct.
(2).epub/OEBPS/part2.xhtml(2): error 900: unsupported protocol in URL


Další čtení k epubům: 
článek na OPF z projektu Scape, o kterém jsme už psali...