“Easy Things should be easy.”
For many books, the reading order will closely follow navigation (or is it the other way around?)In this case, index.html just needs a single nav element:
<nav hidden="hidden"> <h1>Contents</h1> <ol> <li><a href="s001-BookTitlePage-01.html">Title Page</a></li> <li><a href="s002-Preface-01.html">Original Transcriber’s Notes:</a></li> <li><a href="s003-Introduction-01.html">Etymology.</a></li> <li><a href="s004-Epigraph-01.html">Extracts (Supplied by a Sub-Sub-Librarian).</a></li> <li><a href="s005-Chapter-001.html">Chapter 1: Loomings</a></li> <li><a href="s006-Chapter-002.html">Chapter 2: The Carpet-Bag</a></li> <li><a href="s007-Chapter-003.html">Chapter 3: The Spouter-Inn</a></li>
The reading system will display each distinct file mentioned, in order. If we don't want this navigation file to be visible upon opening index.html, we can hide it. The reading system can still use this nav element to create its own navigation (as most current reading systems do with the NCX).
“Hard things should be possible.”
Other books may have more complex navigational needs, and the table of contents may not track the reading order (especially for things we'd currently describe with linear="no").
I still believe nav is the best fit in HTML5 for both a standalone reading order and navigation files. So why not let index.html contain as many nav elements as necessary, each of which may serve a different function? We would need some sort of vocabulary to identify these. As I want to avoid a special namespace like epub:type, I'd propose using a data-e0-type attribute (knowing there will be objections):
<nav hidden="hidden" data-e0-type="spine"> <ol> <li><a href="file1.html">File 1</a></li> <li><a href="file2.html">File 2</a></li> <li><a href="file3.html">File 3</a></li> </ol> </nav> <nav hidden="hidden" data-e0-type="toc"> <ol> <li><a href="file1.html">Chapter 1</a></li> <li><a href="file1-quiz.html">Chapter 1 Review</a></li> <li><a href="file2.html">File 2</a></li> <li><a href="file2-quiz.html">Chapter 2 Review</a></li> <li><a href="file3.html">Chapter 3</a></li> <li><a href="file3-quiz.html">Chapter 3 Review</a></li> </ol> </nav>
This could be extended for page lists, lists of illustrations, and so on, using the appropriate attribute to describe the nature of the particular nav element.
Our earlier example could also be described as data-e0-type="spine toc".
Alternate Solution
Another proposal is to have a single nav for spine and toc, but have some sort of attribute on individual li elements to indicate if they are part of the linear reading order or not.
<nav hidden> <ol> <li><a href="file1.html">Chapter 1</a></li> <li hidden><a href="file1-quiz.html">Chapter 1 Review</a></li> <li><a href="file2.html">File 2</a></li> <li hidden><a href="file2-quiz.html">Chapter 2 Review</a></li> <li><a href="file3.html">Chapter 3</a></li> <li hidden><a href="file3-quiz.html">Chapter 3 Review</a></li> </ol> </nav>
In this case, the hidden attribute is overloaded. The reading system would go directly from file1.html to file2.html; file1-quiz.html would only be accessible via link.