
| CREATOR | Mark Raynsford |
| DATE | 2021-06-27T00:00:00Z |
| DESCRIPTION | User documentation for the com.io7m.xstructural package. |
| IDENTIFIER | 59c00e65-2e1e-4e86-97b5-b4b1a650eea5 |
| LANGUAGE | en |
| RIGHTS | Public Domain |
| TITLE | xstructural 3.0.0-SNAPSHOT |
| Language | Identifier |
|---|---|
| Structural 7.0 | urn:com.io7m.structural:7:0 |
| Structural 8.0 | urn:com.io7m.structural:8:0 |
| Structural 9.0 | urn:com.io7m.structural:9:0 |
<Document xmlns="urn:com.io7m.structural:9:0" tableOfContentsDepth="2" id="14ab90da-7947-420c-a5f8-d9c9c87fbddc"> ... </Document>
file0.txt file1.txt file2.txt
<MetaProperty name="com.io7m.xstructural.epub.resource-list">extra-files.txt</MetaProperty>
<MetaProperty name="com.io7m.xstructural.epub.resource">file0.txt</MetaProperty> <MetaProperty name="com.io7m.xstructural.epub.resource">file1.txt</MetaProperty> <MetaProperty name="com.io7m.xstructural.epub.resource">file2.txt</MetaProperty>
<Document xmlns="urn:com.io7m.structural:9:0"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<Metadata>
<dc:title>Example Document</dc:title>
<MetaProperty name="com.io7m.xstructural.epub.colophon">colophon_extra.xml</MetaProperty>
<MetaProperty name="com.io7m.xstructural.epub.cover">cover.jpg</MetaProperty>
<MetaProperty name="com.io7m.xstructural.epub.resource">file0.txt</MetaProperty>
<MetaProperty name="com.io7m.xstructural.epub.resource">file1.txt</MetaProperty>
<MetaProperty name="com.io7m.xstructural.epub.resource">file2.txt</MetaProperty>
<MetaProperty name="com.io7m.xstructural.epub.resource-list">extra-files.txt</MetaProperty>
</Metadata>
...
| 1 |
The Dublin Core elements are optional, but some renderers may require them in order
to produce sensible output. The
title of a Document is specified using the
dc:title
element, for example.
References to this footnote:
1
|
| 2 |
The MetaProperty elements were added in version 8.0 of the
structural language.
References to this footnote:
1
|
<Section xmlns="urn:com.io7m.structural:9:0"
id="4e035356-53d9-4d09-ab6b-ec2c683218f5"
title="Section">
<Section title="Another Section">
...
</Section>
<Section title="Yet Another Section" id="6c311772-c7c8-4c28-979f-a5815795643b">
...
</Section>
</Section>
<Subsection xmlns="urn:com.io7m.structural:9:0"
id="1f56418e-f724-47ad-be10-db92b3e55295"
title="Subsection">
<Subsection title="Another Subsection">
...
</Subsection>
<Subsection title="Yet Another Subsection" id="49698ed6-466b-4917-90be-45480d78719c">
...
</Subsection>
</Subsection>
<Subsection xmlns="urn:com.io7m.structural:9:0"
id="0636fa84-2bd5-4cb5-acc5-10ca70948bbf"
title="Subsection">
<Paragraph>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam id
consectetur nunc. Donec nisi augue, pulvinar eu condimentum at,
pellentesque a libero. Fusce sed tortor quam. Donec et ipsum diam.
Sed eget molestie lacus, non rutrum risus. Orci varius natoque
penatibus et magnis dis parturient montes, nascetur ridiculus mus.
Class aptent taciti sociosqu ad litora torquent per conubia nostra,
per inceptos himenaeos. Nullam pellentesque est eu augue faucibus
molestie. Pellentesque habitant morbi tristique senectus et netus
et malesuada fames ac turpis egestas. Vivamus sed tincidunt justo.
Sed venenatis enim ac quam euismod, eget semper augue congue.
Integer interdum porttitor porta. Vestibulum eget neque vitae est
congue fringilla. Fusce ac dui suscipit, porttitor velit eu,
rutrum massa. Quisque quis fringilla felis.
</Paragraph>
<Paragraph>
Nunc et volutpat arcu. Donec mi nisi, sodales eget egestas sed,
suscipit eget arcu. Cras nibh ligula, maximus eu urna sit amet,
efficitur tempus elit. Sed nec massa auctor, blandit risus in,
dapibus purus. In et neque dignissim, pharetra elit ac, auctor
diam. Ut nisl odio, imperdiet sit amet purus quis, laoreet cursus
dui. Fusce dui neque, aliquet eu augue nec, pharetra laoreet odio.
Sed in scelerisque erat, sit amet sagittis turpis. In suscipit
mauris mauris, ut elementum nulla lacinia quis. Duis tristique
placerat porttitor. Cras vitae convallis purus. Aenean sed
suscipit leo, non dapibus lectus. Proin ac luctus lectus.
</Paragraph>
</Subsection>
<Subsection xmlns="urn:com.io7m.structural:9:0"
id="0636fa84-2bd5-4cb5-acc5-10ca70948bbf"
title="Subsection">
<FormalItem title="FormalItem Example">
<Image source="http://www.example.com/image.png">
An example image.
</Image>
</FormalItem>
</Subsection>
<Table type="genericTable">
<Columns>
<Column>Language</Column>
<Column>Identifier</Column>
</Columns>
<Row>
<Cell>Structural 7.0</Cell>
<Cell>urn:com.io7m.structural:7:0</Cell>
</Row>
<Row>
<Cell>Structural 8.0</Cell>
<Cell>urn:com.io7m.structural:8:0</Cell>
</Row>
<Row id="9ad372d8-1d06-47b5-8d86-93b536c50053">
<Cell>Structural 9.0</Cell>
<Cell>urn:com.io7m.structural:9:0</Cell>
</Row>
</Table>
| Language | Identifier |
|---|---|
| Structural 7.0 | urn:com.io7m.structural:7:0 |
| Structural 8.0 | urn:com.io7m.structural:8:0 |
| Structural 9.0 | urn:com.io7m.structural:9:0 |
<Footnote id="7c66cd52-4ace-4fd6-a05d-fd0255e441bb"> The Dublin Core elements are optional, but some renderers may require them in order to produce sensible output. The title of a <Link target="a49dac27-48f0-4504-8e03-8f0b73cd9c46">Document</Link> is specified using the <LinkExternal target="https://www.dublincore.org/specifications/dublin-core/dcmi-terms/#http://purl.org/dc/terms/title">dc:title</LinkExternal> element, for example. </Footnote>
<Types xmlns="urn:com.io7m.structural.types:1:0">
<Type Name="package">
<Description xml:lang="en">
A name of a software package.
</Description>
<Description xml:lang="fr">
Le nom d'un logiciel de service.
</Description>
<Description xml:lang="de">
Ein Name eines Softwarepakets.
</Description>
</Type>
</Types>
<Types xmlns="urn:com.io7m.structural.types:2:0">
<Type Name="citation">
<Description xml:lang="en">
A citation.
</Description>
<Markdown Style="brackets"/>
</Type>
<Type Name="function">
<Description xml:lang="en">
A mathematical function.
</Description>
<Markdown Style="monospace"/>
</Type>
</Types>
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright © 2025 Mark Raynsford <code@io7m.com> https://www.io7m.com
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns:t="urn:com.io7m.structural.types:1:0"
targetNamespace="urn:com.io7m.structural.types:1:0">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="xml.xsd"/>
<xsd:simpleType name="VersionNameType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of package (semantic) versions.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="([0-9]{1,8})\.([0-9]{1,8})\.([0-9]{1,8})"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="PackageNameType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of package names.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="([a-z][a-z0-9_-]{0,63})(\.[a-z][a-z0-9_-]{0,62}){0,15}"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TypeNameType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of type names. Type names are used to categorize elements and
are somewhat analogous to CSS classes, except that they are intended to
be used for more than just styling documents.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[a-zA-Z][a-zA-Z0-9_\.\-]*"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="DescriptionType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A human-readable description of the meaning of a type.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute ref="xml:lang"
use="required"/>
</xsd:complexType>
<xsd:element name="Description"
type="t:DescriptionType"/>
<xsd:element name="Type">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of types.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="t:Description"/>
</xsd:sequence>
</xsd:sequence>
<xsd:attribute ref="xml:base"/>
<xsd:attribute type="t:TypeNameType"
name="Name"
use="required"/>
</xsd:complexType>
<xsd:unique name="LanguageUnique">
<xsd:selector xpath="t:Description"/>
<xsd:field xpath="@xml:lang"/>
</xsd:unique>
</xsd:element>
<xsd:element name="Types">
<xsd:complexType>
<xsd:sequence>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:choice>
<xsd:element ref="t:Types"/>
<xsd:element ref="t:Type"/>
</xsd:choice>
</xsd:sequence>
</xsd:sequence>
<xsd:attribute ref="xml:base"/>
</xsd:complexType>
<xsd:key name="TypeNameUnique">
<xsd:selector xpath=".//t:Type"/>
<xsd:field xpath="@Name"/>
</xsd:key>
</xsd:element>
</xsd:schema>
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright © 2026 Mark Raynsford <code@io7m.com> https://www.io7m.com
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns:t="urn:com.io7m.structural.types:2:0"
targetNamespace="urn:com.io7m.structural.types:2:0">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="xml.xsd"/>
<xsd:simpleType name="VersionNameType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of package (semantic) versions.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="([0-9]{1,8})\.([0-9]{1,8})\.([0-9]{1,8})"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="PackageNameType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of package names.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="([a-z][a-z0-9_-]{0,63})(\.[a-z][a-z0-9_-]{0,62}){0,15}"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="TypeNameType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of type names. Type names are used to categorize elements and
are somewhat analogous to CSS classes, except that they are intended to
be used for more than just styling documents.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[a-zA-Z][a-zA-Z0-9_\.\-]*"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="MarkdownStyleType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of Markdown rendering styles. A style names the Markdown
markup that is used to wrap the rendered content of an element that
carries a type. The styles are:
<list>
<item>
<code>bold</code>: the content is wrapped in double asterisks
(strong emphasis).
</item>
<item>
<code>italic</code>: the content is wrapped in single underscores
(emphasis).
</item>
<item>
<code>monospace</code>: the content is wrapped in single backticks
(code span).
</item>
<item>
<code>brackets</code>: the content is wrapped in escaped square
brackets (rendered as literal square brackets surrounding the
text; the brackets are escaped so that the result is never
parsed as a link).
</item>
</list>
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="bold"/>
<xsd:enumeration value="italic"/>
<xsd:enumeration value="monospace"/>
<xsd:enumeration value="brackets"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="DescriptionType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A human-readable description of the meaning of a type.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute ref="xml:lang"
use="required"/>
</xsd:complexType>
<xsd:element name="Description"
type="t:DescriptionType"/>
<xsd:element name="Markdown">
<xsd:annotation>
<xsd:documentation xml:lang="en">
Markdown-specific metadata for a type. The <code>Style</code>
attribute declares the Markdown rendering style that is applied to
elements that carry the type when a document is transformed to
Markdown. For a <code>Term</code> element, the style wraps the term
content, and a <code>Term</code> element whose type declares no
style is rendered with the <code>bold</code> style. For a
<code>Link</code> or <code>LinkExternal</code> element, the style
wraps the entire rendered link (including the target), and a link
whose type declares no style is rendered without any added markup.
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute type="t:MarkdownStyleType"
name="Style"
use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="Type">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of types.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="t:Description"/>
</xsd:sequence>
<xsd:element ref="t:Markdown"
minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute ref="xml:base"/>
<xsd:attribute type="t:TypeNameType"
name="Name"
use="required"/>
</xsd:complexType>
<xsd:unique name="LanguageUnique">
<xsd:selector xpath="t:Description"/>
<xsd:field xpath="@xml:lang"/>
</xsd:unique>
</xsd:element>
<xsd:element name="Types">
<xsd:complexType>
<xsd:sequence>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:choice>
<xsd:element ref="t:Types"/>
<xsd:element ref="t:Type"/>
</xsd:choice>
</xsd:sequence>
</xsd:sequence>
<xsd:attribute ref="xml:base"/>
</xsd:complexType>
<xsd:key name="TypeNameUnique">
<xsd:selector xpath=".//t:Type"/>
<xsd:field xpath="@Name"/>
</xsd:key>
</xsd:element>
</xsd:schema>
xstructural: usage: xstructural [command] [arguments ...]
The xstructural command-line application.
Use the "help" command to examine specific commands:
$ xstructural help help.
Command-line arguments can be placed one per line into a file, and
the file can be referenced using the @ symbol:
$ echo help > file.txt
$ echo help >> file.txt
$ xstructural @file.txt
Commands:
epub Transform a structural document to an EPUB file
format Format one or more structural files in place
help Show usage information for a command.
markdown Transform a structural document to Markdown
schema Export the structural schemas to files
validate Validate a structural document
validate-xhtml Validate an XHTML file
version Show the application version.
xhtml Transform a structural document to XHTML
Documentation:
https://www.io7m.com/software/xstructural/
| Parameter | Type | Required | Description |
|---|---|---|---|
| --messagesFile | Path | false | A file that will contain XSLT debugging messages. |
| --traceFile | Path | false | A file that will contain XSLT trace messages. |
| --sourceFile | Path | true | The path to the input document. |
| --typeFile | Path | false | The path to the type description file. |
| --outputDirectory | Path | true | The directory to which output files will be written. |
| --outputFileName | String | false | The name of the output file. |
| --verbose | QLogLevel | false | Sets the application logging level. One of trace, debug, info (the default), warn, or error. |
$ xstructural epub \ --sourceFile com.io7m.xstructural.documentation/target/documentation/main.xml \ --outputDirectory out \ --outputFileName example.epub xstructural: XSValidator: INFO: validate (xstructural) /home/user/xstructural/com.io7m.xstructural.documentation/target/documentation/main.xml xstructural: XSTransformer: INFO: document uses namespace urn:com.io7m.structural:9:0 ... xstructural: XSXHTMLValidator: INFO: validate (xhtml 1.1) /home/user/xstructural/out/d0e37.xhtml xstructural: XSXHTMLValidator: INFO: checking the integrity of 1 references xstructural: XSXHTMLValidator: INFO: checked the integrity of 1 local references xstructural: XSXHTMLValidator: INFO: validate (xhtml 1.1) /home/user/xstructural/out/d0e39.xhtml xstructural: XSXHTMLValidator: INFO: checking the integrity of 5 references xstructural: XSXHTMLValidator: INFO: checked the integrity of 5 local references ... xstructural: XSXHTMLValidator: INFO: validate (xhtml 1.1) /home/user/xstructural/out/colophon.xhtml xstructural: XSXHTMLValidator: INFO: checking the integrity of 0 references xstructural: XSXHTMLValidator: INFO: checked the integrity of 0 local references xstructural: XSXHTMLValidator: INFO: validate (xhtml 1.1) /home/user/xstructural/out/cover.xhtml xstructural: XSXHTMLValidator: INFO: checking the integrity of 0 references xstructural: XSXHTMLValidator: INFO: checked the integrity of 0 local references xstructural: XSEPUBCreator: INFO: copy /home/user/xstructural/out/d0e37.xhtml /home/user/xstructural/out/epub/OEBPS/d0e37.xhtml xstructural: XSEPUBCreator: INFO: copy /home/user/xstructural/out/d0e39.xhtml /home/user/xstructural/out/epub/OEBPS/d0e39.xhtml ... xstructural: XSEPUBCreator: INFO: copy /home/user/xstructural/out/tocInternal.xhtml /home/user/xstructural/out/epub/OEBPS/tocInternal.xhtml xstructural: XSEPUBCreator: INFO: copy /home/user/xstructural/out/toc.ncx /home/user/xstructural/out/epub/OEBPS/toc.ncx xstructural: XSEPUBCreator: INFO: copy /home/user/xstructural/out/toc.xhtml /home/user/xstructural/out/epub/OEBPS/toc.xhtml xstructural: XSEPUBCreator: INFO: zip entry mimetype xstructural: XSEPUBCreator: INFO: zip entry content.opf xstructural: XSEPUBCreator: INFO: zip entry META-INF/container.xml xstructural: XSEPUBCreator: INFO: zip entry OEBPS/d0e37.xhtml ... xstructural: XSEPUBCreator: INFO: zip entry OEBPS/reset-epub.css xstructural: XSEPUBCreator: INFO: zip entry OEBPS/structural-epub.css xstructural: XSEPUBCreator: INFO: zip entry OEBPS/document.css xstructural: XSEPUBCreator: INFO: zip entry OEBPS/document-epub.css xstructural: XSEPUBCreator: INFO: zip entry OEBPS/cover.jpg xstructural: XSEPUBCreator: INFO: validating /home/user/xstructural/out/example.epub xstructural: XSEPUBCreator: INFO: epubcheck: stdout: Validating using EPUB version 3.3 rules. xstructural: XSEPUBCreator: INFO: epubcheck: stdout: No errors or warnings detected. xstructural: XSEPUBCreator: INFO: epubcheck: stdout: Messages: 0 fatals / 0 errors / 0 warnings / 0 infos xstructural: XSEPUBCreator: INFO: epubcheck: stdout: xstructural: XSEPUBCreator: INFO: epubcheck: stdout: EPUBCheck completed $ ls -alF out/ total 736 drwxr-xr-x 3 xs xs 4096 Oct 7 20:55 ./ drwxr-xr-x 15 xs xs 4096 Oct 7 20:55 ../ -rw-r--r-- 1 xs xs 2165 Oct 7 20:55 colophon.xhtml -rw-r--r-- 1 xs xs 753 Oct 7 20:55 cover.xhtml -rw-r--r-- 1 xs xs 9141 Oct 7 20:55 d0e37.xhtml ... -rw-r--r-- 1 xs xs 301022 Oct 7 20:55 example.epub -rw-r--r-- 1 xs xs 308 Oct 7 20:55 messages.log -rw-r--r-- 1 xs xs 11499 Oct 7 20:55 toc.xhtml -rw-r--r-- 1 xs xs 7415 Oct 7 20:55 trace.xml
| Parameter | Type | Required | Description |
|---|---|---|---|
| file | Path | false | Zero or more source files to be formatted in place, given as positional parameters. |
| --sourceFile | Path | false | One or more source files to be formatted in place, given as an alternative to the positional parameters. |
| --verbose | QLogLevel | false | Sets the application logging level. One of trace, debug, info (the default), warn, or error. |
$ xstructural format file.xml other.xml $ echo $? 0 $ xstructural format --sourceFile file.xml $ echo $? 0
| Parameter | Type | Required | Description |
|---|---|---|---|
| --messagesFile | Path | false | A file that will contain XSLT debugging messages. |
| --traceFile | Path | false | A file that will contain XSLT trace messages. |
| --sourceFile | Path | true | The path to the input document. |
| --typeFile | Path | false | The path to the type description file. |
| --outputDirectory | Path | true | The directory to which output files will be written. |
| --verbose | QLogLevel | false | Sets the application logging level. One of trace, debug, info (the default), warn, or error. |
$ xstructural markdown \ --sourceFile com.io7m.xstructural.documentation/target/documentation/main.xml \ --outputDirectory out xstructural: XSValidator: INFO: validate (xstructural) /home/user/xstructural/com.io7m.xstructural.documentation/target/documentation/main.xml xstructural: XSTransformer: INFO: document uses namespace urn:com.io7m.structural:9:0 ... $ ls -alF out/ total 608 drwxr-xr-x 2 xs xs 106 Oct 7 20:55 ./ drwxr-xr-x 15 xs xs 4096 Oct 7 20:55 ../ -rw-r--r-- 1 xs xs 0 Oct 7 20:55 extra.xml -rw-r--r-- 1 xs xs 203008 Oct 7 20:55 index.md -rw-r--r-- 1 xs xs 0 Oct 7 20:55 markdown-resources.txt -rw-r--r-- 1 xs xs 851 Oct 7 20:55 messages.log -rw-r--r-- 1 xs xs 406649 Oct 7 20:55 trace.xml
| Parameter | Type | Required | Description |
|---|---|---|---|
| --outputDirectory | Path | true | The path to the output directory. |
| --replace | Boolean | false | If set to true, any existing files will be replaced. |
| --verbose | QLogLevel | false | Sets the application logging level. One of trace, debug, info (the default), warn, or error. |
$ xstructural schema --outputDirectory xsd $ ls -alF xsd/ total 120 drwxr-xr-x 2 xs xs 141 Apr 28 09:59 ./ drwxr-xr-x 13 xs xs 17 Apr 28 09:59 ../ -rw-r--r-- 1 xs xs 4949 Apr 28 09:59 dc.xsd -rw-r--r-- 1 xs xs 4726 Apr 28 09:59 xml.xsd -rw-r--r-- 1 xs xs 31534 Apr 28 09:59 xstructural-7.xsd -rw-r--r-- 1 xs xs 2174 Apr 28 09:59 xstructural-8-index.xsd -rw-r--r-- 1 xs xs 32555 Apr 28 09:59 xstructural-8.xsd -rw-r--r-- 1 xs xs 32868 Apr 28 09:59 xstructural-9.xsd $ xstructural schema --outputDirectory xsd xstructural: XSCommandSchema: INFO: output file /home/user/xstructural/xsd/dc.xsd already exists, ignoring xstructural: XSCommandSchema: INFO: output file /home/user/xstructural/xsd/xml.xsd already exists, ignoring xstructural: XSCommandSchema: INFO: output file /home/user/xstructural/xsd/xstructural-7.xsd already exists, ignoring xstructural: XSCommandSchema: INFO: output file /home/user/xstructural/xsd/xstructural-8.xsd already exists, ignoring xstructural: XSCommandSchema: INFO: output file /home/user/xstructural/xsd/xstructural-9.xsd already exists, ignoring xstructural: XSCommandSchema: INFO: output file /home/user/xstructural/xsd/xstructural-8-index.xsd already exists, ignoring $ echo hello > xsd/xstructural-9.xsd $ ls -alF xsd/ total 120 drwxr-xr-x 2 xs xs 141 Apr 28 09:59 ./ drwxr-xr-x 13 xs xs 17 Apr 28 09:59 ../ -rw-r--r-- 1 xs xs 4949 Apr 28 09:59 dc.xsd -rw-r--r-- 1 xs xs 4726 Apr 28 09:59 xml.xsd -rw-r--r-- 1 xs xs 31534 Apr 28 09:59 xstructural-7.xsd -rw-r--r-- 1 xs xs 2174 Apr 28 09:59 xstructural-8-index.xsd -rw-r--r-- 1 xs xs 32555 Apr 28 09:59 xstructural-8.xsd -rw-r--r-- 1 xs xs 6 Apr 28 10:13 xstructural-9.xsd $ xstructural schema --outputDirectory xsd --replace true $ ls -alF xsd/ total 120 drwxr-xr-x 2 xs xs 141 Apr 28 10:14 ./ drwxr-xr-x 13 xs xs 17 Apr 28 10:10 ../ -rw-r--r-- 1 xs xs 4949 Apr 28 10:14 dc.xsd -rw-r--r-- 1 xs xs 4726 Apr 28 10:14 xml.xsd -rw-r--r-- 1 xs xs 31534 Apr 28 10:14 xstructural-7.xsd -rw-r--r-- 1 xs xs 2174 Apr 28 10:14 xstructural-8-index.xsd -rw-r--r-- 1 xs xs 32555 Apr 28 10:14 xstructural-8.xsd -rw-r--r-- 1 xs xs 32868 Apr 28 10:14 xstructural-9.xsd
| Parameter | Type | Required | Description |
|---|---|---|---|
| --sourceFile | Path | true | The path to the input document. |
| --typeFile | Path | false | The path to the type description file. |
| --verbose | QLogLevel | false | Sets the application logging level. One of trace, debug, info (the default), warn, or error. |
$ xstructural validate --sourceFile com.io7m.xstructural.documentation/target/documentation/main.xml xstructural: XSValidator: INFO: validate (xstructural) /home/user/xstructural/com.io7m.xstructural.documentation/target/documentation/main.xml $ echo $? 0 $ xstructural validate --sourceFile README-CHANGES.xml xstructural: XSValidator: INFO: validate (xstructural) /home/user/xstructural/README-CHANGES.xml xstructural: validation: ERROR: file:///home/user/xstructural/README-CHANGES.xml:2:82: cvc-elt.1.a: Cannot find the declaration of element 'c:changelog'. xstructural: XSValidator: ERROR: one or more validation errors occurred xstructural: Main: ERROR: com.io7m.xstructural.api.XSValidationException: Document /home/user/xstructural/README-CHANGES.xml is not a valid structural document $ echo $? 1
| Parameter | Type | Required | Description |
|---|---|---|---|
| --sourceDirectory | Path | true | The directory containing XHTML files. |
| --verbose | QLogLevel | false | Sets the application logging level. One of trace, debug, info (the default), warn, or error. |
$ xstructural validate-xhtml \ --sourceDirectory out xstructural: XSXHTMLValidator: INFO: validate (xhtml 1.1) out/index.xhtml
| Parameter | Type | Required | Description |
|---|---|---|---|
| --brandingFile | Path | false | The path to the branding document. |
| --copyResources | Boolean | false | If set to true (the default), the built-in structural CSS files (reset.css, structural.css, structural-single.css, and structural-multi.css) will be copied to the output directory. |
| --messagesFile | Path | false | A file that will contain XSLT debugging messages. The default is messages.log in the output directory. |
| --traceFile | Path | false | A file that will contain XSLT trace messages. The default is trace.xml in the output directory. |
| --typeFile | Path | false | The path to the type description file. |
| --sourceFile | Path | true | The path to the input document. |
| --outputDirectory | Path | true | The directory to which output files will be written. |
| --stylesheet | Stylesheet | false | The XSLT stylesheet that will be used. One of SINGLE_FILE (the default), MULTIPLE_FILE, EPUB, MULTIPLE_FILE_INDEX_ONLY, or MARKDOWN. |
| --verbose | QLogLevel | false | Sets the application logging level. One of trace, debug, info (the default), warn, or error. |
$ xstructural xhtml \ --sourceFile com.io7m.xstructural.documentation/target/documentation/main.xml \ --stylesheet SINGLE_FILE \ --outputDirectory out xstructural: XSValidator: INFO: validate (xstructural) /home/user/xstructural/com.io7m.xstructural.documentation/target/documentation/main.xml xstructural: XSTransformer: INFO: document uses namespace urn:com.io7m.structural:9:0 ... xstructural: XSTransformer: INFO: copy resource reset.css xstructural: XSTransformer: INFO: copy resource structural-multi.css xstructural: XSTransformer: INFO: copy resource structural-single.css xstructural: XSTransformer: INFO: copy resource structural.css xstructural: XSXHTMLValidator: INFO: validate (xhtml 1.1) /home/user/xstructural/out/index.xhtml xstructural: XSXHTMLValidator: INFO: checking the integrity of 479 references xstructural: XSXHTMLValidator: INFO: checked the integrity of 479 local references $ ls -alF out/ total 852 drwxr-xr-x 2 xs xs 175 Oct 7 20:55 ./ drwxr-xr-x 15 xs xs 4096 Oct 7 20:54 ../ -rw-r--r-- 1 xs xs 0 Oct 7 20:54 extra.xml -rw-r--r-- 1 xs xs 362378 Oct 7 20:55 index.xhtml -rw-r--r-- 1 xs xs 545 Oct 7 20:54 messages.log -rw-r--r-- 1 xs xs 6138 Oct 7 20:55 reset.css -rw-r--r-- 1 xs xs 6390 Oct 7 20:55 structural.css -rw-r--r-- 1 xs xs 908 Oct 7 20:55 structural-multi.css -rw-r--r-- 1 xs xs 909 Oct 7 20:55 structural-single.css -rw-r--r-- 1 xs xs 472093 Oct 7 20:55 trace.xml $ xstructural xhtml \ --sourceFile com.io7m.xstructural.documentation/target/documentation/main.xml \ --stylesheet MULTIPLE_FILE \ --outputDirectory out xstructural: XSValidator: INFO: validate (xstructural) /home/user/xstructural/com.io7m.xstructural.documentation/target/documentation/main.xml xstructural: XSTransformer: INFO: document uses namespace urn:com.io7m.structural:9:0 ... xstructural: XSTransformer: INFO: copy resource reset.css xstructural: XSTransformer: INFO: copy resource structural-multi.css xstructural: XSTransformer: INFO: copy resource structural-single.css xstructural: XSTransformer: INFO: copy resource structural.css xstructural: XSXHTMLValidator: INFO: validate (xhtml 1.1) /home/user/xstructural/out/index.xhtml xstructural: XSXHTMLValidator: INFO: checking the integrity of 479 references xstructural: XSXHTMLValidator: INFO: checked the integrity of 479 local references xstructural: XSXHTMLValidator: INFO: validate (xhtml 1.1) /home/user/xstructural/out/index-m.xhtml xstructural: XSXHTMLValidator: INFO: checking the integrity of 0 references xstructural: XSXHTMLValidator: INFO: checked the integrity of 0 local references xstructural: XSXHTMLValidator: INFO: validate (xhtml 1.1) /home/user/xstructural/out/d0e37.xhtml xstructural: XSXHTMLValidator: INFO: checking the integrity of 1 references xstructural: XSXHTMLValidator: INFO: checked the integrity of 1 local references xstructural: XSXHTMLValidator: INFO: validate (xhtml 1.1) /home/user/xstructural/out/d0e39.xhtml xstructural: XSXHTMLValidator: INFO: checking the integrity of 10 references xstructural: XSXHTMLValidator: INFO: checked the integrity of 10 local references ... xstructural: XSXHTMLValidator: INFO: validate (xhtml 1.1) /home/user/xstructural/out/d0e2447.xhtml xstructural: XSXHTMLValidator: INFO: checking the integrity of 3 references xstructural: XSXHTMLValidator: INFO: checked the integrity of 3 local references $ ls -alF out/ total 1648 drwxr-xr-x 2 xs xs 4096 Oct 7 20:55 ./ drwxr-xr-x 15 xs xs 4096 Oct 7 20:54 ../ -rw-r--r-- 1 xs xs 23776 Oct 7 20:55 d0e1037.xhtml -rw-r--r-- 1 xs xs 28394 Oct 7 20:55 d0e1221.xhtml ... -rw-r--r-- 1 xs xs 7672 Oct 7 20:55 index-m.xhtml -rw-r--r-- 1 xs xs 362378 Oct 7 20:55 index.xhtml -rw-r--r-- 1 xs xs 91226 Oct 7 20:55 messages.log -rw-r--r-- 1 xs xs 6138 Oct 7 20:55 reset.css -rw-r--r-- 1 xs xs 6390 Oct 7 20:55 structural.css -rw-r--r-- 1 xs xs 908 Oct 7 20:55 structural-multi.css -rw-r--r-- 1 xs xs 909 Oct 7 20:55 structural-single.css -rw-r--r-- 1 xs xs 620748 Oct 7 20:55 trace.xml
<build>
<plugins>
...
<!-- Generate documentation in various formats. -->
<plugin>
<groupId>com.io7m.xstructural</groupId>
<artifactId>com.io7m.xstructural.maven_plugin</artifactId>
<version>3.0.0-SNAPSHOT</version>
<executions>
<execution>
<id>xhtml-single</id>
<phase>package</phase>
<goals>
<goal>xhtml-single</goal>
</goals>
<configuration>
<brandingFile>src/main/xml/brand.xml</brandingFile>
<sourceFile>src/main/xml/main.xml</sourceFile>
<outputDirectory>target/documentation</outputDirectory>
</configuration>
</execution>
<execution>
<id>xhtml-multi</id>
<phase>package</phase>
<goals>
<goal>xhtml-multi</goal>
</goals>
<configuration>
<brandingFile>src/main/xml/brand.xml</brandingFile>
<sourceFile>src/main/xml/main.xml</sourceFile>
<outputDirectory>target/documentation</outputDirectory>
<typeFile>src/main/xml/types.xml</typeFile>
</configuration>
</execution>
<execution>
<id>epub</id>
<phase>package</phase>
<goals>
<goal>epub</goal>
</goals>
<configuration>
<brandingFile>src/main/xml/brand.xml</brandingFile>
<sourceFile>src/main/xml/main.xml</sourceFile>
<outputDirectory>target/epub</outputDirectory>
<outputFileName>documentation.epub</outputFileName>
</configuration>
</execution>
<execution>
<id>markdown</id>
<phase>package</phase>
<goals>
<goal>markdown</goal>
</goals>
<configuration>
<sourceFile>src/main/xml/main.xml</sourceFile>
<outputDirectory>target/markdown</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<plugin>
<groupId>com.io7m.xstructural</groupId>
<artifactId>com.io7m.xstructural.maven_plugin</artifactId>
<version>3.0.0-SNAPSHOT</version>
<executions>
<execution>
<id>format</id>
<goals>
<goal>format</goal>
</goals>
<configuration>
<glob>**/*.xml</glob>
</configuration>
</execution>
</executions>
</plugin>
var factory =
ServiceLoader.load(XSProcessorFactoryType.class)
.findFirst()
.orElseThrow(() -> new IllegalStateException("Missing factory service"));
final var request =
XSProcessorRequest.builder()
.setOutputDirectory(Paths.get(...))
.setSourceFile(Paths.get(...))
.setTask(Task.TRANSFORM_XHTML)
.setStylesheet(Stylesheet.SINGLE_FILE)
.build();
final var processor = factory.create(request);
processor.execute();
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright © 2026 Mark Raynsford <code@io7m.com> https://www.io7m.com
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:s="urn:com.io7m.structural:9:0"
targetNamespace="urn:com.io7m.structural:9:0">
<xsd:import namespace="http://purl.org/dc/elements/1.1/"
schemaLocation="dc.xsd"/>
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="xml.xsd"/>
<xsd:simpleType name="uuidType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A UUID value.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="imageTextType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of text that appears in image elements. This is required to be of non-zero length in order to ensure
that authors add useful text that will then be used in the 'alt' elements of XHTML generated from the document
sources.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="typeType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of type names. Type names are used to categorize elements and are somewhat analogous to CSS classes,
except that they are intended to be used for more than just styling documents.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[a-zA-Z][a-zA-Z0-9_\.\-]*"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:attributeGroup name="standardXMLAttributes">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The standard elements expected to appear in XML texts.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute ref="xml:base"/>
<xsd:attribute ref="xml:lang"/>
</xsd:attributeGroup>
<xsd:attributeGroup name="tableOfContentAttributes">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The attributes used to describe tables of content.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute name="tableOfContents"
use="optional"
default="true"
type="xsd:boolean">
<xsd:annotation>
<xsd:documentation xml:lang="en">
If the value of the attribute is 'true', then a table of contents will be generated in the respective element.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="tableOfContentsDepth"
use="optional"
default="3"
type="xsd:positiveInteger">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The maximum relative depth of sections and subsections that will appear in a generated table of contents.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:attributeGroup>
<xsd:complexType mixed="true"
name="ImageType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
An element used to describe an image. The text content of the image element SHOULD be used to provide an
accessible description of the image. This description is expected to be used by screen readers, and may also be
displayed by browsers if the referenced image cannot be loaded for any reason.
</xsd:documentation>
</xsd:annotation>
<xsd:simpleContent>
<xsd:extension base="s:imageTextType">
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the image.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="width"
type="xsd:nonNegativeInteger"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The width of the image.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="height"
type="xsd:nonNegativeInteger"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The height of the image.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="source"
type="xsd:anyURI"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The source location of the image.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:element name="Image"
type="s:ImageType"/>
<xsd:complexType name="ItemType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
An item appearing in a list.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:group ref="s:ListContent"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the list item.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Item"
type="s:ItemType"/>
<xsd:group name="ListContent">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The elements that may appear in list items.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="s:Image"/>
<xsd:element ref="s:Link"/>
<xsd:element ref="s:LinkExternal"/>
<xsd:element ref="s:LinkFootnote"/>
<xsd:element ref="s:ListOrdered"/>
<xsd:element ref="s:ListUnordered"/>
<xsd:element ref="s:Term"/>
</xsd:choice>
</xsd:group>
<xsd:complexType name="ListOrderedType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
An ordered list.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Item"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the list.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="ListOrdered"
type="s:ListOrderedType"/>
<xsd:complexType name="ListUnorderedType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
An unordered list.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Item"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the list.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="ListUnordered"
type="s:ListUnorderedType"/>
<xsd:complexType name="ColumnType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A description of a column in a table.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the column.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Column"
type="s:ColumnType"/>
<xsd:complexType name="ColumnsType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A set of table column descriptions.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Column"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the columns.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Columns"
type="s:ColumnsType"/>
<xsd:group name="TableContent">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of content that may appear in table cells.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="s:Link"/>
<xsd:element ref="s:LinkExternal"/>
<xsd:element ref="s:LinkFootnote"/>
<xsd:element ref="s:Term"/>
</xsd:choice>
</xsd:group>
<xsd:complexType name="CellType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A cell in a table.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:group ref="s:TableContent"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the cell.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Cell"
type="s:CellType"/>
<xsd:complexType name="RowType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A row of cells in a table.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Cell"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the row.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="id"
type="s:uuidType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The unique identifier of the table row.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Row"
type="s:RowType"/>
<xsd:complexType name="TableType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A table. A table consists of a list of column definitions, followed by a sequence of rows consisting of the
table cells.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element ref="s:Columns"/>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Row"/>
</xsd:sequence>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the table row.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Table"
type="s:TableType"/>
<xsd:complexType name="TermType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A term acts as a simple container of one or more words in a sentence. Term elements can be used to denote the
semantics of words, such as wrapping the name of a mathematical function in a <Term type="function">
element.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute type="s:typeType"
name="type"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the term.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Term"
type="s:TermType"/>
<xsd:complexType name="LinkType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A Link element describes a link to an element within the current document. Links may only refer to elements that
contain an appropriate 'id' attribute.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute type="s:uuidType"
name="target"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The target of the link, which must be an element with an appropriate 'id' attribute.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the link.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Link"
type="s:LinkType"/>
<xsd:complexType name="LinkFootnoteType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A LinkFootnote element describes a link to a footnote within the current section.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute type="s:uuidType"
name="target"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The target of the link, which must be a Footnote with a matching 'id' attribute.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the link.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="LinkFootnote"
type="s:LinkFootnoteType"/>
<xsd:complexType name="LinkExternalType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A LinkExternal element describes a link to an external URI.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute type="xsd:anyURI"
name="target"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The target URI.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the link.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="LinkExternal"
type="s:LinkExternalType"/>
<xsd:complexType name="VerbatimType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A Verbatim element contains text that should be reproduced exactly, with almost all whitespace intact. Renderers
are permitted to trim leading and trailing whitespace.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the verbatim text.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Verbatim"
type="s:VerbatimType"/>
<xsd:group name="FormalItemContent">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of content that can appear in formal items.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="s:Image"/>
<xsd:element ref="s:Link"/>
<xsd:element ref="s:LinkExternal"/>
<xsd:element ref="s:LinkFootnote"/>
<xsd:element ref="s:ListOrdered"/>
<xsd:element ref="s:ListUnordered"/>
<xsd:element ref="s:Table"/>
<xsd:element ref="s:Term"/>
<xsd:element ref="s:Verbatim"/>
</xsd:choice>
</xsd:group>
<xsd:group name="ParagraphContent">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of content that can appear in paragraphs.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="s:Link"/>
<xsd:element ref="s:LinkExternal"/>
<xsd:element ref="s:LinkFootnote"/>
<xsd:element ref="s:Term"/>
</xsd:choice>
</xsd:group>
<xsd:simpleType name="MetaPropertyNameType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of meta property names.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="([a-z0-9_\-]+)(.([a-z0-9_\-]+))+"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="MetaPropertyType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A metadata property.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute name="name"
use="required"
type="s:MetaPropertyNameType"/>
<xsd:attribute name="visible"
use="optional"
default="false"
type="xsd:boolean"/>
</xsd:complexType>
<xsd:element name="MetaProperty"
type="s:MetaPropertyType"/>
<xsd:complexType name="MetadataType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
An element containing document metadata.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:group ref="dc:elementsGroup"/>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:element ref="s:MetaProperty"/>
</xsd:sequence>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
</xsd:complexType>
<xsd:element name="Metadata"
type="s:MetadataType"/>
<xsd:complexType name="ParagraphType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A paragraph denotes a self-contained series of sentences.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:group ref="s:ParagraphContent"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the paragraph.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="id"
type="s:uuidType"
use="optional"/>
</xsd:complexType>
<xsd:element name="Paragraph"
type="s:ParagraphType"/>
<xsd:complexType name="FormalItemType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A formal item is analogous to a "figure" in printed text. Formal items are used to significant images, tables of
data, code listings, and other important objects into texts. They are considered to be at the same level of
structural significance as paragraphs.
</xsd:documentation>
</xsd:annotation>
<xsd:group ref="s:FormalItemContent"/>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the formal item.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="id"
type="s:uuidType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The unique identifier of the formal item.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="title"
type="xsd:string"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The title of the formal item.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="FormalItem"
type="s:FormalItemType"/>
<xsd:group name="SubsectionContent">
<xsd:choice>
<xsd:element ref="s:Paragraph"/>
<xsd:element ref="s:FormalItem"/>
</xsd:choice>
</xsd:group>
<xsd:complexType name="SubsectionType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A Subsection is a structural element that denotes a part of the document similar to a chapter.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Subsection"/>
</xsd:sequence>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:group ref="s:SubsectionContent"/>
</xsd:sequence>
</xsd:choice>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the subsection.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="id"
type="s:uuidType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The unique identifier of the subsection.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="title"
type="xsd:string"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The title of the subsection.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Subsection"
type="s:SubsectionType"/>
<xsd:group name="FootnoteContent">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of content that may appear in footnotes.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="s:Image"/>
<xsd:element ref="s:Link"/>
<xsd:element ref="s:LinkExternal"/>
<xsd:element ref="s:LinkFootnote"/>
<xsd:element ref="s:ListOrdered"/>
<xsd:element ref="s:ListUnordered"/>
<xsd:element ref="s:Table"/>
<xsd:element ref="s:Term"/>
<xsd:element ref="s:Verbatim"/>
</xsd:choice>
</xsd:group>
<xsd:complexType name="FootnoteType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A Footnote is a note of referenc or comment usually placed at the bottom of a page. Footnotes may be referenced
by LinkFootnote elements.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:group ref="s:FootnoteContent"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="id"
type="s:uuidType"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The unique identifier of the footnote.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Footnote"
type="s:FootnoteType"/>
<xsd:complexType name="SectionType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A Section is a structural element that denotes a part of the document similar to a chapter. Renderers that
produce multiple pages MUST insert whatever is analogous to a page break at the end of a section.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:choice>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Section"/>
</xsd:sequence>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Subsection"/>
</xsd:sequence>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:group ref="s:SubsectionContent"/>
</xsd:sequence>
</xsd:choice>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:element ref="s:Footnote"/>
</xsd:sequence>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attributeGroup ref="s:tableOfContentAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the section.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="id"
type="s:uuidType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The unique identifier of the section.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="title"
type="xsd:string"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The title of the section.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Section"
type="s:SectionType">
<xsd:unique name="SectionFootnoteKey">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All footnotes within a section must have unique identifiers.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath="s:Footnote"/>
<xsd:field xpath="@id"/>
</xsd:unique>
<xsd:keyref name="SectionFootnoteReferencesParagraph"
refer="s:SectionFootnoteKey">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All footnote links in paragraphs must refer to footnotes that exist in this section.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath="s:Paragraph/*/s:LinkFootnote"/>
<xsd:field xpath="@target"/>
</xsd:keyref>
<xsd:keyref name="SectionFootnoteReferencesSubsection"
refer="s:SectionFootnoteKey">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All footnote links in subsections must refer to footnotes that exist in this section.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath="s:Subsection/*/s:LinkFootnote"/>
<xsd:field xpath="@target"/>
</xsd:keyref>
</xsd:element>
<xsd:complexType name="DocumentType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The Document element represents the top-level structure of a document. The name 'document' is somewhat of a
misnomer, as nothing prevents the document from being structured as a book (with chapters, etc). The document
begins with standard Dublin Core metadata, and contains _either_ a series of sections _or_ a series of
subsections (but not both).
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element ref="s:Metadata"/>
<xsd:choice>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Section"/>
</xsd:sequence>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Subsection"/>
</xsd:sequence>
</xsd:choice>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:element ref="s:Footnote"/>
</xsd:sequence>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attributeGroup ref="s:tableOfContentAttributes"/>
</xsd:complexType>
<xsd:element name="Document"
type="s:DocumentType">
<xsd:unique name="ItemIDsAreUnique">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All 'id' attributes specified on objects within the document must be unique.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath=".//s:FormalItem|.//s:Paragraph|.//s:Subsection|.//s:Section|.//s:Footnote|.//s:Row"/>
<xsd:field xpath="@id"/>
</xsd:unique>
<xsd:unique name="LinkReferencesAreUnique">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All 'id' attributes specified on objects within the document must be unique.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath=".//s:FormalItem|.//s:Paragraph|.//s:Subsection|.//s:Section|.//s:Row"/>
<xsd:field xpath="@id"/>
</xsd:unique>
<xsd:keyref name="LinkReferences"
refer="s:LinkReferencesAreUnique">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All Link elements must refer to elements with existing 'id' attributes.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath=".//s:Link"/>
<xsd:field xpath="@target"/>
</xsd:keyref>
<xsd:unique name="DocumentFootnoteKey">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All 'id' attributes specified on footnotes within the document must be unique.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath="s:Footnote"/>
<xsd:field xpath="@id"/>
</xsd:unique>
<xsd:keyref name="DocumentFootnoteReferences"
refer="s:DocumentFootnoteKey">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All footnote references must refer to footnotes that exist.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath="s:Subsection/*/s:LinkFootnote"/>
<xsd:field xpath="@target"/>
</xsd:keyref>
</xsd:element>
</xsd:schema>
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright © 2021 Mark Raynsford <code@io7m.com> https://www.io7m.com
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:s="urn:com.io7m.structural:8:0"
targetNamespace="urn:com.io7m.structural:8:0">
<xsd:import namespace="http://purl.org/dc/elements/1.1/"
schemaLocation="dc.xsd"/>
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="xml.xsd"/>
<xsd:simpleType name="uuidType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A UUID value.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="imageTextType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of text that appears in image elements. This is required to be of non-zero length in order to ensure
that authors add useful text that will then be used in the 'alt' elements of XHTML generated from the document
sources.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="typeType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of type names. Type names are used to categorize elements and are somewhat analogous to CSS classes,
except that they are intended to be used for more than just styling documents.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[a-zA-Z][a-zA-Z0-9_\.\-]*"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:attributeGroup name="standardXMLAttributes">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The standard elements expected to appear in XML texts.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute ref="xml:base"/>
<xsd:attribute ref="xml:lang"/>
</xsd:attributeGroup>
<xsd:attributeGroup name="tableOfContentAttributes">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The attributes used to describe tables of content.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute name="tableOfContents"
use="optional"
default="true"
type="xsd:boolean">
<xsd:annotation>
<xsd:documentation xml:lang="en">
If the value of the attribute is 'true', then a table of contents will be generated in the respective element.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="tableOfContentsDepth"
use="optional"
default="3"
type="xsd:positiveInteger">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The maximum relative depth of sections and subsections that will appear in a generated table of contents.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:attributeGroup>
<xsd:complexType mixed="true"
name="ImageType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
An element used to describe an image. The text content of the image element SHOULD be used to provide an
accessible description of the image. This description is expected to be used by screen readers, and may also be
displayed by browsers if the referenced image cannot be loaded for any reason.
</xsd:documentation>
</xsd:annotation>
<xsd:simpleContent>
<xsd:extension base="s:imageTextType">
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the image.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="width"
type="xsd:nonNegativeInteger"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The width of the image.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="height"
type="xsd:nonNegativeInteger"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The height of the image.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="source"
type="xsd:anyURI"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The source location of the image.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:element name="Image"
type="s:ImageType"/>
<xsd:complexType name="ItemType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
An item appearing in a list.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:group ref="s:ListContent"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the list item.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Item"
type="s:ItemType"/>
<xsd:group name="ListContent">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The elements that may appear in list items.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="s:Image"/>
<xsd:element ref="s:Link"/>
<xsd:element ref="s:LinkExternal"/>
<xsd:element ref="s:LinkFootnote"/>
<xsd:element ref="s:ListOrdered"/>
<xsd:element ref="s:ListUnordered"/>
<xsd:element ref="s:Term"/>
</xsd:choice>
</xsd:group>
<xsd:complexType name="ListOrderedType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
An ordered list.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Item"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the list.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="ListOrdered"
type="s:ListOrderedType"/>
<xsd:complexType name="ListUnorderedType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
An unordered list.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Item"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the list.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="ListUnordered"
type="s:ListUnorderedType"/>
<xsd:complexType name="ColumnType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A description of a column in a table.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the column.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Column"
type="s:ColumnType"/>
<xsd:complexType name="ColumnsType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A set of table column descriptions.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Column"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the columns.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Columns"
type="s:ColumnsType"/>
<xsd:group name="TableContent">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of content that may appear in table cells.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="s:Link"/>
<xsd:element ref="s:LinkExternal"/>
<xsd:element ref="s:LinkFootnote"/>
<xsd:element ref="s:Term"/>
</xsd:choice>
</xsd:group>
<xsd:complexType name="CellType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A cell in a table.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:group ref="s:TableContent"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the cell.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Cell"
type="s:CellType"/>
<xsd:complexType name="RowType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A row of cells in a table.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Cell"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the row.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Row"
type="s:RowType"/>
<xsd:complexType name="TableType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A table. A table consists of a list of column definitions, followed by a sequence of rows consisting of the
table cells.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element ref="s:Columns"/>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Row"/>
</xsd:sequence>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the table.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Table"
type="s:TableType"/>
<xsd:complexType name="TermType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A term acts as a simple container of one or more words in a sentence. Term elements can be used to denote the
semantics of words, such as wrapping the name of a mathematical function in a <Term type="function">
element.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute type="s:typeType"
name="type"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the term.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Term"
type="s:TermType"/>
<xsd:complexType name="LinkType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A Link element describes a link to an element within the current document. Links may only refer to elements that
contain an appropriate 'id' attribute.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute type="s:uuidType"
name="target"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The target of the link, which must be an element with an appropriate 'id' attribute.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the link.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Link"
type="s:LinkType"/>
<xsd:complexType name="LinkFootnoteType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A LinkFootnote element describes a link to a footnote within the current section.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute type="s:uuidType"
name="target"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The target of the link, which must be a Footnote with a matching 'id' attribute.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the link.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="LinkFootnote"
type="s:LinkFootnoteType"/>
<xsd:complexType name="LinkExternalType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A LinkExternal element describes a link to an external URI.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute type="xsd:anyURI"
name="target"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The target URI.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the link.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="LinkExternal"
type="s:LinkExternalType"/>
<xsd:complexType name="VerbatimType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A Verbatim element contains text that should be reproduced exactly, with almost all whitespace intact. Renderers
are permitted to trim leading and trailing whitespace.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the verbatim text.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Verbatim"
type="s:VerbatimType"/>
<xsd:group name="FormalItemContent">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of content that can appear in formal items.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="s:Image"/>
<xsd:element ref="s:Link"/>
<xsd:element ref="s:LinkExternal"/>
<xsd:element ref="s:LinkFootnote"/>
<xsd:element ref="s:ListOrdered"/>
<xsd:element ref="s:ListUnordered"/>
<xsd:element ref="s:Table"/>
<xsd:element ref="s:Term"/>
<xsd:element ref="s:Verbatim"/>
</xsd:choice>
</xsd:group>
<xsd:group name="ParagraphContent">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of content that can appear in paragraphs.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="s:Link"/>
<xsd:element ref="s:LinkExternal"/>
<xsd:element ref="s:LinkFootnote"/>
<xsd:element ref="s:Term"/>
</xsd:choice>
</xsd:group>
<xsd:simpleType name="MetaPropertyNameType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of meta property names.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="([a-z0-9_\-]+)(.([a-z0-9_\-]+))+"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="MetaPropertyType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A metadata property.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute name="name"
use="required"
type="s:MetaPropertyNameType"/>
<xsd:attribute name="visible"
use="optional"
default="false"
type="xsd:boolean"/>
</xsd:complexType>
<xsd:element name="MetaProperty"
type="s:MetaPropertyType"/>
<xsd:complexType name="MetadataType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
An element containing document metadata.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:group ref="dc:elementsGroup"/>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:element ref="s:MetaProperty"/>
</xsd:sequence>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
</xsd:complexType>
<xsd:element name="Metadata"
type="s:MetadataType"/>
<xsd:complexType name="ParagraphType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A paragraph denotes a self-contained series of sentences.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:group ref="s:ParagraphContent"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the paragraph.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="id"
type="s:uuidType"
use="optional"/>
</xsd:complexType>
<xsd:element name="Paragraph"
type="s:ParagraphType"/>
<xsd:complexType name="FormalItemType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A formal item is analogous to a "figure" in printed text. Formal items are used to significant images, tables of
data, code listings, and other important objects into texts. They are considered to be at the same level of
structural significance as paragraphs.
</xsd:documentation>
</xsd:annotation>
<xsd:group ref="s:FormalItemContent"/>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the formal item.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="id"
type="s:uuidType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The unique identifier of the formal item.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="title"
type="xsd:string"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The title of the formal item.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="FormalItem"
type="s:FormalItemType"/>
<xsd:group name="SubsectionContent">
<xsd:choice>
<xsd:element ref="s:Paragraph"/>
<xsd:element ref="s:FormalItem"/>
</xsd:choice>
</xsd:group>
<xsd:complexType name="SubsectionType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A Subsection is a structural element that denotes a part of the document similar to a chapter.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Subsection"/>
</xsd:sequence>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:group ref="s:SubsectionContent"/>
</xsd:sequence>
</xsd:choice>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the subsection.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="id"
type="s:uuidType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The unique identifier of the subsection.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="title"
type="xsd:string"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The title of the subsection.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Subsection"
type="s:SubsectionType"/>
<xsd:group name="FootnoteContent">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of content that may appear in footnotes.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="s:Image"/>
<xsd:element ref="s:Link"/>
<xsd:element ref="s:LinkExternal"/>
<xsd:element ref="s:LinkFootnote"/>
<xsd:element ref="s:ListOrdered"/>
<xsd:element ref="s:ListUnordered"/>
<xsd:element ref="s:Table"/>
<xsd:element ref="s:Term"/>
<xsd:element ref="s:Verbatim"/>
</xsd:choice>
</xsd:group>
<xsd:complexType name="FootnoteType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A Footnote is a note of referenc or comment usually placed at the bottom of a page. Footnotes may be referenced
by LinkFootnote elements.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:group ref="s:FootnoteContent"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="id"
type="s:uuidType"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The unique identifier of the footnote.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Footnote"
type="s:FootnoteType"/>
<xsd:complexType name="SectionType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A Section is a structural element that denotes a part of the document similar to a chapter. Renderers that
produce multiple pages MUST insert whatever is analogous to a page break at the end of a section.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:choice>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Section"/>
</xsd:sequence>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Subsection"/>
</xsd:sequence>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:group ref="s:SubsectionContent"/>
</xsd:sequence>
</xsd:choice>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:element ref="s:Footnote"/>
</xsd:sequence>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attributeGroup ref="s:tableOfContentAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the section.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="id"
type="s:uuidType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The unique identifier of the section.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="title"
type="xsd:string"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The title of the section.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Section"
type="s:SectionType">
<xsd:unique name="SectionFootnoteKey">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All footnotes within a section must have unique identifiers.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath="s:Footnote"/>
<xsd:field xpath="@id"/>
</xsd:unique>
<xsd:keyref name="SectionFootnoteReferencesParagraph"
refer="s:SectionFootnoteKey">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All footnote links in paragraphs must refer to footnotes that exist in this section.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath="s:Paragraph/*/s:LinkFootnote"/>
<xsd:field xpath="@target"/>
</xsd:keyref>
<xsd:keyref name="SectionFootnoteReferencesSubsection"
refer="s:SectionFootnoteKey">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All footnote links in subsections must refer to footnotes that exist in this section.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath="s:Subsection/*/s:LinkFootnote"/>
<xsd:field xpath="@target"/>
</xsd:keyref>
</xsd:element>
<xsd:complexType name="DocumentType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The Document element represents the top-level structure of a document. The name 'document' is somewhat of a
misnomer, as nothing prevents the document from being structured as a book (with chapters, etc). The document
begins with standard Dublin Core metadata, and contains _either_ a series of sections _or_ a series of
subsections (but not both).
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element ref="s:Metadata"/>
<xsd:choice>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Section"/>
</xsd:sequence>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Subsection"/>
</xsd:sequence>
</xsd:choice>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:element ref="s:Footnote"/>
</xsd:sequence>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attributeGroup ref="s:tableOfContentAttributes"/>
</xsd:complexType>
<xsd:element name="Document"
type="s:DocumentType">
<xsd:unique name="ItemIDsAreUnique">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All 'id' attributes specified on objects within the document must be unique.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath=".//s:FormalItem|.//s:Paragraph|.//s:Subsection|.//s:Section|.//s:Footnote"/>
<xsd:field xpath="@id"/>
</xsd:unique>
<xsd:unique name="LinkReferencesAreUnique">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All 'id' attributes specified on objects within the document must be unique.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath=".//s:FormalItem|.//s:Paragraph|.//s:Subsection|.//s:Section"/>
<xsd:field xpath="@id"/>
</xsd:unique>
<xsd:keyref name="LinkReferences"
refer="s:LinkReferencesAreUnique">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All Link elements must refer to elements with existing 'id' attributes.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath=".//s:Link"/>
<xsd:field xpath="@target"/>
</xsd:keyref>
<xsd:unique name="DocumentFootnoteKey">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All 'id' attributes specified on footnotes within the document must be unique.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath="s:Footnote"/>
<xsd:field xpath="@id"/>
</xsd:unique>
<xsd:keyref name="DocumentFootnoteReferences"
refer="s:DocumentFootnoteKey">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All footnote references must refer to footnotes that exist.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath="s:Subsection/*/s:LinkFootnote"/>
<xsd:field xpath="@target"/>
</xsd:keyref>
</xsd:element>
</xsd:schema>
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright © 2021 Mark Raynsford <code@io7m.com> https://www.io7m.com
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:s="urn:com.io7m.structural:7:0"
targetNamespace="urn:com.io7m.structural:7:0">
<xsd:import namespace="http://purl.org/dc/elements/1.1/"
schemaLocation="dc.xsd"/>
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="xml.xsd"/>
<xsd:simpleType name="uuidType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A UUID value.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="imageTextType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of text that appears in image elements. This is required to be of non-zero length in order to ensure
that authors add useful text that will then be used in the 'alt' elements of XHTML generated from the document
sources.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:minLength value="1"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="typeType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of type names. Type names are used to categorize elements and are somewhat analogous to CSS classes,
except that they are intended to be used for more than just styling documents.
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string">
<xsd:pattern value="[a-zA-Z][a-zA-Z0-9_\.\-]*"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:attributeGroup name="standardXMLAttributes">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The standard elements expected to appear in XML texts.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute ref="xml:base"/>
<xsd:attribute ref="xml:lang"/>
</xsd:attributeGroup>
<xsd:attributeGroup name="tableOfContentAttributes">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The attributes used to describe tables of content.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute name="tableOfContents"
use="optional"
default="true"
type="xsd:boolean">
<xsd:annotation>
<xsd:documentation xml:lang="en">
If the value of the attribute is 'true', then a table of contents will be generated in the respective element.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="tableOfContentsDepth"
use="optional"
default="3"
type="xsd:positiveInteger">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The maximum relative depth of sections and subsections that will appear in a generated table of contents.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:attributeGroup>
<xsd:complexType mixed="true"
name="ImageType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
An element used to describe an image. The text content of the image element SHOULD be used to provide an
accessible description of the image. This description is expected to be used by screen readers, and may also be
displayed by browsers if the referenced image cannot be loaded for any reason.
</xsd:documentation>
</xsd:annotation>
<xsd:simpleContent>
<xsd:extension base="s:imageTextType">
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the image.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="width"
type="xsd:nonNegativeInteger"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The width of the image.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="height"
type="xsd:nonNegativeInteger"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The height of the image.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="source"
type="xsd:anyURI"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The source location of the image.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:element name="Image"
type="s:ImageType"/>
<xsd:complexType name="ItemType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
An item appearing in a list.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:group ref="s:ListContent"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the list item.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Item"
type="s:ItemType"/>
<xsd:group name="ListContent">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The elements that may appear in list items.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="s:Image"/>
<xsd:element ref="s:Link"/>
<xsd:element ref="s:LinkExternal"/>
<xsd:element ref="s:LinkFootnote"/>
<xsd:element ref="s:ListOrdered"/>
<xsd:element ref="s:ListUnordered"/>
<xsd:element ref="s:Term"/>
</xsd:choice>
</xsd:group>
<xsd:complexType name="ListOrderedType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
An ordered list.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Item"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the list.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="ListOrdered"
type="s:ListOrderedType"/>
<xsd:complexType name="ListUnorderedType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
An unordered list.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Item"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the list.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="ListUnordered"
type="s:ListUnorderedType"/>
<xsd:complexType name="ColumnType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A description of a column in a table.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the column.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Column"
type="s:ColumnType"/>
<xsd:complexType name="ColumnsType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A set of table column descriptions.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Column"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the columns.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Columns"
type="s:ColumnsType"/>
<xsd:group name="TableContent">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of content that may appear in table cells.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="s:Link"/>
<xsd:element ref="s:LinkExternal"/>
<xsd:element ref="s:LinkFootnote"/>
<xsd:element ref="s:Term"/>
</xsd:choice>
</xsd:group>
<xsd:complexType name="CellType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A cell in a table.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:group ref="s:TableContent"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the cell.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Cell"
type="s:CellType"/>
<xsd:complexType name="RowType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A row of cells in a table.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Cell"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the row.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Row"
type="s:RowType"/>
<xsd:complexType name="TableType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A table. A table consists of a list of column definitions, followed by a sequence of rows consisting of the
table cells.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element ref="s:Columns"/>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Row"/>
</xsd:sequence>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the table.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Table"
type="s:TableType"/>
<xsd:complexType name="TermType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A term acts as a simple container of one or more words in a sentence. Term elements can be used to denote the
semantics of words, such as wrapping the name of a mathematical function in a <Term type="function">
element.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute type="s:typeType"
name="type"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the term.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Term"
type="s:TermType"/>
<xsd:complexType name="LinkType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A Link element describes a link to an element within the current document. Links may only refer to elements that
contain an appropriate 'id' attribute.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute type="s:uuidType"
name="target"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The target of the link, which must be an element with an appropriate 'id' attribute.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the link.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Link"
type="s:LinkType"/>
<xsd:complexType name="LinkFootnoteType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A LinkFootnote element describes a link to a footnote within the current section.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute type="s:uuidType"
name="target"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The target of the link, which must be a Footnote with a matching 'id' attribute.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the link.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="LinkFootnote"
type="s:LinkFootnoteType"/>
<xsd:complexType name="LinkExternalType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A LinkExternal element describes a link to an external URI.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute type="xsd:anyURI"
name="target"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The target URI.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the link.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="LinkExternal"
type="s:LinkExternalType"/>
<xsd:complexType name="VerbatimType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A Verbatim element contains text that should be reproduced exactly, with almost all whitespace intact. Renderers
are permitted to trim leading and trailing whitespace.
</xsd:documentation>
</xsd:annotation>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the verbatim text.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Verbatim"
type="s:VerbatimType"/>
<xsd:group name="FormalItemContent">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of content that can appear in formal items.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="s:Image"/>
<xsd:element ref="s:Link"/>
<xsd:element ref="s:LinkExternal"/>
<xsd:element ref="s:LinkFootnote"/>
<xsd:element ref="s:ListOrdered"/>
<xsd:element ref="s:ListUnordered"/>
<xsd:element ref="s:Table"/>
<xsd:element ref="s:Term"/>
<xsd:element ref="s:Verbatim"/>
</xsd:choice>
</xsd:group>
<xsd:group name="ParagraphContent">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of content that can appear in paragraphs.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="s:Link"/>
<xsd:element ref="s:LinkExternal"/>
<xsd:element ref="s:LinkFootnote"/>
<xsd:element ref="s:ListOrdered"/>
<xsd:element ref="s:ListUnordered"/>
<xsd:element ref="s:Term"/>
</xsd:choice>
</xsd:group>
<xsd:complexType name="MetadataType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
An element containing document metadata.
</xsd:documentation>
</xsd:annotation>
<xsd:group ref="dc:elementsGroup"/>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
</xsd:complexType>
<xsd:element name="Metadata"
type="s:MetadataType"/>
<xsd:complexType name="ParagraphType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A paragraph denotes a self-contained series of sentences.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:group ref="s:ParagraphContent"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the paragraph.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="id"
type="s:uuidType"
use="optional"/>
</xsd:complexType>
<xsd:element name="Paragraph"
type="s:ParagraphType"/>
<xsd:complexType name="FormalItemType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A formal item is analogous to a "figure" in printed text. Formal items are used to significant images, tables of
data, code listings, and other important objects into texts. They are considered to be at the same level of
structural significance as paragraphs.
</xsd:documentation>
</xsd:annotation>
<xsd:group ref="s:FormalItemContent"/>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the formal item.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="id"
type="s:uuidType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The unique identifier of the formal item.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="title"
type="xsd:string"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The title of the formal item.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="FormalItem"
type="s:FormalItemType"/>
<xsd:group name="SubsectionContent">
<xsd:choice>
<xsd:element ref="s:Paragraph"/>
<xsd:element ref="s:FormalItem"/>
</xsd:choice>
</xsd:group>
<xsd:complexType name="SubsectionType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A Subsection is a structural element that denotes a part of the document similar to a chapter.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Subsection"/>
</xsd:sequence>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:group ref="s:SubsectionContent"/>
</xsd:sequence>
</xsd:choice>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the subsection.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="id"
type="s:uuidType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The unique identifier of the subsection.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="title"
type="xsd:string"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The title of the subsection.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Subsection"
type="s:SubsectionType"/>
<xsd:group name="FootnoteContent">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of content that may appear in footnotes.
</xsd:documentation>
</xsd:annotation>
<xsd:choice>
<xsd:element ref="s:Image"/>
<xsd:element ref="s:Link"/>
<xsd:element ref="s:LinkExternal"/>
<xsd:element ref="s:LinkFootnote"/>
<xsd:element ref="s:ListOrdered"/>
<xsd:element ref="s:ListUnordered"/>
<xsd:element ref="s:Table"/>
<xsd:element ref="s:Term"/>
<xsd:element ref="s:Verbatim"/>
</xsd:choice>
</xsd:group>
<xsd:complexType name="FootnoteType"
mixed="true">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A Footnote is a note of referenc or comment usually placed at the bottom of a page. Footnotes may be referenced
by LinkFootnote elements.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:group ref="s:FootnoteContent"/>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attribute name="id"
type="s:uuidType"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The unique identifier of the footnote.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Footnote"
type="s:FootnoteType"/>
<xsd:complexType name="SectionType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
A Section is a structural element that denotes a part of the document similar to a chapter. Renderers that
produce multiple pages MUST insert whatever is analogous to a page break at the end of a section.
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:choice>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Section"/>
</xsd:sequence>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Subsection"/>
</xsd:sequence>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:group ref="s:SubsectionContent"/>
</xsd:sequence>
</xsd:choice>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:element ref="s:Footnote"/>
</xsd:sequence>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attributeGroup ref="s:tableOfContentAttributes"/>
<xsd:attribute name="type"
type="s:typeType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The type of the section.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="id"
type="s:uuidType"
use="optional">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The unique identifier of the section.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="title"
type="xsd:string"
use="required">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The title of the section.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:element name="Section"
type="s:SectionType">
<xsd:unique name="SectionFootnoteKey">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All footnotes within a section must have unique identifiers.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath="s:Footnote"/>
<xsd:field xpath="@id"/>
</xsd:unique>
<xsd:keyref name="SectionFootnoteReferencesParagraph"
refer="s:SectionFootnoteKey">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All footnote links in paragraphs must refer to footnotes that exist in this section.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath="s:Paragraph/*/s:LinkFootnote"/>
<xsd:field xpath="@target"/>
</xsd:keyref>
<xsd:keyref name="SectionFootnoteReferencesSubsection"
refer="s:SectionFootnoteKey">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All footnote links in subsections must refer to footnotes that exist in this section.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath="s:Subsection/*/s:LinkFootnote"/>
<xsd:field xpath="@target"/>
</xsd:keyref>
</xsd:element>
<xsd:complexType name="DocumentType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
The Document element represents the top-level structure of a document. The name 'document' is somewhat of a
misnomer, as nothing prevents the document from being structured as a book (with chapters, etc). The document
begins with standard Dublin Core metadata, and contains _either_ a series of sections _or_ a series of
subsections (but not both).
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element ref="s:Metadata"/>
<xsd:choice>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Section"/>
</xsd:sequence>
<xsd:sequence minOccurs="1"
maxOccurs="unbounded">
<xsd:element ref="s:Subsection"/>
</xsd:sequence>
</xsd:choice>
<xsd:sequence minOccurs="0"
maxOccurs="unbounded">
<xsd:element ref="s:Footnote"/>
</xsd:sequence>
</xsd:sequence>
<xsd:attributeGroup ref="s:standardXMLAttributes"/>
<xsd:attributeGroup ref="s:tableOfContentAttributes"/>
</xsd:complexType>
<xsd:element name="Document"
type="s:DocumentType">
<xsd:unique name="ItemIDsAreUnique">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All 'id' attributes specified on objects within the document must be unique.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath=".//s:FormalItem|.//s:Paragraph|.//s:Subsection|.//s:Section|.//s:Footnote"/>
<xsd:field xpath="@id"/>
</xsd:unique>
<xsd:unique name="LinkReferencesAreUnique">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All 'id' attributes specified on objects within the document must be unique.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath=".//s:FormalItem|.//s:Paragraph|.//s:Subsection|.//s:Section"/>
<xsd:field xpath="@id"/>
</xsd:unique>
<xsd:keyref name="LinkReferences"
refer="s:LinkReferencesAreUnique">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All Link elements must refer to elements with existing 'id' attributes.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath=".//s:Link"/>
<xsd:field xpath="@target"/>
</xsd:keyref>
<xsd:unique name="DocumentFootnoteKey">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All 'id' attributes specified on footnotes within the document must be unique.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath="s:Footnote"/>
<xsd:field xpath="@id"/>
</xsd:unique>
<xsd:keyref name="DocumentFootnoteReferences"
refer="s:DocumentFootnoteKey">
<xsd:annotation>
<xsd:documentation xml:lang="en">
All footnote references must refer to footnotes that exist.
</xsd:documentation>
</xsd:annotation>
<xsd:selector xpath="s:Subsection/*/s:LinkFootnote"/>
<xsd:field xpath="@target"/>
</xsd:keyref>
</xsd:element>
</xsd:schema>
Copyright © 2021 Mark Raynsford <code@io7m.com> https://www.io7m.com This book is placed into the public domain for free use by anyone for any purpose. It may be freely used, modified, and distributed. In jurisdictions that do not recognise the public domain this book may be freely used, modified, and distributed without restriction. This book comes with absolutely no warranty.