Metadata in a Standard Ebook is stored in the :path:`./src/epub/content.opf` file. The file contains some boilerplate that an ebook producer won’t have to touch, and a lot of information that they will have to touch as an ebook is produced.
Follow the general structure of the :path:`content.opf` file generated by :bash:`se create-draft`. Don’t rearrange the order of anything in there.
- URLs used in metadata are https where possible.
- URLs used in metadata do not contain query strings, or if a query string is required, only contain the minimum necessary query string to render the base resource.
- URLs used for Project Gutenberg page scans look like: :path:`https://www.gutenberg.org/ebooks/<BOOK-ID>`.
- URLs used for HathiTrust page scans look like: :path:`https://catalog.hathitrust.org/Record/<RECORD-ID>`.
- URLs used for Google Books page scans look like: :path:`https://books.google.com/books?id=<BOOK-ID>`.
- URLs used for Internet Archive page scans look like: :path:`https://archive.org/details/<BOOK-ID>`.
The :html:`<dc:identifier>` element contains the unique identifier for the ebook. The identifier is the Standard Ebooks URL for the ebook, prefaced by :html:`url:`.
<dc:identifier id="uid">url:https://standardebooks.org/ebooks/anton-chekhov/short-fiction/constance-garnett</dc:identifier>
The SE URL is formed by the following algorithm.
(Note: Strings can be made URL-safe using the :bash:`se make-url-safe` tool.)
- Start with the URL-safe author of the work, as it appears on the titlepage. If there is more than one author, continue appending subsequent URL-safe authors, separated by an underscore. Do not alpha-sort the author name.
- Append a forward slash, then the URL-safe title of the work. Do not alpha-sort the title.
- If the work is translated, append a forward slash, then the URL-safe translator. If there is more than one translator, continue appending subsequent URL-safe translators, separated by an underscore. Do not alpha-sort translator names.
- If the work is illustrated, append a forward slash, then the URL-safe illustrator. If there is more than one illustrator, continue appending subsequent URL-safe illustrators, separated by an underscore. Do not alpha-sort illustrator names.
- Finally, do not append a trailing forward slash.
There are several elements in the metadata describing the publication date, updated date, and revision number of the ebook. Generally these are not updated by hand; instead, the :bash:`se prepare-release` tool updates them automatically.
- :html:`<dc:date>` is a timestamp representing the first publication date of this ebook file. Once the ebook is released to the public, this value doesn’t change.
- :html:`<meta property="dcterms:modified">` is a timestamp representing the last time this ebook file was modified. This changes often.
- The :html:`<dc:title id="title">` element contains the title.
- The :html:`<meta property="file-as" refines="#title">` element contains alpha-sorted title, even if the alpha-sorted title is identical to the unsorted title.
<dc:title id="title">The Moon Pool</dc:title>
<meta property="file-as" refines="#title">Moon Pool, The</meta>
<dc:title id="title">Short Fiction</dc:title>
<meta property="file-as" refines="#title">Short Fiction</meta>
- The :html:`<meta property="title-type" refines="#title">main</meta>` element identifies the main part of the title.
- A second :html:`<dc:title id="subtitle">` element contain the subtitle, and is refined with :html:`<meta property="title-type" refines="#subtitle">subtitle</meta>`.
- A third :html:`<dc:title id="fulltitle">` element contains the complete title on one line, with the main title and subtitle separated by a colon and space, and is refined with :html:`<meta property="title-type" refines="#fulltitle">extended</meta>`.
- All three :html:`<dc:title>` elements have an accompanying :html:`<meta property="file-as">` element, even if the :value:`file-as` value is the same as the title.
<dc:title id="title">The Moon Pool</dc:title>
<meta property="file-as" refines="#title">Moon Pool, The</meta>
<dc:title id="title">The Man Who Was Thursday</dc:title>
<meta property="file-as" refines="#title">Man Who Was Thursday, The</meta>
<meta property="title-type" refines="#title">main</meta>
<dc:title id="subtitle">A Nightmare</dc:title>
<meta property="file-as" refines="#subtitle">Nightmare, A</meta>
<meta property="title-type" refines="#subtitle">subtitle</meta>
<dc:title id="fulltitle">The Man Who Was Thursday: A Nightmare</dc:title>
<meta property="file-as" refines="#fulltitle">Man Who Was Thursday, The</meta>
<meta property="title-type" refines="#fulltitle">extended</meta>
Some books are commonly referred to by a shorter name than their actual title. For example, :italics:`The Adventures of Huckleberry Finn </ebooks/mark-twain/the-adventures-of-huckleberry-finn>` is often simply known as :italics:`Huck Finn`.
- The :html:`<dc:title id="title-short">` element contains the common title. It is refined with :html:`<meta property="title-type" refines="#title-short">short</meta>` and :html:`<meta property="file-as">`.
Some books may have been published under more than one official title. This is not the same as a book being more commonly known by a popular title. For example, :italics:`The Mark of Zorro </ebooks/johnston-mcculley/the-mark-of-zorro>` was originally serialized as :italics:`The Curse of Capistrano`.
The :html:`<meta property="dcterms:alternative" refines="#title">` element contains the alternate title. It is not refined with :html:`<meta property="file-as">`.
<dc:title id="title">The Mark of Zorro</dc:title> <meta property="file-as" refines="#title">Mark of Zorro, The</meta> <meta property="dcterms:alternative" refines="#title">The Curse of Capistrano</meta>
Books that contain numbers or abbreviations in their title may be difficult to find with a search query, because there can be different ways to search for numbers or abbreviations. For example, a reader may search for :italics:`Around the World in Eighty Days </ebooks/jules-verne/around-the-world-in-eighty-days/george-makepeace-towle>` by searching for “80” instead of “eighty”.
If a book title contains numbers or abbreviations, a :html:`<meta property="dcterms:alternate" refines="#title">` element is placed after the main title block, containing the title with expanded or alternate spelling to facilitate possible search queries.
<dc:title id="title">Around the World in Eighty Days</dc:title> <meta property="file-as" refines="#title">Around the World in Eighty Days</meta> <meta property="dcterms:alternate" refines="#title">Around the World in 80 Days</meta>
<dc:title id="title">File No. 113</dc:title> <meta property="file-as" refines="#title">File No. 113</meta> <meta property="dcterms:alternate" refines="#title">File Number One Hundred and Thirteen</meta>
The :html:`<dc:subject>` element
:html:`<dc:subject>` elements describe the categories the ebook belongs to.
- Each :html:`<dc:subject>` has the :html:`id` attribute set to :value:`subject-#`, where # is a number starting at :value:`1`, without leading zeros, that increments with each subject.
- The :html:`<dc:subject>` elements are arranged sequentially in a single block.
- :html:`<dc:subject>` values are sourced from Library of Congress Subject Headings.
- If the transcription for the ebook comes from Project Gutenberg, the values of the :html:`<dc:subject>` elements come from the Project Gutenberg “bibrec” page for the ebook. Otherwise, the values come from the Library of Congress catalog listing for the book.
- After the block of :html:`<dc:subject>` elements there is a block of :html:`<meta property="authority" refines="#subject-N">` and :html:`<meta property="term" refines="#subject-N">` element pairs.
- :html:`<meta property="authority" refines="#subject-N">` contains the source for the category. For Library of Congress categories, the value is :value:`LCSH`.
- :html:`<meta property="term" refines="#subject-N">` contains the term ID for that subject heading.
- For subject headings that are proper names, the Library of Congress uses the NACOAF identifier in place of a regular subject heading. In such cases, the terms are set to a NACOAF identifier (a string starting with :value:`n`), but the authority is still set to :value:`LCSH`.
- Term IDs of subject headings that do not have LCSH identifiers or NACOAF identifiers in the Library of Congress system are set to Unknown.
This example shows how to mark up the subjects for :italics:`A Voyage to Arcturus </ebooks/david-lindsay/a-voyage-to-arcturus>`, by David Lindsay:
<dc:subject id="subject-1">Science fiction</dc:subject>
<dc:subject id="subject-2">Psychological fiction</dc:subject>
<dc:subject id="subject-3">Quests (Expeditions) -- Fiction</dc:subject>
<dc:subject id="subject-4">Life on other planets -- Fiction</dc:subject>
<meta property="authority" refines="#subject-1">LCSH</meta>
<meta property="term" refines="#subject-1">sh85118629</meta>
<meta property="authority" refines="#subject-2">LCSH</meta>
<meta property="term" refines="#subject-2">sh85108438</meta>
<meta property="authority" refines="#subject-3">LCSH</meta>
<meta property="term" refines="#subject-3">sh2008110314</meta>
<meta property="authority" refines="#subject-4">LCSH</meta>
<meta property="term" refines="#subject-4">sh2008106912</meta>
Along with the Library of Congress categories, a set of SE subjects is included in the ebook metadata. Unlike Library of Congress categories, SE subjects are purposefully broad. They’re more like the subject categories in a small bookstore, as opposed to the precise, detailed, hierarchical Library of Congress categories.
SE subjects are included with one or more :html:`<meta property="se:subject">` elements.
<meta property="se:subject">Fantasy</meta> <meta property="se:subject">Philosophy</meta>
There is at least one SE subject.
SE subjects are in alphabetical order.
- Adventure
- Autobiography
- Biography
- Children’s
- Comedy
- Drama
- Fantasy
- Fiction
- Horror
- Memoir
- Mystery
- Nonfiction
- Philosophy
- Poetry
- Satire
- Science Fiction
- Shorts
- Spirituality
- Travel
- Ebooks that are collections of short stories have the SE subject :string:`Shorts` as one of the SE subjects.
- Ebooks that are young adult or children’s books have the SE subject :string:`Children’s` as one of the SE subjects.
An ebook has two kinds of descriptions: a short :html:`<dc:description>` element, and a much longer :html:`<meta property="se:long-description">` element.
The :html:`<dc:description>` element contains a short, single-sentence summary of the ebook.
The description is a single complete sentence ending in a period, not a sentence fragment or restatement of the title.
The description summarizes the main theme or plot thread in the book, in an active voice, without using proper names.
Sally the witch curses Bob Smith. He is turned in to a frog. His career as a barber is put on hold.
This is a book about love, loss, and recovering from tragedy.
An evil witch transforms a garrulous barber into a frog, putting his career on hold as he comes to grips with his new station in life.
For collections, compilations, and omnibuses, a sentence fragment is acceptable as a description.
The description is typogrified, i.e. it contains Unicode curly quotes, em dashes, and the like.
The :html:`<meta property="se:long-description">` element contains a much longer description of the ebook.
The long description is a non-biased, encyclopedia-like description of the book, including any relevant publication history, backstory, or historical notes. It is as detailed as possible without giving away plot spoilers. It does not impart the producer’s opinions of the book, or include content warnings. Think along the lines of a Wikipedia-like summary of the book and its history, but under no circumstances can a producer copy and paste from Wikipedia! (Wikipedia licenses articles under a CC license which is incompatible with Standard Ebooks’ CC0 public domain dedication.)
Tip
- Describe the premise, not the plot. The first part of the description should describe things as they stand within the first chapter or two of the book and prompt interest in a potential reader. It should explain what within the book makes it worth reading, so consider the following questions: - Where are main characters at the start, and what is the world those characters inhabit? - What interesting thing happens that kicks off the plot? What unanswered questions within the book would make a reader want to continue past the first chapter? - What are the thematic questions being addressed by this book?
- Explain why you've produced this book. With all of the books to choose from, what was it about this book that made you want to choose it? The second part of the description should explain what makes this book notable and worth reading for its context, so consider the following questions: - Where does this book sit in the author's canon? Has this book been adapted or inspired other works? - What cultural impact has this or other works by the author had? - What was happening in the world that informs the context of this book? - What inspired its writing?
- For collected works, do the above in abbreviated form. Consider a handful of short sentence-long premises of some of the most interesting stories or essays. Discuss how the stories were published (in different volumes or magazines?). Discuss how the collection of works relates to the totality of the author's works.
- For nonfiction, much of the above applies. A memoir or travelogue still has enough narrative events that you can give a premise. A collection of essays has plenty of themes to discuss. Collections of mythology can talk about why the author collected those stories. Scientific books (e.g. Darwin) can distill the ideas first introduced in those books.
The long description is typogrified, i.e. it contains Unicode curly quotes, em dashes, and the like.
The long description is in escaped HTML, with the HTML beginning on its own line after the :html:`<meta property="se:long-description">` element.
Tip
The :bash:`se clean` tool will escape HTML in the long description for you. You can write regular HTML in the long description, then run :bash:`se clean` to escape it automatically.
Long description HTML follows the general code style conventions.
The first occurrence of the author’s name is linked to the Standard Ebooks author page. For example, for Arthur Conan Doyle this would look like :html:`<a href="https://standardebooks.org/ebooks/arthur-conan-doyle">Arthur Conan Doyle</a>`. If the long description references other authors, books and story collections that already have pages on Standard Ebooks then the first occurrence of these are linked as well.
The long description does not contain external links other than links to other Standard Ebooks books or authors.
- The :html:`<dc:language>` element follows the long description block. It contains the IETF language tag for the language that the work is in.
- If a book contains files that are in a variety of languages or dialects, then :html:`<dc:language>` is set to the predominant language of the book.
The :html:`<dc:source>` elements represent URLs to sources for the transcription the ebook is based on, and page scans of the print sources used to correct the transcriptions.
:html:`<dc:source>` URLs are in https where possible.
A book can contain more than one such element if multiple sources for page scans were used.
If the ebook is a collection in which different parts appear across different page scan sources (like a short story or poetry collection), an XML comment is included above each :html:`<dc:source>` element specifying which part of the ebook is included in the following source URL.
<!--The Man of the Crowd, Eleanora, The Oval Portrait--> <dc:source>https://archive.org/details/worksofedgaralla01poeeuoft</dc:source> <!--The Gold-Bug, A Tale of the Rugged Mountains, Mesmeric Revelation--> <dc:source>https://archive.org/details/worksofedgaralla02poeeuoft</dc:source>
- :html:`<meta property="se:url.encyclopedia.wikipedia">` contains the English Wikipedia URL for the book. This element is not present if there is no English Wikipedia entry for the book.
- :html:`<meta property="se:url.vcs.github">` contains the SE GitHub URL for this ebook. This is calculated by taking the string :html:`https://github.com/standardebooks/` and appending the SE identifier, without :html:`https://standardebooks.org/ebooks/`, and with forward slashes replaced by underscores.
- :html:`<meta property="belongs-to-collection" id="collection-N">` contains the name of the collection the ebook belongs to.
- The value for this element must be the same for all ebooks in the collection.
- The :html:`id` attribute is :value:`collection-N` where :value:`N` is a positive integer starting at :value:`1`.
- The element is further refined by a :html:`<meta property="collection-type" refines="#collection-N">` element with the value of :html:`set` or :html:`series`. See the EPUB spec for more details.
- :html:`<meta property="se:is-a-collection">true</meta>` is present if the ebook is a collection of items which a reader may wish to search by item title. For example, this would include ebooks like a collection of short stories, or a collection of short works by an author from antiquity.
- The :html:`<meta property="se:production-notes">` element contains any of the ebook producer’s production notes. For example, the producer might note that page scans were not available, so an editorial decision was made to add commas to sentences deemed to be transcription typos; or that certain archaic spellings were retained as a matter of prose style specific to this ebook.
- The :html:`<meta property="se:production-notes">` element is not present if there are no production notes.
These two elements are automatically computed by the :bash:`se prepare-release` tool.
- The :html:`<meta property="se:word-count">` element contains an integer representing the ebook’s total word count, excluding some SE files like the colophon and Uncopyright.
- The :html:`<meta property="se:reading-ease.flesch">` element contains a decimal representing the computed Flesch reading ease for the book.
The following apply to all contributors, including the author(s), translator(s), and illustrator(s).
- If there is exactly one contributor in a set (for example, only one author in a possible set of authors, or only one translator in a possible set of translators) then the :html:`<meta property="display-seq">` element is omitted for that contributor.
- If there is more than one contributor in a set (for example, multiple authors, or multiple translators) then the :html:`<meta property="display-seq">` element is specified for each contributor in that set, with a value equal to their position in the SE identifier.
- The EPUB spec specifies that in a set of contributors, if at least one has the :value:`display-seq` property, then other contributors in the set without the :value:`display-seq` value are ignored. For SE purposes, this also means they will be excluded from the SE identifier.
- By SE convention, contributors with :html:`<meta property="display-seq">0</meta>` are excluded from the SE identifier.
- It is not uncommon for one contributor to have multiple roles; for example, an author (:value:`aut`) who also illustrated (:value:`ill`) the book. In these cases, additional roles are assigned using additional :value:`role` properties.
<dc:creator id="author">Jonathan Swift</dc:creator>
...
<meta property="role" refines="#author" scheme="marc:relators">aut</meta>
<meta property="role" refines="#author" scheme="marc:relators">ill</meta>
<meta property="role" refines="#author" scheme="marc:relators">win</meta>
<meta property="role" refines="#author" scheme="marc:relators">wpr</meta>
:html:`<dc:creator id="author">` contains the author’s name as it appears on the cover.
If there is more than one author, the first author’s :html:`id` is :value:`author-1`, the second :value:`author-2`, and so on.
:html:`<meta property="file-as" refines="#author">` contains the author’s name as filed alphabetically. This element is included even if it’s identical to :html:`<dc:creator>`.
:html:`<meta property="se:name.person.full-name" refines="#author">` contains the author’s full name, with any initials or middle names expanded, and including any titles. If the author uses a pseudonym, then this should be the full pseudonym, not the author’s real name. This element is not included if the value is identical to :html:`<dc:creator>`.
:html:`<meta property="alternate-script" refines="#author">` contains the author’s name as it appears on the cover, but transliterated into their native alphabet if applicable. For example, Anton Chekhov’s name would be contained here in the Cyrillic alphabet. This element is not included if not applicable.
:html:`<meta property="se:url.encyclopedia.wikipedia" refines="#author">` contains the URL of the author’s English Wikipedia page. This element is not included if there is no English Wikipedia page.
:html:`<meta property="se:url.authority.nacoaf" refines="#author">` contains the URI of the author’s Library of Congress Names Database page. It uses a plain :html:`http:` prefix, and does not include the :path:`.html` file extension. This element is not included if there is no LoC Names database entry.
Tip
This is easily found by visiting the person’s Wikipedia page and looking at the very bottom in the “Authority Control” section, under “LCCN.”
If it’s not on Wikipedia, find it directly by visiting the Library of Congress Names Database.
:html:`<meta property="role" refines="#author" scheme="marc:relators">` contains the MARC relator tag for the roles the author played in creating this book.
This example shows a complete author metadata block for :italics:`Short Fiction </ebooks/anton-chekhov/short-fiction/constance-garnett>`, by Anton Chekhov:
<dc:creator id="author">Anton Chekhov</dc:creator>
<meta property="file-as" refines="#author">Chekhov, Anton</meta>
<meta property="se:name.person.full-name" refines="#author">Anton Pavlovich Chekhov</meta>
<meta property="alternate-script" refines="#author">Анто́н Па́влович Че́хов</meta>
<meta property="se:url.encyclopedia.wikipedia" refines="#author">https://en.wikipedia.org/wiki/Anton_Chekhov</meta>
<meta property="se:url.authority.nacoaf" refines="#author">http://id.loc.gov/authorities/names/n79130807</meta>
<meta property="role" refines="#author" scheme="marc:relators">aut</meta>
- If the work is translated, the :html:`<dc:contributor id="translator">` metadata block follows the author metadata block.
- If there is more than one translator, then the first translator’s :html:`id` is :value:`translator-1`, the second :value:`translator-2`, and so on.
- Each block is identical to the author metadata block, but with :html:`<dc:contributor id="translator">` instead of :html:`<dc:creator id="author">`.
- The MARC relator tag is :string:`trl`: :html:`<meta property="role" refines="#translator" scheme="marc:relators">trl</meta>`.
- Translators often annotate the work; if this is the case, the additional MARC relator tag :string:`ann` is included in a separate :html:`<meta property="role" refines="#translator" scheme="marc:relators">` element.
- If the work is illustrated by a person who is not the author, the illustrator metadata block follows.
- If there is more than one illustrator, the first illustrator’s :html:`id` is :value:`illustrator-1`, the second :value:`illustrator-2`, and so on.
- Each block is identical to the author metadata block, but with :html:`<dc:contributor id="illustrator">` instead of :html:`<dc:creator id="author">`.
- The MARC relator tag is :string:`ill`: :html:`<meta property="role" refines="#illustrator" scheme="marc:relators">ill</meta>`.
The “cover artist” is the artist who painted the art the producer selected for the Standard Ebook cover.
- The cover artist metadata block is identical to the author metadata block, but with :html:`<dc:contributor id="artist">` instead of :html:`<dc:creator id="author">`.
- The MARC relator tag is :string:`art`: :html:`<meta property="role" refines="#artist" scheme="marc:relators">art</meta>`.
Occasionally a book may have other contributors besides the author, translator, and illustrator; for example, a person who wrote a preface, an introduction, or who edited the work or added endnotes.
- Additional contributor blocks are identical to the author metadata block, but with :html:`<dc:contributor>` instead of :html:`<dc:creator>`.
- The :html:`id` attribute of the :html:`<dc:contributor>` is the lowercase, URL-safe, fully-spelled out version of the MARC relator tag. For example, if the MARC relator tag is :string:`wpr`, the :html:`id` attribute would be :value:`writer-of-preface`.
- The MARC relator tag is one that is appropriate for the role of the additional contributor. Common roles for ebooks are: :string:`wpr`, :string:`ann`, and :string:`aui`.
- If a contributor is a collaborator on part of the book, for example if they share a byline on a short story, the :string:`ctb` MARC relator tag is used, and the contributor is given :string:`display-seq` set to :string:`0` to prevent them from appearing in the book’s overall byline.
- If the ebook is based on a transcription by someone else, like Project Gutenberg, then transcriber blocks follow the general contributor metadata blocks.
- If the transcriber is anonymous, the value for the producer’s :html:`<dc:contributor>` element is :string:`Anonymous`.
- If there is more than one transcriber, the first transcriber is :value:`transcriber-1`, the second :value:`transcriber-2`, and so on.
- The :html:`<meta property="file-as" refines="#transcriber-1">` element contains an alpha-sorted representation of the transcriber’s name.
- The MARC relator tag is :string:`trc`: :html:`<meta property="role" refines="#transcriber-1" scheme="marc:relators">trc</meta>`.
- If the transcriber’s personal homepage is known, the element :html:`<meta property="se:url.homepage" refines="#transcriber-1">` is included, whose value is the URL of the transcriber’s homepage. The URL must link to a personal homepage only; no products, services, or other endorsements, commercial or otherwise.
- If an ebook has a financial sponsor, then the sponsor block follows the transcriber block.
- The :html:`<meta property="file-as" refines="#sponsor">` element contains an alpha-sorted representation of the sponsor’s name.
- The MARC relator tag is :string:`spn`: :html:`<meta property="role" refines="#sponsor" scheme="marc:relators">spn</meta>`.
- If the sponsor’s personal homepage is known, the element :html:`<meta property="se:url.homepage" refines="#sponsor">` is included, whose value is the URL of the sponsor’s homepage. Since sponsors may be corporations, linking to a corporate homepage is permitted; however linking to specific product or service is disallowed.
These elements describe the SE producer who produced the ebook for the Standard Ebooks project.
- Producer names must sound like complete real names, i.e., they must have at least a first initial and full last name. Anonymous producers are allowed, and if the producer is anonymous then the value for the producer’s :html:`<dc:contributor>` element is :string:`Anonymous`.
- If there is more than one producer, the first producer is :value:`producer-1`, the second :value:`producer-2`, and so on.
- The producer metadata block is identical to the author metadata block, but with :html:`<dc:contributor id="producer-1">` instead of :html:`<dc:creator id="author">`.
- If the producer’s personal homepage is known, the element :html:`<meta property="se:url.homepage" refines="#producer-1">` is included, whose value is the URL of the transcriber’s homepage. The URL must link to a personal homepage only; no products, services, or other endorsements, commercial or otherwise.
- The MARC relator tags for the SE producer usually include all of the following:
- :string:`bkp`: The producer produced the ebook as :value:`role`.
- :string:`blw`: The producer wrote the blurb (the long description) as :value:`role`.
- :string:`cov`: The producer selected the cover art as :value:`role`.
- :string:`mrk`: The producer wrote the HTML markup for the ebook as :value:`role`.
- :string:`pfr`: The producer proofread the ebook as :value:`role`.
- :string:`tyg`: The producer reviewed the typography of the ebook as :value:`role`.
The :html:`<manifest>` element is a required part of the EPUB spec that defines a list of files within the ebook.
Tip
The :bash:`se build-manifest .` command generates a complete manifest and writes it directly to the ebook’s metadata file.
- The manifest is in alphabetical order.
- The :html:`id` attribute is the basename of the :html:`href` attribute.
- Files which contain SVG images have the additional :html:`properties` attribute with the value :value:`svg` in their manifest item.
- The manifest item for the table of contents file has the additional :html:`properties` attribute with the value :value:`nav`.
- The manifest item for the cover image has the additional :html:`properties` attribute with the value :value:`cover-image`.
The :html:`<spine>` element is a required part of the EPUB spec that defines the reading order of the files in the ebook.
Tip
The :bash:`se build-spine .` command generates the spine and writes it to the ebook’s metadata file. It does so by making some educated guesses as to the reading order. The tool’s output is never 100% correct; manual review of the output is required, and adjustments may be necessary to correct the reading order.
Accessibility metadata is added to bring the final ebook into conformance with the EPUB Accessibility spec, with the following considerations.
Accessibility metadata is arranged in the metadata file in groups by property, with items in each group ordered by their text values. The groups appear in this order:
If the ebook has images not including the cover, titlepage, and publisher logo, then the following metadata is included in addition to any boilerplate accessibility metadata:
<meta property="schema:accessMode">visual</meta> <meta property="schema:accessibilityFeature">alternativeText</meta>
The cover, titlepage, and publisher logo are ignored because they are present in most ebooks; if they were to be counted in accessibility metadata, that metadata would appear in most ebooks, making it meaningless.
Tip
Remember that accessibility metadata is grouped by property, and ordered alphabetically by value within those groups!