EPUB — это формат файла электронной книги , который использует расширение файла «.epub» . Этот термин является сокращением от electronic publication и иногда стилизуется как ePUB . EPUB поддерживается многими электронными книгами , а совместимое программное обеспечение доступно для большинства смартфонов, планшетов и компьютеров. EPUB — это технический стандарт , опубликованный Международным форумом по цифровым публикациям (IDPF). Он стал официальным стандартом IDPF в сентябре 2007 года, заменив старый стандарт Open eBook (OEB). [2]
Группа по изучению книжной индустрии поддерживает EPUB 3 как формат выбора для упаковки контента и заявила, что мировая индустрия книгоиздательства должна объединиться вокруг единого стандарта. [3] Технически файл в формате EPUB представляет собой архивный файл ZIP, состоящий из файлов XHTML , содержащих контент, а также изображений и других вспомогательных файлов. EPUB является наиболее широко поддерживаемым независимым от поставщика форматом электронных книг на основе XML ; он поддерживается почти всеми аппаратными устройствами для чтения и многими программными устройствами для чтения и мобильными приложениями . [4]
Преемник Открытой структуры публикации электронных книг , EPUB 2.0 был одобрен в октябре 2007 года [5] , а обновление обслуживания (2.0.1) было одобрено в сентябре 2010 года [6].
Спецификация EPUB 3.0 вступила в силу в октябре 2011 года, замененная небольшим обновлением обслуживания (3.0.1) в июне 2014 года. [7] Новые основные функции включают поддержку точного макета или специализированного форматирования (документы с фиксированным макетом), например, для комиксов, [8] и поддержку MathML . Текущая версия EPUB — 3.2, вступающая в силу 8 мая 2019 года. [9] Спецификация формата (текста) подверглась реорганизации [10] и очистке; формат поддерживает удаленно размещенные ресурсы и новые форматы шрифтов ( WOFF 2.0 и SFNT ) [11] и использует более чистый HTML и CSS . [12]
В мае 2016 года члены IDPF одобрили слияние с Консорциумом Всемирной паутины (W3C) [13] , «чтобы полностью объединить издательскую индустрию и основные веб-технологии» [14] .
EPUB 2.0 был одобрен в октябре 2007 года, а обновление (2.0.1), призванное прояснить и исправить ошибки в спецификациях, было одобрено в сентябре 2010 года. [6] Версия EPUB 2.0.1 состоит из трех спецификаций:
.epub
в формате XML. [16]EPUB внутренне использует XHTML или DTBook (стандарт XML, предоставленный консорциумом DAISY ) для представления текста и структуры документа содержимого, а также подмножество CSS для предоставления макета и форматирования. XML используется для создания манифеста документа, оглавления и метаданных EPUB . Наконец, файлы объединяются в zip- файл в качестве формата упаковки.
Файл EPUB использует XHTML 1.1 (или DTBook) для построения содержимого книги, начиная с версии 2.0.1. Это отличается от предыдущих версий ( OEBPS 1.2 и более ранних), которые использовали подмножество XHTML. Однако есть несколько ограничений на определенные элементы. MIME-тип для документов XHTML в EPUB — application/xhtml+xml
. [15] [a]
Стилизация и макет выполняются с использованием подмножества CSS 2.0, называемого таблицами стилей OPS . Этот специализированный синтаксис требует, чтобы системы чтения поддерживали только часть свойств CSS, и добавляет несколько пользовательских свойств. Пользовательские свойства включают oeb-page-head, oeb-page-foot,
и oeb-column-number
. Встраивание шрифтов может быть выполнено с использованием @font-face
свойства, а также включением файла шрифта в манифест OPF (см. ниже). MIME-тип для документов CSS в EPUB — text/css
. [15] [b]
EPUB также требует, чтобы изображения PNG , JPEG , GIF и SVG поддерживались с использованием mimetypes image/png, image/jpeg, image/gif, image/svg+xml
. Другие типы носителей разрешены, но создатели должны включать альтернативные версии с использованием поддерживаемых типов. [15] Таблицу всех требуемых mimetypes см. в разделе 1.3.7 спецификации.
Требуется Unicode , и производители контента должны использовать кодировку UTF-8 или UTF-16 . [15] Это необходимо для поддержки международных и многоязычных книг. Однако системы чтения не обязаны предоставлять шрифты, необходимые для отображения каждого символа Unicode, хотя они должны отображать по крайней мере заполнитель для символов, которые не могут быть отображены полностью. [15]
Пример скелета файла XHTML для EPUB выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> < html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en" > < head > < meta http-equiv = "Content-Type" content = "application/xhtml+xml; charset=utf-8" /> < title > Гордость и предубеждение </ title > < link rel = "stylesheet" href = "css/main.css" type = "text/css" /> </ head > < body > ... </ тело > </ html >
Цель спецификации OPF — «[определить] механизм, посредством которого различные компоненты публикации OPS связываются вместе и обеспечивают дополнительную структуру и семантику электронной публикации». [16] Это достигается с помощью двух XML-файлов с расширениями .opf
и .ncx
.
Файл OPF, традиционно называемый content.opf
, содержит метаданные книги EPUB, манифест файла и линейный порядок чтения. Этот файл имеет корневой элемент package
и четыре дочерних элемента: metadata
, manifest
, spine
, и guide
. Кроме того, package
узел должен иметь unique-identifier
атрибут. MIME-тип файла .opf — application/oebps-package+xml
. [16]
Элемент metadata
содержит всю информацию о метаданных для конкретного файла EPUB. Требуются три тега метаданных (хотя доступно гораздо больше): title
, language
, и identifier
. title
содержит название книги, language
содержит язык содержимого книги в формате RFC 3066 или его преемниках, таких как более новый RFC 4646 , и identifier
содержит уникальный идентификатор книги, такой как ее ISBN или URL . Атрибут identifier
's id
должен быть равен unique-identifier
атрибуту из package
элемента. [16] [c]
Элемент manifest
перечисляет все файлы, содержащиеся в пакете. Каждый файл представлен элементом item
и имеет атрибуты id
, href
, media-type
. Все XHTML (документы содержимого), таблицы стилей, изображения или другие медиа, встроенные шрифты и файл NCX должны быть перечислены здесь. Только .opf
сам файл, container.xml
, и mimetype
файлы не должны быть включены. [16]
Элемент spine
перечисляет все документы содержимого XHTML в линейном порядке чтения. Также должен быть перечислен любой документ содержимого, к которому можно получить доступ через ссылку или таблицу содержимого. Атрибут toc
должен spine
содержать id
файл NCX, указанный в манифесте. Каждый itemref
элемент idref
устанавливается в id
значение соответствующего документа содержимого. [16]
Элемент guide
является необязательным элементом для целей идентификации основных структурных компонентов книги. Каждый reference
элемент имеет атрибуты type
, title
, href
. Файлы, на которые есть ссылки, href
должны быть перечислены в манифесте и могут иметь идентификатор элемента (например, #figures
в примере). [16] [d]
Пример файла OPF:
<?xml версия="1.0"?> <package версия= "2.0" xmlns= "http://www.idpf.org/2007/opf" уникальный-идентификатор= "BookId" > <metadata xmlns:dc= "http://purl.org/dc/elements/1.1/" xmlns:opf= "http://www.idpf.org/2007/opf" > <dc:title> Гордость и предубеждение < /dc:title> <dc:language> ru </ dc:language> <dc:identifier id= "BookId" opf:scheme= "ISBN" > 123456789X </dc:identifier> <dc:creator opf:file-as= "Остин, Джейн" opf:role= "aut" > Джейн Остин </dc:creator> </metadata> <manifest> <item id= "chapter1" href= "chapter1.xhtml" media-type= "application/xhtml+xml" /> <item id= "appendix" href= "appendix.xhtml" media-type= "application/xhtml+xml" /> <item id= "stylesheet" href= "style.css" media-type= "text/css" /> <item id= "ch1-pic" href= "ch1-pic.png" media-type= "image/png" /> <item id= "myfont" href= "css/myfont.otf" media-type= "application/x-font-opentype" /> <item id= "ncx" href= "toc.ncx" media-type= "application/x-dtbncx+xml" /> </manifest> <spine toc= "ncx" > <itemref idref= "chapter1" /> <itemref idref= "appendix" /> </spine> <guide> <reference type= "loi" title= "Список иллюстраций" href= "appendix.xhtml#figures" /> </guide> </пакет>
Файл NCX ( файл управления N- навигацией для X ML), традиционно называемый , содержит иерархическую таблицу содержания для файла EPUB. Спецификация для NCX была разработана для Digital Talking Book (DTB), поддерживается консорциумом DAISY и не является частью спецификации EPUB. Файл NCX имеет mime-тип .toc.ncx
application/x-dtbncx+xml
Здесь следует отметить, что значения элементов docTitle
, docAuthor
и meta name="dtb:uid"
должны соответствовать их аналогам в файле OPF. Кроме того, meta name="dtb:depth"
элемент устанавливается равным глубине элемента navMap
. navPoint
элементы могут быть вложенными для создания иерархической таблицы содержания. navLabel
Содержимое 's — это текст, который отображается в таблице содержания, сгенерированной системами чтения, использующими .ncx. Элемент navPoint
's content
указывает на документ содержимого, указанный в манифесте, и может также включать идентификатор элемента (например, #section1
). [16] [18]
Описание некоторых исключений из спецификации NCX, используемых в EPUB, находится в разделе 2.4.1 спецификации. Полную спецификацию NCX можно найти в разделе 8 спецификаций для цифровой говорящей книги . [18]
Пример файла .ncx:
<?xml версия="1.0" кодировка="UTF-8"?> <!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd"><ncx version= "2005-1" xml :lang= "en" xmlns= "http://www.daisy.org/z3986/2005/ncx/ " > <head> <!-- Следующие четыре элемента метаданных требуются для всех документов NCX, включая те, которые соответствуют смягченным ограничениям OPS 2.0 --> <meta name= "dtb:uid" content= "123456789X" /> <!-- то же, что и в .opf --> <meta name= "dtb:depth" content= "1" /> <!-- 1 или выше --> <meta name= "dtb:totalPageCount" content= "0" /> <!-- должно быть 0 --> <meta name= "dtb:maxPageNumber" content= "0" /> <!-- должно быть 0 --> </head> <docTitle> <text> Гордость и предубеждение </text> </docTitle> <docAuthor> <text> Остин, Джейн </text> </docAuthor> <navMap> <navPoint class= "chapter" id= "chapter1" playOrder= "1" > <navLabel><text> Глава 1 </text></navLabel> <content src= "chapter1.xhtml" /> </navPoint> </navMap> </ncx>
Файл EPUB представляет собой группу файлов, соответствующих стандартам OPS/OPF и упакованных в ZIP-файл. [19] OCF определяет, как организовать эти файлы в ZIP-файле, и определяет два дополнительных файла, которые должны быть включены.
Файл mimetype
должен быть текстовым документом в ASCII, содержащим строку application/epub+zip
. Он также должен быть несжатым, незашифрованным и первым файлом в архиве ZIP. Этот файл предоставляет приложениям более надежный способ определения mimetype файла, чем просто .epub
расширение. [17]
Также должна быть папка с именем META-INF
, которая содержит требуемый файл container.xml
. Этот XML-файл указывает на файл, определяющий содержимое книги. Это файл OPF, хотя rootfile
допускаются дополнительные альтернативные элементы. [17]
За исключением mimetype
и META-INF/container.xml
, остальные файлы (файлы OPF, NCX, XHTML, CSS и изображения) традиционно помещаются в каталог с именем OEBPS
.
Пример структуры файла:
--ZIP-контейнер--mimetypeМЕТА-ИНФ/ контейнер.xmlОЭБПС/ содержание.opf глава1.xhtml ch1-pic.png css/ стиль.css мойшрифт.otf
Пример container.xml с учетом приведенной выше структуры файла:
<?xml version="1.0" encoding="UTF-8" ?> <container version= "1.0" xmlns= "urn:oasis:names:tc:opendocument:xmlns:container" > <rootfiles> <rootfile full-path= "OEBPS/content.opf" media-type= "application/oebps-package+xml" /> </rootfiles> </container>
Рекомендуемая спецификация EPUB 3.0 была утверждена 11 октября 2011 года. 26 июня 2014 года EPUB 3.0.1 был утвержден как незначительное обновление для обслуживания EPUB 3.0. EPUB 3.0 заменяет предыдущий выпуск 2.0.1. [e]
EPUB 3 состоит из набора из четырех спецификаций: [20]
Формат EPUB 3.0 был призван устранить следующие критические замечания:
26 июня 2014 года IDPF опубликовал EPUB 3.0.1 в качестве окончательной рекомендуемой спецификации. [23]
В ноябре 2014 года EPUB 3.0 был опубликован ISO / IEC как ISO/IEC TS 30135 (части 1–7). [24]
В январе 2020 года EPUB 3.0.1 был опубликован ISO / IEC как ISO/IEC 23736 (части 1–6). [25]
EPUB 3.2 был анонсирован в 2018 году, [26] а окончательная спецификация была выпущена в 2019 году. [27] Заметным изменением является удаление специализированного подмножества CSS, что позволяет использовать свойства без префикса epub. Ссылки на стандарты HTML и SVG также обновляются до «новейшей доступной версии», а не фиксированной версии во времени. [28]
W3C анонсировала версию 3.3 25 мая 2023 года. [29] Изменения включали более строгие стандарты безопасности и конфиденциальности, а также принятие медиаформатов WebP и Opus . [30]
Формат и множество читателей поддерживают следующее:
Файл EPUB может опционально содержать DRM в качестве дополнительного слоя, но это не требуется спецификациями. [35] Кроме того, спецификация не называет какую-либо конкретную систему DRM для использования, поэтому издатели могут выбрать схему DRM по своему вкусу. Однако будущие версии EPUB (в частности OCF) могут указать формат для DRM. [17]
Спецификация EPUB не навязывает и не предлагает определенную схему DRM. Это может повлиять на уровень поддержки различных систем DRM на устройствах и портативность приобретаемых электронных книг. Следовательно, такая несовместимость DRM может сегментировать формат EPUB по линиям систем DRM, подрывая преимущества единого стандартного формата и сбивая с толку потребителя. [36] [37] [38] [39] [40] [41]
Файлы DRMed EPUB должны содержать файл, вызываемый rights.xml
в META-INF
каталоге на корневом уровне контейнера ZIP. [17] [ необходимо разъяснение ]
EPUB широко используется в программных ридерах, таких как Google Play Books на Android и Apple Books на iOS и macOS , а также в электронных ридерах Amazon Kindle , но не в связанных приложениях для других платформ. iBooks также поддерживает фирменный формат iBook, который основан на формате EPUB, но зависит от кода из приложения iBooks для функционирования. [42]
EPUB — популярный формат для электронного обмена данными , поскольку он может быть открытым форматом и основан на HTML, в отличие от фирменного формата Amazon для ридеров Kindle. Популярные производители EPUB для общедоступного и открытого лицензированного контента включают Project Gutenberg , Standard Ebooks , PubMed Central , SciELO и другие.
В 2022 году сервис Amazon Send to Kindle прекратил поддержку собственного формата файлов Kindle в пользу EPUB. [43] [44]
Для чтения EPUB требуется поддержка форматов HTML5 , JavaScript , CSS, SVG , поэтому устройства чтения EPUB используют ту же технологию, что и веб-браузеры.
Такие форматы связаны с различными типами проблем безопасности и нарушения конфиденциальности, например, веб-маяки , CSRF , XSHM, из-за их сложности и гибкости.
Такие уязвимости могут быть использованы для реализации веб-отслеживания и отслеживания между устройствами в файлах EPUB. [45] [46] [47]
Исследователи безопасности также выявили атаки, приводящие к загрузке локальных файлов и других пользовательских данных. [48] [49]
В документе «Обзор EPUB 3.1» содержится предупреждение о безопасности: [50]
Авторам необходимо знать, что скрипты в публикации EPUB могут создавать проблемы безопасности, отличные от скриптов в веб-браузере. Например, типичные политики одного источника не применимы к контенту, загруженному в локальную систему пользователя. Поэтому настоятельно рекомендуется ограничивать скрипты контекстами, ограниченными контейнером.
Файл EPUB — это архив, который по сути содержит веб-сайт. Он включает файлы HTML, изображения, таблицы стилей CSS и другие ресурсы. Он также содержит метаданные. EPUB 3.3 — последняя версия. Используя HTML5 , публикации могут содержать видео, аудио и интерактивность, как и веб-сайты в веб-браузерах. [32]
Публикация EPUB поставляется в виде одного файла. Этот файл представляет собой незашифрованный сжатый архив, содержащий набор взаимосвязанных ресурсов. [51]
Контейнер OCF (Open Container Format) Abstract определяет модель файловой системы для содержимого контейнера. Модель файловой системы использует один общий корневой каталог для всего содержимого контейнера. Все (не удаленные) ресурсы для публикаций находятся в дереве каталогов, возглавляемом корневым каталогом контейнера, хотя EPUB не предписывает никакой конкретной структуры файловой системы для этого. Модель файловой системы включает обязательный каталог с именем META-INF, который является прямым потомком корневого каталога контейнера. META-INF хранит container.xml.
Первым файлом в архиве должен быть файл mimetype . Он должен быть незашифрованным и несжатым, чтобы не-ZIP утилиты могли прочитать mimetype. Файл mimetype должен быть файлом ASCII , содержащим строку "application/epub+zip". Этот файл предоставляет приложениям более надежный способ определения mimetype файла, чем просто расширение .epub. [51]
Пример структуры файла:
--ZIP-контейнер--mimetypeМЕТА-ИНФ/ контейнер.xmlОЭБПС/ содержание.opf глава1.xhtml ch1-pic.png css/ стиль.css мойшрифт.otf toc.ncx
Должен быть каталог META-INF, содержащий container.xml. Этот файл указывает на файл, определяющий содержимое книги, файл OPF, хотя допускаются дополнительные альтернативные элементы rootfile. [51] Помимо mimetype и META-INF/container.xml, другие файлы (файлы OPF, NCX, XHTML, CSS и изображений) традиционно помещаются в каталог с именем OEBPS. Пример container.xml:
<?xml version="1.0" encoding="UTF-8" ?> <container version= "1.0" xmlns= "urn:oasis:names:tc:opendocument:xmlns:container" > <rootfiles> <rootfile full-path= "OEBPS/content.opf" media-type= "application/oebps-package+xml" /> </rootfiles> </container>
Контейнер ePUB должен содержать: [52]
Контейнер ePUB может содержать:
Документы контента включают [53] HTML 5 контент, навигационные документы, документы SVG , скриптовые документы контента и документы с фиксированной разметкой. Контент также включает документы CSS и PLS. Навигационные документы заменяют грамматику NCX, используемую в EPUB 2.
Книги с синхронизированным аудиоозвучиванием создаются в EPUB 3 с помощью документов наложения медиа для описания времени для предварительно записанного аудиоозвучивания и того, как оно соотносится с разметкой документа содержимого EPUB. Формат файла для наложений медиа определяется как подмножество SMIL . [54]
Программное обеспечение для чтения EPUB существует для всех основных вычислительных платформ, таких как Adobe Digital Editions и calibre на настольных платформах, Google Play Books и Aldiko на Android и iOS, а также Apple Books на macOS и iOS. Существует также кроссплатформенное программное обеспечение для редактирования файлов EPUB, включая программы с открытым исходным кодом calibre и Sigil .
Большинство современных веб-браузеров также поддерживают плагины для чтения EPUB . Браузер Microsoft Edge имел встроенную возможность чтения EPUB до сентября 2019 года. [55]
Следующее программное обеспечение может читать и отображать файлы EPUB.
Следующее программное обеспечение может создавать файлы EPUB.
type
. в «Разделе 2.6», ePub OPDF 2.0.1 (проект спецификации), IDPF.