앞으로 모든 문서는 전자문서로 보관되고 유통될 것이고 기술적으로 어떻게 만들어지는지 알 필요가 있을 것입니다.
epub 북을 만들고자 할때 필요한 파일과 구성요소를 배울수 있습니다. 그리고 DocBook xml로 부터 epub 로 변환하는 방법을 배우고 python 을 이용해서 이작업을 자동화 해보고자 합니다.
epub 가 무엇인지, 누가 그것을 책택해서 사용하고 있는지를 알아보고, epub bundle의 구조를 살펴보고자 합니다.
epub 란 International Digital Publishing Forum( IDPF )에서 표준화한 화면크기별로 글자수 조정이 가능한(reflowable) 디지탈 책 이나 출판을 위한 XML 형식 입니다.
epub 는 pdf 와 어떻게 다른가?
pdf 는 프린트를 편할게 할수 있는 형식으로 전자문서로 가장 많이 사용하고 있는 것입니다.
다만 개발자가 접근하기가 어렵고 화면크기별로 글자수 조정이 안되는 단점이 있습니다.
epub 는 세개의 IDPF 설계안으로 구성되어 있습니다.
1. Open eBook Publication Structure Container Format (OCF) : epub의 압축형식(zip) 과 디렉토리 트리 구조를 지정한다.
2. Open Publication Structure (OPS) : 책 컨텐츠를 위해 사용할 수 있는 포맷을 지정( 예를 들면 xhtml, css )
3. Open Package Format (OPF) : epub내의 추가적인 메타데이타를 지정
중요한 점 두가지는 epub 메타데이타는 xml 이고 epub 컨텐트는 xhtml 이라는 것입니다.
첫번째 epub 책을 만들어 볼려고 합니다.
epub 번들이 기능을 유지하기 위해서는 최소 필요조건으로 필요한 파일들이 있어야 합니다. epub 압축파일안에서 파일들의 형식, 내용, 위치에 대한 엄격한 기준이 제시됩니다.
epub 번들 압축파일의 구조
mimetype META-INF/ container.xml OEBPS/ content.opf title.html content.html stylesheet.css toc.ncx images/ cover.png |
mimetype 파일 생성
application/epub+zip 이 내용이 있는 파일을 생성합니다. 이 내용외에 뉴라인이나 캐리지 리턴문자가 있으면 안됩니다.
container.xml 파일 생성
<?xml version="1.0"?> <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>
full path에 들어가는 디렉토리는 epub 파일의 루트와 관련되어서 디렉토리가 지정되어져야 합니다.
OEBPS : Open eBook Publication Structure
<?xml version='1.0' encoding='utf-8'?> <package xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" unique-identifier="bookid" version="2.0"> <metadata> <dc:title>Hello World: My First EPUB</dc:title> <dc:creator>My Name</dc:creator> <dc:identifier id="bookid">urn:uuid:0cc33cbd-94e2-49c1-909a-72ae16bc2658</dc:identifier> <dc:language>en-US</dc:language> <meta name="cover" content="cover-image" /> </metadata> <manifest> <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/> <item id="cover" href="title.html" media-type="application/xhtml+xml"/> <item id="content" href="content.html" media-type="application/xhtml+xml"/> <item id="cover-image" href="images/cover.png" media-type="image/png"/> <item id="css" href="stylesheet.css" media-type="text/css"/> </manifest> <spine toc="ncx"> <itemref idref="cover" linear="no"/> <itemref idref="content"/> </spine> <guide> <reference href="title.html" type="cover" title="Cover"/> </guide> </package> |
Open Packaging Format 메타데이타 파일 생성하기
content.opf 는 책의 모든내용에 대한 위치를 지정합니다. 또한 메타데이타 파일 Navigation Center eXtended(NCX) 를 지정합니다.
OPF 다큐먼트 자체는 http://www.idpf.org/2007/opf 네임스페이스를 사용하지만 메타데이타는 Dublin Core Metadata Initiative (DCMI) namespace, http://purl.org/dc/elements/1.1/
spine 태그는 컨텐츠의 순서를 지정하는 것으로 idref 속성의 값은 manifest에 지정되어 있어야 합니다.
다른 디지탈 책표준에서 빌려온 NCX table of contents 에 대해서 알아보겠습니다.
epub 는 DAISY's NCX DTD 의 형식을 빌려 왔습니다.
DAISY : Digital Accessible Information SYstem 의 약자로서 전통적인 책을 사용할수 없는 독자들을 위해서 개발되어진 협력체.
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN" "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd"> <ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1"> <head> <meta name="dtb:uid" content="urn:uuid:0cc33cbd-94e2-49c1-909a-72ae16bc2658"/> <meta name="dtb:depth" content="1"/> <meta name="dtb:totalPageCount" content="0"/> <meta name="dtb:maxPageNumber" content="0"/> </head> <docTitle> <text>Hello World: My First EPUB</text> </docTitle> <navMap> <navPoint id="navpoint-1" playOrder="1"> <navLabel> <text>Book cover</text> </navLabel> <content src="title.html"/> </navPoint> <navPoint id="navpoint-2" playOrder="2"> <navLabel> <text>Contents</text> </navLabel> <content src="content.html"/> </navPoint> </navMap> </ncx> |
Zip 압축으로 epub 파일 생성하기
zip for windows(http://gnuwin32.sourceforge.net/packages/zip.htm) 를 다운 받아서 설치하고 , 해당폴더를 패스로 지정합니다.
1. zip -0Xq my-book.epub mimetype
이 명령어는 mimetype 파일은 압축하지 않은 상태에서 추가하고 my-book.epub 파일을 생성하라는 명령어 입니다.
2. zip -Xr9Dq my-book.epub *
이 명령어는 남아 있는 요소를 추가하는 작업입니다. D, X는 zip파일에 관련없는 정보는 최소화하라는 의미이고 r 은 반복적으로 META-INF 폴더와 OEBPS 폴더의 내용을 포함하라는 의미입니다.
3. EpubCheck package 를 통한 epub 파일을 유효성을 검증합니다.
http://code.google.com/p/epubcheck/ 사이트에서 epub 패키지를 다운받아서 압축을 특정폴더에 풉니다.
java -jar D:\J2EE\JAVA\epubcheck-3.0b5\epubcheck-3.0b5.jar my-book.epub 처럼 경로를 지정해서 검증한다.
그리고 epub 파일을 보기위한 viewer 를 설치합니다.
Adobe Digital Editions ( http://www.adobe.com/products/digitaleditions/ ) 를 다운받아서 설치합니다.
Build a digital book with EPUB
http://www.ibm.com/developerworks/xml/tutorials/x-epubtut/index.html
Create rich-layout publications in EPUB 3 with HTML5, CSS3, and MathML
http://www.ibm.com/developerworks/web/library/x-richlayoutepub/index.html