This TEI ODD defines a TEI customization that is as minimal as possible and the schema generated from it will validate a document that is minimally valid against the TEI scheme. It includes only the ten required elements: 
| Module: header | 
| Module: core | 
| Module: textstructure | 
| Module: tei | 
| Module: figures | 
| Module: namesdates | 
| Module: msdescription | 
| Module: tagdocs | 
| Module: linking | 
| Module: textcrit | 
| Module: transcr | 
| att.breaking |  | 
| att.canonical |  | 
| att.citing |  | 
| att.dimensions |  | 
| att.global.rendition | | @rend |  |  | @style |  |  | @rendition | | [#renditionpointer] | <constraint
   xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="tei:*[@rendition]">
 <sch:let name="results"
  value="for $val in tokenize(normalize-space(@rendition),'\s+') return starts-with($val,'simple:') 
 or (starts-with($val,'#') and //tei:rendition[@xml:id=substring($val,2)])"/>
 <sch:assert test="every $x in $results satisfies $x"> Error: Each of the
   rendition values in "<sch:value-of select="@rendition"/>" must point to a
   local ID or to a rendition defined in the TEI-Simple scheme (<sch:value-of select="$results"/>) </sch:assert></sch:rule></constraint>  |  | simple:allcaps | all capitals |  | simple:blackletter | black letter or gothic
                    typeface |  | simple:bold | bold typeface |  | simple:bottombraced | marked with a brace under the bottom
                    of the text |  | simple:boxed | border around the text |  | simple:centre | centred |  | simple:cursive | cursive typeface |  | simple:display | block display |  | simple:doublestrikethrough | strikethrough with double line |  | simple:doubleunderline | underlined with double line |  | simple:dropcap | initial letter larger or
                    decorated |  | simple:float | floated out of main flow |  | simple:hyphen | with a hyphen here (eg in line
                    break) |  | simple:inline | inline rendering |  | simple:justify | justified text |  | simple:italic | italic typeface |  | simple:larger | larger type |  | simple:left | aligned to the left or
                    left-justified |  | simple:leftbraced | marked with a brace on the left side
                    of the text |  | simple:letterspace | larger-than-normal spacing between
                    letters, usually for emphasis |  | simple:literal | fixed-width typeface, spacing
                    preserved |  | simple:normalstyle | upright shape and default weight of
                    typeface |  | simple:normalweight | normal typeface weight |  | simple:right | aligned to the right or
                    right-justified |  | simple:rightbraced | marked with a brace to the right of
                    the text |  | simple:rotateleft | rotated to the left |  | simple:rotateright | rotated to the right |  | simple:smallcaps | small caps |  | simple:smaller | smaller type |  | simple:strikethrough | strike through |  | simple:subscript | subscript |  | simple:superscript | superscript |  | simple:topbraced | marked with a brace above the
                    text |  | simple:typewriter | fixed-width typeface, like
                    typewriter |  | simple:underline | underlined with single line |  | simple:wavyunderline | underlined with wavy line |  | simple:half-broken | half broken |  | simple:column-left | column left |  | simple:column-right | column right |  
  |  
  | 
| att.naming | | @role | | aut |  |  | crr |  |  | dtc |  |  | dub |  |  | edt |  |  | fnd |  |  | pbl |  |  | prt |  |  | rcp |  |  | trc |  |  | wac |  |  
  |  
  | 
| att.placement | | @place | | above | above the line |  | below | below the line |  | top | at the top of the page |  | top-right | at the top right of the page |  | top-left | at the top left of the page |  | top-centre | at the top center of the page |  | bottom-right | at the bottom right of the
                    page |  | bottom-left | at the bottom left of the page |  | bottom-centre | at the bottom centre of the
                    page |  | bottom | at the foot of the page |  | tablebottom | underneath a table |  | margin-right | in the right-hand margin |  | margin | in the outer margin |  | margin-inner | in the inner margin |  | margin-left | in the left-hand margin |  | opposite | on the opposite, i.e. facing,
                    page. |  | overleaf | on the other side of the leaf. |  | overstrike | superimposed on top of the current
                    context |  | end | at the end of the volume. |  | divend | at the end the current
                    division. |  | parend | at the end the current
                    paragraph. |  | inline | within the body of the text. |  | inspace | in a predefined space, for example
                    left by an earlier scribe. |  | block | formatted as an indented
                    paragraph |  | left-side | on the left side paragraph |  | right-side | on the right side paragraph |  
  |  
  | 
| att.cReferencing |  | 
| att.damaged |  | 
| att.datable |  | 
| att.datable.custom |  | 
| att.datable.iso |  | 
| att.datcat |  | 
| att.declarable |  | 
| att.declaring |  | 
| att.divLike |  | 
| att.docStatus |  | 
| att.duration.iso |  | 
| att.editLike |  | 
| att.edition |  | 
| att.personal |  | 
| att.ranging |  | 
| <name> | | @type | | person | Ein Eigenname als Bezeichnung einer
                    Person, entweder in ausgeschriebener oder abgekürzter Form. Hierbei kann es sich
                    um den tatsächlichen Namen oder einen Spitznamen handeln. |  | org | Ein Eigenname zu Bezeichnung einer
                    Organisation, entweder in ausgeschriebener oder abgekürzter Form. |  | place | Ein Eigenname zur Bezeichnug eines
                    Orts, entweder in ausgeschriebener oder abgekürzter Form. |  | object | Eine Bezeichnung eines Objekts,
                    entweder in ausgeschriebener oder abgekürzter Form. |  
  |  | @subtype | | aut | Eigenname einer Person: Autor des
                    Werkes |  | scr | Eigenname einer Person:
                    Handschriftlicher Schreiber |  | crr | Eigenname einer Person: Korrektor des
                    Werkes |  | dtc | Eigenname einer Person: Zulieferer
                    von Daten |  | dub | Eigenname einer Person: Zweifelhafter
                    Autor |  | edt | Eigenname einer Person: Editor |  | fnd | Eigenname einer Person:
                    Kostenträger |  | pbl | Eigenname einer Person:
                    Herausgeber |  | prt | Eigenname einer Person:
                    Drucker |  | rcp | Eigenname einer Person: Adressat /
                    Empfänger |  | trc | Eigenname einer Person: Ersteller der
                    Transcription |  | wac | Eigenname einer Person: Schreiber
                    eines zugefügten Kommentars |  | dtn | Eigenname eines Ortes: Ziel |  | orn | Eigenname eines Ortes:
                    Herkunftsort |  | pup | Eigenname eines Ortes:
                    Publikationsort |  
  |  
  | 
| <rs> | | @type | | person | Ein Eigenname als Bezeichnung einer
                    Person, entweder in ausgeschriebener oder abgekürzter Form. Hierbei kann es sich
                    um den tatsächlichen Namen oder einen Spitznamen handeln. |  | org | Ein Eigenname zu Bezeichnung einer
                    Organisation, entweder in ausgeschriebener oder abgekürzter Form. |  | place | Ein Eigenname zur Bezeichnug eines
                    Orts, entweder in ausgeschriebener oder abgekürzter Form. |  | object | Eine Bezeichnung eines Objekts,
                    entweder in ausgeschriebener oder abgekürzter Form. |  
  |  | @subtype | | aut | Eigenname einer Person: Autor des
                    Werkes |  | scr | Eigenname einer Person:
                    Handschriftlicher Schreiber |  | crr | Eigenname einer Person: Korrektor des
                    Werkes |  | dtc | Eigenname einer Person: Zulieferer
                    von Daten |  | dub | Eigenname einer Person: Zweifelhafter
                    Autor |  | edt | Eigenname einer Person: Editor |  | fnd | Eigenname einer Person:
                    Kostenträger |  | pbl | Eigenname einer Person:
                    Herausgeber |  | prt | Eigenname einer Person:
                    Drucker |  | rcp | Eigenname einer Person: Adressat /
                    Empfänger |  | trc | Eigenname einer Person: Ersteller der
                    Transcription |  | wac | Eigenname einer Person: Schreiber
                    eines zugefügten Kommentars |  | dtn | Eigenname eines Ortes: Ziel |  | orn | Eigenname eines Ortes:
                    Herkunftsort |  | pup | Eigenname eines Ortes:
                    Publikationsort |  
  |  
  | 
| <handNote> | | @xml:id |  |  | @medium | | ink |  |  | pencil |  |  | pncInk |  |  | redInk |  |  | redChalk |  |  
  |  
  | 
| <handShift> |  | 
| <date> | | @type | | orn | Entstehungsdatum |  | pub | Publikationsdatum |  
  |  
  | 
| <note> |  | 
| <add> |  | 
| <pb> | | [#pbinnote] | <constraint
   xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="tei:pb[parent::tei:note]">
 <sch:report test="@facs"> Error: <sch:name/> may not contain @facs if it is placed
   in a note </sch:report></sch:rule></constraint>  |  
  | 
| <height> |  | 
| <width> |  | 
| <relatedItem> | | @type | | print |  |  | document |  |  | letter |  |  | onlineedition |  |  
  |  | @subtype |  |  
  | 
| <title> |  | 
| <language> |  | 
<dataRef name="anyURI"/>  | 
 Unlike vanilla TEI, we allow spaces in a URI (and thus give up the capability to differentiate a single URI with a space from 2 URIs) in order to get ID pop-ups to work in oXygen. See the corresponding Issue at GitHub.
| [#scribereferences] | <constraint
   xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="tei:*[@scribeRef]">
 <sch:let name="scribe-references"
  value="for $scribe in tokenize(normalize-space(@scribeRef),'\s+') return 
 starts-with($scribe,'#') and id(substring($scribe,2))"/>
 <sch:assert test="every $x in $scribe-references satisfies $x"> Error: Every
   referenced scribe in <sch:name/>/@scibeRef ("<sch:value-of select="@scribeRef"/>")
   must point to a personal entity identified by an @xml:id in this document
   (<sch:value-of select="$scribe-references"/>) </sch:assert></sch:rule></constraint>  | 
| [#validrefandtarget] | <constraint
   xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="@*[name() = 'ref' or name() = 'target']">
 <sch:let name="declared-prefixes"
  value="//tei:prefixDef/@ident"/>
 <sch:let name="external-references"
  value="for $t in tokenize(normalize-space(.),'\s+') return if( not(starts-with($t, 
 'http')) ) then (substring-before($t, ':')) else ()"/>
 <sch:let name="results"
  value="for $t in  tokenize(normalize-space(.),'\s+') return starts-with($t,'#') 
 and not(id(substring($t,2)))"/>
 <sch:report test="some $x in $results satisfies $x"> Error: Every local pointer in
   @<sch:name/> ("<sch:value-of select="."/>") must point to an ID in this document
   (<sch:value-of select="$results"/>) </sch:report>
 <sch:report test="some $x in $external-references satisfies $x[not(.= $declared-prefixes)]"> Error: Every prefix ("<sch:value-of select="$external-references[not(.= $declared-prefixes)]"/>") used in @<sch:name/>
   must be predeclared in a tei:prefixDef in the header </sch:report></sch:rule></constraint>  | 
| [#nameref] | <constraint
   xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="tei:name[@ref]">
 <sch:let name="ref" value="string(./@ref)"/>
 <sch:let name="gndValue"
  value="substring-after($ref, 'gnd:')"/>
 <sch:assert test="matches($ref, '^gnd:\d')"> Error: Every referenced authority file
   should start with "gnd:" followed by a digit. Value here: "<sch:value-of select="string(./@ref), ."/>" </sch:assert>
 <sch:report test="matches($ref, '\s')"> Error: A gnd MUST NOT contain a whitespace.
   Value here: "<sch:value-of select="."/>" </sch:report>
 <sch:report test="contains($ref, '_')"> Error: A gnd MUST NOT contain an underscore.
   Value here: "<sch:value-of select="."/>" </sch:report>
 <sch:assert test="for $i in tokenize($gndValue) return doc(string-join(('https://d-nb.info/gnd/', 
 $i, '/about/rdf'), ''))/*:RDF"> Error: GND file not found for value "<sch:value-of select="string(./@ref)"/>". In
   case of other errors reported here, fix these at first and check the provided ID if
   the error consists. </sch:assert></sch:rule></constraint>  | 
| [#name-string] | <constraint
   xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="tei:name">
 <sch:report test="ends-with(., ',') or ends-with(., ';')"> Error: tei:name should not
   end with "," or ";". Value here: "<sch:value-of select="."/>" </sch:report></sch:rule></constraint>  | 
| [#idno-string] | <constraint
   xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="tei:msIdentifier/tei:idno">
 <sch:assert test="                   starts-with(., 'Autographensammlung Günther Schmid 
 ') or                   starts-with(., 'BBAW ') or                
    starts-with(., 'FDH-FGM, ') or                   starts-with(., 
 'GSA ') or                   starts-with(., 'GStA PK,') or        
            starts-with(., 'HAAB ') or                   starts-with(., 
 'HU UA,') or                   starts-with(., 'Leopoldina Archiv / 
 ') or                   starts-with(., 'RSA ') or                 
   starts-with(., 'SBB Handschriftenabt., ') or                   starts-with(., 
 'SMB-ZA, ') or                   starts-with(., 'SUB Göttingen, ') 
 or                   starts-with(., 'UAHW, ') or                  
  starts-with(., 'GMD, ') or                   starts-with(., 'HAStK') 
                 "> Error: tei:idno refers to a instituion not available for
   processing. Value here: "<sch:value-of select="."/>. Allowed values the text should
   start with are 'Autographensammlung Günther Schmid ', 'BBAW ', 'FDH-FGM, ', 'GSA ',
   'GStA PK,', 'HAAB ', 'HU UA,', 'Leopoldina Archiv / ', 'RSA ', 'SBB
   Handschriftenabt., ', 'SMB-ZA, ', 'SUB Göttingen, ', 'UAHW, ' or 'GMD,
   '.</sch:assert></sch:rule></constraint>  | 
| [#idno-empty] | <constraint
   xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="tei:idno">
 <sch:assert test="string-length(.) gt 0">Error: An empty tei:idno has no function and
   should be removed.</sch:assert></sch:rule></constraint>  | 
| [#body-note] | <constraint
   xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="(tei:body/tei:*)[local-name() eq 'note']">
 <sch:report role="info" test="true()"> Consider moving the editorial comment regarding
   the complete document to teiHeader/profileDesc/abstract. </sch:report></sch:rule></constraint>  | 
| [#body-pb] | <constraint
   xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="tei:body">
 <sch:assert test=".//tei:pb"> At least a single tei:pb element is required.
 </sch:assert></sch:rule></constraint>  | 
| [#name-name] | <constraint
   xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="tei:name">
 <sch:report role="info" test=".//tei:name"> Nested tei:name adressing <sch:value-of select=".//tei:name/string()"/> within <sch:value-of select="./string()"/>.
 </sch:report></sch:rule></constraint>  | 
| [#rendition-rendition] | <constraint
   xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="tei:*[@rendition]">
 <sch:report test=".[tokenize(@rendition, ' ') = ./ancestor::tei:*[@rendition][not(@hand 
 eq ./@hand)]/tokenize(@rendition, ' ')]"> The rendition is specified before. </sch:report></sch:rule></constraint>  | 
| [#filename-text-id] | <constraint
   xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="tei:text">
 <sch:assert test="./@xml:id = substring-before(tokenize(document-uri(/), '/')[last()], 
 '.xml')"> The xml:id given for element tei:text should match the filename (w/o filename
   extension). filename w/o extension: “<sch:value-of select="substring-before(tokenize(document-uri(/), '/')[last()], '.xml')"/>”
   tei:text/@xml:id: “<sch:value-of select="string(./@xml:id)"/>” </sch:assert></sch:rule></constraint>  | 
| [#ref-target-availability] | <constraint
   xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="tei:ref[@target][not(contains(@target, 'textgrid:3zhh5'))][not(contains(@target, 
 'textgrid:3zhh6'))][not(contains(@target, 'd-nb.info'))][not( ./parent::tei:relatedItem 
 )]">
 <sch:let name="docPath"
  value="if ( contains(./@target, '#') ) then substring-before(./@target, '#') 
 else string(@target) "/>
 <sch:let name="idref"
  value="substring-after(./@target, '#')"/>
 
 <sch:assert test="doc-available($docPath) or doc-available('../TEI_doc_bearb/' || $docPath)"> File is not available.
   “<sch:value-of select="$docPath"/>”
 </sch:assert>
 
 <sch:assert test="if ($idref != '') then doc($docPath)/id($idref) or doc('../TEI_doc_bearb/' 
 || $docPath)/id($idref) else true()"> IDREF
   “<sch:value-of select="$idref"/>” is not available in file “<sch:value-of select="$docPath"/>”.
   
 </sch:assert></sch:rule></constraint>  | 
| [#bilb-corresp-availability] | <constraint
   xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="tei:bibl[@corresp]">
 <sch:let name="docPath"
  value="if ( contains(./@corresp, '#') ) then substring-before(./@corresp, 
 '#') else string(@corresp) "/>
 <sch:let name="idref"
  value="substring-after(./@corresp, '#')"/>
 
 <sch:assert test="doc-available($docPath) or doc-available('../TEI_doc_bearb/' || $docPath)"> File is not available.
   “<sch:value-of select="$docPath"/>”
 </sch:assert>
 
 <sch:assert test="if ($idref != '') then doc($docPath)/id($idref) or doc('../TEI_doc_bearb/' 
 || $docPath)/id($idref) else true()"> IDREF
   “<sch:value-of select="$idref"/>” is not available in file “<sch:value-of select="$docPath"/>”.
   
 </sch:assert></sch:rule></constraint>  | 
| [#s3-content] | <constraint
   xmlns:sch="http://purl.oclc.org/dsdl/schematron">
<sch:rule context="tei:graphic[@url][starts-with(@url, 'Graph')]">
 <sch:assert test="./@url = doc('s3-content.xml')//item/text()"> File is not available in S3. Please check for the path: “<sch:value-of select="string(./@url)"/>”
 </sch:assert></sch:rule></constraint>  |