-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathepub30-epubcfi.xhtml
801 lines (777 loc) · 79.8 KB
/
epub30-epubcfi.xhtml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html [
<!ENTITY nbsp " ">
<!ENTITY copy "©">
<!ENTITY trade "™">
<!ENTITY reg "®">
]>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xml:lang="ja" version="XHTML+RDFa 1.0">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>EPUB Canonical Fragment Identifier (epubcfi) Specification(日本語訳版)</title>
<link rel="stylesheet" type="text/css" href="css/epub-spec.css"/>
<link rel="stylesheet" href="css/epub-print.css" type="text/css" media="print"/>
<link rel="stylesheet" type="text/css" href="css/translation-memo.css"/>
<link rel="stylesheet" href="js/google-code-prettify/prettify.css" />
<meta name="generator" content="DocBook XSL-NS Stylesheets V1.76.1"/>
<meta name="description" content="EPUB Canonical Fragment Identifier (epubcfi) Specification。EPUB Canonical Fragment Identifier (epubcfi) は、フラグメント識別子を使って EPUB Publication の任意のコンテンツを参照する標準方式を定める。"/>
<script src="http://www.google.com/jsapi/"></script>
<script src="js/ajax-loader.js"></script>
<script src="js/google-code-prettify/prettify.js"></script>
</head>
<body onload="prettyPrint()">
<div class="translation-attention">
<p>この文書は「<a href="http://idpf.org/epub/linking/cfi/epub-cfi.html">EPUB Canonical Fragment Identifier (epubcfi) Specification</a>」を日本語訳したものです。最新の文書は <a href="http://idpf.org/epub/linking/cfi/epub-cfi.html">http://idpf.org/epub/linking/cfi/epub-cfi.html</a> です。原文もしくは最新の情報を参照したい場合は、 <a href="http://idpf.org/epub/linking/cfi/epub-cfi.html">EPUB Canonical Fragment Identifier (epubcfi) Specification</a> を参照ください。</p>
<p>この日本語訳は参考です。公式な文書ではありません。翻訳・解釈の正確性を保証しておりません。<br/>また本文内の訳注は翻訳者の主観による補足です。</p>
<p><a href="#sec-terminology">1.3. 用語</a>と <a href="epub30-publications.html#sec-terminology">EPUB Publications 3.0 - 1.2. 用語</a>に定義されている用語は本文中でも基本的に原文のままとした。</p>
<dl>
<dt>公開日:</dt>
<dd>2012-07-12</dd>
<dt>改訂日:</dt>
<dd>2013-04-05</dd>
<dt>協力:</dt>
<dd>イースト株式会社</dd>
<dt>翻訳:</dt>
<dd>Hiroshi Takase</dd>
<dt>編集:</dt>
<dd>Wataru Yoshimura</dd>
</dl>
</div>
<div class="book" title="EPUB Publications 3.0">
<h1 class="title">EPUB Canonical Fragment Identifier (epubcfi) Specification</h1>
<p class="identity"><span class="pubdate">2011年10月11日</span> <span class="releaseinfo">勧告仕様</span></p>
<dl class="printhistory"><dt>この版</dt>
<dd><a class="link" href="http://www.idpf.org/epub/linking/cfi/epub-cfi-20111011.html">http://www.idpf.org/epub/linking/cfi/epub-cfi-20111011.html</a></dd>
<dt>最新版</dt>
<dd><a class="link" href="http://www.idpf.org/epub/linking/cfi/epub-cfi.html">http://www.idpf.org/epub/linking/cfi/epub-cfi.html</a></dd>
<dt>前の版</dt>
<dd><a class="link" href="http://www.idpf.org/epub/linking/cfi/epub-cfi-20110908.html">http://www.idpf.org/epub/linking/cfi/epub-cfi-20110908.html</a></dd>
</dl><p class="diff">前回のドラフトからの変更点の差分は、<a class="link" href="http://code.google.com/p/epub-revision/source/diff?spec=svn3183&old=2997&r=3183&format=side&path=%2Ftrunk%2Fsrc%2Fspec%2Fepub-cfi.xml">このリンク</a>で入手可能である。</p>
<p class="errata">この文書(いくらかの規範的な訂正を含むかもしれない)のために、<a class="link" href="http://idpf.org/epub/linking/cfi/epub-cfi-errata/">正誤表</a>を参照されたい。</p>
<div class="legal">
<p class="copyright">Copyright © 2010, 2011 International Digital Publishing Forum<sup>™</sup></p>
<div class="legalnotice" title="Legal Notice"><a id="d74853e42"/>
<p>無断複写・転載を禁止する。本作品は合衆国法典第17編の下に保護されている。変更を伴うこの著作物の複製と頒布は、<a class="link" href="http://www.idpf.org">International Digital Publishing Forum (IDPF)</a>の書面による許可を得ない限り禁止されている。</p>
<p>EPUBは International Digital Publishing Forum の登録商標である。</p>
</div>
</div>
<div class="authorgroup"><p class="bridgehead">Editors</p>
<p class="editor">Peter Sorotokin, Adobe </p>
<p class="editor">Garth Conboy, Google Inc. </p>
<p class="editor">Brady Duga, Google Inc. </p>
<p class="editor">John Rivlin, Google Inc. </p>
<p class="editor">Don Beaver, Apple Inc. </p>
<p class="editor">Kevin Ballard, Apple Inc. </p>
<p class="editor">Alastair Fettes, Apple Inc. </p>
<p class="editor">Daniel Weck, DAISY Consortium </p>
</div>
<div class="toc">
<p><strong>目次</strong></p>
<dl>
<dt><span class="chapter"><a href="#sec-overview">1. 要約</a></span></dt>
<dd>
<dl>
<dt><span class="section"><a href="#sec-overview-purpose-and-scope">1.1. 目的とスコープ</a></span></dt>
<dt><span class="section"><a href="#sec-terminology">1.2. 用語</a></span></dt>
<dt><span class="section"><a href="#sec-conformance">1.3. 適合性</a></span></dt>
</dl>
</dd>
<dt><span class="chapter"><a href="#sec-epubcfi-def">2. EPUB CFI の定義</a></span></dt>
<dd>
<dl>
<dt><span class="section"><a href="#sec-epubcfi-intro">2.1. 前置き</a></span></dt>
<dt><span class="section"><a href="#sec-epubcfi-syntax">2.2. 構文</a></span></dt>
<dt><span class="section"><a href="#sec-epubcfi-escaping">2.3. 文字エスケープ</a></span></dt>
</dl>
</dd>
<dt><span class="chapter"><a href="#sec-epubcfi-processing">3. EPUB CFI の処理</a></span></dt>
<dd>
<dl>
<dt><span class="section"><a href="#sec-path-res">3.1. パスの解決</a></span></dt>
<dd>
<dl>
<dt><span class="section"><a href="#sec-path-child-ref">3.1.1. 子ノードへのステップ参照 (<code class="literal">/</code>)</a></span></dt>
<dt><span class="section"><a href="#sec-path-xmlid">3.1.2. XML ID アサーション (<code class="literal">[</code>)</a></span></dt>
<dt><span class="section"><a href="#sec-path-indirection">3.1.3. ステップ間接指定 (<code class="literal">!</code>)</a></span></dt>
<dt><span class="section"><a href="#sec-path-terminating-char">3.1.4. 終了ステップ - 文字オフセット (<code class="literal">:</code>)</a></span></dt>
<dt><span class="section"><a href="#sec-path-terminating-temporal">3.1.5. 終了ステップ - 時間オフセット (<code class="literal">~</code>)</a></span></dt>
<dt><span class="section"><a href="#sec-path-terminating-spatial">3.1.6. 終了ステップ - 空間オフセット (<code class="literal">@</code>)</a></span></dt>
<dt><span class="section"><a href="#sec-path-terminating-tempspatial">3.1.7. 終了ステップ - 時間-空間オフセット (<code class="literal">~</code> + <code class="literal">@</code>)</a></span></dt>
<dt><span class="section"><a href="#sec-path-text-location">3.1.8. テキストロケーションアサーション (<code class="literal">[</code>)</a></span></dt>
<dt><span class="section"><a href="#sec-path-side-bias">3.1.9. サイド指定 (<code class="literal">[</code> + <code class="literal">;s=</code>)</a></span></dt>
<dt><span class="section"><a href="#sec-path-examples">3.1.10. 例</a></span></dt>
</dl>
</dd>
<dt><span class="section"><a href="#sec-sorting">3.2. ソート規則</a></span></dt>
<dt><span class="section"><a href="#sec-intra-cfis">3.3. Intra-Publication CFI</a></span></dt>
<dt><span class="section"><a href="#sec-ranges">3.4. 単純なレンジ</a></span></dt>
<dt><span class="section"><a href="#sec-target-correction">3.5. ターゲットロケーション補正</a></span></dt>
</dl>
</dd>
<dt><span class="chapter"><a href="#sec-extensions">4. EPUB CFI の拡張</a></span></dt>
<dt><span class="bibliography"><a href="#references">参考資料</a></span></dt>
</dl>
</div>
<div class="chapter" title="1 Overview" id="sec-overview">
<h2 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-overview">></a> </span>1 要約</h2>
<div class="section" title="1.1 Purpose and Scope" id="sec-overview-purpose-and-scope">
<h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-overview-purpose-and-scope">></a> </span>1.1 目的とスコープ</h3>
<p id="sibling-specs">本仕様、EPUB Canonical Fragment Identifier(epubcfi)は、フラグメント識別子を使って EPUB® Publication の任意のコンテンツを参照する標準方式を定める。</p>
<p>Web は、ハイパーリンクのコンセプトが非常に効果的であることを証明しているが、EPUB Publication は、内部へリンクする標準化された方法がないためハイパーリンクの多くの恩恵を利用できないでいる。個々の Reading System は独自の方法を開発・実装しているが、共通に理解できる構文がなくてはクロスプラットフォームの相互運用性を実現することはできない。しかし、この障壁を取り除くことによって恩恵を受けることのできる機能は様々である。読書中の位置の保持からナビゲーションへの注釈付けなど、どんな Publication の内部を指すことのできる機能は、開発者と Author にこれまで利用できなかった全く新しい次元を開く。</p>
<p>本仕様は、Publication 内のどのようなロケーションあるいはロケーションの単純な範囲でも一意に特定できる任意の構造参照(即ち、EPUB CFI)を定義してこの状況の改善を試みる。以下の配慮がこのスキームの設計と適応範囲に著しく影響する:</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem"><p>コンテンツ参照に使用するメカニズムは相互運用可能にするべきで(should)、一つの Reading System で作成された読書中の位置は他のシステムでも利用できるようにするべきである(should)</p></li>
<li class="listitem"><p>EPUB コンテンツへのドキュメント参照は、既存のハイパーリンクが Web 全般で参照できるのと同じ方法で使用できるべきである(should)。</p></li>
<li class="listitem"><p>EPUB ファイル内のそれぞれのロケーションは、ドキュメントを変更する必要なく特定できるべきである(should)。</p></li>
<li class="listitem"><p>同じ論理ロケーションを参照するすべてのフラグメント識別子は比較したとき等しくなるべきである(should)。</p></li>
<li class="listitem"><p>ソートおよび比較の検証を含む比較演算は、参照先ファイルへのアクセスなしに行えるべきである(should)。</p></li>
<li class="listitem"><p>簡単な処理は元ファイルへのアクセスなしにできるべきである(should)。(例えば、ファイル内部への深層参照がある場合、ファイルの先頭への参照は簡単な処理で生成できるべきである(should)。)</p></li>
<li class="listitem"><p>識別子の解決は合理的に効率化されているべきである(should)。(例えば、最終章をポイントするフラグメント識別子の解決に第一章の処理は要求されない。)</p></li>
<li class="listitem"><p>参照のターゲットロケーションはパーサーの変化やドキュメントの改版を経て修復できるべきである(should)。</p></li>
<li class="listitem"><p>簡潔で切れ目のない表現をサポートするべきである(should)。</p></li>
<li class="listitem"><p>将来の参照を修復する発見的解決法に適応できる拡張可能なメカニズムを提供すべきである(should)。</p></li>
</ul>
</div>
</div>
<div class="section" title="1.2 Terminology" id="sec-terminology">
<h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-terminology">></a> </span>1.2 用語</h3>
<p><em>この仕様で使われる EPUB 固有の用語の定義については EPUB 仕様書を参照されたい。</em></p>
<div class="glosslist">
<dl>
<dt class="glossentry" title="Standard EPUB CFI" id="gloss-cfi-pub">Standard EPUB CFI</dt>
<dd><p>出版物レベルの EPUB CFI は、EPUB Publication の内部へリンクする。EPUB CFI に先行するパスは Publication のロケーションを参照する。</p></dd>
<dt class="glossentry" title="Intra-Publication EPUB CFI" id="gloss-cfi-intra-pub">Intra-Publication EPUB CFI</dt>
<dd><p>Intra-Publication EPUB CFI は、一つの Content Document が同じ Publication 内の他のドキュメントを参照できるようにする。EPUB CFI に先行するパスはその Publication の Package Document を参照する。</p>
<p>詳しくは <a class="xref" href="#sec-intra-cfis" title="3.3 Intra-Publication CFIs">Intra-Publication CFI</a> を参照されたい。</p></dd>
</dl>
</div>
</div>
<div class="section" title="1.3 Conformance Statements" id="sec-conformance">
<h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-conformance">></a> </span>1.3 適合性</h3>
<p>この文書内のキーワードは"MUST"、"MUST NOT"、"REQUIRED"、"SHALL"、"SHALL NOT"、"SHOULD"、"SHOULD NOT"、"RECOMMENDED"、"MAY"、"OPTIONAL"は <a class="biblioref" href="#refRFC2119" title="Key words for use in RFCs to Indicate Requirement Levels (RFC 2119)">[<abbr>RFC2119</abbr>]</a> の記述に従って解釈される。</p>
<p>この仕様のすべてのセクションは規定である。但し"このセクションは参考情報である"という参考情報状態ラベルで識別される箇所を除く。セクションと付録への参考情報状態の適用は、含まれる可能性のあるすべての子コンテンツおよびサブセクションに適用される。</p>
<p>この仕様のすべての用例は参考情報である。</p>
</div>
</div>
<div class="chapter" title="2 EPUB CFI Definition" id="sec-epubcfi-def">
<h2 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-epubcfi-def">></a> </span>2 EPUB CFI の定義</h2>
<div class="section" title="2.1 Introduction" id="sec-epubcfi-intro">
<h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-epubcfi-intro">></a> </span>2.1 前置き</h3>
<p class="informative">このセクションは参考情報である。</p>
<p>フラグメント識別子は、リソース内のロケーションを定義する IRI <a class="biblioref" href="#refRFC3987" title="Internationalized Resource Identifiers (IRIs) (RFC 3987)">[<abbr>RFC3987</abbr>]</a> の一部である。構文的には、リソース IRI の終わりに付属するハッシュ(<code class="literal">#</code>)で始まるセグメントである。HTML ドキュメントには、ID および名前付きアンカーがフラグメント識別子として使用されている。XML ドキュメントには、ID を参照するために Shorthand XPointer <a class="biblioref" href="#refXPTRSH" title="XPointer Shorthand Notation">[<abbr>XPTRSH</abbr>]</a> の表記が用いられている。</p>
<p>Canonical Fragment Identifier(CFI)は、これらと似たような構成であるが EPUB Publication 内部のロケーションを表現する。例えば:</p>
<div class="informalexample">
<pre class="synopsis">book.epub#epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/3:10)</pre>
</div>
<p>ハッシュの直後に続く関数のような文字列(<code class="literal">epubcfi(…)</code>)は、このフラグメント識別子がこの仕様の定義するスキームに従っていることを示し、括弧で囲まれた値は特定の Publication(<code class="filename">book.epub</code>)内部のロケーションを参照するのに使われる構文である。<a class="xref" href="#sec-path-res" title="3.1 Path Resolution">パスの解決</a>によって定義された処理ルールを使って、Reading System は構文を解析し、Publication の中の該当する Content Document を開いて、指定されたロケーションを User のために読み込むことができる。</p>
<p>EPUB CFI 構文の完全な定義は次のセクションに規定されている。</p>
<div class="note" title="note">
<h3 class="title">NOTE</h3>
<p>あらゆる XML+ZIP ベースのファイルフォーマットのための、より汎用的な CFI のようなスキームが将来定義されるかもしれないため、スキーム名の先頭に <code class="literal">epub</code> を付加している。</p>
</div>
</div>
<div class="section" title="2.2 Syntax" id="sec-epubcfi-syntax">
<h3 class="title">
<span class="link-marker">
<a class="hidden-reveal" title="Link here" href="#sec-epubcfi-syntax">></a> </span>2.2 構文</h3>
<table width="100%" cellpadding="0" border="0" style="background-color: #EEE" class="productionset" summary="EBNF productions for The EPUB Canonical Fragment Identifier (CFI) Syntax">
<caption>(EBNF 記法 <a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=26153">ISO/IEC 14977</a>)</caption>
<tbody>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.fragment"><a href="#epubcfi.ebnf.fragment">fragment</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> "epubcfi(" , ( <a href="#epubcfi.ebnf.path">path</a> | <a href="#epubcfi.ebnf.range">range</a> ) , ")" ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.path"><a href="#epubcfi.ebnf.path">path</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"><a href="#epubcfi.ebnf.step">step</a> , <a href="#epubcfi.ebnf.local_path">local_path</a> ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.range"><a href="#epubcfi.ebnf.range">range</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"><a href="#epubcfi.ebnf.path">path</a> , "," , <a href="#epubcfi.ebnf.local_path">local_path</a> , "," , <a href="#epubcfi.ebnf.local_path">local_path</a> ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.local_path"><a href="#epubcfi.ebnf.local_path">local_path</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> { <a href="#epubcfi.ebnf.step">step</a> | "!" } , [ <a href="#epubcfi.ebnf.termstep">termstep</a> ] ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.step"><a href="#epubcfi.ebnf.step">step</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> "/" , <a href="#epubcfi.ebnf.integer">integer</a> , [ "[" , <a href="#epubcfi.ebnf.assertion">assertion</a> , "]" ] ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.termstep"><a href="#epubcfi.ebnf.termstep">termstep</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"><a href="#epubcfi.ebnf.terminus">terminus</a> , [ "[" , <a href="#epubcfi.ebnf.assertion">assertion</a> , "]" ] ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.terminus"><a href="#epubcfi.ebnf.terminus">terminus</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> ( ":" , <a href="#epubcfi.ebnf.integer">integer</a> ) | ( "@" , <a href="#epubcfi.ebnf.number">number</a> , ":" , <a href="#epubcfi.ebnf.number">number</a> ) | ( "~" , <a href="#epubcfi.ebnf.number">number</a> ) | ( "~" , <a href="#epubcfi.ebnf.number">number</a> , "@" , <a href="#epubcfi.ebnf.number">number</a> , ":" , <a href="#epubcfi.ebnf.number">number</a> ) ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.number"><a href="#epubcfi.ebnf.number">number</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> ( <a href="#epubcfi.ebnf.digit-non-zero">digit-non-zero</a> , { <a href="#epubcfi.ebnf.digit">digit</a> } , [ "." , { <a href="#epubcfi.ebnf.digit">digit</a> } , <a href="#epubcfi.ebnf.digit-non-zero">digit-non-zero</a> ] ) | ( <a href="#epubcfi.ebnf.zero">zero</a> , "." , { <a href="#epubcfi.ebnf.digit">digit</a> } , <a href="#epubcfi.ebnf.digit-non-zero">digit-non-zero</a> ) ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.integer"><a href="#epubcfi.ebnf.integer">integer</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"><a href="#epubcfi.ebnf.zero">zero</a> | ( <a href="#epubcfi.ebnf.digit-non-zero">digit-non-zero</a> , { <a href="#epubcfi.ebnf.digit">digit</a> } ) ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.assertion"><a href="#epubcfi.ebnf.assertion">assertion</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> [ <a href="#epubcfi.ebnf.csv">csv</a> ] , { <a href="#epubcfi.ebnf.parameter">parameter</a> } ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.parameter"><a href="#epubcfi.ebnf.parameter">parameter</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> ";" , <a href="#epubcfi.ebnf.value-no-space">value-no-space</a> , "=" , <a href="#epubcfi.ebnf.csv">csv</a> ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.csv"><a href="#epubcfi.ebnf.csv">csv</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top">
<a href="#epubcfi.ebnf.value">value</a> , { "," , <a href="#epubcfi.ebnf.value">value</a> } ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.value"><a href="#epubcfi.ebnf.value">value</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top">
<a href="#epubcfi.ebnf.string-escaped-special-chars">string-escaped-special-chars</a> ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.value-no-space"><a href="#epubcfi.ebnf.value-no-space">value-no-space</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"><a href="#epubcfi.ebnf.value">value</a> - ( [ <a href="#epubcfi.ebnf.value">value</a> ] , <a href="#epubcfi.ebnf.space">space</a> , [ <a href="#epubcfi.ebnf.value">value</a> ] ) ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.special-chars"><a href="#epubcfi.ebnf.special-chars">special-chars</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"><a href="#epubcfi.ebnf.circumflex">circumflex</a> | <a href="#epubcfi.ebnf.square-brackets">square-brackets</a> | <a href="#epubcfi.ebnf.parentheses">parentheses</a> | <a href="#epubcfi.ebnf.comma">comma</a> | <a href="#epubcfi.ebnf.semicolon">semicolon</a> | <a href="#epubcfi.ebnf.equal">equal</a> ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.escaped-special-chars"><a href="#epubcfi.ebnf.escaped-special-chars">escaped-special-chars</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> ( <a href="#epubcfi.ebnf.circumflex">circumflex</a> , <a href="#epubcfi.ebnf.circumflex">circumflex</a> ) | ( <a href="#epubcfi.ebnf.circumflex">circumflex</a> , <a href="#epubcfi.ebnf.square-brackets">square-brackets</a> ) | ( <a href="#epubcfi.ebnf.circumflex">circumflex</a> , <a href="#epubcfi.ebnf.parentheses">parentheses</a> ) | ( <a href="#epubcfi.ebnf.circumflex">circumflex</a> , <a href="#epubcfi.ebnf.comma">comma</a> ) | ( <a href="#epubcfi.ebnf.circumflex">circumflex</a> , <a href="#epubcfi.ebnf.semicolon">semicolon</a> ) | ( <a href="#epubcfi.ebnf.circumflex">circumflex</a> , <a href="#epubcfi.ebnf.equal">equal</a> ) ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.character-escaped-special"><a href="#epubcfi.ebnf.character-escaped-special">character-escaped-special</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> ( <a href="#epubcfi.ebnf.character">character</a> - <a href="#epubcfi.ebnf.special-chars">special-chars</a> ) | <a href="#epubcfi.ebnf.escaped-special-chars">escaped-special-chars</a> ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.string-escaped-special-chars"><a href="#epubcfi.ebnf.string-escaped-special-chars">string-escaped-special-chars</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"><a href="#epubcfi.ebnf.character-escaped-special">character-escaped-special</a> , { <a href="#epubcfi.ebnf.character-escaped-special">character-escaped-special</a> } ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.string"><a href="#epubcfi.ebnf.string">string</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"><a href="#epubcfi.ebnf.character">character</a> , { <a href="#epubcfi.ebnf.character">character</a> } ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.digit"><a href="#epubcfi.ebnf.digit">digit</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top">
<a href="#epubcfi.ebnf.zero">zero</a> | <a href="#epubcfi.ebnf.digit-non-zero">digit-non-zero</a> ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.digit-non-zero"><a href="#epubcfi.ebnf.digit-non-zero">digit-non-zero</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.zero"><a href="#epubcfi.ebnf.zero">zero</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> "0" ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.space"><a href="#epubcfi.ebnf.space">space</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> " " ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.circumflex"><a href="#epubcfi.ebnf.circumflex">circumflex</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> "^" ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.double-quote"><a href="#epubcfi.ebnf.double-quote">double-quote</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> '"' ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.square-brackets"><a href="#epubcfi.ebnf.square-brackets">square-brackets</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> "[" | "]" ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.parentheses"><a href="#epubcfi.ebnf.parentheses">parentheses</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> "(" | ")" ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.comma"><a href="#epubcfi.ebnf.comma">comma</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> "," ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.semicolon"><a href="#epubcfi.ebnf.semicolon">semicolon</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> ";" ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.equal"><a href="#epubcfi.ebnf.equal">equal</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> "=" ;</td>
<td align="left" valign="top"> </td>
</tr>
<tr>
<td align="right" valign="top" id="epubcfi.ebnf.character"><a href="#epubcfi.ebnf.character">character</a></td>
<td valign="top" align="center"><code>=</code></td>
<td valign="top"> ? Unicode 文字 ? ;</td>
<td align="left" valign="top"> </td>
</tr>
</tbody>
</table>
<div class="constraintdef" id="unicode-chars">
<span class="link-marker"><a class="hidden-reveal" title="Link here" href="#unicode-chars">></a> </span>
<p><strong>Unicode 文字</strong></p>
<p>利用できる Unicode 文字の定義は [XML 1.0] と同じである。これには、サロゲートブロック、FFFE、および FFFF を除く:</p>
<pre class="programlisting">#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]</pre>
<p>ドキュメントの著者は、[Unicode] の section 2.3 で定義される「互換文字」を避けることを推奨する。次の範囲で定義される文字も使用しないことを推奨する。これらは、制御文字または恒久的に未定義な Unicode 文字である:</p>
<pre class="programlisting">[#x7F-#x84], [#x86-#x9F], [#xFDD0-#xFDEF],
[#x1FFFE-#x1FFFF], [#x2FFFE-#x2FFFF], [#x3FFFE-#x3FFFF],
[#x4FFFE-#x4FFFF], [#x5FFFE-#x5FFFF], [#x6FFFE-#x6FFFF],
[#x7FFFE-#x7FFFF], [#x8FFFE-#x8FFFF], [#x9FFFE-#x9FFFF],
[#xAFFFE-#xAFFFF], [#xBFFFE-#xBFFFF], [#xCFFFE-#xCFFFF],
[#xDFFFE-#xDFFFF], [#xEFFFE-#xEFFFF], [#xFFFFE-#xFFFFF],
[#x10FFFE-#x10FFFF].</pre>
</div>
<p>Canonical Fragment Identifier(CFI)は、この特殊な参照方法を示す初期シーケンス <code class="literal">epubcfi</code> と括弧に囲まれたパスまたはレンジによって構成される。パスは、ロケーションを参照する構造化されたステップのシーケンスとして組み立てられる。レンジは、開始と終了を指定する2つのローカル(または相対)パスを後ろに持ったパスである。</p>
<p>ステップは、ナビゲーションステップまたは終了ステップのいずれかである。ナビゲーションステップは、必要に応じて(例えば、要素を数える、子要素を処理する、あるいは参照をたどるために)繰り返してもよい(may)。終了ステップはただ一度だけ出現してもよい(may)。その場合、それはシーケンスの最後のステップでなければならない(must)。</p>
<p>括弧内の従属文字列は、伸長可能なアサーションであり、パスの移動や、同じ文書の異なる版へのパスの移行の精度を向上させる。これらのアサーションは、ドキュメント内でたどる要素に関する付加情報を保持しており、Publication が変更されても目的のロケーションを修復することが可能になる。</p>
<p>上記の構文で定義される <code class="literal">value</code> はどのような文字のシーケンスでも許可するが、次に示す文字には曲折アクセント記号(<code class="literal">^</code>)を使ってエスケープし、解析を妨げぬようにしなければならない(must):</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem"><p>角括弧 (<code class="literal">[</code>,<code class="literal">]</code>)</p></li>
<li class="listitem"><p>曲折アクセント記号 (<code class="literal">^</code>)</p></li>
<li class="listitem"><p>コンマ (<code class="literal">,</code>)</p></li>
<li class="listitem"><p>丸括弧 (<code class="literal">(</code>,<code class="literal">)</code>)</p></li>
<li class="listitem"><p>セミコロン (<code class="literal">;</code>)</p></li>
</ul>
</div>
<div class="informalexample">
<p>テキスト <code class="literal">2[1]</code> の後ろのロケーションを指す EPUB CFI の例。</p>
<pre class="synopsis">epubcfi(/6/7[chap05ref]!/4[body01]/10/2/1:3[2^[1^]])</pre>
</div>
<p>パスとレンジの中での数字と整数の利用には次のルールが適用される:</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem"><p>数字または整数の前に来るゼロは利用できない(一意性を保証するため)。</p></li>
<li class="listitem"><p>数字の小数部分の末尾のゼロは利用できない。</p></li>
<li class="listitem"><p>ゼロは整数 <code class="literal">0</code> で表現しなければならない(must)。</p></li>
<li class="listitem"><p><code class="literal">1 > N > 0</code> のレンジの数字は <code class="literal">0.</code> で始めなければならない(must)。</p></li>
<li class="listitem"><p>整数(integral numbers)は整数(integers)で表さなければならない(must)。</p></li>
</ul>
</div>
</div>
<div class="section" title="2.3 Character Escaping" id="sec-epubcfi-escaping">
<h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-epubcfi-escaping">></a> </span>2.3 文字エスケープ</h3>
<p><a class="xref" href="#sec-epubcfi-syntax" title="2.2 Syntax">構文</a>で説明されているように、EPUB CFI の文法にはフラグメント識別子の表記の中の区切り文字となる特殊用途を持つ文字がある。これらの文字は、区切り文字として使用するので *なけ* れば、区切り文字に誤読されることなく EPUB CFI データの中で使用できるように、曲折アクセント記号 '<code class="literal">^</code>' 文字でエスケープしなければならない(must)。そのような EPUB CFI の使用コンテクストに応じて、さらなる文字エスケープを、すべての潜在的に矛盾するテキストトークンが正しくエンコードされるのを保証するために求めてもよい(may)。</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<div class="itemizedlist">
<p>IRIとURI参照:</p>
<ul class="itemizedlist">
<li class="listitem"><p>EPUB CFI(フラグメント識別子)スキームは URI および IRI 参照内で使用されるように設計されている。<a class="biblioref" href="#refRFC3986" title="Uniform Resource Identifier (URI): Generic Syntax (RFC 3986)">[<abbr>RFC3986</abbr>]</a> の仕様では区切り文字として特殊用途を持つ多数の“予約”文字を定義しており、もしそれらが URI/IRI 参照の構文構造と衝突する場合にはエスケープしてもよい(may)。エスケープにはパーセント記号 '<code class="literal">%</code>' を使用し、エスケープ可能な文字はパーセントエンコーディングされる。例えば、パーセント記号はエスケープエンコードされると "<code class="literal">%25</code>" となる(EPUB CFI の曲折アクセント記号 '<code class="literal">^</code>' と、二重文字 '<code class="literal">^^</code>' を使用してエスケープするところの違いに注意されたい)。</p></li>
<li class="listitem"><p>IRI 参照とは異なり、URI 参照は Unicode 文字を ASCII エンコードする必要がある。EPUB 仕様自体は IRI に基づいている(つまり、著者や制作ツールは IRI を使用することを想定している)が、いくつかのシステムや API は URI のみのサポートでもよい(may)。その結果、実装者は、<a class="biblioref" href="#refRFC3987" title="Internationalized Resource Identifiers (IRIs) (RFC 3987)">[<abbr>RFC3987</abbr>]</a> で定義されている IRI から URI 参照の変換処理をさらに必要としてよい(may)。禁止文字は次のようにエスケープする:</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem"><p>それぞれの禁止文字を1バイトまたは複数バイトの UTF-8 <a class="biblioref" href="#refRFC2279" title="UTF-8, a transformation format of ISO 10646 (RFC 2279)">[<abbr>RFC2279</abbr>]</a> へ変換する。URI 参照での禁止文字は、すべての非 ASCII 文字および <a class="biblioref" href="#refRFC2396" title="Uniform Resource Identifiers (URI): Generic Syntax (RFC 2396)">[<abbr>RFC2396</abbr>]</a> の 2.4 節にリストされた除外文字だが、ナンバー記号 '<code class="literal">#</code>'、パーセント記号 '<code class="literal">%</code>'、および <a class="biblioref" href="#refRFC2732" title="Format for Literal IPv6 Addresses in URL's (RFC 2732)">[<abbr>RFC2732</abbr>]</a> で再び許可された角括弧文字は除く。</p>
<p>その結果として得られたバイトを URI エスケープメカニズムによってエスケープする。(つまり、 '<code class="literal">%HH</code>' へ変換する。この HH はバイト値の 16 進法表示である。)</p>
<p>元の文字は変換結果の文字シーケンスで置き換える。</p></li>
</ul>
</div>
</li>
</ul>
</div>
</li>
<li class="listitem"><p>(X)HTML コンテキスト:</p>
<p>IRI 参照は、EPUB Publication を構成するさまざまな種類のドキュメントで使用されるように設計されている。XML および XHTML は、独自の文字エスケープ規則を必要とする別の挿入コンテキストを意味する。例えば、二重引用文字または山括弧は、マークアップ構文内で重要な区切り文字と競合するので、 <code class="literal">&xxx;</code> 特殊シーケンス(文字参照)を使ってエスケープしなければならない(must)。</p></li>
</ul>
</div>
<p>文字エスケープを複数回適用して、EPUB CFI をエスケープまたはエスケープの解除をする場合、元の形式に戻すにはその逆の順序で適用しなければならない(must)。例えば、[ EPUB-CFI -> IRI -> XHTML ] ならば、 [ XHTML -> IRI -> EPUB-CFI ] の適用順序となる。</p>
<div class="informalexample">
<p>次の例は、(曲折アクセント記号 '<code class="literal">^</code>' によるエスケープだけの)EPUB CFI の「未加工」の形を示している。最後部のアサーションテキスト、およびエスケープされた左右角括弧と曲折アクセント記号に注目されたい(エスケープされていないテキストは 'Ф-"spa ce"-99%-aa[bb]^'である):</p>
<pre class="synopsis">epubcfi(/6/7!/4/10/2/1:3[Ф-"spa ce"-99%-aa^[bb^]^^])</pre>
</div>
<div class="informalexample">
<p>IRI で使用される場合、アサーション内の空白文字はパーセントエスケープ ('<code class="literal">%20</code>') してもよい(may)。また、パーセント文字自体はエスケープ('<code class="literal">%25</code>')しなければならない(must)。角括弧 '<code class="literal">[</code>' '<code class="literal">]</code>' とセミコロン '<code class="literal">:</code>' は(URI の仕様によれば)「予約」文字となっているが、IRI プロセッサーがフラグメント識別子を抽出する際の区切り文字としては意味も持たないため、エスケープする必要はない。(つまり、IRI のフラグメン構成部品は、 '<code class="literal">#</code>' 文字以降のテキストをコピーして曖昧さなく解析できる。)曲折アクセント記号 '<code class="literal">^</code>' もまた “賢明はでない”(または “安全ではない”)文字の部類に属するが、EPUB フラグメント識別子のスキームではエスケープする必要はない。次は IRI のエスケープされた EPUB CFI である:</p>
<pre class="synopsis">book.epub#epubcfi(/6/7!/4/10/2/1:3[Ф-"spa%20ce"-99%25-aa^[bb^]^^])</pre>
</div>
<div class="informalexample">
<p>XML 属性の中に IRI を指定する場合、二重引用文字(引用符)は属性値の区切り文字として重要であるため '<code class="literal">&#x22;</code>' にエスケープする。 キリルの “EF” 文字('Ф')は EPUB XML ドキュメントでそのままサポートされていることに注目されたい。EPUB XML ドキュメントは(UTF-8 エンコーディングを使って Unicode 文字のレパートリーを表現するため)エンコードする必要はない:</p>
<pre class="synopsis">book.epub#epubcfi(/6/7!/4/10/2/1:3[Ф-&#x22;spa%20ce-99%25&#x22;-aa^[bb^]^^])</pre>
</div>
<div class="informalexample">
<p>IRI を URI に変換する必要がある場合、非 ASCII のキリルの “EF” 文字 ('Ф') は2バイト (16 進数で、'<code class="literal">0xd0 0xa4</code>') へパーセントエスケープする。結果として次のような URI となる:</p>
<pre class="synopsis">book.epub#epubcfi(/6/7!/4/10/2/1:3[%d0%a4-&#x22;spa%20ce&#x22;-99%25-aa^[bb^]^^])</pre>
<p>URI エンコード/デコード API は、次の例に示すとおり、通常「強引に」パーセントエンコードを行う。曲折アクセント記号 '<code class="literal">^</code>'(%5E)、角括弧 '<code class="literal">[</code>'(%5B)'<code class="literal">]</code>'(%5D)、二重引用符 '<code class="literal">"</code>'(%22)が、(URI の中では “安全ではない”/“賢明はでない” 性質を持つため)どのようにパーセントエンコードされるかにも注意する必要がある:</p>
<pre class="synopsis">book.epub#epubcfi(/6/7!/4/10/2/1:3%5B%D0%A4-%22spa%20ce%22-99%25-aa%5E%5Bbb%5E%5D%5E%5E%5D)</pre>
</div>
</div>
</div>
<div class="chapter" title="3 EPUB CFI Processing" id="sec-epubcfi-processing">
<h2 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-epubcfi-processing">></a> </span>3 EPUB CFI の処理</h2>
<div class="section" title="3.1 Path Resolution" id="sec-path-res">
<h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-path-res">></a> </span>3.1 パスの解決</h3>
<p>EPUB CFI を Publication 内のロケーションへ解決する処理は、Package Document の <code>package</code> ルート要素から開始する。CFI のそれぞれのステップは、次のサブセクションで定める規則を適用しながら、左から右へ1つずつ処理される。</p>
<div class="note" title="note">
<h3 class="title">NOTE</h3>
<p>以下のサブセクションでの EPUB CFI の例は、<a class="xref" href="#sec-path-examples" title="3.1.10 Examples">用例</a>のサンプルドキュメントに基づく。</p>
</div>
<div class="section" title="3.1.1 Step Reference to Child Node (/)" id="sec-path-child-ref">
<h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-path-child-ref">></a> </span>3.1.1 子ノードへのステップ参照(<code class="literal">/</code>)</h4>
<p>斜線(<code class="literal">/</code>)とそれに続く整数のステップは次のような方法で1つまたは複数の子ノードを参照する:</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem"><p>それぞれの要素は正の<em>偶数</em>のインデックスが割り当てられる。最初の要素のインデックスは <code class="literal">2</code> が割り当てられる。2番目は <code class="literal">4</code> など。</p></li>
<li class="listitem"><p>最初の要素の前や、要素の間や、最後の要素の後ろに位置する非要素ノードのそれぞれの(空かもしれない)コレクションは、その位置に応じて<em>奇数</em>のインデックスが与えられる。(これらは通常、Publication のテキストを参照する。)</p></li>
<li class="listitem"><p>テキストノード以外の非要素ノードは常に無視される。(この仕様では、テキストノードは、テキスト、CDATA セクション、そして実体参照を含む。)</p></li>
</ul>
</div>
<p>このインデックス方法は、XML パーサーが行う空白テキストノード、CDATA セクション、および実体参照の処理にノード識別が影響を受けないようにする。(例えば、パーサーは、空白だけのテキストノードを空白1文字にまとめるのかどうか、テキスト、CDATA セクション、そして実体参照を異なったノードとして保つかどうか、または複数ノード内のテキストを改行するかどうかによって起こりうる曖昧さを避けるためである。)</p>
<p><a class="glossterm" href="#gloss-cfi-pub" title="Standard EPUB CFI">Standard EPUB CFI</a> では、CFI の先頭のステップは斜線(<code class="literal">/</code>)とそれに続く(Package Document の <code>package</code> ルート要素の <code>spine</code> 子要素を参照する)偶数の番号で始まらなければならない(must)。CFI がたどる Package Document は、Publication の <code class="filename">META-INF/container.xml</code> ファイルの中のデフォルトのレンディションとして指定されていなければならない(must)。(つまり、 <code class="filename">container.xml</code> の最初の <code>rootfile</code> 要素で参照される Package Document であること。)</p>
<p><a class="glossterm" href="#gloss-cfi-intra-pub" title="Intra-Publication EPUB CFI">Intra-Publication EPUB CFI</a>では、最初のステップは斜線とそれに続く(<code>package</code> 要素から始まる Package Document 内の位置を参照する)ノード番号で始まらなければならない(must)。</p>
</div>
<div class="section" title="3.1.2 XML ID Assertion ([)" id="sec-path-xmlid">
<h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-path-xmlid">></a> </span>3.1.2 XML ID アサーション(<code class="literal">[</code>)</h4>
<p>EPUB CFI が、ID <a class="biblioref" href="#refXML" title="Extensible Markup Language (XML) 1.0 (Fifth Edition)">[<abbr>XML</abbr>]</a> を含んだ要素を参照する場合、該当するパスのステップは、(斜線(<code class="literal">/</code>)と要素を特定する偶数の後ろに)角括弧で囲んだその ID を含めなければならない(must)。</p>
<p>識別子の仕様は、CFI のスキームを堅牢にする。Reading System は CFI で参照された位置が最初に目的とした位置でないと判断してもよく(may)、コンテンツ内の求められる目的の箇所に到達するステップのセットを計算するために識別子を使用してもよい(may)(<a class="xref" href="#sec-target-correction" title="3.5 Intended Target Location Correction">ターゲットロケーション補正</a>を参照されたい)。この追加された堅牢性のコストは、CFI 文字列の比較(とソート)はすべての括弧で囲まれた文字列を論理的に除去した後でのみ実行してもよい(may)(<a class="xref" href="#sec-sorting" title="3.2 Sorting Rules">ソート規則</a>を参照されたい)。</p>
</div>
<div class="section" title="3.1.3 Step Indirection (!)" id="sec-path-indirection">
<h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-path-indirection">></a> </span>3.1.3 ステップ間接指定 (<code class="literal">!</code>)</h4>
<p>先頭が感嘆符(<code class="literal">!</code>)のステップは、参照を追随せねばならず(must)、新しいターゲットノード(または XML ドキュメント全体が参照された場合はルート要素ノード)から始まる次のステップが適用されて続くことを示す。</p>
<p>次の参照のみが有効である:</p>
<div class="itemizedlist">
<ul class="itemizedlist">
<li class="listitem"><p>Package Document の <code>spine</code> 内の <code>itemref</code> に対しては、参照は <code>manifest</code> 内で該当する(つまり、<code>itemref</code> の <code>idref</code> 属性が参照する)<code>item</code> 要素の <code>href</code> 属性によって定義される。</p></li>
<li class="listitem"><p><a class="biblioref" href="#refHTML5" title="HTML5: A vocabulary and associated APIs for HTML and XHTML">[<abbr>HTML5</abbr>]</a> <code><a class="link" href="http://www.w3.org/TR/html5/Overview.html#the-iframe-element">iframe</a></code> 要素と <code><a class="link" href="http://www.w3.org/TR/html5/Overview.html#the-embed-element">embed</a></code> 要素に対しては、参照は <code>src</code> 属性によって定義される。</p></li>
<li class="listitem"><p><a class="biblioref" href="#refHTML5" title="HTML5: A vocabulary and associated APIs for HTML and XHTML">[<abbr>HTML5</abbr>]</a> <code><a class="link" href="http://www.w3.org/TR/html5/Overview.html#the-object-element">object</a></code> 要素に対しては、参照は <code>data</code> 属性によって定義される。</p></li>
<li class="listitem"><p><a class="biblioref" href="#refSVG" title="Scalable Vector Graphics (SVG) 1.1 (Second Edition)">[<abbr>SVG</abbr>]</a> <code><a class="link" href="http://www.w3.org/TR/SVG11/struct.html#ImageElement">image</a></code> と <code><a class="link" href="http://www.w3.org/TR/SVG11/struct.html#UseElement">use</a></code> 要素に対しては、参照は <code>xlink:href</code> 属性によって定義される。</p></li>
</ul>
</div>
<div class="note" title="note">
<h3 class="title">NOTE</h3>
<p>このスキームは、単に埋め込み参照のみを対象としておりハイパーリンクは考慮していない。そのため、<a class="biblioref" href="#refHTML5" title="HTML5: A vocabulary and associated APIs for HTML and XHTML">[<abbr>HTML5</abbr>]</a>(または <a class="biblioref" href="#refSVG" title="Scalable Vector Graphics (SVG) 1.1 (Second Edition)">[<abbr>SVG</abbr>]</a>)の <code>a</code> 要素のリンクをたどるのは違反となる。</p>
</div>
</div>
<div class="section" title="3.1.4 Terminating Step - Character Offset (:)" id="sec-path-terminating-char">
<h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-path-terminating-char">></a> </span>3.1.4 終了ステップ‐文字オフセット(<code class="literal">:</code>)</h4>
<p>先頭のコロン(<code class="literal">:</code>)とそれに続く整数の終了ステップは文字オフセットを参照する。指定された文字オフセットの要素ノードへの適用は、その要素が <a class="biblioref" href="#refHTML5" title="HTML5: A vocabulary and associated APIs for HTML and XHTML">[<abbr>HTML5</abbr>]</a> <code><a class="link" href="http://www.w3.org/TR/html5/Overview.html#the-img-element">img</a></code> 要素であり、文字オフセットを適用できるテキストを含んだ <code>alt</code> 属性を持つ場合のみ行なってもよい(may)。</p>
<p>テキストノードでは、オフセットはゼロベースで常に文字の間の位置を参照する。従って、<code class="literal">0</code> は最初の文字の前を意味し、UTF-16での全長の数は最後の文字の後ろを意味する。使用できるテキストの UTF-16 の長さよりも大きな文字オフセット値を指定してはならない(must not)。</p>
<p>文字オフセット終了ステップは <code class="literal">/N</code> ステップに続く場合のみ指定してもよい(may)。XHTML Content Document では、<code class="literal">N</code> は <code>img</code> 要素の <code>alt</code> のテキストを参照している時は偶数で、テキストノードのテキストを参照している時は奇数となる。</p>
<p>他のステップは終了するステップの文字はオフセットに従わなくてもよい(may)。</p>
</div>
<div class="section" title="3.1.5 Terminating Step - Temporal Offset (~)" id="sec-path-terminating-temporal">
<h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-path-terminating-temporal">></a> </span>3.1.5 終了ステップ‐時間オフセット(<code class="literal">~</code>)</h4>
<p>先頭のチルダ (<code class="literal">~</code>) とそれに続く数字の終了ステップは、オーディオまたはビデオの秒単位の時間位置を示している。</p>
<p>時間オフセット終了ステップの後ろに他のステップを続けることはできない。</p>
</div>
<div class="section" title="3.1.6 Terminating Step - Spatial Offset (@)" id="sec-path-terminating-spatial">
<h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-path-terminating-spatial">></a> </span>3.1.6 終了ステップ‐空間オフセット (<code class="literal">@</code>)</h4>
<p>先頭のアットマーク(<code class="literal">@</code>)とそれに続くコロン区切りの二つの数字は、画像またはビデオの二次元空間位置を示す。二つの数字は <code class="literal">x</code> 軸と <code class="literal">y</code> 軸のスケーリングされた位置を表し、画像のネイティブまたは表示サイズに関わらず <code class="literal">0</code> から <code class="literal">100</code> の範囲でなければならない(must)。(つまり、左上は <code class="literal">0:0</code> で右下は <code class="literal">100:100</code> となる。)</p>
<p>空間オフセット終了ステップの後ろに他のステップを続けることはできない。</p>
</div>
<div class="section" title="3.1.7 Terminating Step - Temporal-Spatial Offset (~ + @)" id="sec-path-terminating-tempspatial">
<h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-path-terminating-tempspatial">></a> </span>3.1.7 終了ステップ‐時間-空間オフセット(<code class="literal">~</code> + <code class="literal">@</code>)</h4>
<p>時間位置と空間位置は同時に使用してもよい(may)。この場合、時間指定は空間指定よりも構文的に前に置かなければならない(must)。(例えば、<code class="literal">[email protected]:97.6</code> は、ビデオの 23.5 秒のフレームの左下を参照する。)</p>
<p>時間-空間オフセット終了ステップの後ろに他のステップを続けることはできない。</p>
</div>
<div class="section" title="3.1.8 Text Location Assertion ([)" id="sec-path-text-location">
<h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-path-text-location">></a> </span>3.1.8 テキストロケーションアサーション(<code class="literal">[</code>)</h4>
<p>EPUB CFI は、一致箇所の前および/または後ろのサブストリングを指定してもよい(may)が、そのようなアサーションの指定は <a class="link" href="#sec-path-terminating-char" title="3.1.4 Terminating Step - Character Offset (:)">文字オフセット終了ステップ</a>の後ろのみでなければならない(must)。</p>
<p>例えば、<a class="link" href="#sec-path-examples" title="3.1.10 Examples">後述するサンプルコンテンツ</a>を使った次のアサーションは、一致箇所の直前に <code class="literal">yyy</code> が必要であることを表している。</p>
<div class="informalexample">
<pre class="synopsis">epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[yyy])</pre>
</div>
<p>一致箇所に続くサブストリングをコンマの後ろに追加することができる。例えば:</p>
<div class="informalexample">
<pre class="synopsis">epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[xx,y])</pre>
</div>
<p>これは、アスタリスクの付いた箇所を参照している:</p>
<div class="informalexample">
<pre class="synopsis">x x x y y y 0 1 2 3 4 5 6 7 8 9
| | | * | | | | | | | | | | | |</pre>
</div>
<p>先行するテキストがない場合、または後続のテキストだけが指定される場合、テキストアサーションの直前にコンマを付けなければならない(must):</p>
<div class="informalexample">
<pre class="synopsis">epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[,y])</pre>
</div>
<p>マッチさせるために含むことのできる、先行または後続のテキストの長さに制約はない。テキストは、ドキュメントから要素の境界を無視して取り出され、空白文字は常にまとめられる。(つまり、空でない連続する空白文字列は常に単一の空白文字に置換される。)</p>
<p>Reading System は、(テキストがマッチしないために)CFIで参照されるロケーションが本来の目的のロケーションではない、と判断してもよく(may)、コンテンツ内の目的となる宛先に到達する一連のステップを計算するために、先行/後続のテキストを利用してもよい(may)(<a class="xref" href="#sec-target-correction" title="3.5 Intended Target Location Correction">ターゲットロケーション補正</a>を参照されたい。)。この追加された堅牢性のコストは、CFI 文字列の比較(とソート)はすべての括弧で囲まれた文字列を論理的に除去した後でのみ実行してもよい(may)(<a class="xref" href="#sec-sorting" title="3.2 Sorting Rules">ソート規則</a>を参照されたい)。</p>
</div>
<div class="section" title="3.1.9 Side Bias ([ + ;s=)" id="sec-path-side-bias">
<h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-path-side-bias">></a> </span>3.1.9 サイド指定(<code class="literal">[</code> + <code class="literal">;s=</code>)</h4>
<p>状況によっては、参照がロケーションのどちらの側を指しているのか、という情報の保持が重要となる。例えば、動的にページを作成する環境でロケーションを解決する場合、ロケーションが前のコンテンツに属している場合と後のコンテンツに属している場合では違いがある。(例えば、改ページに際して、ページの表を表示するのか裏を表示するのか判断する場合。)</p>
<p>ロケーションのサイド情報を保持するには<code class="literal">s</code> パラメータを使用する。s は、二つの値をとることができ、<code class="literal">b</code> はロケーションが、ロケーションの <em>before</em> (前)のコンテンツに属し、<code class="literal">a</code> は <em>after</em> (後ろ)のコンテンツに属することを示す。このパラメーターは、ID <a class="biblioref" href="#refXML" title="Extensible Markup Language (XML) 1.0 (Fifth Edition)">[<abbr>XML</abbr>]</a> またはテキストロケーションのアサーションが空の場合でも、常に CFI の最後部で角括弧で囲んで使用しなければならない(must)。</p>
<p><a class="link" href="#sec-path-examples" title="3.1.10 Examples">後述のサンプルコンテンツ</a>における <code class="literal">yyy</code> の直後のロケーションが前のコンテンツに属することを、次のように表すことができる:</p>
<div class="informalexample">
<pre class="synopsis">epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[;s=b])</pre>
</div>
<p>同様に、次のようにテキストロケーションアサーションを含めて指定することもできる:</p>
<div class="informalexample">
<pre class="synopsis">epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[yyy;s=b])</pre>
</div>
<p><code>em</code> 要素の先頭のロケーションを、その <code>em</code> 要素に先行するコンテンツに付加することは、次のように表すことができる:</p>
<div class="informalexample">
<pre class="synopsis">epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2[;s=b])</pre>
</div>
<p>前述の例において、サイド指定に <code class="literal">b</code> ではなく <code class="literal">a</code> を指定していた場合、ロケーションは、<code>em</code> 要素の次のコンテンツではなく、<code>em</code> 要素の子コンテンツに付加される。</p>
<p>サイド指定はパラメータとして表現されるため、CFI の比較には関与しない(<a class="xref" href="#sec-sorting" title="3.2 Sorting Rules">ソート規則</a>を参照されたい。)</p>
<p>サイドは空間の終了へのロケーションには定義されない。</p>
<div class="note" title="note">
<h3 class="title">NOTE</h3>
<p>サイド指定は、ロケーションで何らかのブレークが起こる場合にのみ意味を持つ(例えば、改ページや改行。)</p>
</div>
</div>
<div class="section" title="3.1.10 Examples" id="sec-path-examples">
<h4 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-path-examples">></a> </span>3.1.10 例</h4>
<p class="informative">このセクションは参考情報である。</p>
<p>次ような Package Document があるとする:</p>
<div class="informalexample">
<pre class="synopsis"><?xml version="1.0"?>
<package version="2.0"
unique-identifier="bookid"
xmlns="http://www.idpf.org/2007/opf"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:opf="http://www.idpf.org/2007/opf">
<metadata>
<dc:title>...</dc:title>
<dc:identifier id="bookid">...</dc:identifier>
<dc:creator>...</dc:creator>
<dc:language>en</dc:language>
</metadata>
<manifest>
<item id="toc"
properties="nav"
href="toc.xhtml"
media-type="application/xhtml+xml"/>
<item id="titlepage"
href="titlepage.xhtml"
media-type="application/xhtml+xml"/>
<item id="chapter01"
href="chapter01.xhtml"
media-type="application/xhtml+xml"/>
<item id="chapter02"
href="chapter02.xhtml"
media-type="application/xhtml+xml"/>
<item id="chapter03"
href="chapter03.xhtml"
media-type="application/xhtml+xml"/>
<item id="chapter04"
href="chapter04.xhtml"
media-type="application/xhtml+xml"/>
</manifest>
<spine>
<itemref id="titleref" idref="titlepage"/>
<itemref id="chap01ref" idref="chapter01"/>
<itemref id="chap02ref" idref="chapter02"/>
<itemref id="chap03ref" idref="chapter03"/>
<itemref id="chap04ref" idref="chapter04"/>
</spine>
</package></pre>
</div>
<p>また、XHTML Content Document の <code class="filename">chapter01.xhtml</code> はこのような内容となっている:</p>
<div class="informalexample">
<pre class="synopsis"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>...</title>
</head>
<body id="body01">
<p>...</p>
<p>...</p>
<p>...</p>
<p>...</p>
<p id="para05">xxx<em>yyy</em>0123456789</p>
<p>...</p>
<p>...</p>
<img id="svgimg" src="foo.svg" alt="..."/>
<p>...</p>
<p>...</p>
</body>
</html></pre>
</div>
<p>この場合、次のEPUB CFIは</p>
<div class="informalexample">
<pre class="synopsis">epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/3:10)</pre>
</div>
<p>ID が <code class="literal">para05</code> の段落の <code class="literal">9</code> の数字の直後の位置を参照する。テキストのロケーションの CFI を作成する時、テキストが <code>img</code> 要素の <code>alt</code> タグに定義されていなければ、常にロケーションに該当するテキストノードまたはテキストノードのコレクション(例え空の場合であっても)から開始し、Package Document のルートまで祖先と参照チェーンをたどるべきである(should)。</p>
<p>次の例は、更なるコンテンツロケーションを参照する EPUB CFI の構成を示す:</p>
<div class="informalexample">
<p><code>img</code> 要素のへ参照</p>
<pre class="synopsis">epubcfi(/6/4[chap01ref]!/4[body01]/16[svgimg])</pre>
</div>
<div class="informalexample">
<p><code class="literal">xxx</code> の直前の位置への参照</p>
<pre class="synopsis">epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/1:0)</pre>
</div>
<div class="informalexample">
<p><code class="literal">yyy</code> の直前の位置への参照</p>
<pre class="synopsis">epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:0)</pre>
</div>
<div class="informalexample">
<p><code class="literal">yyy</code> の直後の位置への参照</p>
<pre class="synopsis">epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3)</pre>
</div>
</div>
</div>
<div class="section" title="3.2 Sorting Rules" id="sec-sorting">
<h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-sorting">></a> </span>3.2 ソート規則</h3>
<p>同じ EPUB Publication を参照する複数の EPUB CFI の相対的なロケーションを、ソートしたり計算したりするには、次のルールに従わなければならない(must):</p>
<div class="orderedlist">
<ol class="orderedlist">
<li class="listitem"><p>EPUB CFI スキームデータは、<a class="xref" href="#sec-epubcfi-escaping" title="2.3 Character Escaping">文字エスケープ</a>で説明されているルールの通りに、アンエスケープされた形式でなければならない(must)。</p></li>
<li class="listitem"><p>すべての角括弧で囲まれたアサーションは完全に除去(無視)される。</p></li>
<li class="listitem"><p>シーケンスの中では、先に来るステップの方が重要である。</p></li>
<li class="listitem"><p>XML の子ノード、文字オフセットや時間位置は、自然順序でソートする。</p></li>
<li class="listitem"><p><code class="literal">y</code> 位置は <code class="literal">x</code> 位置よりも重要である。</p></li>
<li class="listitem"><p>省略された空間位置は他のすべての空間位置に先行する。</p></li>
<li class="listitem"><p>省略された時間位置は他のすべての時間位置に先行する。</p></li>
<li class="listitem"><p>時間位置は空間位置よりも重要である。</p></li>
<li class="listitem"><p>ステップの種類は、重要度の低いものから高いものへと、次のような順番となる:<br />文字オフセット(<code class="literal">:</code>)、子(<code class="literal">/</code>)、時間-空間(<code class="literal">~</code> または <code class="literal">@</code>)、参照/間接指定(<code class="literal">!</code>).</p></li>
</ol>
</div>
</div>
<div class="section" title="3.3 Intra-Publication CFIs" id="sec-intra-cfis">
<h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-intra-cfis">></a> </span>3.3 Intra-Publication CFI</h3>
<p>EPUB CFI は、コンテナ内部のコンテンツの参照に使用することができる。このような参照は、Package Document への参照とそれに続く CFI を指定して実現されるが、CFI の解決は <code>package</code> ルート要素から開始しなければならない(must)。</p>
<p>例えば、<a class="link" href="#sec-path-examples" title="3.1.10 Examples">上記の例</a>のPackage Document を使って、<code class="filename">chapter02.xhtml</code> の最後のロケーションへの参照は次のように記述できるだろう:</p>
<div class="informalexample">
<pre class="synopsis"><a href="../pub.opf#epubcfi(/6/4[chap01ref]!/4[body01]/10[para05]/2/1:3[;s=b])">location</a></pre>
</div>
</div>
<div class="section" title="3.4 Simple Ranges" id="sec-ranges">
<h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-ranges">></a> </span>3.4 単純なレンジ</h3>
<p>EPUB CFI は、開始ロケーションから終了ロケーションまでの簡潔なレンジを表すことができる。レンジは <em>parent</em> パス(<code class="literal">P</code>)、<em>start</em> サブパス(<code class="literal">S</code>)、そして<em>end</em> サブパス(<code class="literal">E</code>)の3つによって、次の形式で表さなければならない(must): </p>
<div class="informalexample">
<pre class="synopsis">epubcfi(P,S,E)</pre>
</div>
<p>parent パスは、レンジの開始と終了のロケーションの両方のパスを解決するための共通のステップで終わらなければならず(must)、start と end のそれぞれのサブパスはドキュメント内で減少しない順序でロケーションへと解決しければならない(must)。</p>
<p>レンジの開始と終了ロケーションを決めるには、parent パスを start と end サブパスに連結して開始ロケーションパス(<code class="literal">PS</code>)と終了ロケーションパス(<code class="literal">PE</code>)を生成しなければならない(must)。</p>
<p><a class="link" href="#sec-path-examples" title="3.1.10 Examples">上記のサンプルドキュメント</a>を使った次のレンジは <code class="literal">yyy</code> の2番目の <code class="literal">y</code> から数字 <code class="literal">3</code> まで(含めた)テキストを表す:</p>
<div class="informalexample">
<pre class="synopsis">epubcfi(/6/4[chap01ref]!/4[body01]/10[para05],/2/1:1,/3:4)</pre>
</div>
<p>レンジの比較は、それぞれの <code class="literal">PS</code>、次にそれぞれの <code class="literal">PE</code> の構成部品によって行わなければならない(must)。</p>
<p>要素の最初から最後までのレンジを表すショートハンドとして要素へのパスを使用するのは適切ではない。単独で表記されたパスは常にロケーションの位置(ポイント)を表し、レンジは上記で解説した表記で表す。要素の終わりへの参照を示す特殊なステップが存在しないのは、それによってドキュメントのコンテンツを調べることなくソートするのが不可能になるためである。</p>
<p>コンテキストで単独のロケーションが指定されるべきところにレンジが使用された場合、その開始ロケーションを使用しなければならない(must)。</p>
<p>サイド指定パラメータをレンジに使用してはならない(must not)。レンジの開始は暗黙的に開始ロケーションンの後ろのコンテンツに属し、終了は暗黙的に終了ロケーションの前のコンテンツに属する。</p>
</div>
<div class="section" title="3.5 Intended Target Location Correction" id="sec-target-correction">
<h3 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-target-correction">></a> </span>3.5 ターゲットロケーション補正</h3>
<p>EPUB Publication は時間とともに改訂、修正、或いは変更されてもよく(may)、以前のバージョンの CFI から変更されたドキュメントの EPUB CFI を導き出すことは有用である。この仕様は、CFI に影響するコンテンツの変更を発見し補正する二つのメカニズムを提供している。それは、ID <a class="biblioref" href="#refXML" title="Extensible Markup Language (XML) 1.0 (Fifth Edition)">[<abbr>XML</abbr>]</a> と<a class="link" href="#sec-path-text-location" title="3.1.8 Text Location Assertion ([)">テキストロケーションアサーション</a>である。</p>
<p>Reading System が CFI を処理する際には、遭遇するすべてのアサーションの正確さをチェックすべきである(should)。例えば、<code class="literal">/6/4[chap01ref]!...</code>のパスを例にすると、Reading System は、要素 <code class="literal">4</code> の処理中にその要素は <code class="literal">chap01ref</code> に一致する ID を持っていることを確認するべきである(should)。(この例では、<code>spine</code> 内の <code>itemref</code> が該当する。) もし確認できなければ、Reading System はドキュメント内で <code class="literal">chap01ref</code> の ID を見つけて CFI を修正するべきである(should)。(例えば、新しい <code>itemref</code> が <code class="literal">chap01ref</code> の <code>itemref</code> の前に挿入された場合は、望ましい要素の番号は <code class="literal">6</code> となり、CFI は <code class="literal">/6/6[chap01ref]!...</code> に修正される。) 同様に、テキストロケーションアサーションは、参照されるターゲットロケーションを確認し、望ましいテキストロケーションを指す正しい CFI を得るために使用するべきである(should)。</p>
<p>もし処理中にアサーションの一つが失敗し、CFI を修正できない(ドキュメント内に ID が存在しない、または一致するテキストが見つからない)場合には、その CFI は無効な参照と見なさなければならない(must)。Reading System が正確性を検証できない(例えば、CFI の処理中にドキュメントに内在する XML ID が利用できない)場合には、Reading System は CFI アサーションを無視しなければならない(must)。</p>
<p>CFI 補正という観念からは、二つの異なる CFI(修正前の “陳腐化した” CFI と修正された CFI)が、同じロケーションを指す状況が生まれることがある。可能であれば修正された CFI を使用するべきである(should)。Reading System やそれに関係するコンテンツ管理システムは、可能であれば陳腐化した CFI を修正された CFI に置き換えることを試みるべきである(should)。</p>
<div class="note" title="note">
<h3 class="title">NOTE</h3>
<p>この仕様は、本来の機能が不十分である場合、CFI補正を支援するカスタム機能を開発することを推奨する。このような機能の開発方法の詳細は<a class="xref" href="#sec-extensions" title="4 Extending EPUB CFIs"><em>EPUB CFI の拡張</em></a>を参照されたい。</p>
</div>
</div>
</div>
<div class="chapter" title="4 Extending EPUB CFIs" id="sec-extensions">
<h2 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#sec-extensions">></a> </span>4 EPUB CFI の拡張</h2>
<p>拡張仕様(パラメータ名の接頭辞を持ち、セミコロンで区切られた、CSV パラメータリスト)は、Reading System が、例えば、EPUB CFI フラグメントを更新されたドキュメントへ移行させるとき、手助けする新しいまたは実験的なヒューリスティックスを適用することを認めています。</p>
<p>拡張機能(パラメータ名の接頭辞を持ち、セミコロンで区切られた、CSV パラメータリスト)の提供によって、Reading System は、例えば EPUB CFI フラグメントを更新されたドキュメントへ移行する際に、新規または実験的なヒューリスティックを適用することができる。</p>
<p>ベンダー固有のパラメータ名は、<code class="literal">vnd.</code> とそれに続くベンダー名で始めることを推奨する。</p>
<p>実装は、解釈や構文解析できないあらゆるパラメーターを無視しなければならない(must)。</p>
</div>
<div class="bibliography" title="References" id="references">
<div class="titlepage">
<div>
<div>
<h2 class="title"><span class="link-marker"><a class="hidden-reveal" title="Link here" href="#references">></a> </span>文献</h2>
</div>
</div>
</div>
<div class="bibliodiv" title="Normative References">
<h3 class="title">引用規定</h3>
<div class="biblioentry" title="EPUB Canonical Fragment Identifier (epubcfi) Specification" id="refEPUBCFI">
<p>[<abbr>EPUBCFI</abbr>] <span class="title"><em><a class="link" href="epub30-epubcfi.xhtml">EPUB Canonical Fragment Identifier (epubcfi) Specification</a></em>. </span></p>
</div>
<div class="biblioentry" title="HTML5: A vocabulary and associated APIs for HTML and XHTML" id="refHTML5">
<p>[<abbr>HTML5</abbr>] <span class="title"><em><a class="link" href="http://www.w3.org/TR/html5/">HTML5: A vocabulary and associated APIs for HTML and XHTML</a></em>. </span></p>
</div>
<div class="biblioentry" title="Key words for use in RFCs to Indicate Requirement Levels (RFC 2119)" id="refRFC2119">
<p>[<abbr>RFC2119</abbr>] <span class="title"><em><a class="link" href="http://tools.ietf.org/html/rfc2119">Key words for use in RFCs to Indicate Requirement Levels</a> (RFC 2119) </em>. </span><span class="date">March 1997. </span></p>
</div>
<div class="biblioentry" title="UTF-8, a transformation format of ISO 10646 (RFC 2279)" id="refRFC2279">
<p>[<abbr>RFC2279</abbr>] <span class="title"><em><a class="link" href="http://tools.ietf.org/html/rfc2279"> UTF-8, a transformation format of ISO 10646 </a> (RFC 2279) </em>. </span><span class="author">F. Yergeau, et al. </span><span class="date">January 1998. </span></p>
</div>
<div class="biblioentry" title="Uniform Resource Identifiers (URI): Generic Syntax (RFC 2396)" id="refRFC2396">
<p>[<abbr>RFC2396</abbr>] <span class="title"><em><a class="link" href="http://tools.ietf.org/html/rfc2396"> Uniform Resource Identifiers (URI): Generic Syntax </a> (RFC 2396) </em>. </span><span class="author">T. Berners-Lee, et al. </span><span class="date">August 1998. </span></p>
</div>
<div class="biblioentry" title="Format for Literal IPv6 Addresses in URL's (RFC 2732)" id="refRFC2732">
<p>[<abbr>RFC2732</abbr>] <span class="title"><em><a class="link" href="http://tools.ietf.org/html/rfc2732"> Format for Literal IPv6 Addresses in URL's </a> (RFC 2732) </em>. </span><span class="author">R. Hinden, et al. </span><span class="date">December 1999. </span></p>
</div>
<div class="biblioentry" title="Uniform Resource Identifier (URI): Generic Syntax (RFC 3986)" id="refRFC3986">
<p>[<abbr>RFC3986</abbr>] <span class="title"><em><a class="link" href="http://tools.ietf.org/html/rfc3986">Uniform Resource Identifier (URI): Generic Syntax</a> (RFC 3986) </em>. </span><span class="author">Berners-Lee, et al. </span><span class="date">January 2005. </span></p>
</div>
<div class="biblioentry" title="Internationalized Resource Identifiers (IRIs) (RFC 3987)" id="refRFC3987">
<p>[<abbr>RFC3987</abbr>] <span class="title"><em><a class="link" href="http://tools.ietf.org/html/rfc3987">Internationalized Resource Identifiers (IRIs)</a> (RFC 3987) </em>. </span><span class="author">M Duerst, et al. </span><span class="date">January 2005. </span></p>
</div>
<div class="biblioentry" title="Scalable Vector Graphics (SVG) 1.1 (Second Edition)" id="refSVG">
<p>[<abbr>SVG</abbr>] <span class="title"><em><a class="link" href="http://www.w3.org/TR/SVG11/">Scalable Vector Graphics (SVG) 1.1 (Second Edition)</a></em>. </span><span class="author">Erik Dahlstrom, et al. </span><span class="date">09 June 2011. </span></p>
</div>
<div class="biblioentry" title="Extensible Markup Language (XML) 1.0 (Fifth Edition)" id="refXML">
<p>[<abbr>XML</abbr>] <span class="title"><em><a class="link" href="http://www.w3.org/TR/2008/REC-xml-20081126/">Extensible Markup Language (XML) 1.0 (Fifth Edition)</a></em>. </span><span class="author">T. Bray, et al. </span><span class="date">26 November 2008. </span></p>
</div>
</div>
<div class="bibliodiv" title="Informative References">
<h3 class="title">参考</h3>
<div class="biblioentry" title="XPointer Shorthand Notation" id="refXPTRSH">
<p>[<abbr>XPTRSH</abbr>] <span class="title"><em><a class="link" href="http://www.w3.org/TR/xptr-framework/#shorthand">XPointer Shorthand Notation</a></em>. </span></p>
</div>
</div>
</div>
</div>
</body>
</html>