xml 파일로 문서를 작성합니다. 앞으로 xml 의 요소(element) 와 속성( attribute) 를 항목별로 분석해서

epub 를 위한 docbook.xsl 로 변환 되었을때 epub reader에서 어떻게 제어가 되는지를 분석해 나갈것입니다.

지금까지는 xml 문서작성 과 docbook.xsl 지정 그리고 docbook2epub 파이선용 패키지설치를 통해서

epub파일을 만들어 내는 과정을 보여드립니다.


패키지를 다운받아서 특정폴더에 압축을 해제합니다.

This package installs using setuptools. If you don’t have setuptools installed, run:

$ python ez_setup.py

…first.

To install the package, first install epubtools, which should be bundled in the distribution zip file:

$ cd epubtools

$ python setup.py install

Then set run the same thing in docbook2epub:

$ cd docbook2epub

$ python setup.py install


최종적으로 설치후 실행하면 아래와 같이 컨솔에 표시되어 집니다.

D:\Downloads\docbook2epub-1.0.4\docbook2epub\docbook2epub\bin>python db2epub.py

book.xml --xsl D:\J2EE\JAVA\docbook-xsl-1.77.1\epub\docbook.xsl --css stylesheet

.css

DEBUG:epubtools.epub:Writing file .\OEBPS\imgs\reed_seal_image.png

DEBUG:epubtools.epub:Writing file .\OEBPS\apa.html

DEBUG:epubtools.epub:Writing file .\OEBPS\apb.html

DEBUG:epubtools.epub:Writing file .\OEBPS\bi01.html

DEBUG:epubtools.epub:Writing file .\OEBPS\bk01-toc.html

DEBUG:epubtools.epub:Writing file .\OEBPS\ch01.html

DEBUG:epubtools.epub:Writing file .\OEBPS\ch02.html

DEBUG:epubtools.epub:Writing file .\OEBPS\ch03.html

DEBUG:epubtools.epub:Writing file .\OEBPS\cover.html

DEBUG:epubtools.epub:Writing file .\OEBPS\index.html

DEBUG:epubtools.epub:Writing file .\OEBPS\ix01.html

DEBUG:epubtools.epub:Writing file .\OEBPS\pr01.html

DEBUG:epubtools.epub:Writing file .\OEBPS\stylesheet.css

DEBUG:epubtools.epub:Writing file .\OEBPS\toc.ncx

INFO:docbook2epub:Created epub archive as 'book.epub'


블로그 이미지

희망잡이

,



영어권에서 책의 형식은 Bookinfo 내의 책의 부대정보 ( Title, Author, Copyright 등 ) 와 몇몇의 서문(Preface), 장( Chapter ), 그리고 부록(Appendix) 로 구성되어 집니다.

또한 책은 참고문헌( Bibliography ), 용어사전( Glossary ), 색인( Indexe ), 출판사이름( Colophon ) 을 가지고 있습니다.

book 의 구조를 xml 로 표현하면 아래와  같습니다.

<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN">

<book>

<bookinfo>

<title>My First Book</title>

<author><firstname>Jane</firstname><surname>Doe</surname></author>

<copyright><year>1998</year><holder>Jane Doe</holder></copyright>

</bookinfo>

<preface><title>Foreword</title> ... </preface>

<chapter> ... </chapter>

<chapter> ... </chapter>

<chapter> ... </chapter>

<appendix> ... </appendix>

<appendix> ... </appendix>

<index> ... </index>

</book>


각 태그에 대한 정보를 적어 보도록 하겠습니다.

Title 은 말그대로 제목을 뜻합니다.

Bookinfo 은 Book 과 관련된 부대정보(Meta Information)을 나타냅니다.

author 는 honorific 정보 : Mr, Mrs 가 있고, firstname, surname, 소속(affiliation) 정보 가 있는데 

회사약어(shortaffil), 직책(jobtitle), 회사이름(orgname), 회사부서(orgdiv) 등을 기입할수 있습니다.

copyright 는 저작권 정보를 나타내는데 year, holder 가 있습니다.

preface 서문은 책의 첫장에 앞서 소개하는 곳으로 Book 과 Part 만 이 서문을 가질수 있습니다.

chapter 장은 아주 다양한 태그가 많이 사용됩니다.


예를 들면 epigraph 는 문학작품의 서두에 붙는 다른 문학작품이나, 신문기사, 

혹은 잡지등의 글에서 인용한 인용문를 말하며, 

이는 앞으로 전개하려고 하는 작품의 전체적인 주제나 의미를 

독자들에게 예고하는 역할을 합니다. 태그는 첫장의 서두에 들어 갑니다.


<epigraph>

<attribution>William Safire</attribution>

<para>

Knowing how things work is the basis for appreciation, and is

thus a source of civilized delight.

</para>

</epigraph>


책에서 사용되고 있는 빈도수가 높은 태그는 아래사이트에 확인하시기 바랍니다.

관련사이트 : http://www.oreillynet.com/xml/blog/2007/05/docbook_elements_in_the_wild_a.html


article 의 구조를 xml 로 표현하면 아래와  같습니다.

article 의 class 속성은 article의 유형을 구분해 줍니다. 

article의 유형 

faq - 질의 및 응답을 모아놓은 article

journalarticle - 학술지(journal)에 등재된 논문(article)

productsheet - 제품설명서

specification - 사양서

techreport - 기술보고서

whitepaper - 기술논문


<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">

<article class="techreport">

<articleinfo>

  <author><firstname>Norman</firstname><surname>Walsh</surname></author>

  <authorinitials>ndw</authorinitials>

  <artpagenums>339-343</artpagenums>

  <volumenum>15</volumenum>

  <issuenum>3</issuenum>

  <publisher><publishername>The TeX User's Group</publishername></publisher>

  <pubdate>1994</pubdate>

  <title>A World Wide Web Interface to CTAN</title>

  <titleabbrev>CTAN-Web</titleabbrev>

  <revhistory>

     <revision>

        <revnumber>1.0</revnumber>

        <date>28 Mar 1994</date>

        <revremark>Submitted.</revremark>

     </revision>

     <revision>

        <revnumber>0.5</revnumber>

        <date>15 Feb 1994</date>

        <revremark>First draft for review.</revremark>

     </revision>

  </revhistory>

</articleinfo>

<para> ... </para>

<sect1><title>On the Possibility of Going Home</title>

<para> ... </para>

</sect1>

<bibliography> ... </bibliography>

</article>


<mediaobject>의 사용예

<mediaobject>

 <videoobject>

 <videodata fileref='movie.avi'/></videoobject>

 <audioobject><objectinfo><title>Acordeonists</title></objectinfo>

 <audiodata fileref="acordeon.wav"/>

 </audioobject>

 <imageobject><imagedata fileref='movie-frame.gif'/>

 </imageobject>

 <imageobject><imagedata fileref="eiffeltower.eps" format="EPS"/>

 </imageobject>

 <imageobject><imagedata fileref="eiffeltower.png" format="PNG"/>

 </imageobject>

 <textobject>

   <para>This video is obtained in a Paris trip.</para>

  <warning><para> It was made with an amateur camera</para>

  </warning>

 </textobject>

 <caption>

  <para>Designed by Gustave Eiffel in 1889, The Eiffel Tower is one of the most widely recognized 

   buildings in the world.

  </para>

 </caption>

 </mediaobject>


index 태그를 사용해서 쉽게 원하는 내용에 접근할 수 있도록 기능을 부여할 수 있습니다.

본문 중의 중요한 항목·술어·인명·지명 등을 뽑아 한 곳에 모아서 보여주는 기능입니다.

<indexterm id="tiger-desc" class="startofrange">

<primary>Big Cats</primary>

<secondary>Tigers</secondary></indexterm>

~

<indexterm startref="tiger-desc" class="endofrange"></indexterm>

위의 코드는 여러장에 걸쳐서 있는 경우에 처음과 끝을 보여주는 기능입니다.


블로그 이미지

희망잡이

,



앞으로 모든 문서는 전자문서로 보관되고 유통될 것이고 기술적으로 어떻게 만들어지는지 알 필요가 있을 것입니다.

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




블로그 이미지

희망잡이

,