テクノロジー · 実用ガイド

EPUBで「no item named」?変更前に不足するZIP内ファイルを追跡する

スクリプト欠落、章の欠落、大文字小文字の不一致で同じKeyErrorが発生します。4つのテストはZIP検査だけではEPUBの完全性を確認できない理由を示します。

オリジナル概念図:独自の4つのEPUBはすべてZIP CRC検査を通過しましたが、EbookLib 0.20.0で読み込めたのは対照例のみ。他はスクリプト、spine内の章、大小文字不一致で失敗しました。
オリジナル概念図:独自の4つのEPUBはすべてZIP CRC検査を通過しましたが、EbookLib 0.20.0で読み込めたのは対照例のみ。他はスクリプト、spine内の章、大小文字不一致で失敗しました。 Watch at Ease

EPUBで特定パスの項目がないというエラーは、アーカイブ内の検索失敗を意味します。不足しているのが章かスクリプトか、参照の綴り違いかまでは示しません。変更前に元ファイルとエラーパス全文を保管してください。

Python 3.12.14、EbookLib 0.20.0、lxml 6.1.3で、独自のローカルEPUB 3を4つ検証しました。対照ファイルは読み込めましたが、manifestにあるスクリプト、spineの第2章をそれぞれ削除した場合と、章参照の1文字を大文字に変えた場合はいずれもKeyErrorでした。4つともZipFile.testzip()を通過し、監査中の元ファイルのハッシュは変わりませんでした。

これはパッケージ内検索のテストです。対照ファイルの完全なEPUB適合性や、機器での正しい表示を証明していません。EPUBCheck、Calibre、EpubSplit、画面付きリーダーは実行していません。同じ例外から異なる調査へ進むための比較を提供します。

パッケージからアーカイブへ参照をたどる

展開や上書きをせずにアーカイブ内一覧を取得します。Pythonのコマンドはpython -m zipfile -l book.epubです。META-INF/container.xmlからパッケージ文書を特定します。テストではOEBPS/package.opfなので、manifestのText/chapter2.xhtmlはOEBPS/Text/chapter2.xhtmlを指しました。

manifest ID、元のhref、メディアタイプ、解決した名前、完全一致での有無、spine位置を記録します。W3Cではパッケージ文書をそのURLの基準とし、コンテナー内の名前は大文字小文字を区別します。検証は単純なローカルパスに限定しました。リモート資源、符号化名、フラグメント、複数レンディション、不正XMLは、適用されるURL・パッケージ規則で確認し、推測でファイルパスを連結しません。

本文の欠落と参照の不一致を分ける

章欠落のケースではc2が、存在しないOEBPS/Text/chapter2.xhtmlをspine位置2で参照しました。空の章を代入したり、例外を飛ばして完全な出力と表示したりしないでください。修正版を入手するか、権限のある制作者に実際の本文とリンクを復元してもらいます。

大小文字の不一致では、manifestがText/Chapter1.xhtmlを要求する一方、実体はText/chapter1.xhtmlでした。監査は大小文字の異なる候補を報告し、自動選択・改名はしませんでした。修正前に全参照と制作者の意図を確認します。似た名前は手掛かりであり、同一内容の証明ではありません。

spine外のスクリプトも自動で捨てない

OEBPS/js/unused.jsを削除した場合も、spineの2章が残っているのにEbookLibが停止しました。この人工例では全ファイルを自作したため未使用と分かりますが、他人の書籍のspine外スクリプトは本文から参照され、機能を担う可能性があります。

依存関係を調べ、制作者に資源を復元してもらうか、不要な宣言と参照を意図的に削除してもらいます。不足ローカルファイルを許可されたリモート資源と扱ったり、同名スクリプトを探して追加したり、すべてのKeyErrorを捕捉して続行したりしません。上流issue281はこのmanifest読み込み失敗をすでに説明しており、新発見の仕組みではありません。

ZIP、出版物、引き渡しの確認を分ける

testzip()は格納済みファイルのCRCとヘッダーを検査し、出版物が本来含むべきファイルは知りません。章欠落を含む全4例でNoneを返しました。対照例のEbookLib読み込み成功が示すのは、そのオプションで当該パーサーが受理したことだけで、完全なEPUB適合性ではありません。

Calibreの文書化されたTools → Check bookはリンク切れやOPF問題を報告し、W3CはEPUBCheckなどの適合性検査を推奨しています。作業コピーで既存の手順を使い、結果を残してください。権限のある修正後は元の失敗操作を再実行し、章順と本文を照合して必要な読書手順を試します。原本と未解決資源の記録を保ちます。再試行の成功だけでは、文字や機能が失われなかったとは確認できません。

オリジナル概念図:container.xml、パッケージ文書、manifest ID・hrefから、正確なアーカイブ内ファイルとspine位置を追跡します。欠落や似た候補は自動的に飛ばさず、判断を記録します。
オリジナル概念図:container.xml、パッケージ文書、manifest ID・hrefから、正確なアーカイブ内ファイルとspine位置を追跡します。欠落や似た候補は自動的に飛ばさず、判断を記録します。 Watch at Ease