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