<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/>
  <xs:element name="pretext">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="docinfo"/>
        <xs:choice>
          <xs:element ref="book"/>
          <xs:element ref="article"/>
          <xs:element ref="letter"/>
          <xs:element ref="memo"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute ref="xml:lang"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="article">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataLinedSubtitle">
          <xs:sequence>
            <xs:group minOccurs="0" ref="ArticleFrontMatter"/>
            <xs:choice>
              <xs:sequence>
                <xs:element minOccurs="0" ref="objectives"/>
                <xs:choice maxOccurs="unbounded">
                  <xs:group ref="BlockDivision"/>
                  <xs:group ref="Paragraphs"/>
                  <xs:element ref="commentary"/>
                </xs:choice>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="reading-questions"/>
                  <xs:element ref="exercises"/>
                  <xs:element ref="solutions"/>
                  <xs:element ref="references"/>
                  <xs:element ref="glossary"/>
                </xs:choice>
                <xs:element minOccurs="0" ref="outcomes"/>
              </xs:sequence>
              <xs:sequence>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="objectives"/>
                  <xs:group ref="IntroductionDivision"/>
                </xs:choice>
                <xs:element ref="section"/>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="section"/>
                  <xs:element ref="reading-questions"/>
                  <xs:element ref="exercises"/>
                  <xs:element ref="solutions"/>
                  <xs:element ref="references"/>
                  <xs:element ref="glossary"/>
                </xs:choice>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="outcomes"/>
                  <xs:group ref="ConclusionDivision"/>
                </xs:choice>
                <xs:group minOccurs="0" ref="ArticleBackMatter"/>
              </xs:sequence>
            </xs:choice>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="book">
    <xs:annotation>
      <xs:documentation>Here is what a book looks like.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataLinedSubtitle">
          <xs:sequence>
            <xs:group minOccurs="0" ref="BookFrontMatter"/>
            <xs:choice>
              <xs:element maxOccurs="unbounded" ref="part"/>
              <xs:element maxOccurs="unbounded" ref="chapter"/>
            </xs:choice>
            <xs:group minOccurs="0" ref="BookBackMatter"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="letter">
    <xs:complexType/>
  </xs:element>
  <xs:element name="memo">
    <xs:complexType/>
  </xs:element>
  <xs:element name="part">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataLinedTitle">
          <xs:sequence>
            <xs:element maxOccurs="unbounded" ref="chapter"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="chapter">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataLinedTitle">
          <xs:sequence>
            <xs:group minOccurs="0" maxOccurs="unbounded" ref="AuthorByline"/>
            <xs:choice>
              <xs:sequence>
                <xs:element minOccurs="0" ref="objectives"/>
                <xs:choice maxOccurs="unbounded">
                  <xs:group ref="BlockDivision"/>
                  <xs:group ref="Paragraphs"/>
                  <xs:element ref="commentary"/>
                </xs:choice>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="reading-questions"/>
                  <xs:element ref="exercises"/>
                  <xs:element ref="solutions"/>
                  <xs:element ref="references"/>
                  <xs:element ref="glossary"/>
                </xs:choice>
                <xs:element minOccurs="0" ref="outcomes"/>
              </xs:sequence>
              <xs:sequence>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="objectives"/>
                  <xs:group ref="IntroductionDivision"/>
                </xs:choice>
                <xs:element ref="section"/>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="section"/>
                  <xs:element ref="reading-questions"/>
                  <xs:element ref="exercises"/>
                  <xs:element ref="solutions"/>
                  <xs:element ref="references"/>
                  <xs:element ref="glossary"/>
                </xs:choice>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="outcomes"/>
                  <xs:group ref="ConclusionDivision"/>
                </xs:choice>
              </xs:sequence>
            </xs:choice>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="section">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataLinedTitle">
          <xs:sequence>
            <xs:group minOccurs="0" maxOccurs="unbounded" ref="AuthorByline"/>
            <xs:choice>
              <xs:sequence>
                <xs:element minOccurs="0" ref="objectives"/>
                <xs:choice maxOccurs="unbounded">
                  <xs:group ref="BlockDivision"/>
                  <xs:group ref="Paragraphs"/>
                  <xs:element ref="commentary"/>
                </xs:choice>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="reading-questions"/>
                  <xs:element ref="exercises"/>
                  <xs:element ref="solutions"/>
                  <xs:element ref="references"/>
                  <xs:element ref="glossary"/>
                </xs:choice>
                <xs:element minOccurs="0" ref="outcomes"/>
              </xs:sequence>
              <xs:sequence>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="objectives"/>
                  <xs:group ref="IntroductionDivision"/>
                </xs:choice>
                <xs:element ref="subsection"/>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="subsection"/>
                  <xs:element ref="reading-questions"/>
                  <xs:element ref="exercises"/>
                  <xs:element ref="solutions"/>
                  <xs:element ref="references"/>
                  <xs:element ref="glossary"/>
                </xs:choice>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="outcomes"/>
                  <xs:group ref="ConclusionDivision"/>
                </xs:choice>
              </xs:sequence>
            </xs:choice>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="subsection">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataAltTitle">
          <xs:sequence>
            <xs:group minOccurs="0" maxOccurs="unbounded" ref="AuthorByline"/>
            <xs:choice>
              <xs:sequence>
                <xs:element minOccurs="0" ref="objectives"/>
                <xs:choice maxOccurs="unbounded">
                  <xs:group ref="BlockDivision"/>
                  <xs:group ref="Paragraphs"/>
                  <xs:element ref="commentary"/>
                </xs:choice>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="reading-questions"/>
                  <xs:element ref="exercises"/>
                  <xs:element ref="solutions"/>
                  <xs:element ref="references"/>
                  <xs:element ref="glossary"/>
                </xs:choice>
                <xs:element minOccurs="0" ref="outcomes"/>
              </xs:sequence>
              <xs:sequence>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="objectives"/>
                  <xs:group ref="IntroductionDivision"/>
                </xs:choice>
                <xs:element ref="subsubsection"/>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="subsubsection"/>
                  <xs:element ref="reading-questions"/>
                  <xs:element ref="exercises"/>
                  <xs:element ref="solutions"/>
                  <xs:element ref="references"/>
                  <xs:element ref="glossary"/>
                </xs:choice>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:element ref="outcomes"/>
                  <xs:group ref="ConclusionDivision"/>
                </xs:choice>
              </xs:sequence>
            </xs:choice>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="subsubsection">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataAltTitle">
          <xs:sequence>
            <xs:group minOccurs="0" maxOccurs="unbounded" ref="AuthorByline"/>
            <xs:element minOccurs="0" ref="objectives"/>
            <xs:choice maxOccurs="unbounded">
              <xs:group ref="BlockDivision"/>
              <xs:group ref="Paragraphs"/>
              <xs:element ref="commentary"/>
            </xs:choice>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:element ref="reading-questions"/>
              <xs:element ref="exercises"/>
              <xs:element ref="solutions"/>
              <xs:element ref="references"/>
              <xs:element ref="glossary"/>
            </xs:choice>
            <xs:element minOccurs="0" ref="outcomes"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:group name="ArticleAppendix">
    <xs:sequence>
      <xs:element name="appendix">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="MetaDataAltTitle">
              <xs:sequence>
                <xs:group minOccurs="0" maxOccurs="unbounded" ref="AuthorByline"/>
                <xs:choice>
                  <xs:sequence>
                    <xs:element minOccurs="0" ref="objectives"/>
                    <xs:choice maxOccurs="unbounded">
                      <xs:group ref="BlockDivision"/>
                      <xs:group ref="Paragraphs"/>
                      <xs:element ref="commentary"/>
                      <xs:element ref="notation-list"/>
                    </xs:choice>
                    <xs:choice minOccurs="0" maxOccurs="unbounded">
                      <xs:element ref="reading-questions"/>
                      <xs:element ref="exercises"/>
                      <xs:element ref="solutions"/>
                      <xs:element ref="references"/>
                      <xs:element ref="glossary"/>
                    </xs:choice>
                    <xs:element minOccurs="0" ref="outcomes"/>
                  </xs:sequence>
                  <xs:sequence>
                    <xs:choice minOccurs="0" maxOccurs="unbounded">
                      <xs:element ref="objectives"/>
                      <xs:group ref="IntroductionDivision"/>
                    </xs:choice>
                    <xs:element ref="subsection"/>
                    <xs:choice minOccurs="0" maxOccurs="unbounded">
                      <xs:element ref="subsection"/>
                      <xs:element ref="reading-questions"/>
                      <xs:element ref="exercises"/>
                      <xs:element ref="solutions"/>
                      <xs:element ref="references"/>
                      <xs:element ref="glossary"/>
                    </xs:choice>
                    <xs:choice minOccurs="0" maxOccurs="unbounded">
                      <xs:element ref="outcomes"/>
                      <xs:group ref="ConclusionDivision"/>
                    </xs:choice>
                  </xs:sequence>
                </xs:choice>
              </xs:sequence>
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="BookAppendix">
    <xs:sequence>
      <xs:element name="appendix">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="MetaDataAltTitle">
              <xs:sequence>
                <xs:group minOccurs="0" maxOccurs="unbounded" ref="AuthorByline"/>
                <xs:choice>
                  <xs:sequence>
                    <xs:element minOccurs="0" ref="objectives"/>
                    <xs:choice maxOccurs="unbounded">
                      <xs:group ref="BlockDivision"/>
                      <xs:group ref="Paragraphs"/>
                      <xs:element ref="commentary"/>
                      <xs:element ref="notation-list"/>
                    </xs:choice>
                    <xs:choice minOccurs="0" maxOccurs="unbounded">
                      <xs:element ref="reading-questions"/>
                      <xs:element ref="exercises"/>
                      <xs:element ref="solutions"/>
                      <xs:element ref="references"/>
                      <xs:element ref="glossary"/>
                    </xs:choice>
                    <xs:element minOccurs="0" ref="outcomes"/>
                  </xs:sequence>
                  <xs:sequence>
                    <xs:choice minOccurs="0" maxOccurs="unbounded">
                      <xs:element ref="objectives"/>
                      <xs:group ref="IntroductionDivision"/>
                    </xs:choice>
                    <xs:element ref="section"/>
                    <xs:choice minOccurs="0" maxOccurs="unbounded">
                      <xs:element ref="section"/>
                      <xs:element ref="reading-questions"/>
                      <xs:element ref="exercises"/>
                      <xs:element ref="solutions"/>
                      <xs:element ref="references"/>
                      <xs:element ref="glossary"/>
                    </xs:choice>
                    <xs:choice minOccurs="0" maxOccurs="unbounded">
                      <xs:element ref="outcomes"/>
                      <xs:group ref="ConclusionDivision"/>
                    </xs:choice>
                  </xs:sequence>
                </xs:choice>
              </xs:sequence>
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="index">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataAltTitleOptional">
          <xs:sequence>
            <xs:element ref="index-list"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:group name="ArticleFrontMatter">
    <xs:sequence>
      <xs:element name="frontmatter">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="MetaDataTitleOptional"/>
            <xs:element ref="titlepage"/>
            <xs:element minOccurs="0" ref="abstract"/>
          </xs:sequence>
          <xs:attributeGroup ref="MetaDataTitleOptional"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="BookFrontMatter">
    <xs:sequence>
      <xs:element name="frontmatter">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="MetaDataTitleOptional"/>
            <xs:element ref="titlepage"/>
            <xs:group minOccurs="0" ref="ColophonFront"/>
            <xs:element minOccurs="0" maxOccurs="unbounded" ref="biography"/>
            <xs:element minOccurs="0" ref="dedication"/>
            <xs:element minOccurs="0" ref="acknowledgement"/>
            <xs:element minOccurs="0" maxOccurs="unbounded" ref="preface"/>
          </xs:sequence>
          <xs:attributeGroup ref="MetaDataTitleOptional"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="titlepage">
    <xs:complexType>
      <xs:sequence>
        <xs:choice>
          <xs:sequence>
            <xs:group ref="Author"/>
            <xs:group minOccurs="0" maxOccurs="unbounded" ref="Author"/>
            <xs:group minOccurs="0" maxOccurs="unbounded" ref="Editor"/>
          </xs:sequence>
          <xs:sequence>
            <xs:group ref="Editor"/>
            <xs:group minOccurs="0" maxOccurs="unbounded" ref="Editor"/>
          </xs:sequence>
        </xs:choice>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="credit"/>
        <xs:element minOccurs="0" ref="date"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:group name="Author">
    <xs:sequence>
      <xs:element name="author">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="personname"/>
            <xs:element minOccurs="0" name="department">
              <xs:complexType mixed="true">
                <xs:choice>
                  <xs:group ref="TextSimple"/>
                  <xs:group maxOccurs="unbounded" ref="ShortLine"/>
                </xs:choice>
              </xs:complexType>
            </xs:element>
            <xs:element minOccurs="0" name="institution">
              <xs:complexType mixed="true">
                <xs:choice>
                  <xs:group ref="TextSimple"/>
                  <xs:group maxOccurs="unbounded" ref="ShortLine"/>
                </xs:choice>
              </xs:complexType>
            </xs:element>
            <xs:element minOccurs="0" ref="email"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="personname">
    <xs:complexType mixed="true">
      <xs:group ref="TextSimple"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="email" type="xs:string"/>
  <xs:group name="Editor">
    <xs:sequence>
      <xs:element name="editor">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="personname"/>
            <xs:element minOccurs="0" name="department">
              <xs:complexType mixed="true">
                <xs:choice>
                  <xs:group ref="TextSimple"/>
                  <xs:group maxOccurs="unbounded" ref="ShortLine"/>
                </xs:choice>
              </xs:complexType>
            </xs:element>
            <xs:element minOccurs="0" name="institution">
              <xs:complexType mixed="true">
                <xs:choice>
                  <xs:group ref="TextSimple"/>
                  <xs:group maxOccurs="unbounded" ref="ShortLine"/>
                </xs:choice>
              </xs:complexType>
            </xs:element>
            <xs:element minOccurs="0" ref="email"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="credit">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="title">
          <xs:complexType mixed="true">
            <xs:group ref="TextLong"/>
          </xs:complexType>
        </xs:element>
        <xs:group maxOccurs="unbounded" ref="Author"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="date">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="Character"/>
        <xs:group ref="Generator"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="abstract">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTitleOptional"/>
        <xs:group maxOccurs="unbounded" ref="BlockText"/>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTitleOptional"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="ColophonFront">
    <xs:sequence>
      <xs:element name="colophon">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="MetaDataTarget"/>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="credit">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="role"/>
                  <xs:element ref="entity"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
            <xs:element minOccurs="0" ref="edition"/>
            <xs:element minOccurs="0" ref="website"/>
            <xs:element minOccurs="0" name="copyright">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="year">
                    <xs:complexType mixed="true">
                      <xs:group ref="TextShort"/>
                    </xs:complexType>
                  </xs:element>
                  <xs:element ref="holder"/>
                  <xs:element minOccurs="0" ref="minilicense"/>
                  <xs:element minOccurs="0" ref="shortlicense"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attributeGroup ref="MetaDataTarget"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="role">
    <xs:complexType mixed="true">
      <xs:group ref="TextShort"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="entity">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="edition" type="xs:string"/>
  <xs:element name="website">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="name"/>
        <xs:element ref="address"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="name">
    <xs:complexType mixed="true">
      <xs:group ref="TextShort"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="address" type="xs:string"/>
  <xs:element name="holder" type="xs:string"/>
  <xs:element name="minilicense">
    <xs:complexType mixed="true">
      <xs:group ref="TextShort"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="shortlicense">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="biography">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTitleOptional"/>
        <xs:choice maxOccurs="unbounded">
          <xs:group ref="BlockStatementNoCaption"/>
          <xs:group ref="ParagraphsNoNumber"/>
          <xs:element ref="commentary"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTitleOptional"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="dedication">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTitleOptional"/>
        <xs:choice maxOccurs="unbounded">
          <xs:group ref="Paragraph"/>
          <xs:group ref="ParagraphLined"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTitleOptional"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="acknowledgement">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTitleOptional"/>
        <xs:choice maxOccurs="unbounded">
          <xs:group ref="BlockStatementNoCaption"/>
          <xs:group ref="ParagraphsNoNumber"/>
          <xs:element ref="commentary"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTitleOptional"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="preface">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTitleOptional"/>
        <xs:choice>
          <xs:sequence>
            <xs:choice maxOccurs="unbounded">
              <xs:group ref="BlockStatementNoCaption"/>
              <xs:group ref="ParagraphsNoNumber"/>
              <xs:element ref="commentary"/>
            </xs:choice>
            <xs:element minOccurs="0" maxOccurs="unbounded" ref="attribution"/>
          </xs:sequence>
          <xs:sequence>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:group ref="BlockStatementNoCaption"/>
              <xs:group ref="ParagraphsNoNumber"/>
              <xs:element ref="commentary"/>
            </xs:choice>
            <xs:element ref="contributors"/>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:group ref="BlockStatementNoCaption"/>
              <xs:group ref="ParagraphsNoNumber"/>
              <xs:element ref="commentary"/>
            </xs:choice>
          </xs:sequence>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTitleOptional"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="ArticleBackMatter">
    <xs:sequence>
      <xs:element name="backmatter">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="MetaDataTitleOptional"/>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:group ref="ArticleAppendix"/>
              <xs:element ref="solutions"/>
            </xs:choice>
            <xs:element minOccurs="0" ref="references"/>
            <xs:element minOccurs="0" ref="index"/>
            <xs:group minOccurs="0" ref="ColophonBack"/>
          </xs:sequence>
          <xs:attributeGroup ref="MetaDataTitleOptional"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="BookBackMatter">
    <xs:sequence>
      <xs:element name="backmatter">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="MetaDataTitleOptional"/>
            <xs:choice minOccurs="0" maxOccurs="unbounded">
              <xs:group ref="BookAppendix"/>
              <xs:element ref="solutions"/>
            </xs:choice>
            <xs:element minOccurs="0" ref="references"/>
            <xs:element minOccurs="0" ref="index"/>
            <xs:group minOccurs="0" ref="ColophonBack"/>
          </xs:sequence>
          <xs:attributeGroup ref="MetaDataTitleOptional"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="ColophonBack">
    <xs:sequence>
      <xs:element name="colophon">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="MetaDataTarget"/>
            <xs:choice maxOccurs="unbounded">
              <xs:group ref="BlockText"/>
              <xs:group ref="SideBySideNoCaption"/>
              <xs:group ref="SideBySideGroupNoCaption"/>
            </xs:choice>
          </xs:sequence>
          <xs:attributeGroup ref="MetaDataTarget"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="Paragraphs">
    <xs:sequence>
      <xs:element name="paragraphs">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="MetaDataTitle">
              <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="idx"/>
                <xs:group maxOccurs="unbounded" ref="BlockDivision"/>
              </xs:sequence>
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="ParagraphsNoNumber">
    <xs:sequence>
      <xs:element name="paragraphs">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="MetaDataTitle">
              <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="idx"/>
                <xs:group maxOccurs="unbounded" ref="BlockStatementNoCaption"/>
              </xs:sequence>
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="commentary">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataTitle">
          <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" ref="idx"/>
            <xs:group maxOccurs="unbounded" ref="BlockStatementNoCaption"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="reading-questions">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataAltTitleOptional">
          <xs:sequence>
            <xs:group minOccurs="0" ref="IntroductionDivision"/>
            <xs:element maxOccurs="unbounded" ref="exercise"/>
            <xs:group minOccurs="0" ref="ConclusionDivision"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="exercises">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataAltTitleOptional">
          <xs:sequence>
            <xs:group minOccurs="0" ref="IntroductionDivision"/>
            <xs:choice>
              <xs:choice maxOccurs="unbounded">
                <xs:element ref="exercise"/>
                <xs:element ref="exercisegroup"/>
              </xs:choice>
              <xs:element maxOccurs="unbounded" ref="subexercises"/>
            </xs:choice>
            <xs:group minOccurs="0" ref="ConclusionDivision"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="subexercises">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataAltTitleOptional">
          <xs:sequence>
            <xs:group minOccurs="0" ref="IntroductionDivision"/>
            <xs:choice maxOccurs="unbounded">
              <xs:element ref="exercise"/>
              <xs:element ref="exercisegroup"/>
            </xs:choice>
            <xs:group minOccurs="0" ref="ConclusionDivision"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="solutions">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataAltTitleOptional">
          <xs:sequence>
            <xs:group minOccurs="0" ref="IntroductionDivision"/>
            <xs:group minOccurs="0" ref="ConclusionDivision"/>
          </xs:sequence>
          <xs:attribute name="inline"/>
          <xs:attribute name="divisional"/>
          <xs:attribute name="project"/>
          <xs:attribute name="admit">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="all"/>
                <xs:enumeration value="odd"/>
                <xs:enumeration value="even"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="references">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataAltTitleOptional">
          <xs:sequence>
            <xs:group minOccurs="0" ref="IntroductionDivision"/>
            <xs:element maxOccurs="unbounded" ref="biblio"/>
            <xs:group minOccurs="0" ref="ConclusionDivision"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="glossary">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataAltTitleOptional">
          <xs:sequence>
            <xs:element minOccurs="0" ref="headnote"/>
            <xs:element maxOccurs="unbounded" ref="gi"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:group name="BlockText">
    <xs:choice>
      <xs:group ref="Paragraph"/>
      <xs:element ref="blockquote"/>
      <xs:element ref="pre"/>
      <xs:group ref="Image"/>
      <xs:element ref="video"/>
      <xs:element ref="program"/>
      <xs:element ref="console"/>
      <xs:element ref="tabular"/>
    </xs:choice>
  </xs:group>
  <xs:group name="BlockStatementNoCaption">
    <xs:choice>
      <xs:group ref="BlockText"/>
      <xs:group ref="Aside"/>
      <xs:group ref="SideBySideNoCaption"/>
      <xs:group ref="SideBySideGroupNoCaption"/>
    </xs:choice>
  </xs:group>
  <xs:group name="BlockStatement">
    <xs:choice>
      <xs:group ref="BlockText"/>
      <xs:group ref="Figure"/>
      <xs:group ref="Aside"/>
      <xs:group ref="SideBySide"/>
      <xs:group ref="SideBySideGroup"/>
      <xs:element ref="sage"/>
    </xs:choice>
  </xs:group>
  <xs:group name="BlockSolution">
    <xs:choice>
      <xs:group ref="BlockStatement"/>
      <xs:element ref="proof"/>
    </xs:choice>
  </xs:group>
  <xs:group name="BlockDivision">
    <xs:choice>
      <xs:group ref="BlockStatement"/>
      <xs:group ref="Remark"/>
      <xs:group ref="Computation"/>
      <xs:group ref="Theorem"/>
      <xs:element ref="proof"/>
      <xs:element ref="definition"/>
      <xs:group ref="Axiom"/>
      <xs:group ref="Example"/>
      <xs:element ref="exercise"/>
      <xs:group ref="Project"/>
      <xs:element ref="poem"/>
      <xs:element ref="assemblage"/>
      <xs:element ref="list-of"/>
      <xs:element ref="fragment"/>
      <xs:element ref="demonstration"/>
    </xs:choice>
  </xs:group>
  <xs:element name="prelude">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="BlockText"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="interlude">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="BlockText"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="postlude">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="BlockText"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="Statement">
    <xs:sequence>
      <xs:element name="statement">
        <xs:complexType>
          <xs:group maxOccurs="unbounded" ref="BlockStatement"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="Hint">
    <xs:sequence>
      <xs:element name="hint">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="MetaDataTitleOptional"/>
            <xs:group maxOccurs="unbounded" ref="BlockSolution"/>
          </xs:sequence>
          <xs:attributeGroup ref="MetaDataTitleOptional"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="answer">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTitleOptional"/>
        <xs:group maxOccurs="unbounded" ref="BlockSolution"/>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTitleOptional"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="Solution">
    <xs:sequence>
      <xs:element name="solution">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="MetaDataTitleOptional"/>
            <xs:group maxOccurs="unbounded" ref="BlockSolution"/>
          </xs:sequence>
          <xs:attributeGroup ref="MetaDataTitleOptional"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="IntroductionText">
    <xs:sequence>
      <xs:element name="introduction">
        <xs:complexType>
          <xs:group maxOccurs="unbounded" ref="BlockText"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="ConclusionText">
    <xs:sequence>
      <xs:element name="conclusion">
        <xs:complexType>
          <xs:group maxOccurs="unbounded" ref="BlockText"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="IntroductionStatementNoCaption">
    <xs:sequence>
      <xs:element name="introduction">
        <xs:complexType>
          <xs:group maxOccurs="unbounded" ref="BlockStatementNoCaption"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="ConclusionStatementNoCaption">
    <xs:sequence>
      <xs:element name="conclusion">
        <xs:complexType>
          <xs:group maxOccurs="unbounded" ref="BlockStatementNoCaption"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="IntroductionStatement">
    <xs:sequence>
      <xs:element name="introduction">
        <xs:complexType>
          <xs:group maxOccurs="unbounded" ref="BlockStatement"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="ConclusionStatement">
    <xs:sequence>
      <xs:element name="conclusion">
        <xs:complexType>
          <xs:group maxOccurs="unbounded" ref="BlockStatement"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="IntroductionDivision">
    <xs:sequence>
      <xs:element name="introduction">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="MetaDataTitleOptional"/>
            <xs:group maxOccurs="unbounded" ref="BlockDivision"/>
          </xs:sequence>
          <xs:attributeGroup ref="MetaDataTitleOptional"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="ConclusionDivision">
    <xs:sequence>
      <xs:element name="conclusion">
        <xs:complexType>
          <xs:sequence>
            <xs:group minOccurs="0" ref="MetaDataTitleOptional"/>
            <xs:group maxOccurs="unbounded" ref="BlockDivision"/>
          </xs:sequence>
          <xs:attributeGroup ref="MetaDataTitleOptional"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="headnote">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="BlockStatementNoCaption"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="objectives">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTitleOptional"/>
        <xs:group minOccurs="0" ref="IntroductionText"/>
        <xs:group ref="List"/>
        <xs:group minOccurs="0" ref="ConclusionText"/>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTitleOptional"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="outcomes">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTitleOptional"/>
        <xs:group minOccurs="0" ref="IntroductionText"/>
        <xs:group ref="List"/>
        <xs:group minOccurs="0" ref="ConclusionText"/>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTitleOptional"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="blockquote">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTitleOptional"/>
        <xs:group maxOccurs="unbounded" ref="Paragraph"/>
        <xs:element minOccurs="0" ref="attribution"/>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTitleOptional"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="SimpleLine">
    <xs:sequence>
      <xs:element name="line">
        <xs:complexType mixed="true">
          <xs:group ref="TextSimple"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="ShortLine">
    <xs:sequence>
      <xs:element name="line">
        <xs:complexType mixed="true">
          <xs:group ref="TextShort"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="LongLine">
    <xs:sequence>
      <xs:element name="line">
        <xs:complexType mixed="true">
          <xs:group ref="TextLong"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="cline" type="xs:string"/>
  <xs:element name="cd">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="cline"/>
      </xs:sequence>
      <xs:attribute name="latexsep"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="pre">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="cline"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="console">
    <xs:complexType>
      <xs:sequence maxOccurs="unbounded">
        <xs:element minOccurs="0" ref="prompt"/>
        <xs:element minOccurs="0" ref="input"/>
        <xs:element minOccurs="0" ref="output"/>
      </xs:sequence>
      <xs:attribute name="permid"/>
      <xs:attribute name="width"/>
      <xs:attribute name="margins"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="prompt" type="xs:string"/>
  <xs:element name="input" type="xs:string"/>
  <xs:element name="output" type="xs:string"/>
  <xs:element name="program">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="input"/>
      </xs:sequence>
      <xs:attribute name="permid"/>
      <xs:attribute name="width"/>
      <xs:attribute name="margins"/>
      <xs:attribute name="language"/>
      <xs:attribute name="interactive">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="codelens"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:group name="List">
    <xs:choice>
      <xs:element name="ol">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" name="li">
              <xs:complexType mixed="true">
                <xs:choice>
                  <xs:sequence>
                    <xs:group ref="MetaDataTarget"/>
                    <xs:group ref="TextParagraph"/>
                  </xs:sequence>
                  <xs:sequence>
                    <xs:group ref="MetaDataTitleOptional"/>
                    <xs:group maxOccurs="unbounded" ref="BlockStatement"/>
                  </xs:sequence>
                </xs:choice>
                <xs:attributeGroup ref="MetaDataTarget"/>
                <xs:attribute ref="xml:base"/>
                <xs:attribute ref="xml:lang"/>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="permid"/>
          <xs:attribute name="cols">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="2"/>
                <xs:enumeration value="3"/>
                <xs:enumeration value="4"/>
                <xs:enumeration value="5"/>
                <xs:enumeration value="6"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
          <xs:attribute name="marker"/>
        </xs:complexType>
      </xs:element>
      <xs:element ref="ul"/>
      <xs:element ref="dl"/>
    </xs:choice>
  </xs:group>
  <xs:element name="ul">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="li">
          <xs:complexType mixed="true">
            <xs:choice>
              <xs:sequence>
                <xs:group ref="MetaDataTarget"/>
                <xs:group ref="TextParagraph"/>
              </xs:sequence>
              <xs:sequence>
                <xs:group ref="MetaDataTitleOptional"/>
                <xs:group maxOccurs="unbounded" ref="BlockStatement"/>
              </xs:sequence>
            </xs:choice>
            <xs:attributeGroup ref="MetaDataTarget"/>
            <xs:attribute ref="xml:base"/>
            <xs:attribute ref="xml:lang"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="permid"/>
      <xs:attribute name="cols">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="2"/>
            <xs:enumeration value="3"/>
            <xs:enumeration value="4"/>
            <xs:enumeration value="5"/>
            <xs:enumeration value="6"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="marker">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="disc"/>
            <xs:enumeration value="circle"/>
            <xs:enumeration value="square"/>
            <xs:enumeration value=""/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="dl">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="li">
          <xs:complexType>
            <xs:complexContent>
              <xs:extension base="MetaDataTitle">
                <xs:group maxOccurs="unbounded" ref="BlockStatement"/>
              </xs:extension>
            </xs:complexContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="permid"/>
      <xs:attribute name="width">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="narrow"/>
            <xs:enumeration value="medium"/>
            <xs:enumeration value="wide"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="DefinitionLike">
    <xs:sequence>
      <xs:group ref="MetaDataTitleOptional"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="notation"/>
      <xs:group ref="Statement"/>
    </xs:sequence>
    <xs:attributeGroup ref="MetaDataTitleOptional"/>
  </xs:complexType>
  <xs:element name="definition" type="DefinitionLike"/>
  <xs:element name="case">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTitleOptional"/>
        <xs:group maxOccurs="unbounded" ref="BlockStatement"/>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTitleOptional"/>
      <xs:attribute name="direction"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="proof">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTitleOptional"/>
        <xs:choice maxOccurs="unbounded">
          <xs:group ref="BlockStatement"/>
          <xs:element ref="case"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTitleOptional"/>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="TheoremLike">
    <xs:complexContent>
      <xs:extension base="MetaDataTitleCreatorOptional">
        <xs:choice>
          <xs:group maxOccurs="unbounded" ref="BlockStatement"/>
          <xs:sequence>
            <xs:group ref="Statement"/>
            <xs:element minOccurs="0" maxOccurs="unbounded" ref="proof"/>
          </xs:sequence>
        </xs:choice>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:group name="Theorem">
    <xs:choice>
      <xs:element ref="theorem"/>
      <xs:element ref="lemma"/>
      <xs:element ref="corollary"/>
      <xs:element ref="claim"/>
      <xs:element ref="proposition"/>
      <xs:element ref="algorithm"/>
      <xs:element ref="fact"/>
      <xs:element ref="identity"/>
    </xs:choice>
  </xs:group>
  <xs:element name="theorem" type="TheoremLike"/>
  <xs:element name="lemma" type="TheoremLike"/>
  <xs:element name="corollary" type="TheoremLike"/>
  <xs:element name="claim" type="TheoremLike"/>
  <xs:element name="proposition" type="TheoremLike"/>
  <xs:element name="algorithm" type="TheoremLike"/>
  <xs:element name="fact" type="TheoremLike"/>
  <xs:element name="identity" type="TheoremLike"/>
  <xs:complexType name="AxiomLike">
    <xs:complexContent>
      <xs:extension base="MetaDataTitleCreatorOptional">
        <xs:group ref="Statement"/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:group name="Axiom">
    <xs:choice>
      <xs:element ref="axiom"/>
      <xs:element ref="principle"/>
      <xs:element ref="conjecture"/>
      <xs:element ref="heuristic"/>
      <xs:element ref="hypothesis"/>
      <xs:element ref="assumption"/>
    </xs:choice>
  </xs:group>
  <xs:element name="axiom" type="AxiomLike"/>
  <xs:element name="principle" type="AxiomLike"/>
  <xs:element name="conjecture" type="AxiomLike"/>
  <xs:element name="heuristic" type="AxiomLike"/>
  <xs:element name="hypothesis" type="AxiomLike"/>
  <xs:element name="assumption" type="AxiomLike"/>
  <xs:complexType name="ExampleLike">
    <xs:sequence>
      <xs:group ref="MetaDataTitleOptional"/>
      <xs:choice>
        <xs:group maxOccurs="unbounded" ref="BlockStatement"/>
        <xs:sequence>
          <xs:group ref="Statement"/>
          <xs:group minOccurs="0" maxOccurs="unbounded" ref="Hint"/>
          <xs:element minOccurs="0" maxOccurs="unbounded" ref="answer"/>
          <xs:group minOccurs="0" maxOccurs="unbounded" ref="Solution"/>
        </xs:sequence>
        <xs:sequence>
          <xs:group minOccurs="0" ref="IntroductionStatement"/>
          <xs:group maxOccurs="unbounded" ref="Task"/>
          <xs:group minOccurs="0" ref="ConclusionStatement"/>
        </xs:sequence>
      </xs:choice>
    </xs:sequence>
    <xs:attributeGroup ref="MetaDataTitleOptional"/>
  </xs:complexType>
  <xs:group name="Example">
    <xs:choice>
      <xs:element ref="example"/>
      <xs:element ref="question"/>
      <xs:element ref="problem"/>
    </xs:choice>
  </xs:group>
  <xs:element name="example" type="ExampleLike"/>
  <xs:element name="question" type="ExampleLike"/>
  <xs:element name="problem" type="ExampleLike"/>
  <xs:complexType name="ProjectLike">
    <xs:sequence>
      <xs:group ref="MetaDataTitleOptional"/>
      <xs:choice>
        <xs:group maxOccurs="unbounded" ref="BlockStatement"/>
        <xs:sequence>
          <xs:element minOccurs="0" ref="prelude"/>
          <xs:choice>
            <xs:sequence>
              <xs:group ref="Statement"/>
              <xs:group minOccurs="0" maxOccurs="unbounded" ref="Hint"/>
              <xs:element minOccurs="0" maxOccurs="unbounded" ref="answer"/>
              <xs:group minOccurs="0" maxOccurs="unbounded" ref="Solution"/>
            </xs:sequence>
            <xs:sequence>
              <xs:group minOccurs="0" ref="IntroductionStatement"/>
              <xs:group maxOccurs="unbounded" ref="Task"/>
              <xs:group minOccurs="0" ref="ConclusionStatement"/>
            </xs:sequence>
          </xs:choice>
          <xs:element minOccurs="0" ref="postlude"/>
        </xs:sequence>
      </xs:choice>
    </xs:sequence>
    <xs:attributeGroup ref="MetaDataTitleOptional"/>
  </xs:complexType>
  <xs:group name="Project">
    <xs:choice>
      <xs:element ref="activity"/>
      <xs:element ref="investigation"/>
      <xs:element ref="exploration"/>
      <xs:element ref="project"/>
    </xs:choice>
  </xs:group>
  <xs:element name="activity" type="ProjectLike"/>
  <xs:element name="investigation" type="ProjectLike"/>
  <xs:element name="exploration" type="ProjectLike"/>
  <xs:element name="project" type="ProjectLike"/>
  <xs:group name="Task">
    <xs:sequence>
      <xs:element name="task">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="MetaDataTitleOptional"/>
            <xs:choice>
              <xs:group maxOccurs="unbounded" ref="BlockStatement"/>
              <xs:sequence>
                <xs:group ref="Statement"/>
                <xs:group minOccurs="0" maxOccurs="unbounded" ref="Hint"/>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="answer"/>
                <xs:group minOccurs="0" maxOccurs="unbounded" ref="Solution"/>
              </xs:sequence>
              <xs:sequence>
                <xs:group minOccurs="0" ref="IntroductionStatement"/>
                <xs:group maxOccurs="unbounded" ref="Task"/>
                <xs:group minOccurs="0" ref="ConclusionStatement"/>
              </xs:sequence>
            </xs:choice>
          </xs:sequence>
          <xs:attributeGroup ref="MetaDataTitleOptional"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="RemarkLike">
    <xs:sequence>
      <xs:group ref="MetaDataTitleOptional"/>
      <xs:group maxOccurs="unbounded" ref="BlockStatement"/>
    </xs:sequence>
    <xs:attributeGroup ref="MetaDataTitleOptional"/>
  </xs:complexType>
  <xs:group name="Remark">
    <xs:choice>
      <xs:element ref="remark"/>
      <xs:element ref="convention"/>
      <xs:element name="note" type="RemarkLike"/>
      <xs:element ref="observation"/>
      <xs:element ref="warning"/>
      <xs:element ref="insight"/>
    </xs:choice>
  </xs:group>
  <xs:element name="remark" type="RemarkLike"/>
  <xs:element name="convention" type="RemarkLike"/>
  <xs:element name="observation" type="RemarkLike"/>
  <xs:element name="warning" type="RemarkLike"/>
  <xs:element name="insight" type="RemarkLike"/>
  <xs:complexType name="ComputationLike">
    <xs:sequence>
      <xs:group ref="MetaDataTitleOptional"/>
      <xs:group maxOccurs="unbounded" ref="BlockStatement"/>
    </xs:sequence>
    <xs:attributeGroup ref="MetaDataTitleOptional"/>
  </xs:complexType>
  <xs:group name="Computation">
    <xs:choice>
      <xs:element ref="computation"/>
      <xs:element ref="technology"/>
    </xs:choice>
  </xs:group>
  <xs:element name="computation" type="ComputationLike"/>
  <xs:element name="technology" type="ComputationLike"/>
  <xs:complexType name="AsideLike">
    <xs:sequence>
      <xs:group ref="MetaDataTitleOptional"/>
      <xs:group maxOccurs="unbounded" ref="BlockText"/>
    </xs:sequence>
    <xs:attributeGroup ref="MetaDataTitleOptional"/>
  </xs:complexType>
  <xs:group name="Aside">
    <xs:choice>
      <xs:element ref="aside"/>
      <xs:element ref="biographical"/>
      <xs:element ref="historical"/>
    </xs:choice>
  </xs:group>
  <xs:element name="aside" type="AsideLike"/>
  <xs:element name="biographical" type="AsideLike"/>
  <xs:element name="historical" type="AsideLike"/>
  <xs:element name="assemblage">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTitleOptional"/>
        <xs:choice maxOccurs="unbounded">
          <xs:group ref="BlockText"/>
          <xs:group ref="SideBySideNoCaption"/>
          <xs:group ref="SideBySideGroupNoCaption"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTitleOptional"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="caption">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="Figure">
    <xs:choice>
      <xs:element ref="figure"/>
      <xs:element ref="table"/>
      <xs:element ref="listing"/>
      <xs:element ref="list"/>
    </xs:choice>
  </xs:group>
  <xs:element name="figure">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataCaption">
          <xs:choice>
            <xs:group ref="Image"/>
            <xs:element ref="video"/>
            <xs:group ref="SideBySide"/>
            <xs:group ref="SideBySideGroup"/>
            <xs:element ref="score"/>
          </xs:choice>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="table">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataAltTitle">
          <xs:sequence>
            <xs:element ref="tabular"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="listing">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataCaption">
          <xs:choice>
            <xs:element ref="program"/>
            <xs:element ref="console"/>
          </xs:choice>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="list">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataAltTitle">
          <xs:sequence>
            <xs:group minOccurs="0" ref="IntroductionText"/>
            <xs:group ref="List"/>
            <xs:group minOccurs="0" ref="ConclusionText"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="stack">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="tabular"/>
        <xs:group ref="Image"/>
        <xs:element ref="video"/>
        <xs:element ref="program"/>
        <xs:element ref="console"/>
        <xs:group ref="Paragraph"/>
        <xs:element ref="pre"/>
        <xs:group ref="List"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:attributeGroup name="SidebySideAttributes">
    <xs:attribute name="permid"/>
    <xs:attribute name="margins"/>
    <xs:attribute name="width"/>
    <xs:attribute name="widths"/>
    <xs:attribute name="valign">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="top"/>
          <xs:enumeration value="middle"/>
          <xs:enumeration value="bottom"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
    <xs:attribute name="valigns"/>
  </xs:attributeGroup>
  <xs:group name="SideBySide">
    <xs:sequence>
      <xs:element name="sidebyside">
        <xs:complexType>
          <xs:choice maxOccurs="unbounded">
            <xs:group ref="Figure"/>
            <xs:element ref="poem"/>
            <xs:element ref="tabular"/>
            <xs:group ref="Image"/>
            <xs:element ref="video"/>
            <xs:element ref="program"/>
            <xs:element ref="console"/>
            <xs:group ref="Paragraph"/>
            <xs:element ref="pre"/>
            <xs:group ref="List"/>
            <xs:element ref="stack"/>
          </xs:choice>
          <xs:attributeGroup ref="SidebySideAttributes"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="SideBySideNoCaption">
    <xs:sequence>
      <xs:element name="sidebyside">
        <xs:complexType>
          <xs:choice maxOccurs="unbounded">
            <xs:element ref="poem"/>
            <xs:element ref="tabular"/>
            <xs:group ref="Image"/>
            <xs:element ref="video"/>
            <xs:element ref="program"/>
            <xs:element ref="console"/>
            <xs:group ref="Paragraph"/>
            <xs:element ref="pre"/>
            <xs:group ref="List"/>
            <xs:element ref="stack"/>
          </xs:choice>
          <xs:attributeGroup ref="SidebySideAttributes"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="SideBySideGroup">
    <xs:sequence>
      <xs:element name="sbsgroup">
        <xs:complexType>
          <xs:group maxOccurs="unbounded" ref="SideBySide"/>
          <xs:attributeGroup ref="SidebySideAttributes"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="SideBySideGroupNoCaption">
    <xs:sequence>
      <xs:element name="sbsgroup">
        <xs:complexType>
          <xs:group maxOccurs="unbounded" ref="SideBySideNoCaption"/>
          <xs:attributeGroup ref="SidebySideAttributes"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="Image">
    <xs:choice>
      <xs:group ref="ImageRaster"/>
      <xs:group ref="ImageCode"/>
    </xs:choice>
  </xs:group>
  <xs:group name="ImageRaster">
    <xs:sequence>
      <xs:element name="image">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" name="description">
              <xs:complexType mixed="true">
                <xs:group ref="TextShort"/>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute ref="xml:id"/>
          <xs:attribute name="permid"/>
          <xs:attribute name="width"/>
          <xs:attribute name="margins"/>
          <xs:attribute name="archive"/>
          <xs:attribute name="source" use="required"/>
          <xs:attribute name="decorative">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="yes"/>
                <xs:enumeration value="no"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="ImageCode">
    <xs:sequence>
      <xs:element name="image">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" name="description">
              <xs:complexType mixed="true">
                <xs:group ref="TextShort"/>
              </xs:complexType>
            </xs:element>
            <xs:choice>
              <xs:element name="latex-image" type="xs:string"/>
              <xs:element ref="asymptote"/>
              <xs:element ref="sageplot"/>
            </xs:choice>
          </xs:sequence>
          <xs:attribute ref="xml:id"/>
          <xs:attribute name="permid"/>
          <xs:attribute name="width"/>
          <xs:attribute name="margins"/>
          <xs:attribute name="archive"/>
          <xs:attribute name="decorative">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="yes"/>
                <xs:enumeration value="no"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="asymptote" type="xs:string"/>
  <xs:element name="sageplot">
    <xs:complexType mixed="true">
      <xs:attribute name="variant">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="2d"/>
            <xs:enumeration value="3d"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="aspect"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="ImageWW">
    <xs:sequence>
      <xs:element name="image">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" name="description">
              <xs:complexType mixed="true">
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                  <xs:group ref="TextShort"/>
                  <xs:element ref="var"/>
                </xs:choice>
              </xs:complexType>
            </xs:element>
            <xs:element minOccurs="0" name="latex-image">
              <xs:complexType mixed="true">
                <xs:attribute name="syntax" use="required">
                  <xs:simpleType>
                    <xs:restriction base="xs:token">
                      <xs:enumeration value="PGtikz"/>
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="pg-name"/>
          <xs:attribute name="width"/>
          <xs:attribute name="decorative">
            <xs:simpleType>
              <xs:restriction base="xs:token">
                <xs:enumeration value="yes"/>
                <xs:enumeration value="no"/>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:simpleType name="BorderThickness">
    <xs:restriction base="xs:token">
      <xs:enumeration value="none"/>
      <xs:enumeration value="minor"/>
      <xs:enumeration value="medium"/>
      <xs:enumeration value="major"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:attributeGroup name="BorderTop">
    <xs:attribute name="top" use="required" type="BorderThickness"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="BorderBottom">
    <xs:attribute name="bottom" use="required" type="BorderThickness"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="BorderLeft">
    <xs:attribute name="left" use="required" type="BorderThickness"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="BorderRight">
    <xs:attribute name="right" use="required" type="BorderThickness"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="AlignmentHorizontal">
    <xs:attribute name="halign" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="left"/>
          <xs:enumeration value="center"/>
          <xs:enumeration value="right"/>
          <xs:enumeration value="justify"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>
  <xs:attributeGroup name="AlignmentVertical">
    <xs:attribute name="valign" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="top"/>
          <xs:enumeration value="middle"/>
          <xs:enumeration value="bottom"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>
  <xs:element name="cell">
    <xs:complexType mixed="true">
      <xs:choice>
        <xs:group ref="TextLong"/>
        <xs:group maxOccurs="unbounded" ref="LongLine"/>
        <xs:group maxOccurs="unbounded" ref="Paragraph"/>
      </xs:choice>
      <xs:attribute name="halign">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="left"/>
            <xs:enumeration value="center"/>
            <xs:enumeration value="right"/>
            <xs:enumeration value="justify"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="bottom" type="BorderThickness"/>
      <xs:attribute name="right" type="BorderThickness"/>
      <xs:attribute name="colspan"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="row">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="cell"/>
      </xs:sequence>
      <xs:attribute name="halign">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="left"/>
            <xs:enumeration value="center"/>
            <xs:enumeration value="right"/>
            <xs:enumeration value="justify"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="valign">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="top"/>
            <xs:enumeration value="middle"/>
            <xs:enumeration value="bottom"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="bottom" type="BorderThickness"/>
      <xs:attribute name="left" type="BorderThickness"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="col">
    <xs:complexType>
      <xs:attribute name="halign">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="left"/>
            <xs:enumeration value="center"/>
            <xs:enumeration value="right"/>
            <xs:enumeration value="justify"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="top" type="BorderThickness"/>
      <xs:attribute name="right" type="BorderThickness"/>
      <xs:attribute name="width"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="tabular">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="col"/>
        <xs:element maxOccurs="unbounded" ref="row"/>
      </xs:sequence>
      <xs:attribute name="permid"/>
      <xs:attribute name="width"/>
      <xs:attribute name="margins"/>
      <xs:attribute name="halign">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="left"/>
            <xs:enumeration value="center"/>
            <xs:enumeration value="right"/>
            <xs:enumeration value="justify"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="valign">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="top"/>
            <xs:enumeration value="middle"/>
            <xs:enumeration value="bottom"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="top" type="BorderThickness"/>
      <xs:attribute name="bottom" type="BorderThickness"/>
      <xs:attribute name="left" type="BorderThickness"/>
      <xs:attribute name="right" type="BorderThickness"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="sage">
    <xs:complexType>
      <xs:sequence minOccurs="0">
        <xs:element ref="input"/>
        <xs:element minOccurs="0" ref="output"/>
      </xs:sequence>
      <xs:attribute name="permid"/>
      <xs:attribute name="doctest"/>
      <xs:attribute name="tolerance"/>
      <xs:attribute name="language"/>
      <xs:attribute name="type"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="score">
    <xs:complexType>
      <xs:attribute name="musescoreuser" use="required"/>
      <xs:attribute name="musescore" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="video">
    <xs:complexType>
      <xs:attribute ref="xml:id"/>
      <xs:attribute name="permid"/>
      <xs:attribute name="width"/>
      <xs:attribute name="margins"/>
      <xs:attribute name="aspect"/>
      <xs:attribute name="start" type="xs:integer"/>
      <xs:attribute name="end" type="xs:integer"/>
      <xs:attribute name="play-at">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="embed"/>
            <xs:enumeration value="popout"/>
            <xs:enumeration value="select"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="preview"/>
      <xs:attribute name="source"/>
      <xs:attribute name="href"/>
      <xs:attribute name="youtube"/>
      <xs:attribute name="youtubeplaylist"/>
      <xs:attribute name="vimeo"/>
    </xs:complexType>
  </xs:element>
  <xs:attributeGroup name="AttributesSourceFile">
    <xs:attribute name="source" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="AttributesNetwork">
    <xs:attribute name="href" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="AttributesYouTube">
    <xs:attribute name="youtube" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="AttributesYouTubePlaylist">
    <xs:attribute name="youtubeplaylist" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="AttributesVimeo">
    <xs:attribute name="vimeo" use="required"/>
  </xs:attributeGroup>
  <xs:group name="ExerciseBody">
    <xs:sequence>
      <xs:choice maxOccurs="unbounded">
        <xs:group ref="BlockStatement"/>
        <xs:element name="ol">
          <xs:complexType>
            <xs:sequence>
              <xs:element maxOccurs="unbounded" name="li">
                <xs:complexType mixed="true">
                  <xs:sequence>
                    <xs:group ref="MetaDataTarget"/>
                    <xs:choice>
                      <xs:group ref="TextParagraph"/>
                      <xs:group maxOccurs="unbounded" ref="BlockText"/>
                    </xs:choice>
                  </xs:sequence>
                  <xs:attributeGroup ref="MetaDataTarget"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="cols"/>
            <xs:attribute name="marker"/>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:group name="StatementExercise">
    <xs:sequence>
      <xs:element name="statement">
        <xs:complexType>
          <xs:group ref="ExerciseBody"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="exercise">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTitleOptional"/>
        <xs:choice>
          <xs:group ref="ExerciseBody"/>
          <xs:sequence>
            <xs:group ref="StatementExercise"/>
            <xs:group minOccurs="0" maxOccurs="unbounded" ref="Hint"/>
            <xs:element minOccurs="0" maxOccurs="unbounded" ref="answer"/>
            <xs:group minOccurs="0" maxOccurs="unbounded" ref="Solution"/>
          </xs:sequence>
          <xs:sequence>
            <xs:group minOccurs="0" ref="IntroductionStatement"/>
            <xs:group maxOccurs="unbounded" ref="Task"/>
            <xs:group minOccurs="0" ref="ConclusionStatement"/>
          </xs:sequence>
          <xs:sequence>
            <xs:group minOccurs="0" ref="IntroductionText"/>
            <xs:group ref="WebWork"/>
            <xs:group minOccurs="0" ref="ConclusionText"/>
          </xs:sequence>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTitleOptional"/>
      <xs:attribute name="number"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="exercisegroup">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTitleOptional"/>
        <xs:group ref="IntroductionStatementNoCaption"/>
        <xs:element maxOccurs="unbounded" ref="exercise"/>
        <xs:group minOccurs="0" ref="ConclusionStatementNoCaption"/>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTitleOptional"/>
      <xs:attribute name="cols">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="2"/>
            <xs:enumeration value="3"/>
            <xs:enumeration value="4"/>
            <xs:enumeration value="5"/>
            <xs:enumeration value="6"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:attributeGroup name="AlignmentPoem">
    <xs:attribute name="halign" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:token">
          <xs:enumeration value="left"/>
          <xs:enumeration value="center"/>
          <xs:enumeration value="right"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:attributeGroup>
  <xs:element name="poem">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTitleOptional"/>
        <xs:element minOccurs="0" name="author">
          <xs:complexType mixed="true">
            <xs:group ref="TextShort"/>
            <xs:attribute name="halign">
              <xs:simpleType>
                <xs:restriction base="xs:token">
                  <xs:enumeration value="left"/>
                  <xs:enumeration value="center"/>
                  <xs:enumeration value="right"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:attribute>
          </xs:complexType>
        </xs:element>
        <xs:choice>
          <xs:group maxOccurs="unbounded" ref="PoemLine"/>
          <xs:element maxOccurs="unbounded" ref="stanza"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTitleOptional"/>
      <xs:attribute name="halign">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="left"/>
            <xs:enumeration value="center"/>
            <xs:enumeration value="right"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="stanza">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTitleOptional"/>
        <xs:group maxOccurs="unbounded" ref="PoemLine"/>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTitleOptional"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="PoemLine">
    <xs:sequence>
      <xs:element name="line">
        <xs:complexType mixed="true">
          <xs:group ref="TextShort"/>
          <xs:attribute name="indent" type="xs:integer"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:complexType name="TextBib" mixed="true">
    <xs:choice minOccurs="0" maxOccurs="unbounded">
      <xs:group ref="Character"/>
      <xs:element ref="m"/>
    </xs:choice>
  </xs:complexType>
  <xs:element name="biblio">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:group ref="MetaDataTarget"/>
        <xs:choice>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:group ref="TextLong"/>
            <xs:element ref="ibid"/>
            <xs:group ref="BibTitle"/>
            <xs:element ref="year"/>
            <xs:element ref="journal"/>
            <xs:element ref="number"/>
            <xs:element ref="volume"/>
            <xs:group ref="BibNote"/>
          </xs:choice>
          <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:group ref="BibTitle"/>
            <xs:group ref="BibAuthor"/>
            <xs:group ref="BibEditor"/>
            <xs:element ref="year"/>
            <xs:element ref="journal"/>
            <xs:element ref="number"/>
            <xs:element ref="volume"/>
            <xs:element ref="series"/>
            <xs:element ref="publisher"/>
            <xs:element ref="pages"/>
            <xs:group ref="BibNote"/>
          </xs:choice>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTarget"/>
      <xs:attribute name="type" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="raw"/>
            <xs:enumeration value="bibtex"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="ibid">
    <xs:complexType/>
  </xs:element>
  <xs:element name="year" type="xs:string"/>
  <xs:element name="journal" type="TextBib"/>
  <xs:element name="number" type="xs:string"/>
  <xs:element name="volume" type="xs:string"/>
  <xs:group name="BibTitle">
    <xs:sequence>
      <xs:element name="title">
        <xs:complexType mixed="true">
          <xs:group ref="TextLong"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="BibNote">
    <xs:sequence>
      <xs:element name="note">
        <xs:complexType>
          <xs:group maxOccurs="unbounded" ref="Paragraph"/>
          <xs:attribute ref="xml:id"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="BibAuthor">
    <xs:sequence>
      <xs:element name="author" type="xs:string"/>
    </xs:sequence>
  </xs:group>
  <xs:group name="BibEditor">
    <xs:sequence>
      <xs:element name="editor" type="xs:string"/>
    </xs:sequence>
  </xs:group>
  <xs:element name="series" type="xs:string"/>
  <xs:element name="publisher" type="xs:string"/>
  <xs:element name="pages">
    <xs:complexType mixed="true">
      <xs:attribute name="start"/>
      <xs:attribute name="end"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="gi">
    <xs:complexType>
      <xs:complexContent>
        <xs:extension base="MetaDataTitle">
          <xs:group maxOccurs="unbounded" ref="BlockStatementNoCaption"/>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:element>
  <xs:element name="contributor">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="MetaDataTarget"/>
        <xs:element ref="personname"/>
        <xs:element minOccurs="0" name="department">
          <xs:complexType mixed="true">
            <xs:group ref="TextSimple"/>
          </xs:complexType>
        </xs:element>
        <xs:element minOccurs="0" name="institution">
          <xs:complexType mixed="true">
            <xs:group ref="TextSimple"/>
          </xs:complexType>
        </xs:element>
        <xs:element minOccurs="0" ref="location"/>
        <xs:element minOccurs="0" ref="email"/>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTarget"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="location">
    <xs:complexType mixed="true">
      <xs:group ref="TextSimple"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="contributors">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="contributor"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:group name="AuthorByline">
    <xs:sequence>
      <xs:element name="author">
        <xs:complexType mixed="true">
          <xs:choice>
            <xs:group ref="TextSimple"/>
            <xs:element ref="xref"/>
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="WebWork">
    <xs:choice>
      <xs:group ref="WebWorkAuthored"/>
      <xs:group ref="WebWorkSource"/>
    </xs:choice>
  </xs:group>
  <xs:group name="WebWorkSource">
    <xs:sequence>
      <xs:element name="webwork">
        <xs:complexType>
          <xs:attribute name="source"/>
          <xs:attribute name="seed" type="xs:integer"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="WebWorkAuthored">
    <xs:sequence>
      <xs:element name="webwork">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" name="description">
              <xs:complexType mixed="true">
                <xs:choice>
                  <xs:group ref="TextSimple"/>
                  <xs:group maxOccurs="unbounded" ref="SimpleLine"/>
                </xs:choice>
              </xs:complexType>
            </xs:element>
            <xs:element minOccurs="0" ref="pg-macros"/>
            <xs:element minOccurs="0" ref="pg-code"/>
            <xs:choice>
              <xs:sequence>
                <xs:group ref="StatementExerciseWW"/>
                <xs:group minOccurs="0" ref="HintWW"/>
                <xs:group minOccurs="0" ref="SolutionWW"/>
              </xs:sequence>
              <xs:sequence>
                <xs:group minOccurs="0" ref="IntroductionText"/>
                <xs:group maxOccurs="unbounded" ref="TaskWW"/>
                <xs:group minOccurs="0" ref="ConclusionText"/>
              </xs:sequence>
              <xs:element maxOccurs="unbounded" ref="stage"/>
            </xs:choice>
          </xs:sequence>
          <xs:attribute ref="xml:id"/>
          <xs:attribute name="seed" type="xs:integer"/>
          <xs:attribute name="copy"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="pg-code" type="xs:string"/>
  <xs:element name="stage">
    <xs:complexType>
      <xs:sequence>
        <xs:group minOccurs="0" ref="Title"/>
        <xs:group ref="StatementExerciseWW"/>
        <xs:group minOccurs="0" ref="HintWW"/>
        <xs:group minOccurs="0" ref="SolutionWW"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:group name="BlockStatementWW">
    <xs:choice>
      <xs:group ref="Paragraph"/>
      <xs:element ref="pre"/>
      <xs:element ref="tabular"/>
      <xs:group ref="ImageWW"/>
    </xs:choice>
  </xs:group>
  <xs:group name="StatementExerciseWW">
    <xs:sequence>
      <xs:element name="statement">
        <xs:complexType>
          <xs:choice maxOccurs="unbounded">
            <xs:group ref="BlockStatementWW"/>
            <xs:element ref="instruction"/>
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="TaskWW">
    <xs:sequence>
      <xs:element name="task">
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="MetaDataTitleOptional"/>
            <xs:choice>
              <xs:sequence>
                <xs:group ref="StatementExerciseWW"/>
                <xs:group minOccurs="0" ref="HintWW"/>
                <xs:group minOccurs="0" ref="SolutionWW"/>
              </xs:sequence>
              <xs:sequence>
                <xs:group minOccurs="0" ref="IntroductionText"/>
                <xs:group maxOccurs="unbounded" ref="TaskWW"/>
                <xs:group minOccurs="0" ref="ConclusionText"/>
              </xs:sequence>
            </xs:choice>
          </xs:sequence>
          <xs:attributeGroup ref="MetaDataTitleOptional"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="pg-macros">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="macro-file"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="macro-file" type="xs:string"/>
  <xs:element name="var">
    <xs:annotation>
      <xs:documentation>The WeBWorK "var" element appears in the RELAX-NG schema as a child of many elements, but almost always as a descendant of a "p" element or a "cell" element.  As an element that is only relevant for a WeBWorK problem, occurrences of "var" must be within a "webwork" element.  A Schematron rule will check on these two situations.</xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:attribute name="form">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="popup"/>
            <xs:enumeration value="buttons"/>
            <xs:enumeration value="none"/>
            <xs:enumeration value="essay"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="name"/>
      <xs:attribute name="evaluator"/>
      <xs:attribute name="width"/>
      <xs:attribute name="category">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="angle"/>
            <xs:enumeration value="decimal"/>
            <xs:enumeration value="exponent"/>
            <xs:enumeration value="formula"/>
            <xs:enumeration value="fraction"/>
            <xs:enumeration value="inequality"/>
            <xs:enumeration value="integer"/>
            <xs:enumeration value="interval"/>
            <xs:enumeration value="logarithm"/>
            <xs:enumeration value="limit"/>
            <xs:enumeration value="number"/>
            <xs:enumeration value="point"/>
            <xs:enumeration value="syntax"/>
            <xs:enumeration value="quantity"/>
            <xs:enumeration value="vector"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="instruction">
    <xs:complexType mixed="true">
      <xs:group ref="TextShort"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="HintWW">
    <xs:sequence>
      <xs:element name="hint">
        <xs:complexType>
          <xs:group maxOccurs="unbounded" ref="BlockStatementWW"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="SolutionWW">
    <xs:sequence>
      <xs:element name="solution">
        <xs:complexType>
          <xs:group maxOccurs="unbounded" ref="BlockStatementWW"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="fragment">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="Title"/>
        <xs:choice maxOccurs="unbounded">
          <xs:element ref="code"/>
          <xs:element ref="fragref"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute ref="xml:id"/>
      <xs:attribute name="filename"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="code" type="xs:string"/>
  <xs:element name="fragref">
    <xs:complexType>
      <xs:attribute name="ref" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="attribution">
    <xs:complexType mixed="true">
      <xs:choice>
        <xs:group ref="TextLong"/>
        <xs:group maxOccurs="unbounded" ref="LongLine"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:attributeGroup name="UniqueID">
    <xs:attribute ref="xml:id" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="PermanentID">
    <xs:attribute name="permid" use="required"/>
  </xs:attributeGroup>
  <xs:group name="Title">
    <xs:sequence>
      <xs:element name="title">
        <xs:complexType mixed="true">
          <xs:group ref="TextLong"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="LinedTitle">
    <xs:sequence>
      <xs:element name="title">
        <xs:complexType>
          <xs:group maxOccurs="unbounded" ref="LongLine"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="Subtitle">
    <xs:sequence>
      <xs:element name="subtitle">
        <xs:complexType mixed="true">
          <xs:group ref="TextLong"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="LinedSubtitle">
    <xs:sequence>
      <xs:element name="subtitle">
        <xs:complexType>
          <xs:group maxOccurs="unbounded" ref="LongLine"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:element name="shorttitle">
    <xs:complexType mixed="true">
      <xs:group ref="TextShort"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="plaintitle" type="xs:string"/>
  <xs:element name="creator">
    <xs:complexType mixed="true">
      <xs:group ref="TextShort"/>
    </xs:complexType>
  </xs:element>
  <xs:attributeGroup name="XMLBase">
    <xs:attribute ref="xml:base" use="required"/>
  </xs:attributeGroup>
  <xs:attributeGroup name="XMLLang">
    <xs:attribute ref="xml:lang" use="required"/>
  </xs:attributeGroup>
  <xs:group name="MetaDataTarget">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="idx"/>
    </xs:sequence>
  </xs:group>
  <xs:attributeGroup name="MetaDataTarget">
    <xs:attribute ref="xml:id"/>
    <xs:attribute name="permid"/>
  </xs:attributeGroup>
  <xs:complexType name="MetaDataTitle">
    <xs:sequence>
      <xs:group ref="Title"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="idx"/>
    </xs:sequence>
    <xs:attribute ref="xml:id"/>
    <xs:attribute name="permid"/>
    <xs:attribute ref="xml:base"/>
    <xs:attribute ref="xml:lang"/>
  </xs:complexType>
  <xs:complexType name="MetaDataAltTitle">
    <xs:sequence>
      <xs:group ref="Title"/>
      <xs:element minOccurs="0" ref="shorttitle"/>
      <xs:element minOccurs="0" ref="plaintitle"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="idx"/>
    </xs:sequence>
    <xs:attribute ref="xml:id"/>
    <xs:attribute name="permid"/>
    <xs:attribute ref="xml:base"/>
    <xs:attribute ref="xml:lang"/>
  </xs:complexType>
  <xs:complexType name="MetaDataLinedTitle">
    <xs:sequence>
      <xs:choice>
        <xs:group ref="Title"/>
        <xs:group ref="LinedTitle"/>
      </xs:choice>
      <xs:element minOccurs="0" ref="shorttitle"/>
      <xs:element minOccurs="0" ref="plaintitle"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="idx"/>
    </xs:sequence>
    <xs:attribute ref="xml:id"/>
    <xs:attribute name="permid"/>
    <xs:attribute ref="xml:base"/>
    <xs:attribute ref="xml:lang"/>
  </xs:complexType>
  <xs:group name="MetaDataSubtitle">
    <xs:sequence>
      <xs:group ref="Title"/>
      <xs:group minOccurs="0" ref="Subtitle"/>
      <xs:element minOccurs="0" ref="shorttitle"/>
      <xs:element minOccurs="0" ref="plaintitle"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="idx"/>
    </xs:sequence>
  </xs:group>
  <xs:attributeGroup name="MetaDataSubtitle">
    <xs:attribute ref="xml:id"/>
    <xs:attribute name="permid"/>
    <xs:attribute ref="xml:base"/>
    <xs:attribute ref="xml:lang"/>
  </xs:attributeGroup>
  <xs:complexType name="MetaDataLinedSubtitle">
    <xs:sequence>
      <xs:choice>
        <xs:group ref="Title"/>
        <xs:group ref="LinedTitle"/>
      </xs:choice>
      <xs:choice minOccurs="0">
        <xs:group ref="Subtitle"/>
        <xs:group ref="LinedSubtitle"/>
      </xs:choice>
      <xs:element minOccurs="0" ref="shorttitle"/>
      <xs:element minOccurs="0" ref="plaintitle"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="idx"/>
    </xs:sequence>
    <xs:attribute ref="xml:id"/>
    <xs:attribute name="permid"/>
    <xs:attribute ref="xml:base"/>
    <xs:attribute ref="xml:lang"/>
  </xs:complexType>
  <xs:group name="MetaDataTitleOptional">
    <xs:sequence>
      <xs:group minOccurs="0" ref="Title"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="idx"/>
    </xs:sequence>
  </xs:group>
  <xs:attributeGroup name="MetaDataTitleOptional">
    <xs:attribute ref="xml:id"/>
    <xs:attribute name="permid"/>
    <xs:attribute ref="xml:base"/>
    <xs:attribute ref="xml:lang"/>
  </xs:attributeGroup>
  <xs:complexType name="MetaDataAltTitleOptional">
    <xs:sequence>
      <xs:sequence minOccurs="0">
        <xs:group ref="Title"/>
        <xs:element minOccurs="0" ref="shorttitle"/>
        <xs:element minOccurs="0" ref="plaintitle"/>
      </xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="idx"/>
    </xs:sequence>
    <xs:attribute ref="xml:id"/>
    <xs:attribute name="permid"/>
    <xs:attribute ref="xml:base"/>
    <xs:attribute ref="xml:lang"/>
  </xs:complexType>
  <xs:complexType name="MetaDataTitleCreatorOptional">
    <xs:sequence>
      <xs:group minOccurs="0" ref="Title"/>
      <xs:element minOccurs="0" ref="creator"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="idx"/>
    </xs:sequence>
    <xs:attribute ref="xml:id"/>
    <xs:attribute name="permid"/>
    <xs:attribute ref="xml:base"/>
    <xs:attribute ref="xml:lang"/>
  </xs:complexType>
  <xs:complexType name="MetaDataCaption">
    <xs:sequence>
      <xs:group minOccurs="0" ref="Title"/>
      <xs:element ref="caption"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" ref="idx"/>
    </xs:sequence>
    <xs:attribute ref="xml:id"/>
    <xs:attribute name="permid"/>
    <xs:attribute ref="xml:base"/>
    <xs:attribute ref="xml:lang"/>
  </xs:complexType>
  <xs:group name="TextParagraph">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="Character"/>
        <xs:group ref="Generator"/>
        <xs:group ref="Verbatim"/>
        <xs:group ref="Group"/>
        <xs:element ref="var"/>
        <xs:element ref="m"/>
        <xs:group ref="Music"/>
        <xs:group ref="Reference"/>
        <xs:element ref="cd"/>
        <xs:group ref="MathDisplay"/>
        <xs:group ref="List"/>
        <xs:element ref="fn"/>
        <xs:element ref="notation"/>
        <xs:element ref="idx"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:group name="Paragraph">
    <xs:sequence>
      <xs:element name="p">
        <xs:complexType mixed="true">
          <xs:group ref="TextParagraph"/>
          <xs:attribute ref="xml:id"/>
          <xs:attribute name="permid"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="ParagraphLined">
    <xs:sequence>
      <xs:element name="p">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" name="line">
              <xs:complexType mixed="true">
                <xs:group ref="TextShort"/>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute ref="xml:id"/>
          <xs:attribute name="permid"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:group>
  <xs:group name="TextSimple">
    <xs:sequence>
      <xs:group minOccurs="0" maxOccurs="unbounded" ref="Character"/>
    </xs:sequence>
  </xs:group>
  <xs:group name="TextShort">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="Character"/>
        <xs:group ref="Generator"/>
        <xs:group ref="Verbatim"/>
        <xs:group ref="Group"/>
        <xs:element ref="m"/>
        <xs:group ref="Music"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:group name="TextLong">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="Character"/>
        <xs:group ref="Generator"/>
        <xs:group ref="Verbatim"/>
        <xs:group ref="Group"/>
        <xs:element ref="m"/>
        <xs:group ref="Music"/>
        <xs:group ref="Reference"/>
        <xs:element ref="var"/>
      </xs:choice>
    </xs:sequence>
  </xs:group>
  <xs:element name="fn">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:group ref="MetaDataTarget"/>
        <xs:group ref="TextLong"/>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTarget"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="h">
    <xs:complexType mixed="true">
      <xs:group ref="TextShort"/>
      <xs:attribute name="sortby"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="idx">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:group ref="MetaDataTarget"/>
        <xs:choice>
          <xs:group ref="TextShort"/>
          <xs:sequence>
            <xs:element ref="h"/>
            <xs:element minOccurs="0" ref="h"/>
            <xs:element minOccurs="0" ref="h"/>
            <xs:choice minOccurs="0">
              <xs:element ref="see"/>
              <xs:element ref="seealso"/>
            </xs:choice>
          </xs:sequence>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTarget"/>
      <xs:attribute name="sortby"/>
      <xs:attribute name="start"/>
      <xs:attribute name="finish"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="see">
    <xs:complexType mixed="true">
      <xs:group ref="TextShort"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="seealso">
    <xs:complexType mixed="true">
      <xs:group ref="TextShort"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="index-list">
    <xs:complexType/>
  </xs:element>
  <xs:simpleType name="XrefTextStyle">
    <xs:restriction base="xs:token">
      <xs:enumeration value="local"/>
      <xs:enumeration value="global"/>
      <xs:enumeration value="hybrid"/>
      <xs:enumeration value="type-local"/>
      <xs:enumeration value="type-global"/>
      <xs:enumeration value="type-hybrid"/>
      <xs:enumeration value="phrase-global"/>
      <xs:enumeration value="phrase-hybrid"/>
      <xs:enumeration value="title"/>
      <xs:enumeration value="custom"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:group name="Reference">
    <xs:choice>
      <xs:element ref="url"/>
      <xs:element ref="xref"/>
    </xs:choice>
  </xs:group>
  <xs:element name="url">
    <xs:complexType mixed="true">
      <xs:group minOccurs="0" ref="TextShort"/>
      <xs:attribute name="href" use="required"/>
      <xs:attribute name="visual"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="xref">
    <xs:complexType mixed="true">
      <xs:group ref="TextShort"/>
      <xs:attribute name="ref"/>
      <xs:attribute name="first"/>
      <xs:attribute name="last"/>
      <xs:attribute name="provisional"/>
      <xs:attribute name="text" type="XrefTextStyle"/>
      <xs:attribute name="detail"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="notation">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="usage"/>
        <xs:element name="description">
          <xs:complexType mixed="true">
            <xs:group ref="TextShort"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="usage">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="m"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="m">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="fillin"/>
        <xs:element ref="var"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="mrow">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:group ref="MetaDataTarget"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="xref"/>
          <xs:element ref="fillin"/>
          <xs:element ref="var"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTarget"/>
      <xs:attribute name="number">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="yes"/>
            <xs:enumeration value="no"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="tag">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="star"/>
            <xs:enumeration value="dstar"/>
            <xs:enumeration value="tstar"/>
            <xs:enumeration value="dagger"/>
            <xs:enumeration value="ddagger"/>
            <xs:enumeration value="tdagger"/>
            <xs:enumeration value="daggerdbl"/>
            <xs:enumeration value="ddaggerdbl"/>
            <xs:enumeration value="tdaggerdbl"/>
            <xs:enumeration value="hash"/>
            <xs:enumeration value="dhash"/>
            <xs:enumeration value="thash"/>
            <xs:enumeration value="maltese"/>
            <xs:enumeration value="dmaltese"/>
            <xs:enumeration value="tmaltese"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="break">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="yes"/>
            <xs:enumeration value="no"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="intertext">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="MathDisplay">
    <xs:choice>
      <xs:element ref="me"/>
      <xs:element ref="men"/>
      <xs:element ref="md"/>
      <xs:element ref="mdn"/>
    </xs:choice>
  </xs:group>
  <xs:element name="me">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="fillin"/>
        <xs:element ref="var"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="men">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:group ref="MetaDataTarget"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="fillin"/>
          <xs:element ref="var"/>
        </xs:choice>
      </xs:sequence>
      <xs:attributeGroup ref="MetaDataTarget"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="md">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="mrow"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="mrow"/>
          <xs:element ref="intertext"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="number">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="yes"/>
            <xs:enumeration value="no"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="break">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="yes"/>
            <xs:enumeration value="no"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="alignment"/>
      <xs:attribute name="alignat-columns"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="mdn">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="mrow"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="mrow"/>
          <xs:element ref="intertext"/>
        </xs:choice>
      </xs:sequence>
      <xs:attribute name="number">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="yes"/>
            <xs:enumeration value="no"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="break">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="yes"/>
            <xs:enumeration value="no"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="alignment"/>
      <xs:attribute name="alignat-columns"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="Verbatim">
    <xs:choice>
      <xs:element ref="c"/>
      <xs:element ref="email"/>
    </xs:choice>
  </xs:group>
  <xs:element name="c" type="xs:string"/>
  <xs:group name="Group">
    <xs:choice>
      <xs:choice>
        <xs:element ref="abbr"/>
        <xs:element ref="acro"/>
        <xs:element ref="init"/>
      </xs:choice>
      <xs:choice>
        <xs:element ref="q"/>
        <xs:element ref="sq"/>
        <xs:element ref="angles"/>
        <xs:element ref="dblbrackets"/>
      </xs:choice>
      <xs:choice>
        <xs:element ref="em"/>
        <xs:element ref="term"/>
        <xs:element ref="alert"/>
        <xs:element ref="pubtitle"/>
        <xs:element ref="articletitle"/>
        <xs:element ref="foreign"/>
      </xs:choice>
      <xs:choice>
        <xs:element ref="delete"/>
        <xs:element ref="insert"/>
        <xs:element ref="stale"/>
      </xs:choice>
      <xs:choice>
        <xs:element ref="tag"/>
        <xs:element ref="tage"/>
        <xs:element ref="attr"/>
      </xs:choice>
      <xs:element ref="taxon"/>
    </xs:choice>
  </xs:group>
  <xs:element name="abbr">
    <xs:complexType mixed="true">
      <xs:group ref="TextSimple"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="acro">
    <xs:complexType mixed="true">
      <xs:group ref="TextSimple"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="init">
    <xs:complexType mixed="true">
      <xs:group ref="TextSimple"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="q">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="sq">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="angles">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="dblbrackets">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="em">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="term">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="alert">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="pubtitle">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="articletitle">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="foreign">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
      <xs:attribute ref="xml:lang"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="delete">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="insert">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="stale">
    <xs:complexType mixed="true">
      <xs:group ref="TextLong"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="tag" type="xs:string"/>
  <xs:element name="tage" type="xs:string"/>
  <xs:element name="attr" type="xs:string"/>
  <xs:element name="taxon">
    <xs:complexType mixed="true">
      <xs:choice>
        <xs:group ref="TextSimple"/>
        <xs:sequence>
          <xs:element minOccurs="0" ref="genus"/>
          <xs:element minOccurs="0" ref="species"/>
        </xs:sequence>
      </xs:choice>
      <xs:attribute name="ncbi" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="genus">
    <xs:complexType mixed="true">
      <xs:group ref="TextSimple"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="species">
    <xs:complexType mixed="true">
      <xs:group ref="TextSimple"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="Generator">
    <xs:choice>
      <xs:choice>
        <xs:element ref="today"/>
        <xs:element ref="timeofday"/>
        <xs:element ref="tex"/>
        <xs:element ref="latex"/>
        <xs:element ref="xetex"/>
        <xs:element ref="xelatex"/>
        <xs:element name="pretext">
          <xs:complexType/>
        </xs:element>
        <xs:element name="webwork">
          <xs:complexType/>
        </xs:element>
        <xs:element ref="ad"/>
        <xs:element ref="am"/>
        <xs:element ref="bc"/>
        <xs:element ref="ca"/>
        <xs:element ref="eg"/>
        <xs:element ref="etal"/>
        <xs:element ref="etc"/>
        <xs:element ref="ie"/>
        <xs:element ref="nb"/>
        <xs:element ref="pm"/>
        <xs:element ref="ps"/>
        <xs:element ref="vs"/>
        <xs:element ref="viz"/>
      </xs:choice>
      <xs:element ref="quantity"/>
    </xs:choice>
  </xs:group>
  <xs:element name="today">
    <xs:complexType/>
  </xs:element>
  <xs:element name="timeofday">
    <xs:complexType/>
  </xs:element>
  <xs:element name="tex">
    <xs:complexType/>
  </xs:element>
  <xs:element name="latex">
    <xs:complexType/>
  </xs:element>
  <xs:element name="xetex">
    <xs:complexType/>
  </xs:element>
  <xs:element name="xelatex">
    <xs:complexType/>
  </xs:element>
  <xs:element name="ad">
    <xs:complexType/>
  </xs:element>
  <xs:element name="am">
    <xs:complexType/>
  </xs:element>
  <xs:element name="bc">
    <xs:complexType/>
  </xs:element>
  <xs:element name="ca">
    <xs:complexType/>
  </xs:element>
  <xs:element name="eg">
    <xs:complexType/>
  </xs:element>
  <xs:element name="etal">
    <xs:complexType/>
  </xs:element>
  <xs:element name="etc">
    <xs:complexType/>
  </xs:element>
  <xs:element name="ie">
    <xs:complexType/>
  </xs:element>
  <xs:element name="nb">
    <xs:complexType/>
  </xs:element>
  <xs:element name="pm">
    <xs:complexType/>
  </xs:element>
  <xs:element name="ps">
    <xs:complexType/>
  </xs:element>
  <xs:element name="vs">
    <xs:complexType/>
  </xs:element>
  <xs:element name="viz">
    <xs:complexType/>
  </xs:element>
  <xs:element name="quantity">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="mag"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="unit"/>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="per"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="mag" type="xs:string"/>
  <xs:element name="unit">
    <xs:complexType>
      <xs:attributeGroup ref="UnitSpecification"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="per">
    <xs:complexType>
      <xs:attributeGroup ref="UnitSpecification"/>
    </xs:complexType>
  </xs:element>
  <xs:attributeGroup name="UnitSpecification">
    <xs:attribute name="prefix"/>
    <xs:attribute name="base" use="required"/>
    <xs:attribute name="exp" type="xs:integer"/>
  </xs:attributeGroup>
  <xs:group name="Character">
    <xs:choice>
      <xs:choice>
        <xs:element ref="nbsp"/>
        <xs:element ref="ndash"/>
        <xs:element ref="mdash"/>
      </xs:choice>
      <xs:element ref="fillin"/>
      <xs:choice>
        <xs:element ref="lsq"/>
        <xs:element ref="rsq"/>
        <xs:element ref="rq"/>
        <xs:element ref="lq"/>
        <xs:element ref="langle"/>
        <xs:element ref="rangle"/>
      </xs:choice>
      <xs:choice>
        <xs:element ref="minus"/>
        <xs:element ref="times"/>
        <xs:element ref="solidus"/>
        <xs:element ref="obelus"/>
        <xs:element ref="plusminus"/>
        <xs:element ref="degree"/>
        <xs:element ref="prime"/>
        <xs:element ref="dblprime"/>
      </xs:choice>
      <xs:choice>
        <xs:element ref="ellipsis"/>
        <xs:element ref="midpoint"/>
        <xs:element ref="swungdash"/>
        <xs:element ref="permille"/>
        <xs:element ref="pilcrow"/>
        <xs:element ref="section-mark"/>
        <xs:element ref="copyright"/>
        <xs:element ref="registered"/>
        <xs:element ref="trademark"/>
        <xs:element ref="phonomark"/>
        <xs:element ref="servicemark"/>
      </xs:choice>
      <xs:element ref="icon"/>
      <xs:element ref="kbd"/>
    </xs:choice>
  </xs:group>
  <xs:element name="nbsp">
    <xs:complexType/>
  </xs:element>
  <xs:element name="ndash">
    <xs:complexType/>
  </xs:element>
  <xs:element name="mdash">
    <xs:complexType/>
  </xs:element>
  <xs:element name="lsq">
    <xs:complexType/>
  </xs:element>
  <xs:element name="rsq">
    <xs:complexType/>
  </xs:element>
  <xs:element name="rq">
    <xs:complexType/>
  </xs:element>
  <xs:element name="lq">
    <xs:complexType/>
  </xs:element>
  <xs:element name="langle">
    <xs:complexType/>
  </xs:element>
  <xs:element name="rangle">
    <xs:complexType/>
  </xs:element>
  <xs:element name="minus">
    <xs:complexType/>
  </xs:element>
  <xs:element name="times">
    <xs:complexType/>
  </xs:element>
  <xs:element name="solidus">
    <xs:complexType/>
  </xs:element>
  <xs:element name="obelus">
    <xs:complexType/>
  </xs:element>
  <xs:element name="plusminus">
    <xs:complexType/>
  </xs:element>
  <xs:element name="degree">
    <xs:complexType/>
  </xs:element>
  <xs:element name="prime">
    <xs:complexType/>
  </xs:element>
  <xs:element name="dblprime">
    <xs:complexType/>
  </xs:element>
  <xs:element name="ellipsis">
    <xs:complexType/>
  </xs:element>
  <xs:element name="midpoint">
    <xs:complexType/>
  </xs:element>
  <xs:element name="swungdash">
    <xs:complexType/>
  </xs:element>
  <xs:element name="permille">
    <xs:complexType/>
  </xs:element>
  <xs:element name="pilcrow">
    <xs:complexType/>
  </xs:element>
  <xs:element name="section-mark">
    <xs:complexType/>
  </xs:element>
  <xs:element name="copyright">
    <xs:complexType/>
  </xs:element>
  <xs:element name="registered">
    <xs:complexType/>
  </xs:element>
  <xs:element name="trademark">
    <xs:complexType/>
  </xs:element>
  <xs:element name="phonomark">
    <xs:complexType/>
  </xs:element>
  <xs:element name="servicemark">
    <xs:complexType/>
  </xs:element>
  <xs:element name="icon">
    <xs:complexType>
      <xs:attribute name="name" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="kbd">
    <xs:complexType mixed="true">
      <xs:attribute name="name"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="fillin">
    <xs:complexType>
      <xs:attribute name="characters" type="xs:integer"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="Music">
    <xs:choice>
      <xs:element ref="doublesharp"/>
      <xs:element ref="sharp"/>
      <xs:element ref="natural"/>
      <xs:element ref="flat"/>
      <xs:element ref="doubleflat"/>
      <xs:element ref="scaledeg"/>
      <xs:element ref="timesignature"/>
      <xs:element ref="n"/>
      <xs:element ref="chord"/>
    </xs:choice>
  </xs:group>
  <xs:element name="doublesharp">
    <xs:complexType/>
  </xs:element>
  <xs:element name="sharp">
    <xs:complexType/>
  </xs:element>
  <xs:element name="natural">
    <xs:complexType/>
  </xs:element>
  <xs:element name="flat">
    <xs:complexType/>
  </xs:element>
  <xs:element name="doubleflat">
    <xs:complexType/>
  </xs:element>
  <xs:element name="scaledeg">
    <xs:simpleType>
      <xs:restriction base="xs:token">
        <xs:enumeration value="0"/>
        <xs:enumeration value="1"/>
        <xs:enumeration value="2"/>
        <xs:enumeration value="3"/>
        <xs:enumeration value="4"/>
        <xs:enumeration value="5"/>
        <xs:enumeration value="6"/>
        <xs:enumeration value="7"/>
        <xs:enumeration value="8"/>
        <xs:enumeration value="9"/>
        <xs:enumeration value="10"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="timesignature">
    <xs:complexType>
      <xs:attribute name="top" use="required"/>
      <xs:attribute name="bottom" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="n">
    <xs:complexType>
      <xs:attribute name="pc" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="A"/>
            <xs:enumeration value="B"/>
            <xs:enumeration value="C"/>
            <xs:enumeration value="D"/>
            <xs:enumeration value="E"/>
            <xs:enumeration value="F"/>
            <xs:enumeration value="G"/>
            <xs:enumeration value="a"/>
            <xs:enumeration value="b"/>
            <xs:enumeration value="c"/>
            <xs:enumeration value="d"/>
            <xs:enumeration value="e"/>
            <xs:enumeration value="f"/>
            <xs:enumeration value="g"/>
            <xs:enumeration value="1"/>
            <xs:enumeration value="2"/>
            <xs:enumeration value="3"/>
            <xs:enumeration value="4"/>
            <xs:enumeration value="5"/>
            <xs:enumeration value="6"/>
            <xs:enumeration value="7"/>
            <xs:enumeration value="8"/>
            <xs:enumeration value="9"/>
            <xs:enumeration value="10"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="acc">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="doublesharp"/>
            <xs:enumeration value="sharp"/>
            <xs:enumeration value="flat"/>
            <xs:enumeration value="doubleflat"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="octave">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="1"/>
            <xs:enumeration value="2"/>
            <xs:enumeration value="3"/>
            <xs:enumeration value="4"/>
            <xs:enumeration value="5"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="chord">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="alteration"/>
      </xs:sequence>
      <xs:attribute name="root"/>
      <xs:attribute name="mode"/>
      <xs:attribute name="bps"/>
      <xs:attribute name="bass"/>
      <xs:attribute name="suspended">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="yes"/>
            <xs:enumeration value="no"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="parentheses">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="yes"/>
            <xs:enumeration value="no"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="alteration">
    <xs:complexType mixed="true">
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:group ref="TextSimple"/>
        <xs:element ref="sharp"/>
        <xs:element ref="flat"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>
  <xs:element name="list-of">
    <xs:complexType>
      <xs:attribute name="elements" use="required"/>
      <xs:attribute name="scope"/>
      <xs:attribute name="divisions"/>
      <xs:attribute name="empty">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="yes"/>
            <xs:enumeration value="no"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="notation-list">
    <xs:complexType/>
  </xs:element>
  <xs:element name="demonstration">
    <xs:complexType>
      <xs:sequence>
        <xs:group ref="Title"/>
        <xs:group ref="Paragraph"/>
        <xs:element ref="sage"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="docinfo">
    <xs:complexType>
      <xs:group maxOccurs="unbounded" ref="Configuration"/>
      <xs:attribute ref="xml:base"/>
      <xs:attribute ref="xml:lang"/>
    </xs:complexType>
  </xs:element>
  <xs:group name="Configuration">
    <xs:choice>
      <xs:element ref="brandlogo"/>
      <xs:element ref="latex-preamble"/>
      <xs:element ref="latex-image-preamble"/>
      <xs:element ref="asymptote-preamble"/>
      <xs:element ref="macros"/>
      <xs:element ref="cross-references"/>
      <xs:element ref="initialism"/>
      <xs:element ref="feedback"/>
      <xs:element ref="rename"/>
      <xs:element ref="images"/>
      <xs:element ref="author-biographies"/>
      <xs:element ref="numbering"/>
    </xs:choice>
  </xs:group>
  <xs:element name="brandlogo">
    <xs:complexType>
      <xs:attribute name="url"/>
      <xs:attribute name="source" use="required"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="latex-preamble">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" ref="package"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="package" type="xs:string"/>
  <xs:element name="latex-image-preamble">
    <xs:complexType mixed="true">
      <xs:attribute name="syntax">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="PGtikz"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="asymptote-preamble" type="xs:string"/>
  <xs:element name="macros" type="xs:string"/>
  <xs:element name="cross-references">
    <xs:complexType>
      <xs:attribute name="text" use="required" type="XrefTextStyle"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="initialism" type="xs:string"/>
  <xs:element name="feedback">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="url" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="rename">
    <xs:complexType mixed="true">
      <xs:attribute name="element" use="required"/>
      <xs:attribute ref="xml:lang"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="images">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="archive"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="archive">
    <xs:complexType mixed="true">
      <xs:attribute name="from"/>
    </xs:complexType>
  </xs:element>
  <xs:element name="author-biographies">
    <xs:complexType>
      <xs:attribute name="length" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="short"/>
            <xs:enumeration value="long"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  <xs:element name="numbering">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="division"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="division">
    <xs:complexType>
      <xs:attribute name="part" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="decorative"/>
            <xs:enumeration value="structural"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
</xs:schema>
