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.
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.
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.
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:
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 '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'.</outcomeDetailNote>
<outcomeDetailNote>WARN: /OEBPS/part2.xhtml: Irregular DOCTYPE: found '-//W3C//DTD XHTML 1.0 Transitional//EN', expecting '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'.</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...
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 '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'.</outcomeDetailNote>
<outcomeDetailNote>WARN: /OEBPS/part2.xhtml: Irregular DOCTYPE: found '-//W3C//DTD XHTML 1.0 Transitional//EN', expecting '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'.</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...