この文書は「HTMLBook Specification (Unofficial Draft, O'Reilly Media)」を JAGAT XML パブリッシング準研究会が、研究目的のために日本語訳したものです。この仕様書の原文は https://github.com/oreillymedia/HTMLBook にある英語版であり、その著作権は O’Reilly Media, Inc. が保有しています。この日本語訳は参考情報であり、翻訳の正確性を保証しません。

公開開始日: 2014-12-09

本をHTMLで執筆しましょう! HTMLBookはオープンで、XHTML5ベースでプリントとデジタル双方の本を執筆・制作するための標準です。 HTMLBookは以下のような前提で作られています。

HTMLBook自体は以下のように特徴づけられています:

HTMLBookに関する注記(原注)

HTMLBook仕様でのHTML5要素の要件は以下の通り。 data-type 属性の特有の意味的活用については、別途注記がない限り EPUB 3 Structural Semantics Vocabulary による。

コンテンツモデルの多くについては「ブロック要素」または「インライン要素」を参照のこと;これらの各カテゴリに属するHTML5の要素の対応するリストについては、 Block Elements および Inline Elements を参照のこと。

明記されていないコンテンツモデルまたは属性要件については、HTMLBookは [[!HTML5]] 仕様に対応する要件を採用している。

改訂履歴と注記

2014年4月8日
セクションサブタイトルの仕様を、 [[!HTML5]] 仕様の“Common idioms without dedicated elements” に記載されているベストプラクティスに準拠するように更新。
2013年12月29日
明確さのための小改訂
2013年8月13日
脚注のマークアップの仕様を改訂
2013年7月3日
本を特定するセマンティクスとして、 class の代わりに data-type 属性を使用するよう仕様を改訂。現時点では class 属性はユーザが望んで定義したセマンティクスとして自由に使用でき、かつ class の値に制約はない。仕様のユーザは data-type の値を class 属性の値に複製することにより容易にCSSでの体裁付与したいだろうが、これは完全に任意である。
2013年4月19日
ワーキングドラフト第1版リリース

本の構成要素

HTML要素: <body>

属性要件: data-type="book" ([[EPUB3SSV]]ではなく、[[DOCBOOK]]由来)

コンテンツモデル: 本の題名を含む省略可能な <h1> または本の題名および省略可能な副題名コンテンツを含む ヘッダーブロック、次に、子として1個またはそれ以上の本の構成要素 (要素を表す <div>目次を表す <nav>、そしてそのほかすべての本の区分を表す <section>)

<body data-type="book">
  <h1>jQuery Cookbook</h1>
  <section data-type="chapter">
    <!-- Chapter content here -->
  </section>
</body>

原注: HTML5標準同様、 <body> はルート <html> 要素の子である。

HTML要素: <section>

属性要件: data-type="chapter"

コンテンツモデル: 最初の子は章の題名を含む <h1> または章題名と省略可能な副題名コンテンツを含む ヘッダーブロック であるべきである。次に、ゼロ個以上のブロック要素、次に、ゼロ個以上の Sect1 子要素 (<section data-type="sect1">)

<section data-type="chapter">
  <!-- h1 used for all chapter titles -->
  <h1>Chapter Title</h1>
  <p>Chapter content</p>
  <section data-type="sect1">
    <!-- Section content here... -->
  </section>
</section>

付録

HTML要素: <section>

属性要件: 内容によって data-type="appendix" または data-type="afterword"

コンテンツモデル: 最初の子は付録の題名を含む <h1> または付録の題名と省略可能な副題名コンテンツを含む ヘッダーブロック であるべきである。次に、ゼロ個以上のブロック要素、次に、ゼロ個以上の Sect1 子要素 (<section data-type="sect1">)

<section data-type="appendix">
  <h1>Appendix Title</h1>
  <p>Appendix content</p>
  <section data-type="sect1">
    <!-- Section content here... -->
  </section>
</section>

書誌

HTML要素: <section>

属性要件: data-type="bibliography"

コンテンツモデル: 最初の子は書誌の題名を含む <h1> または書誌の題名と省略可能な副題名コンテンツを含む ヘッダーブロック であるべきである。次に、ゼロ個以上のブロック要素、次に、ゼロ個以上の Sect1 子要素 (<section data-type="sect1">)

<section data-type="bibliography">
  <h1>Bibliography Title</h1>
  <p>Bibliography content</p>
  <section data-type="sect1">
    <!-- Section content here... -->
  </section>
</section>

用語集

HTML要素: <section>

属性要件: data-type="glossary"

コンテンツモデル: 最初の子は用語集の題名を含む <h1> または用語集の題名と省略可能な副題名コンテンツを含む ヘッダーブロック であるべきである。次に、ゼロ個以上のブロック要素、次に、ゼロ個以上の Sect1 子要素 (<section data-type="sect1">)

効率的な手法: 用語集の用語の一覧は data-type が "glossary" である <dl> 要素、data-type が "glossterm" である <dt> 子要素、 data-type が "glossdef" である <dd> 子要素を使用してマークアップすべきである。用語の文字列は <dfn> でラップすべきである。ただし、これは正式な仕様要件ではない。

<section data-type="glossary">
  <h1>Glossary Title</h1>
  <dl data-type="glossary">
    <dt data-type="glossterm">
      <dfn>jQuery</dfn>
    </dt>
    <dd data-type="glossdef">
      Widely used JavaScript library
    </dd>
   </dl>
</section>

序文

HTML要素: <section>

属性要件: 内容によって data-type="preface", data-type="foreword", または data-type="introduction"

コンテンツモデル: 最初の子は序文の題名を含む <h1> または序文の題名と省略可能な副題名コンテンツを含む ヘッダーブロック であるべきである。次に、ゼロ個以上のブロック要素、次に、ゼロ個以上の Sect1 子要素 (<section data-type="sect1">)

<section data-type="preface">
  <h1>Preface Title</h1>
  <p>Preface content</p>
  <section data-type="sect1">
    <!-- Section content here... -->
  </section>
</section>

前付け

HTML要素: <section>

属性要件: 内容によって data-type="halftitlepage", data-type="titlepage", data-type="copyright-page", または data-type="dedication"

コンテンツモデル: 最初の子は前付けの題名を含む <h1> または前付けの題名と省略可能な副題名コンテンツを含む ヘッダーブロック であるべきである。次に、ゼロ個以上のブロック要素、次に、ゼロ個以上の Sect1 子要素 (<section data-type="sect1">)

<section data-type="titlepage">
  <h1>Python in a Nutshell</h1>
  <p>By Alex Martelli</p>
</section>

後付け

HTML要素: <section>

属性要件: 内容によって data-type="colophon", data-type="acknowledgments", data-type="afterword", または data-type="conclusion"

コンテンツモデル: 最初の子は後付けの題名を含む <h1> または後付けの題名と省略可能な副題名コンテンツを含む ヘッダーブロック であるべきである。次に、ゼロ個以上のブロック要素、次に、ゼロ個以上の Sect1 子要素 (<section data-type="sect1">)

<section data-type="colophon">
  <h1>Colophon Title</h1>
  <p>Colophon content</p>
  <section data-type="sect1">
    <!-- Section content here... -->
  </section>
</section>

HTML要素: <div>

属性要件: data-type="part"

コンテンツモデル: 最初の子は部の題名を含む <h1> または部の題名と省略可能な副題名コンテンツを含む ヘッダーブロック であるべきである。次に、任意の部の導入を構成するゼロ個以上のブロック要素、次に、部以外の本の構成要素を表すゼロ個以上の <section>

<div data-type="part">
  <h1>Part One: Introduction to Backbone.js</h1>
  <p>Part Introduction...</p>
  <section data-type="chapter">
    <!-- Chapter content here -->
  </section>
</div>

目次

HTML要素: <nav>

属性要件: data-type="toc"

コンテンツモデル: 目次は [[EPUB3]] ナビゲーション文書の仕様に適合しなければならない。最初の子はゼロ個以上の見出し要素 (<h1>-<h6>)、続いて <ol> (<li> 子要素を持ち、それはひとつの <span> 要素か <a> 要素、それに加え、任意の <ol> 子要素だけを含めることができる)

<nav data-type="toc">
  <h1>Table of Contents</h1>
   <ol>
     <li><a href="examples_page.html">A Note Regarding Supplemental Files</a></li>
     <li><a href="pr02.html">Foreword</a></li>
     <li><a href="pr03.html">Contributors</a>
       <ol>
         <li><a href="pr03.html#I_sect1_d1e154">Chapter Authors</a></li>
         <li><a href="pr03.html#I_sect1_d1e260">Tech Editors</a></li>
       </ol>
     </li>
  </ol>
</nav>

索引

HTML要素: <section>

属性要件: data-type="index"

コンテンツモデル: 最初の子は索引の題名を含む <h1> または索引の題名と省略可能な副題名コンテンツを含む ヘッダーブロック であるべきである。次に、ゼロ個以上のブロック要素、次に、ゼロ個以上の Sect1 子要素 (<section data-type="sect1">)

効率的な手法: HTMLBook は [[EPUBINDEX]] の仕様に従い、必要に応じて意味の変化を使用できる data-type属性を持つ索引の見出し語をマークアップするために <ol>/<li> 要素の使用をお勧めします。ただしこれは正式な仕様要件ではありません。

<section data-type="index">
  <h1>Index Title</h1>
  <div data-type="index:group">
    <h2>A</h2>
    <ol>
      <li data-type="index:term">AsciiDoc, <a href="ch01#asciidoc" data-type="index:locator">All about AsciiDoc</a>
	<ol>
           <li data-type="index:term">conversion to HTML, <a href="ch01#asctohtml" data-type="index:locator">AsciiDoc Output Formats</a></li>
         </ol>
      </li>
      <li data-type="index:term">azalea, <a href="ch01#azalea" data-type="index:locator">Shrubbery</a></li>
    </ol>
  </div>
</section>

HTML要素: <section>

属性要件: data-type="sect1", data-type="sect2", data-type="sect3", data-type="sect4", data-type="sect5" ( [[DOCBOOK]] 語彙から), 階層レベルに応じて。 sect1 は主な本の構成要素 (章、付録、など) に直接ネストされた <section> 要素に使われる。 sect2sect1 <section> にネストされた<section> 要素に使われる。 sect3sect2 <section>にネストされた <section> 要素に使われる、など。

コンテンツモデル: 最初の子は以下の data-type の値によって示される階層レベルに対応した主な見出し要素であるべきである。

"sect1" -> h1
"sect2" -> h2
"sect3" -> h3
"sect4" -> h4
"sect5" -> h5

または節の題名と省略可能な副題名コンテンツを含む ヘッダーブロック 。 続いてゼロ個以上のブロック要素。 続いてゼロ個以上の一つ下の階層の data-type の値を持つ <section> 要素、親の節が "sect4" かそれより高い範囲に限る (例えば <section data-type="sect4"><section data-type="sect3"> にネストされる)

:

<section data-type="sect1">
  <h1>A-Head</h1>
  <p>If you httpparty, you must party hard</p>
  <!-- Some more paragraphs -->
  <section data-type="sect2">
    <h2>B-Head</h2>
    <p>What's the frequency, Kenneth?</p>
    <!-- And so on... -->
  </section>
</section>

ブロック要素

パラグラフ

HTML要素: <p>

:

<p>This is a standard paragraph with some <em>emphasized text</em></p>

サイドバー要素

HTML要素: <aside>

属性要件: data-type="sidebar"

コンテンツモデル: ゼロ個または1個の <h5> 要素 (サイドバーのタイトルを含む) + ゼロ個以上のブロック要素

:

<aside data-type="sidebar">
  <h5>Amusing Digression</h5>
  <p>Did you know that in Boston, they call it "soda", and in Chicago, they call it "pop"?</p>
</aside>

説諭要素

HTML要素: <div>

属性要件: data-type="note", data-type="warning", data-type="tip", data-type="caution", または data-type="important", 配下のコンテンツに応じて

コンテンツモデル: 以下のいずれか

:

<div data-type="note">
  <h1>Helpful Info</h1>
  <p>Please take note of this important information</p>
</div>
<div data-type="warning">Make sure to get your AsciiDoc markup right!</div>

テーブル要素

HTML要素: <table>

コンテンツモデル: ゼロ個または1個の <caption> 要素 (テーブルのタイトル、キャプション) + ゼロ個以上の <colgroup> 要素 + ゼロ個以上の <thead> 要素 + ゼロ個以上の <tbody> 要素、または、ゼロ個以上の <tr> 要素 + ゼロ個以上の <tfoot> 要素

コンテンツモデル <caption> 要素: 以下のいずれか

コンテンツモデル <colgroup> 要素: HTML5の仕様を参照

コンテンツモデル <thead> 要素, <tbody> 要素, <tfoot> 要素: HTML5の仕様を参照

コンテンツモデル <tr> 要素: HTML5の仕様を参照、ただし配下の <td> 要素や <th> 要素は下記の内容を参照

コンテンツモデル <td> 要素, <th> 要素: 以下のいずれか

:

<table>
<caption>State capitals</caption>
<tr>
  <th>State</th>
  <th>Capital</th>
</tr>
<tr>
  <td>Massachusetts</td>
  <td>Boston</td>
</tr>
<!-- And so on -->
</table>
<table>
  <thead>
    <tr>
      <th>First</th>
      <th>Middle Initial</th>
      <th>Last</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Alfred</td>
      <td>E.</td>
      <td>Newman</td>
    </tr>
    <!-- And so on -->
  </tbody>
</table>

図版要素

HTML要素: <figure>

コンテンツモデル: 以下のいずれか

:

<figure>
<figcaption>Adorable cat</figcaption>
<img src="cute_kitty.gif" alt="Photo of an adorable cat"/>
</figure>

例題要素

HTML要素: <div>

属性要件: data-type="example"

コンテンツモデル: 以下のいずれか

:

<div data-type="example">
<h5>Hello World in Python</h5>
<pre data-type="programlisting">print "Hello World"</pre>
</div>

コードリスト

HTML要素: <pre>

HTMLBook固有の属性オプション: data-code-language, コードリストの言語を示すために使用 (例: data-code-language="python")

:

<pre data-type="programlisting">print "<em>Hello World</em>"</pre>

順序付きリスト

HTML要素: <ol>

コンテンツモデル: 各リスト項目にゼロ個以上の <li> 子要素

<li> 子要素のコンテンツモデル: 以下のいずれかが許容されている:

:

<ol>
<li>Step 1</li>
<li>
  <p>Step 2</p>
  <p>Step 2 continued</p>
</li>
<!-- And so on -->
</ol>

項目別リスト

HTML要素: <ul>

コンテンツモデル: 各リスト項目にゼロ個以上の <li> 子要素

<li> 子要素のコンテンツモデル: 以下のいずれかが許容されている:

:

<ul>
<li>Red</li>
<li>Orange</li>
<!-- And so on -->
</ul>

定義リスト

HTML要素: <dl>

コンテンツモデル: HTML5の仕様を反映する

<dt>子要素のコンテンツモデル: テキストおよび/またはゼロ個以上のインライン要素

<dd>子要素のコンテンツモデル: 以下のいずれかが許容されている:

:

<dl>
  <dt>Constant Width Bold font</dt>
  <dd>Used to indicate user input</dd>
</dl>

Blockquote

HTML要素: <blockquote>

コンテンツモデル: 次のいずれかが許容されている:

:

<blockquote>
  <p>When in the course of human events...</p>
  <p data-type="attribution">U.S. Declaration of Independence</p>
</blockquote>

原注: もしblockquoteがepigraphならば,data-type="epigraph"を追加する。例:

<section data-type="chapter">
  <h1>Conclusion</h1>
  <blockquote data-type="epigraph">
    <p>It ain't over till it's over.</p>
    <p data-type="attribution">Yogi Berra</p>
  </blockquote>
  <p>In this final chapter of the book, we will…</p>
</section>

方程式

HTML要素: <div>

属性要件: data-type="equation" ([[EPUB3SSV]]でなく [[DOCBOOK]]由来])

原注: HTMLBookは、HTML文書にエンベッドしたMathMLをサポートしており、それはここで使用できる。

:

<div data-type="equation">
<h5>Pythagorean Theorem</h5>
<math xmlns="http://www.w3.org/1998/Math/MathML">
  <msup><mi>a</mi><mn>2</mn></msup>
  <mo>+</mo>
  <msup><mi>b</mi><mn>2</mn></msup>
  <mo>=</mo>
  <msup><mi>c</mi><mn>2</mn></msup>
</math>
</div>

インライン要素

強調 (通常、斜体表記)

HTML要素: <em>

例:

<p>I <em>love</em> HTML!</p>

強調 (通常、太字表記)

HTML要素: <strong>

例:

<p>I <strong>love</strong> HTML!</p>

リテラル (行中のプログラムコードのための要素: 変数、関数、等)

HTML要素: <code>

例:

<p>Enter <code>echo "Hello World"</code> on the command line</p>

その他の体裁 (下線、取り消し線、等) のための、多目的なフレーズのマークアップ

HTML要素: <span>

例:

<p>Use your own data-type or class attributes for custom styling for formatting
like <span data-type="strikethrough">strikethrough</span></p>

脚注、末注

HTML要素: <span>

属性要件: data-type="footnote"

コンテンツモデル: テキストおよび/またはゼロ個以上のインライン要素

:

<p>Five out of every six people who try AsciiDoc prefer it to
Markdown<span data-type="footnote">Totally made-up statistic</span></p>

原注:

相互参照

HTML要素: <a>

属性要件: data-type="xref" ([[DOCBOOK]]由来)、ローカルの HTMLBook リソースを参照するIDを指す href 属性、 XREF のスタイルを指定するための data-xrefstyle (任意)

例:

<section id="html5" data-type="chapter">
  <h1>Intro to HTML5<h1>
  <p>As I said at the beginning of <a data-type="xref" href="#html5">Chapter 1</a>, HTML5 is great...</p>
  <!-- Blah blah blah -->
</section>

索引語

HTML要素: <a>

属性要件: data-type="indexterm"。主たる索引の項目の値のためには data-primary を使う。第二位の索引の項目の値のためには data-secondary を使う。第三位の索引の項目の値のためには data-tertiary を使う。現在のものに代えて使うべき索引への参照のためには data-see を使う。現在のものに加えて使うべき索引への参照のためには data-seealso を使う。アルファベット順で並べて表示するための整理のための値のためには data-primary-sortasdata-secondary-sortas 、または data-tertiary-sortas を使う。索引の範囲の最後を示すためのタグのためには data-startref="開始の索引マーカーのID" ([[DOCBOOK]] の語義由来) を使う。

コンテンツモデル: なし

:

<p>The Atlas build system<a data-type="indexterm" data-primary="Atlas" data-secondary="build system"/> lets
you build EPUB, Mobi, PDF, and HTML content</p>

上付き文字

HTML要素: <sup>

:

<p>The area of a circle is πr<sup>2</sup></p>

下付き文字

HTML要素: <sub>

:

<p>The formula for water is H<sub>2</sub>O</p>

見出し要素

見出し

HTML要素: <h1>, <h2>, <h3>, <h4>, <h5>, or <h6>

コンテンツモデル: テキストおよび/またはゼロ個以上のインライン要素

原注: 本の主な構成要素 (例:章、部、付録) の多くは見出しを必要とする。<h1>-<h6> からの適切な要素は下記の通りである。これらの構成要素に対応する節にも同様に概説してある:

本のタイトル -> h1
部のタイトル -> h1
章のタイトル -> h1
前書きのタイトル -> h1
付録のタイトル -> h1
奥付のタイトル -> h1
献辞のタイトル -> h1
用語解説のタイトル -> h1
参考文献のタイトル -> h1
sect1のタイトル -> h1
sect2のタイトル -> h2
sect3のタイトル -> h3
sect4のタイトル -> h4
sect5のタイトル -> h5
サイドバーのタイトル -> h5

ヘッダーブロック

HTML要素: <header>

コンテンツモデル: 前の 見出し の節で述べた、親の構成要素に対して適切なレベルを指定した見出しの要素 (h1h5) (例えば章の <header> に対する <h1>)。それから、副題または著者の属性のためのゼロ個以上の <p> 要素。それらは data-type として subtitle または author を指定しなければならない。

:

<section data-type="chapter">
  <header>
    <h1>Chapter title</h1>
    <p data-type="subtitle">Chapter subtitle</p>
  </header>
  <!-- Chapter content here... -->
</section>

インタラクティブ要素

ビデオ

HTML要素: <video>

:

原注: HTML5インタラクティブコンテンツをサポートしていない出力フォーマットのために、フォールバックコンテンツを強く推奨する

<video id="asteroids_video" width="480" height="270" controls="controls" poster="images/fallback_image.png">
<source src="video/html5_asteroids.mp4" type="video/mp4"/>
<source src="video/html5_asteroids.ogg" type="video/ogg"/>
<em>Sorry, the &lt;video&gt; element not supported in your
  reading system. View the video online at http://example.com.</em>
</video>

音声

HTML要素: <audio>

原注: HTML5 インタラクティブコンテンツをサポートしない出力形式のために、音声が再生できなかった場合の代替のコンテンツを用意することを強く推奨する

:

<audio id="new_slang">
<source src="audio/new_slang.wav" type="audio/wav"/>
<source src="audio/new_slang.mp3" type="audio/mp3"/>
<source src="audionew_slang.ogg" type="audio/ogg"/>
<em>Sorry, the &lt;audio&gt; element is not supported in your
  reading system. Hear the audio online at http://example.com.</em>
</audio>

キャンバス

HTML要素: <canvas>

原注: HTML5 または JavaScript をサポートしない環境のために、代替となるもの (例えばリンクまたは画像) を含めるべきである。 HTMLBookドキュメントの<head>要素に、キャンバスの操作のための JS のコードを含む/参照するような<script>要素を含めることができる。

:

<canvas id="canvas" width="400" height="400">
 Your browser does not support the HTML 5 Canvas. See the interactive example at http://example.com.
</canvas>

コメント

HTMLBookドキュメントにコメントを追加するには、標準のHTML/XMLのコメント構文を使用する:

<!-- This is a comment -->

または、data-type="comment" という属性を任意のHTML要素に追加する。例:

<div data-type="comment">This is a comment preceding a paragraph of text</div>
<p>This is a paragraph of text <span data-type="comment">Inline comment in paragraph</span></p>

メタデータ

メタデータ項目

HTML要素: <meta>

属性要件: name (メタデータ項目の名称); content: (メタデータ項目の値)

コンテンツモデル: なし

原注: すべての <meta> 要素はHTMLファイルの <head> 要素の子であるべきである。

:

<head>
  <title>Title of the Book</title>
  <meta name="isbn-13" content="9781449344856"/>
</head>

要素の種別

ブロック要素

HTMLBookでは、HTML5仕様においてフローコンテンツとして分類されている要素の大多数 (ヘッディングコンテンツフレージングコンテンツ、またはセクショニングコンテンツとしても分類されている要素を除く) はブロック要素として考えられている。一覧を示す:

インライン要素

HTMLBookでは、HTML5仕様においてフレージングコンテンツとして分類されている要素の大多数はインライン要素として考えられている。一覧を示す: