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> |