From c61d26f465a25be448286b2a73ca36d3d7e60f32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?tr=C3=A9meur?= Date: Tue, 2 May 2023 16:37:28 +0100 Subject: [PATCH] Add nXML/TEI features --- config.org | 46 + snippets/nxml-mode/teicorpusskel | 7 + snippets/nxml-mode/teiskel | 7 + tei/schemas.xml | 4 + tei/tei_all.rnc | 16232 +++++++++++++++++++++ tei/tei_all.rng | 22549 +++++++++++++++++++++++++++++ 6 files changed, 38845 insertions(+) create mode 100644 snippets/nxml-mode/teicorpusskel create mode 100644 snippets/nxml-mode/teiskel create mode 100644 tei/schemas.xml create mode 100644 tei/tei_all.rnc create mode 100644 tei/tei_all.rng diff --git a/config.org b/config.org index 3b589b9..3bcd3ef 100644 --- a/config.org +++ b/config.org @@ -423,6 +423,52 @@ Show a nice filetree with icons. I use this much less often than I should. (setq neo-theme (if (display-graphic-p) 'icons 'arrow)))) #+END_SRC +** =nXML-mode= + +Attempting to do TEI stuff at work but I can’t link directly to the =.rnc= file here; have to list it in a =schemas.xml= file first, which references the =.rnc= file locally (not sure how we would do an absolute filepath for this). + +#+BEGIN_SRC emacs-lisp + (unless (string-equal system-type "android") + (setq rng-schema-locating-files + '("schemas.xml" "~/.emacs.d/tei/schemas.xml" "c:/Program Files/Emacs/x86_64/share/emacs/27.1/etc/schema/schemas.xml")) + (defun indent-the-file () + (interactive) + (indent-region (point-min) (point-max))) + (add-hook 'nxml-mode-hook + (lambda () (local-set-key (kbd "C-c C-i") 'indent-the-file))) + (add-hook 'nxml-mode-hook + (lambda () (local-set-key (kbd "") 'completion-at-point)))) + #+END_SRC + +Show path of current element (from [[https://emacs.stackexchange.com/questions/28606/how-to-show-xpath-for-current-location-in-an-xml-hierarchy-in-the-modeline][here]]). + +#+BEGIN_SRC emacs-lisp + (unless (string-equal system-type "android") + (defun nxml-where () + "Display the hierarchy of XML elements the point is on as a path." + (interactive) + (let ((path nil)) + (save-excursion + (save-restriction + (widen) + (while (and (< (point-min) (point)) ;; Doesn't error if point is at beginning of buffer + (condition-case nil + (progn + (nxml-backward-up-element) ; always returns nil + t) + (error nil))) + (setq path (cons (xmltok-start-tag-local-name) path))) + (if (called-interactively-p t) + (message "/%s" (mapconcat 'identity path "/")) + (format "/%s" (mapconcat 'identity path "/"))))))) + (defun xml-find-file-hook () + (when (derived-mode-p 'nxml-mode) + (which-function-mode t) + (setq which-func-mode t) + (add-hook 'which-func-functions 'nxml-where t t))) + (add-hook 'find-file-hook 'xml-find-file-hook t)) +#+END_SRC + ** =nov= For reading ebooks. Only on Linux because I (supposedly) use it with my calibre library. diff --git a/snippets/nxml-mode/teicorpusskel b/snippets/nxml-mode/teicorpusskel new file mode 100644 index 0000000..4fa70ed --- /dev/null +++ b/snippets/nxml-mode/teicorpusskel @@ -0,0 +1,7 @@ +# name: teicorpus-skeleton +# key: teicorpusskel +# -- + + + $0 + \ No newline at end of file diff --git a/snippets/nxml-mode/teiskel b/snippets/nxml-mode/teiskel new file mode 100644 index 0000000..10c4d88 --- /dev/null +++ b/snippets/nxml-mode/teiskel @@ -0,0 +1,7 @@ +# name: tei-skeleton +# key: teiskel +# -- + + + $0 + \ No newline at end of file diff --git a/tei/schemas.xml b/tei/schemas.xml new file mode 100644 index 0000000..d5da813 --- /dev/null +++ b/tei/schemas.xml @@ -0,0 +1,4 @@ + + + + diff --git a/tei/tei_all.rnc b/tei/tei_all.rnc new file mode 100644 index 0000000..09efe5b --- /dev/null +++ b/tei/tei_all.rnc @@ -0,0 +1,16232 @@ +namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0" +namespace ns1 = "http://www.w3.org/1999/xhtml" +namespace rng = "http://relaxng.org/ns/structure/1.0" +namespace sch = "http://purl.oclc.org/dsdl/schematron" +default namespace tei = "http://www.tei-c.org/ns/1.0" +namespace teix = "http://www.tei-c.org/ns/Examples" +namespace xi = "http://www.w3.org/2001/XInclude" +namespace xlink = "http://www.w3.org/1999/xlink" + +# Schema generated from ODD source 2023-04-04T17:12:19Z. . +# TEI Edition: Version 4.6.0. Last updated on +# 4th April 2023, revision f18deffba +# TEI Edition Location: https://www.tei-c.org/Vault/P5/Version 4.6.0/ +# + +# TEI material can be licensed differently depending on the use you intend to make of it. Hence it is made available under both the CC+BY and BSD-2 licences. The CC+BY licence is generally appropriate for usages which treat TEI content as data or documentation. The BSD-2 licence is generally appropriate for usage of TEI content in a software environment. For further information or clarification, please contact the TEI Consortium (info@tei-c.org). +macro.abContent = (text | model.paraPart | ab)* +macro.paraContent = (text | model.paraPart)* +macro.limitedContent = (text | model.limitedPhrase | model.inter)* +macro.phraseSeq = + (text + | model.gLike + | model.attributable + | model.phrase + | model.global)* +macro.phraseSeq.limited = (text | model.limitedPhrase | model.global)* +macro.specialPara = + (text + | model.gLike + | model.phrase + | model.inter + | model.divPart + | model.global)* +macro.xtext = (text | model.gLike)* +anyElement-xenoData = + element * - (tei:* | teix:egXML) { + attribute * { text }*, + (text | anyElement-xenoData)* + } +anyElement-egXML = + element * - (tei:* | teix:egXML) { + attribute * { text }*, + (text | anyElement-egXML)* + } +anyElement-content = + element * - (tei:* | teix:egXML) { + attribute * { text }*, + (text | anyElement-content)* + } + >> sch:pattern [ + id = "d9e125670-constraint" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:content" + "\x{a}" ~ + " " + sch:report [ + test = + "descendant::*[not(namespace-uri(.) = ('http://relaxng.org/ns/compatibility/annotations/1.0', 'http://relaxng.org/ns/structure/1.0', 'http://www.tei-c.org/ns/1.0'))]" + "content descendants must be in the\x{a}" ~ + " namespaces\x{a}" ~ + " 'http://relaxng.org/ns/compatibility/annotations/1.0', 'http://relaxng.org/ns/structure/1.0', 'http://www.tei-c.org/ns/1.0'" + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ] +anyElement-constraint = + element * - (tei:* | teix:egXML) { + attribute * { text }*, + (text | anyElement-constraint)* + } +anyElement-datatype = + element * - (tei:* | teix:egXML) { + attribute * { text }*, + (text | anyElement-datatype)* + } + >> sch:pattern [ + id = "d9e127054-constraint" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:datatype" + "\x{a}" ~ + " " + sch:report [ + test = + "descendant::*[not(namespace-uri(.) = ('http://relaxng.org/ns/structure/1.0', 'http://www.tei-c.org/ns/1.0'))]" + "datatype descendants must be in the\x{a}" ~ + " namespaces\x{a}" ~ + " 'http://relaxng.org/ns/structure/1.0', 'http://www.tei-c.org/ns/1.0'" + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ] +att.anchoring.attributes = + att.anchoring.attribute.anchored, att.anchoring.attribute.targetEnd +att.anchoring.attribute.anchored = + + ## (anchored) indicates whether the copy text shows the exact place of reference for the note. + [ a:defaultValue = "true" ] attribute anchored { xsd:boolean }? +att.anchoring.attribute.targetEnd = + + ## (target end) points to the end of the span to which the note is attached, if the note is not embedded in the text at that point. + attribute targetEnd { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.ascribed.attributes = att.ascribed.attribute.who +att.ascribed.attribute.who = + + ## indicates the person, or group of people, to whom the element content is ascribed. + attribute who { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.ascribed.directed.attributes = + att.ascribed.attributes, att.ascribed.directed.attribute.toWhom +att.ascribed.directed.attribute.toWhom = + + ## indicates the person, or group of people, to whom a speech act or action is directed. + attribute toWhom { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.canonical.attributes = + att.canonical.attribute.key, att.canonical.attribute.ref +att.canonical.attribute.key = + + ## provides an externally-defined means of identifying the entity (or entities) being named, using a coded value of some kind. + attribute key { xsd:string }? +att.canonical.attribute.ref = + + ## (reference) provides an explicit means of locating a full definition or identity for the entity being named by means of one or more URIs. + attribute ref { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.ranging.attributes = + att.ranging.attribute.atLeast, + att.ranging.attribute.atMost, + att.ranging.attribute.min, + att.ranging.attribute.max, + att.ranging.attribute.confidence +att.ranging.attribute.atLeast = + + ## gives a minimum estimated value for the approximate measurement. + attribute atLeast { + xsd:double + | xsd:token { pattern = "(\-?[\d]+/\-?[\d]+)" } + | xsd:decimal + }? +att.ranging.attribute.atMost = + + ## gives a maximum estimated value for the approximate measurement. + attribute atMost { + xsd:double + | xsd:token { pattern = "(\-?[\d]+/\-?[\d]+)" } + | xsd:decimal + }? +att.ranging.attribute.min = + + ## where the measurement summarizes more than one observation or a range, supplies the minimum value observed. + attribute min { + xsd:double + | xsd:token { pattern = "(\-?[\d]+/\-?[\d]+)" } + | xsd:decimal + }? +att.ranging.attribute.max = + + ## where the measurement summarizes more than one observation or a range, supplies the maximum value observed. + attribute max { + xsd:double + | xsd:token { pattern = "(\-?[\d]+/\-?[\d]+)" } + | xsd:decimal + }? +att.ranging.attribute.confidence = + [ + a:documentation [ + "specifies the degree of statistical confidence (between zero and one) that a value falls within the range specified by " + ns1:code [ "@min" ] + " and " + ns1:code [ "@max" ] + ", or the proportion of observed values that fall within that range." + ] + ] + attribute confidence { xsd:double }? +att.dimensions.attributes = + att.ranging.attributes, + att.dimensions.attribute.unit, + att.dimensions.attribute.quantity, + att.dimensions.attribute.extent, + att.dimensions.attribute.precision, + att.dimensions.attribute.scope +att.dimensions.attribute.unit = + + ## names the unit used for the measurement + ## Suggested values include: 1] cm (centimetres); 2] mm (millimetres); 3] in (inches); 4] line; 5] char (characters) + attribute unit { + + ## (centimetres) + "cm" + | + ## (millimetres) + "mm" + | + ## (inches) + "in" + | + ## lines of text + "line" + | + ## (characters) characters of text + "char" + | xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +att.dimensions.attribute.quantity = + + ## specifies the length in the units specified + attribute quantity { + xsd:double + | xsd:token { pattern = "(\-?[\d]+/\-?[\d]+)" } + | xsd:decimal + }? +att.dimensions.attribute.extent = + + ## indicates the size of the object concerned using a project-specific vocabulary combining quantity and units in a single string of words. + attribute extent { xsd:string }? +att.dimensions.attribute.precision = + + ## characterizes the precision of the values specified by the other attributes. + attribute precision { + + ## + "high" + | + ## + "medium" + | + ## + "low" + | + ## + "unknown" + }? +att.dimensions.attribute.scope = + + ## where the measurement summarizes more than one observation, specifies the applicability of this measurement. + ## Sample values include: 1] all; 2] most; 3] range + attribute scope { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +att.written.attributes = att.written.attribute.hand +att.written.attribute.hand = + [ + a:documentation [ + "points to a " + ns1:code [ "" ] + " element describing the hand considered responsible for the content of the element concerned." + ] + ] + attribute hand { + xsd:anyURI { pattern = "\S+" } + }? +att.damaged.attributes = + att.dimensions.attributes, + att.written.attributes, + att.damaged.attribute.agent, + att.damaged.attribute.degree, + att.damaged.attribute.group +att.damaged.attribute.agent = + + ## categorizes the cause of the damage, if it can be identified. + ## Sample values include: 1] rubbing; 2] mildew; 3] smoke + attribute agent { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +att.damaged.attribute.degree = + [ + a:documentation [ + "provides a coded representation of the degree of damage, either as a number between 0 (undamaged) and 1 (very extensively damaged), or as one of the codes high, medium, low, or unknown. The " + ns1:code [ "" ] + " element with the " + ns1:code [ "@degree" ] + " attribute should only be used where the text may be read with some confidence; text supplied from other sources should be tagged as " + ns1:code [ "" ] + "." + ] + ] + attribute degree { + xsd:double + | ( + ## + "high" + | + ## + "medium" + | + ## + "low" + | + ## + "unknown") + }? +att.damaged.attribute.group = + + ## assigns an arbitrary number to each stretch of damage regarded as forming part of the same physical phenomenon. + attribute group { xsd:nonNegativeInteger }? +att.breaking.attributes = att.breaking.attribute.break +att.breaking.attribute.break = + + ## indicates whether or not the element bearing this attribute should be considered to mark the end of an orthographic token in the same way as whitespace. + attribute break { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +att.cReferencing.attributes = att.cReferencing.attribute.cRef +att.cReferencing.attribute.cRef = + [ + a:documentation [ + "(canonical reference) specifies the destination of the pointer by supplying a canonical reference expressed using the scheme defined in a " + ns1:code [ "" ] + " element in the TEI header" + ] + ] + attribute cRef { xsd:string }? +att.datable.w3c.attributes = + att.datable.w3c.attribute.when, + att.datable.w3c.attribute.notBefore, + att.datable.w3c.attribute.notAfter, + att.datable.w3c.attribute.from, + att.datable.w3c.attribute.to +att.datable.w3c.attribute.when = + + ## supplies the value of the date or time in a standard form, e.g. yyyy-mm-dd. + attribute when { + xsd:date + | xsd:gYear + | xsd:gMonth + | xsd:gDay + | xsd:gYearMonth + | xsd:gMonthDay + | xsd:time + | xsd:dateTime + }? +att.datable.w3c.attribute.notBefore = + + ## specifies the earliest possible date for the event in standard form, e.g. yyyy-mm-dd. + attribute notBefore { + xsd:date + | xsd:gYear + | xsd:gMonth + | xsd:gDay + | xsd:gYearMonth + | xsd:gMonthDay + | xsd:time + | xsd:dateTime + }? +att.datable.w3c.attribute.notAfter = + + ## specifies the latest possible date for the event in standard form, e.g. yyyy-mm-dd. + attribute notAfter { + xsd:date + | xsd:gYear + | xsd:gMonth + | xsd:gDay + | xsd:gYearMonth + | xsd:gMonthDay + | xsd:time + | xsd:dateTime + }? +att.datable.w3c.attribute.from = + + ## indicates the starting point of the period in standard form, e.g. yyyy-mm-dd. + attribute from { + xsd:date + | xsd:gYear + | xsd:gMonth + | xsd:gDay + | xsd:gYearMonth + | xsd:gMonthDay + | xsd:time + | xsd:dateTime + }? +att.datable.w3c.attribute.to = + + ## indicates the ending point of the period in standard form, e.g. yyyy-mm-dd. + attribute to { + xsd:date + | xsd:gYear + | xsd:gMonth + | xsd:gDay + | xsd:gYearMonth + | xsd:gMonthDay + | xsd:time + | xsd:dateTime + }? +sch:pattern [ + id = "tei_all-att.datable.w3c-att-datable-w3c-when-constraint-rule-1" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:*[@when]" + "\x{a}" ~ + " " + sch:report [ + test = "@notBefore|@notAfter|@from|@to" + role = "nonfatal" + "The @when attribute cannot be used with any other att.datable.w3c attributes." + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " +] +sch:pattern [ + id = "tei_all-att.datable.w3c-att-datable-w3c-from-constraint-rule-2" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:*[@from]" + "\x{a}" ~ + " " + sch:report [ + test = "@notBefore" + role = "nonfatal" + "The @from and @notBefore attributes cannot be used together." + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " +] +sch:pattern [ + id = "tei_all-att.datable.w3c-att-datable-w3c-to-constraint-rule-3" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:*[@to]" + "\x{a}" ~ + " " + sch:report [ + test = "@notAfter" + role = "nonfatal" + "The @to and @notAfter attributes cannot be used together." + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " +] +att.datable.attributes = + att.datable.w3c.attributes, + att.datable.iso.attributes, + att.datable.custom.attributes, + att.datable.attribute.calendar, + att.datable.attribute.period +att.datable.attribute.calendar = + + ## indicates one or more systems or calendars to which the date represented by the content of this element belongs. + attribute calendar { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +sch:pattern [ + id = "tei_all-att.datable-calendar-calendar-constraint-rule-4" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:*[@calendar]" + "\x{a}" ~ + " " + sch:assert [ + test = "string-length( normalize-space(.) ) gt 0" + " @calendar indicates one or more\x{a}" ~ + " systems or calendars to which the date represented by the content of this element belongs,\x{a}" ~ + " but this " + sch:name [ ] + " element has no textual content." + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " +] +att.datable.attribute.period = + [ + a:documentation [ + "supplies pointers to one or more definitions of named periods of time (typically " + ns1:code [ "" ] + "s or " + ns1:code [ "" ] + "s) within which the datable item is understood to have occurred." + ] + ] + attribute period { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.datcat.attributes = + att.datcat.attribute.datcat, + att.datcat.attribute.valueDatcat, + att.datcat.attribute.targetDatcat +att.datcat.attribute.datcat = + [ + a:documentation [ + "provides a pointer to a definition of, and/or general information about, (a) an information container (element or attribute) or (b) a value of an information container (element content or attribute value), by referencing an external taxonomy or ontology. If " + ns1:code [ "@valueDatcat" ] + " is present in the immediate context, this attribute takes on role (a), while " + ns1:code [ "@valueDatcat" ] + " performs role (b)." + ] + ] + attribute datcat { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.datcat.attribute.valueDatcat = + [ + a:documentation [ + "provides a definition of, and/or general information about a value of an information container (element content or attribute value), by reference to an external taxonomy or ontology. Used especially where a contrast with " + ns1:code [ "@datcat" ] + " is needed." + ] + ] + attribute valueDatcat { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.datcat.attribute.targetDatcat = + [ + a:documentation [ + "provides a definition of, and/or general information about, information structure of an object referenced or modeled by the containing element, by reference to an external taxonomy or ontology. This attribute has the characteristics of the " + ns1:code [ "@datcat" ] + " attribute, except that it addresses not its containing element, but an object that is being referenced or modeled by its containing element." + ] + ] + attribute targetDatcat { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.declarable.attributes = att.declarable.attribute.default +att.declarable.attribute.default = + + ## indicates whether or not this element is selected by default when its parent is selected. + [ a:defaultValue = "false" ] + attribute default { + + ## This element is selected if its parent is selected + "true" + | + ## This element can only be selected explicitly, unless it is the only one of its kind, in which case it is selected if its parent is selected. + "false" + }? +att.declaring.attributes = att.declaring.attribute.decls +att.declaring.attribute.decls = + + ## (declarations) identifies one or more declarable elements within the header, which are understood to apply to the element bearing this attribute and its content. + attribute decls { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.fragmentable.attributes = att.fragmentable.attribute.part +att.fragmentable.attribute.part = + + ## specifies whether or not its parent element is fragmented in some way, typically by some other overlapping structure: for example a speech which is divided between two or more verse stanzas, a paragraph which is split across a page division, a verse line which is divided between two speakers. + [ a:defaultValue = "N" ] + attribute part { + + ## (yes) the element is fragmented in some (unspecified) respect + "Y" + | + ## (no) the element is not fragmented, or no claim is made as to its completeness + "N" + | + ## (initial) this is the initial part of a fragmented element + "I" + | + ## (medial) this is a medial part of a fragmented element + "M" + | + ## (final) this is the final part of a fragmented element + "F" + }? +att.divLike.attributes = + att.metrical.attributes, + att.fragmentable.attributes, + att.divLike.attribute.org, + att.divLike.attribute.sample +att.divLike.attribute.org = + + ## (organization) specifies how the content of the division is organized. + [ a:defaultValue = "uniform" ] + attribute org { + + ## no claim is made about the sequence in which the immediate contents of this division are to be processed, or their inter-relationships. + "composite" + | + ## the immediate contents of this element are regarded as forming a logical unit, to be processed in sequence. + "uniform" + }? +att.divLike.attribute.sample = + + ## indicates whether this division is a sample of the original source and if so, from which part. + [ a:defaultValue = "complete" ] + attribute sample { + + ## division lacks material present at end in source. + "initial" + | + ## division lacks material at start and end. + "medial" + | + ## division lacks material at start. + "final" + | + ## position of sampled material within original unknown. + "unknown" + | + ## division is not a sample. + "complete" + }? +att.docStatus.attributes = att.docStatus.attribute.status +att.docStatus.attribute.status = + + ## describes the status of a document either currently or, when associated with a dated element, at the time indicated. + ## Sample values include: 1] approved; 2] candidate; 3] cleared; 4] deprecated; 5] draft; 6] embargoed; 7] expired; 8] frozen; 9] galley; 10] proposed; 11] published; 12] recommendation; 13] submitted; 14] unfinished; 15] withdrawn + [ a:defaultValue = "draft" ] + attribute status { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +att.duration.w3c.attributes = att.duration.w3c.attribute.dur +att.duration.w3c.attribute.dur = + + ## (duration) indicates the length of this element in time. + attribute dur { xsd:duration }? +att.global.responsibility.attributes = + att.global.responsibility.attribute.cert, + att.global.responsibility.attribute.resp +att.global.responsibility.attribute.cert = + + ## (certainty) signifies the degree of certainty associated with the intervention or interpretation. + attribute cert { + xsd:double + | ( + ## + "high" + | + ## + "medium" + | + ## + "low" + | + ## + "unknown") + }? +att.global.responsibility.attribute.resp = + + ## (responsible party) indicates the agency responsible for the intervention or interpretation, for example an editor or transcriber. + attribute resp { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.editLike.attributes = + att.editLike.attribute.evidence, att.editLike.attribute.instant +att.editLike.attribute.evidence = + + ## indicates the nature of the evidence supporting the reliability or accuracy of the intervention or interpretation. + ## Suggested values include: 1] internal; 2] external; 3] conjecture + attribute evidence { + list { + ( + ## there is internal evidence to support the intervention. + "internal" + | + ## there is external evidence to support the intervention. + "external" + | + ## the intervention or interpretation has been made by the editor, cataloguer, or scholar on the basis of their expertise. + "conjecture" + | xsd:token { pattern = "[^\p{C}\p{Z}]+" })+ + } + }? +att.editLike.attribute.instant = + + ## indicates whether this is an instant revision or not. + [ a:defaultValue = "false" ] + attribute instant { + xsd:boolean + | ( + ## + "unknown" + | + ## + "inapplicable") + }? +att.global.rendition.attributes = + att.global.rendition.attribute.rend, + att.global.rendition.attribute.style, + att.global.rendition.attribute.rendition +att.global.rendition.attribute.rend = + + ## (rendition) indicates how the element in question was rendered or presented in the source text. + attribute rend { + list { + xsd:token { pattern = "[^\p{C}\p{Z}]+" }+ + } + }? +att.global.rendition.attribute.style = + + ## contains an expression in some formal style definition language which defines the rendering or presentation used for this element in the source text + attribute style { xsd:string }? +att.global.rendition.attribute.rendition = + + ## points to a description of the rendering or presentation used for this element in the source text. + attribute rendition { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.global.source.attributes = att.global.source.attribute.source +att.global.source.attribute.source = + + ## specifies the source from which some aspect of this element is drawn. + attribute source { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +sch:pattern [ + id = + "tei_all-att.global.source-source-only_1_ODD_source-constraint-rule-5" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:*[@source]" + "\x{a}" ~ + " " + sch:let [ + name = "srcs" + value = "tokenize( normalize-space(@source),' ')" + ] + "\x{a}" ~ + " " + sch:report [ + test = + "( self::tei:classRef | self::tei:dataRef | self::tei:elementRef | self::tei:macroRef | self::tei:moduleRef | self::tei:schemaSpec ) and $srcs[2]" + "\x{a}" ~ + " When used on a schema description element (like\x{a}" ~ + " " + sch:value-of [ select = "name(.)" ] + "), the @source attribute\x{a}" ~ + " should have only 1 value. (This one has " + sch:value-of [ select = "count($srcs)" ] + ".)\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " +] +att.global.attributes = + att.global.rendition.attributes, + att.global.linking.attributes, + att.global.analytic.attributes, + att.global.facs.attributes, + att.global.change.attributes, + att.global.responsibility.attributes, + att.global.source.attributes, + att.global.attribute.xmlid, + att.global.attribute.n, + att.global.attribute.xmllang, + att.global.attribute.xmlbase, + att.global.attribute.xmlspace +att.global.attribute.xmlid = + + ## (identifier) provides a unique identifier for the element bearing the attribute. + attribute xml:id { xsd:ID }? +att.global.attribute.n = + + ## (number) gives a number (or other label) for an element, which is not necessarily unique within the document. + attribute n { xsd:string }? +att.global.attribute.xmllang = + [ + a:documentation [ + "(language) indicates the language of the element content using a tag generated according to " + ns1:a [ + href = "http://www.rfc-editor.org/rfc/bcp/bcp47.txt" + "BCP 47" + ] + "." + ] + ] + attribute xml:lang { + xsd:language + | ( + ## + "") + }? +att.global.attribute.xmlbase = + + ## provides a base URI reference with which applications can resolve relative URI references into absolute URI references. + attribute xml:base { + xsd:anyURI { pattern = "\S+" } + }? +att.global.attribute.xmlspace = + + ## signals an intention about how white space should be managed by applications. + attribute xml:space { + + ## signals that the application's default white-space processing modes are acceptable + "default" + | + ## indicates the intent that applications preserve all white space + "preserve" + }? +att.handFeatures.attributes = + att.handFeatures.attribute.scribe, + att.handFeatures.attribute.scribeRef, + att.handFeatures.attribute.script, + att.handFeatures.attribute.scriptRef, + att.handFeatures.attribute.medium, + att.handFeatures.attribute.scope +att.handFeatures.attribute.scribe = + + ## gives a name or other identifier for the scribe believed to be responsible for this hand. + attribute scribe { xsd:Name }? +att.handFeatures.attribute.scribeRef = + [ + a:documentation [ + "points to a full description of the scribe concerned, typically supplied by a " + ns1:code [ "" ] + " element elsewhere in the description." + ] + ] + attribute scribeRef { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.handFeatures.attribute.script = + + ## characterizes the particular script or writing style used by this hand, for example secretary, copperplate, Chancery, Italian, etc. + attribute script { + list { xsd:Name+ } + }? +att.handFeatures.attribute.scriptRef = + [ + a:documentation [ + "points to a full description of the script or writing style used by this hand, typically supplied by a " + ns1:code [ "" ] + " element elsewhere in the description." + ] + ] + attribute scriptRef { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.handFeatures.attribute.medium = + + ## describes the tint or type of ink, e.g. brown, or other writing medium, e.g. pencil + attribute medium { + list { + xsd:token { pattern = "[^\p{C}\p{Z}]+" }+ + } + }? +att.handFeatures.attribute.scope = + + ## specifies how widely this hand is used in the manuscript. + attribute scope { + + ## only this hand is used throughout the manuscript + "sole" + | + ## this hand is used through most of the manuscript + "major" + | + ## this hand is used occasionally in the manuscript + "minor" + }? +att.internetMedia.attributes = att.internetMedia.attribute.mimeType +att.internetMedia.attribute.mimeType = + + ## (MIME media type) specifies the applicable multimedia internet mail extension (MIME) media type + attribute mimeType { + list { + xsd:token { pattern = "[^\p{C}\p{Z}]+" }+ + } + }? +att.media.attributes = + att.internetMedia.attributes, + att.media.attribute.width, + att.media.attribute.height, + att.media.attribute.scale +att.media.attribute.width = + + ## Where the media are displayed, indicates the display width + attribute width { + xsd:token { + pattern = + "[\-+]?\d+(\.\d+)?(%|cm|mm|in|pt|pc|px|em|ex|ch|rem|vw|vh|vmin|vmax)" + } + }? +att.media.attribute.height = + + ## Where the media are displayed, indicates the display height + attribute height { + xsd:token { + pattern = + "[\-+]?\d+(\.\d+)?(%|cm|mm|in|pt|pc|px|em|ex|ch|rem|vw|vh|vmin|vmax)" + } + }? +att.media.attribute.scale = + + ## Where the media are displayed, indicates a scale factor to be applied when generating the desired display size + attribute scale { + xsd:double + | xsd:token { pattern = "(\-?[\d]+/\-?[\d]+)" } + | xsd:decimal + }? +att.resourced.attributes = att.resourced.attribute.url +att.resourced.attribute.url = + + ## (uniform resource locator) specifies the URL from which the media concerned may be obtained. + attribute url { + xsd:anyURI { pattern = "\S+" } + } +att.interpLike.attributes = + att.interpLike.attribute.type, + att.interpLike.attribute.subtype, + att.interpLike.attribute.inst +att.interpLike.attribute.type = + + ## indicates what kind of phenomenon is being noted in the passage. + ## Sample values include: 1] image; 2] character; 3] theme; 4] allusion + attribute type { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +att.interpLike.attribute.subtype = + + ## (subtype) provides a sub-categorization of the phenomenon is being noted in the passage, if needed + attribute subtype { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +att.interpLike.attribute.inst = + + ## (instances) points to instances of the analysis or interpretation represented by the current element. + attribute inst { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.measurement.attributes = + att.measurement.attribute.unit, + att.measurement.attribute.unitRef, + att.measurement.attribute.quantity, + att.measurement.attribute.commodity +att.measurement.attribute.unit = + + ## (unit) indicates the units used for the measurement, usually using the standard symbol for the desired units. + ## Suggested values include: 1] m (metre); 2] kg (kilogram); 3] s (second); 4] Hz (hertz); 5] Pa (pascal); 6] Ω (ohm); 7] L (litre); 8] t (tonne); 9] ha (hectare); 10] Å (ångström); 11] mL (millilitre); 12] cm (centimetre); 13] dB (decibel); 14] kbit (kilobit); 15] Kibit (kibibit); 16] kB (kilobyte); 17] KiB (kibibyte); 18] MB (megabyte); 19] MiB (mebibyte) + attribute unit { + + ## (metre) SI base unit of length + "m" + | + ## (kilogram) SI base unit of mass + "kg" + | + ## (second) SI base unit of time + "s" + | + ## (hertz) SI unit of frequency + "Hz" + | + ## (pascal) SI unit of pressure or stress + "Pa" + | + ## (ohm) SI unit of electric resistance + "Ω" + | + ## (litre) 1 dm³ + "L" + | + ## (tonne) 10³ kg + "t" + | + ## (hectare) 1 hm² + "ha" + | + ## (ångström) 10⁻¹⁰ m + "Å" + | + ## (millilitre) + "mL" + | + ## (centimetre) + "cm" + | + ## (decibel) see remarks, below + "dB" + | + ## (kilobit) 10³ or 1000 bits + "kbit" + | + ## (kibibit) 2¹⁰ or 1024 bits + "Kibit" + | + ## (kilobyte) 10³ or 1000 bytes + "kB" + | + ## (kibibyte) 2¹⁰ or 1024 bytes + "KiB" + | + ## (megabyte) 10⁶ or 1 000 000 bytes + "MB" + | + ## (mebibyte) 2²⁰ or 1 048 576 bytes + "MiB" + | xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +att.measurement.attribute.unitRef = + [ + a:documentation [ + "points to a unique identifier stored in the " + ns1:code [ "@xml:id" ] + " of a " + ns1:code [ "" ] + " element that defines a unit of measure." + ] + ] + attribute unitRef { + xsd:anyURI { pattern = "\S+" } + }? +att.measurement.attribute.quantity = + + ## (quantity) specifies the number of the specified units that comprise the measurement + attribute quantity { + xsd:double + | xsd:token { pattern = "(\-?[\d]+/\-?[\d]+)" } + | xsd:decimal + }? +att.measurement.attribute.commodity = + + ## (commodity) indicates the substance that is being measured + attribute commodity { + list { + xsd:token { pattern = "[^\p{C}\p{Z}]+" }+ + } + }? +sch:pattern [ + id = + "tei_all-att.measurement-att-measurement-unitRef-constraint-rule-6" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:*[@unitRef]" + "\x{a}" ~ + " " + sch:report [ + test = "@unit" + role = "info" + "The @unit attribute may be unnecessary when @unitRef is present." + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " +] +att.naming.attributes = + att.canonical.attributes, + att.naming.attribute.role, + att.naming.attribute.nymRef +att.naming.attribute.role = + + ## may be used to specify further information about the entity referenced by this name in the form of a set of whitespace-separated values, for example the occupation of a person, or the status of a place. + attribute role { + list { + xsd:token { pattern = "[^\p{C}\p{Z}]+" }+ + } + }? +att.naming.attribute.nymRef = + + ## (reference to the canonical name) provides a means of locating the canonical form (nym) of the names associated with the object named by the element bearing it. + attribute nymRef { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.notated.attributes = att.notated.attribute.notation +att.notated.attribute.notation = + + ## names the notation used for the content of the element. + attribute notation { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +att.placement.attributes = att.placement.attribute.place +att.placement.attribute.place = + + ## specifies where this item is placed. + ## Suggested values include: 1] top; 2] bottom; 3] margin; 4] opposite; 5] overleaf; 6] above; 7] right; 8] below; 9] left; 10] end; 11] inline; 12] inspace + attribute place { + list { + ( + ## at the top of the page + "top" + | + ## at the foot of the page + "bottom" + | + ## in the margin (left, right, or both) + "margin" + | + ## on the opposite, i.e. facing, page + "opposite" + | + ## on the other side of the leaf + "overleaf" + | + ## above the line + "above" + | + ## to the right, e.g. to the right of a vertical line of text, or to the right of a figure + "right" + | + ## below the line + "below" + | + ## to the left, e.g. to the left of a vertical line of text, or to the left of a figure + "left" + | + ## at the end of e.g. chapter or volume. + "end" + | + ## within the body of the text. + "inline" + | + ## in a predefined space, for example left by an earlier scribe. + "inspace" + | xsd:token { pattern = "[^\p{C}\p{Z}]+" })+ + } + }? +att.typed.attributes = + att.typed.attribute.type, att.typed.attribute.subtype +att.typed.attribute.type = + + ## characterizes the element in some sense, using any convenient classification scheme or typology. + attribute type { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +att.typed.attribute.subtype = + + ## (subtype) provides a sub-categorization of the element, if needed + attribute subtype { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +sch:pattern [ + id = "tei_all-att.typed-subtypeTyped-constraint-rule-7" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:*[@subtype]" + "\x{a}" ~ + " " + sch:assert [ + test = "@type" + "The " + sch:name [ ] + " element should not be categorized in detail with @subtype unless also categorized in general with @type" + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " +] +att.pointing.attributes = + att.pointing.attribute.targetLang, + att.pointing.attribute.target, + att.pointing.attribute.evaluate +att.pointing.attribute.targetLang = + [ + a:documentation [ + "specifies the language of the content to be found at the destination referenced by " + ns1:code [ "@target" ] + ", using a language tag generated according to " + ns1:a [ + href = "http://www.rfc-editor.org/rfc/bcp/bcp47.txt" + "BCP 47" + ] + "." + ] + ] + attribute targetLang { + xsd:language + | ( + ## + "") + }? +sch:pattern [ + id = "tei_all-att.pointing-targetLang-targetLang-constraint-rule-8" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:*[not(self::tei:schemaSpec)][@targetLang]" + "\x{a}" ~ + " " + sch:assert [ + test = "@target" + "@targetLang should only be used on " + sch:name [ ] + " if @target is specified." + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " +] +att.pointing.attribute.target = + + ## specifies the destination of the reference by supplying one or more URI References + attribute target { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.pointing.attribute.evaluate = + + ## (evaluate) specifies the intended meaning when the target of a pointer is itself a pointer. + attribute evaluate { + + ## if the element pointed to is itself a pointer, then the target of that pointer will be taken, and so on, until an element is found which is not a pointer. + "all" + | + ## if the element pointed to is itself a pointer, then its target (whether a pointer or not) is taken as the target of this pointer. + "one" + | + ## no further evaluation of targets is carried out beyond that needed to find the element specified in the pointer's target. + "none" + }? +att.pointing.group.attributes = + att.pointing.attributes, + att.typed.attributes, + att.pointing.group.attribute.domains, + att.pointing.group.attribute.targFunc +att.pointing.group.attribute.domains = + + ## optionally specifies the identifiers of the elements within which all elements indicated by the contents of this element lie. + attribute domains { + list { + xsd:anyURI { pattern = "\S+" }, + xsd:anyURI { pattern = "\S+" }, + xsd:anyURI { pattern = "\S+" }* + } + }? +att.pointing.group.attribute.targFunc = + [ + a:documentation [ + "(target function) describes the function of each of the values of the " + ns1:code [ "@target" ] + " attribute of the enclosed " + ns1:code [ "" ] + ", " + ns1:code [ "" ] + ", or " + ns1:code [ "" ] + " tags." + ] + ] + attribute targFunc { + list { + xsd:token { pattern = "[^\p{C}\p{Z}]+" }, + xsd:token { pattern = "[^\p{C}\p{Z}]+" }, + xsd:token { pattern = "[^\p{C}\p{Z}]+" }* + } + }? +att.scoping.attributes = + att.scoping.attribute.target, att.scoping.attribute.match +att.scoping.attribute.target = + + ## points at one or more sets of zero or more elements each. + attribute target { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.scoping.attribute.match = + [ + a:documentation [ + "supplies an XPath selection pattern using the syntax defined in which identifies a set of nodes, selected within the context identified by the " + ns1:code [ "@target" ] + " attribute if this is supplied, or within the context of the parent element if it is not." + ] + ] + attribute match { text }? +att.segLike.attributes = + att.metrical.attributes, + att.datcat.attributes, + att.fragmentable.attributes, + att.segLike.attribute.function +att.segLike.attribute.function = + + ## (function) characterizes the function of the segment. + attribute function { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +att.sortable.attributes = att.sortable.attribute.sortKey +att.sortable.attribute.sortKey = + + ## supplies the sort key for this element in an index, list or group which contains it. + attribute sortKey { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +att.edition.attributes = + att.edition.attribute.ed, att.edition.attribute.edRef +att.edition.attribute.ed = + + ## (edition) supplies a sigil or other arbitrary identifier for the source edition in which the associated feature (for example, a page, column, or line break) occurs at this point in the text. + attribute ed { + list { + xsd:token { pattern = "[^\p{C}\p{Z}]+" }+ + } + }? +att.edition.attribute.edRef = + + ## (edition reference) provides a pointer to the source edition in which the associated feature (for example, a page, column, or line break) occurs at this point in the text. + attribute edRef { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +att.spanning.attributes = att.spanning.attribute.spanTo +att.spanning.attribute.spanTo = + + ## indicates the end of a span initiated by the element bearing this attribute. + attribute spanTo { + xsd:anyURI { pattern = "\S+" } + }? +sch:pattern [ + id = + "tei_all-att.spanning-spanTo-spanTo-points-to-following-constraint-rule-9" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:*[@spanTo]" + "\x{a}" ~ + " " + sch:assert [ + test = + "id(substring(@spanTo,2)) and following::*[@xml:id=substring(current()/@spanTo,2)]" + "\x{a}" ~ + "The element indicated by @spanTo (" + sch:value-of [ select = "@spanTo" ] + ") must follow the current element " + sch:name [ ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " +] +att.styleDef.attributes = + att.styleDef.attribute.scheme, att.styleDef.attribute.schemeVersion +att.styleDef.attribute.scheme = + + ## identifies the language used to describe the rendition. + attribute scheme { + + ## Cascading Stylesheet Language + "css" + | + ## Extensible Stylesheet Language Formatting Objects + "xslfo" + | + ## Informal free text description + "free" + | + ## A user-defined rendition description language + "other" + }? +att.styleDef.attribute.schemeVersion = + [ + a:documentation [ + "supplies a version number for the style language provided in " + ns1:code [ "@scheme" ] + "." + ] + ] + attribute schemeVersion { + xsd:token { pattern = "[\d]+[a-z]*[\d]*(\.[\d]+[a-z]*[\d]*){0,3}" } + }? +sch:pattern [ + id = + "tei_all-att.styleDef-schemeVersion-schemeVersionRequiresScheme-constraint-rule-10" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:*[@schemeVersion]" + "\x{a}" ~ + " " + sch:assert [ + test = "@scheme and not(@scheme = 'free')" + "\x{a}" ~ + " @schemeVersion can only be used if @scheme is specified.\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " +] +att.timed.attributes = + att.duration.attributes, + att.timed.attribute.start, + att.timed.attribute.end +att.timed.attribute.start = + + ## indicates the location within a temporal alignment at which this element begins. + attribute start { + xsd:anyURI { pattern = "\S+" } + }? +att.timed.attribute.end = + + ## indicates the location within a temporal alignment at which this element ends. + attribute end { + xsd:anyURI { pattern = "\S+" } + }? +att.transcriptional.attributes = + att.editLike.attributes, + att.written.attributes, + att.transcriptional.attribute.status, + att.transcriptional.attribute.cause, + att.transcriptional.attribute.seq +att.transcriptional.attribute.status = + + ## indicates the effect of the intervention, for example in the case of a deletion, strikeouts which include too much or too little text, or in the case of an addition, an insertion which duplicates some of the text already present. + ## Sample values include: 1] duplicate; 2] duplicate-partial; 3] excessStart; 4] excessEnd; 5] shortStart; 6] shortEnd; 7] partial; 8] unremarkable + [ a:defaultValue = "unremarkable" ] + attribute status { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +att.transcriptional.attribute.cause = + + ## documents the presumed cause for the intervention. + attribute cause { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +att.transcriptional.attribute.seq = + + ## (sequence) assigns a sequence number related to the order in which the encoded features carrying this attribute are believed to have occurred. + attribute seq { xsd:nonNegativeInteger }? +att.citing.attributes = + att.citing.attribute.unit, + att.citing.attribute.from, + att.citing.attribute.to +att.citing.attribute.unit = + + ## identifies the unit of information conveyed by the element, e.g. columns, pages, volume, entry. + ## Suggested values include: 1] volume (volume); 2] issue; 3] page (page); 4] line; 5] chapter (chapter); 6] part; 7] column; 8] entry + attribute unit { + + ## (volume) the element contains a volume number. + "volume" + | + ## the element contains an issue number, or volume and issue numbers. + "issue" + | + ## (page) the element contains a page number or page range. + "page" + | + ## the element contains a line number or line range. + "line" + | + ## (chapter) the element contains a chapter indication (number and/or title) + "chapter" + | + ## the element identifies a part of a book or collection. + "part" + | + ## the element identifies a column. + "column" + | + ## the element identifies an entry number or label in a list of entries. + "entry" + | xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +att.citing.attribute.from = + [ + a:documentation [ + "specifies the starting point of the range of units indicated by the " + ns1:code [ "@unit" ] + " attribute." + ] + ] + attribute from { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +att.citing.attribute.to = + [ + a:documentation [ + "specifies the end-point of the range of units indicated by the " + ns1:code [ "@unit" ] + " attribute." + ] + ] + attribute to { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +model.nameLike.agent = name | orgName | persName +model.nameLike.agent_alternation = name | orgName | persName +model.nameLike.agent_sequence = name, orgName, persName +model.nameLike.agent_sequenceOptional = name?, orgName?, persName? +model.nameLike.agent_sequenceOptionalRepeatable = + name*, orgName*, persName* +model.nameLike.agent_sequenceRepeatable = name+, orgName+, persName+ +model.segLike = s | cl | phr | w | m | c | pc | seg +model.segLike_alternation = s | cl | phr | w | m | c | pc | seg +model.segLike_sequence = s, cl, phr, w, m, c, pc, seg +model.segLike_sequenceOptional = s?, cl?, phr?, w?, m?, c?, pc?, seg? +model.segLike_sequenceOptionalRepeatable = + s*, cl*, phr*, w*, m*, c*, pc*, seg* +model.segLike_sequenceRepeatable = s+, cl+, phr+, w+, m+, c+, pc+, seg+ +model.hiLike = hi | q +model.hiLike_alternation = hi | q +model.hiLike_sequence = hi, q +model.hiLike_sequenceOptional = hi?, q? +model.hiLike_sequenceOptionalRepeatable = hi*, q* +model.hiLike_sequenceRepeatable = hi+, q+ +model.emphLike = + foreign + | emph + | distinct + | mentioned + | soCalled + | gloss + | term + | title + | code + | ident +model.emphLike_alternation = + foreign + | emph + | distinct + | mentioned + | soCalled + | gloss + | term + | title + | code + | ident +model.emphLike_sequence = + foreign, + emph, + distinct, + mentioned, + soCalled, + gloss, + term, + title, + code, + ident +model.emphLike_sequenceOptional = + foreign?, + emph?, + distinct?, + mentioned?, + soCalled?, + gloss?, + term?, + title?, + code?, + ident? +model.emphLike_sequenceOptionalRepeatable = + foreign*, + emph*, + distinct*, + mentioned*, + soCalled*, + gloss*, + term*, + title*, + code*, + ident* +model.emphLike_sequenceRepeatable = + foreign+, + emph+, + distinct+, + mentioned+, + soCalled+, + gloss+, + term+, + title+, + code+, + ident+ +model.highlighted = model.hiLike | model.emphLike +model.highlighted_alternation = + model.hiLike_alternation | model.emphLike_alternation +model.highlighted_sequence = + model.hiLike_sequence, model.emphLike_sequence +model.highlighted_sequenceOptional = + model.hiLike_sequenceOptional?, model.emphLike_sequenceOptional? +model.highlighted_sequenceOptionalRepeatable = + model.hiLike_sequenceOptionalRepeatable*, + model.emphLike_sequenceOptionalRepeatable* +model.highlighted_sequenceRepeatable = + model.hiLike_sequenceRepeatable+, model.emphLike_sequenceRepeatable+ +model.dateLike = date | time +model.dateLike_alternation = date | time +model.dateLike_sequence = date, time +model.dateLike_sequenceOptional = date?, time? +model.dateLike_sequenceOptionalRepeatable = date*, time* +model.dateLike_sequenceRepeatable = date+, time+ +model.dimLike = height | depth | width +model.measureLike = + num | measure | measureGrp | unit | dim | height | depth | width | geo +model.measureLike_alternation = + num | measure | measureGrp | unit | dim | height | depth | width | geo +model.measureLike_sequence = + num, measure, measureGrp, unit, dim, height, depth, width, geo +model.measureLike_sequenceOptional = + num?, + measure?, + measureGrp?, + unit?, + dim?, + height?, + depth?, + width?, + geo? +model.measureLike_sequenceOptionalRepeatable = + num*, + measure*, + measureGrp*, + unit*, + dim*, + height*, + depth*, + width*, + geo* +model.measureLike_sequenceRepeatable = + num+, + measure+, + measureGrp+, + unit+, + dim+, + height+, + depth+, + width+, + geo+ +model.egLike = eg | egXML +model.egLike_alternation = eg | egXML +model.egLike_sequence = eg, egXML +model.egLike_sequenceOptional = eg?, egXML? +model.egLike_sequenceOptionalRepeatable = eg*, egXML* +model.egLike_sequenceRepeatable = eg+, egXML+ +model.graphicLike = media | graphic | binaryObject | formula +model.graphicLike_alternation = media | graphic | binaryObject | formula +model.graphicLike_sequence = media, graphic, binaryObject, formula +model.graphicLike_sequenceOptional = + media?, graphic?, binaryObject?, formula? +model.graphicLike_sequenceOptionalRepeatable = + media*, graphic*, binaryObject*, formula* +model.graphicLike_sequenceRepeatable = + media+, graphic+, binaryObject+, formula+ +model.offsetLike = offset | geogFeat +model.offsetLike_alternation = offset | geogFeat +model.offsetLike_sequence = offset, geogFeat +model.offsetLike_sequenceOptional = offset?, geogFeat? +model.offsetLike_sequenceOptionalRepeatable = offset*, geogFeat* +model.offsetLike_sequenceRepeatable = offset+, geogFeat+ +model.pPart.msdesc = + catchwords + | dimensions + | heraldry + | locus + | locusGrp + | material + | objectType + | origDate + | origPlace + | secFol + | signatures + | stamp + | watermark +model.pPart.msdesc_alternation = + catchwords + | dimensions + | heraldry + | locus + | locusGrp + | material + | objectType + | origDate + | origPlace + | secFol + | signatures + | stamp + | watermark +model.pPart.msdesc_sequence = + catchwords, + dimensions, + heraldry, + locus, + locusGrp, + material, + objectType, + origDate, + origPlace, + secFol, + signatures, + stamp, + watermark +model.pPart.msdesc_sequenceOptional = + catchwords?, + dimensions?, + heraldry?, + locus?, + locusGrp?, + material?, + objectType?, + origDate?, + origPlace?, + secFol?, + signatures?, + stamp?, + watermark? +model.pPart.msdesc_sequenceOptionalRepeatable = + catchwords*, + dimensions*, + heraldry*, + locus*, + locusGrp*, + material*, + objectType*, + origDate*, + origPlace*, + secFol*, + signatures*, + stamp*, + watermark* +model.pPart.msdesc_sequenceRepeatable = + catchwords+, + dimensions+, + heraldry+, + locus+, + locusGrp+, + material+, + objectType+, + origDate+, + origPlace+, + secFol+, + signatures+, + stamp+, + watermark+ +model.pPart.editorial = choice | abbr | expan | ex | am | subst +model.pPart.editorial_alternation = + choice | abbr | expan | ex | am | subst +model.pPart.editorial_sequence = choice, abbr, expan, ex, am, subst +model.pPart.editorial_sequenceOptional = + choice?, abbr?, expan?, ex?, am?, subst? +model.pPart.editorial_sequenceOptionalRepeatable = + choice*, abbr*, expan*, ex*, am*, subst* +model.pPart.editorial_sequenceRepeatable = + choice+, abbr+, expan+, ex+, am+, subst+ +model.pPart.transcriptional = + sic + | corr + | reg + | orig + | add + | del + | unclear + | damage + | handShift + | restore + | supplied + | surplus + | secl + | mod + | redo + | retrace + | undo +model.pPart.transcriptional_alternation = + sic + | corr + | reg + | orig + | add + | del + | unclear + | damage + | handShift + | restore + | supplied + | surplus + | secl + | mod + | redo + | retrace + | undo +model.pPart.transcriptional_sequence = + sic, + corr, + reg, + orig, + add, + del, + unclear, + damage, + handShift, + restore, + supplied, + surplus, + secl, + mod, + redo, + retrace, + undo +model.pPart.transcriptional_sequenceOptional = + sic?, + corr?, + reg?, + orig?, + add?, + del?, + unclear?, + damage?, + handShift?, + restore?, + supplied?, + surplus?, + secl?, + mod?, + redo?, + retrace?, + undo? +model.pPart.transcriptional_sequenceOptionalRepeatable = + sic*, + corr*, + reg*, + orig*, + add*, + del*, + unclear*, + damage*, + handShift*, + restore*, + supplied*, + surplus*, + secl*, + mod*, + redo*, + retrace*, + undo* +model.pPart.transcriptional_sequenceRepeatable = + sic+, + corr+, + reg+, + orig+, + add+, + del+, + unclear+, + damage+, + handShift+, + restore+, + supplied+, + surplus+, + secl+, + mod+, + redo+, + retrace+, + undo+ +model.pPart.edit = model.pPart.editorial | model.pPart.transcriptional +model.pPart.edit_alternation = + model.pPart.editorial_alternation + | model.pPart.transcriptional_alternation +model.pPart.edit_sequence = + model.pPart.editorial_sequence, model.pPart.transcriptional_sequence +model.pPart.edit_sequenceOptional = + model.pPart.editorial_sequenceOptional?, + model.pPart.transcriptional_sequenceOptional? +model.pPart.edit_sequenceOptionalRepeatable = + model.pPart.editorial_sequenceOptionalRepeatable*, + model.pPart.transcriptional_sequenceOptionalRepeatable* +model.pPart.edit_sequenceRepeatable = + model.pPart.editorial_sequenceRepeatable+, + model.pPart.transcriptional_sequenceRepeatable+ +model.linePart = + model.hiLike + | choice + | add + | del + | unclear + | w + | c + | pc + | zone + | path + | damage + | handShift + | restore + | line + | mod + | redo + | retrace + | undo + | seg +model.ptrLike = ptr | ref | listRef +model.ptrLike_alternation = ptr | ref | listRef +model.ptrLike_sequence = ptr, ref, listRef +model.ptrLike_sequenceOptional = ptr?, ref?, listRef? +model.ptrLike_sequenceOptionalRepeatable = ptr*, ref*, listRef* +model.ptrLike_sequenceRepeatable = ptr+, ref+, listRef+ +model.lPart = caesura | rhyme +model.lPart_alternation = caesura | rhyme +model.lPart_sequence = caesura, rhyme +model.lPart_sequenceOptional = caesura?, rhyme? +model.lPart_sequenceOptionalRepeatable = caesura*, rhyme* +model.lPart_sequenceRepeatable = caesura+, rhyme+ +model.global.meta = + index + | span + | spanGrp + | interp + | interpGrp + | substJoin + | listTranspose + | link + | linkGrp + | timeline + | join + | joinGrp + | alt + | altGrp + | fs + | fLib + | fvLib + | precision + | certainty + | respons +model.global.meta_alternation = + index + | span + | spanGrp + | interp + | interpGrp + | substJoin + | listTranspose + | link + | linkGrp + | timeline + | join + | joinGrp + | alt + | altGrp + | fs + | fLib + | fvLib + | precision + | certainty + | respons +model.global.meta_sequence = + index, + span, + spanGrp, + interp, + interpGrp, + substJoin, + listTranspose, + link, + linkGrp, + timeline, + join, + joinGrp, + alt, + altGrp, + fs, + fLib, + fvLib, + precision, + certainty, + respons +model.global.meta_sequenceOptional = + index?, + span?, + spanGrp?, + interp?, + interpGrp?, + substJoin?, + listTranspose?, + link?, + linkGrp?, + timeline?, + join?, + joinGrp?, + alt?, + altGrp?, + fs?, + fLib?, + fvLib?, + precision?, + certainty?, + respons? +model.global.meta_sequenceOptionalRepeatable = + index*, + span*, + spanGrp*, + interp*, + interpGrp*, + substJoin*, + listTranspose*, + link*, + linkGrp*, + timeline*, + join*, + joinGrp*, + alt*, + altGrp*, + fs*, + fLib*, + fvLib*, + precision*, + certainty*, + respons* +model.global.meta_sequenceRepeatable = + index+, + span+, + spanGrp+, + interp+, + interpGrp+, + substJoin+, + listTranspose+, + link+, + linkGrp+, + timeline+, + join+, + joinGrp+, + alt+, + altGrp+, + fs+, + fLib+, + fvLib+, + precision+, + certainty+, + respons+ +model.milestoneLike = milestone | gb | pb | lb | cb | fw | anchor +model.milestoneLike_alternation = + milestone | gb | pb | lb | cb | fw | anchor +model.milestoneLike_sequence = milestone, gb, pb, lb, cb, fw, anchor +model.milestoneLike_sequenceOptional = + milestone?, gb?, pb?, lb?, cb?, fw?, anchor? +model.milestoneLike_sequenceOptionalRepeatable = + milestone*, gb*, pb*, lb*, cb*, fw*, anchor* +model.milestoneLike_sequenceRepeatable = + milestone+, gb+, pb+, lb+, cb+, fw+, anchor+ +model.gLike = g +model.oddDecl = + moduleSpec + | specGrp + | specGrpRef + | elementSpec + | classSpec + | dataSpec + | macroSpec + | outputRendition + | constraintSpec +model.oddDecl_alternation = + moduleSpec + | specGrp + | specGrpRef + | elementSpec + | classSpec + | dataSpec + | macroSpec + | outputRendition + | constraintSpec +model.oddDecl_sequence = + moduleSpec, + specGrp, + specGrpRef, + elementSpec, + classSpec, + dataSpec, + macroSpec, + outputRendition, + constraintSpec +model.oddDecl_sequenceOptional = + moduleSpec?, + specGrp?, + specGrpRef?, + elementSpec?, + classSpec?, + dataSpec?, + macroSpec?, + outputRendition?, + constraintSpec? +model.oddDecl_sequenceOptionalRepeatable = + moduleSpec*, + specGrp*, + specGrpRef*, + elementSpec*, + classSpec*, + dataSpec*, + macroSpec*, + outputRendition*, + constraintSpec* +model.oddDecl_sequenceRepeatable = + moduleSpec+, + specGrp+, + specGrpRef+, + elementSpec+, + classSpec+, + dataSpec+, + macroSpec+, + outputRendition+, + constraintSpec+ +model.oddRef = classRef | elementRef | macroRef | moduleRef | dataRef +model.phrase.xml = att | gi | tag | val +model.phrase.xml_alternation = att | gi | tag | val +model.phrase.xml_sequence = att, gi, tag, val +model.phrase.xml_sequenceOptional = att?, gi?, tag?, val? +model.phrase.xml_sequenceOptionalRepeatable = att*, gi*, tag*, val* +model.phrase.xml_sequenceRepeatable = att+, gi+, tag+, val+ +model.specDescLike = specList | specDesc +model.specDescLike_alternation = specList | specDesc +model.specDescLike_sequence = specList, specDesc +model.specDescLike_sequenceOptional = specList?, specDesc? +model.specDescLike_sequenceOptionalRepeatable = specList*, specDesc* +model.specDescLike_sequenceRepeatable = specList+, specDesc+ +model.biblLike = bibl | biblStruct | listBibl | biblFull | msDesc +model.biblLike_alternation = + bibl | biblStruct | listBibl | biblFull | msDesc +model.biblLike_sequence = bibl, biblStruct, listBibl, biblFull, msDesc +model.biblLike_sequenceOptional = + bibl?, biblStruct?, listBibl?, biblFull?, msDesc? +model.biblLike_sequenceOptionalRepeatable = + bibl*, biblStruct*, listBibl*, biblFull*, msDesc* +model.biblLike_sequenceRepeatable = + bibl+, biblStruct+, listBibl+, biblFull+, msDesc+ +model.headLike = head +model.headLike_alternation = head +model.headLike_sequence = head +model.headLike_sequenceOptional = head? +model.headLike_sequenceOptionalRepeatable = head* +model.headLike_sequenceRepeatable = head+ +model.labelLike = desc | label +model.labelLike_alternation = desc | label +model.labelLike_sequence = desc, label +model.labelLike_sequenceOptional = desc?, label? +model.labelLike_sequenceOptionalRepeatable = desc*, label* +model.labelLike_sequenceRepeatable = desc+, label+ +model.listLike = + \list + | listApp + | listWit + | listOrg + | listEvent + | listPerson + | listPlace + | listRelation + | listObject + | listNym + | table +model.listLike_alternation = + \list + | listApp + | listWit + | listOrg + | listEvent + | listPerson + | listPlace + | listRelation + | listObject + | listNym + | table +model.listLike_sequence = + \list, + listApp, + listWit, + listOrg, + listEvent, + listPerson, + listPlace, + listRelation, + listObject, + listNym, + table +model.listLike_sequenceOptional = + \list?, + listApp?, + listWit?, + listOrg?, + listEvent?, + listPerson?, + listPlace?, + listRelation?, + listObject?, + listNym?, + table? +model.listLike_sequenceOptionalRepeatable = + \list*, + listApp*, + listWit*, + listOrg*, + listEvent*, + listPerson*, + listPlace*, + listRelation*, + listObject*, + listNym*, + table* +model.listLike_sequenceRepeatable = + \list+, + listApp+, + listWit+, + listOrg+, + listEvent+, + listPerson+, + listPlace+, + listRelation+, + listObject+, + listNym+, + table+ +model.noteLike = note | noteGrp +model.noteLike_alternation = note | noteGrp +model.noteLike_sequence = note, noteGrp +model.noteLike_sequenceOptional = note?, noteGrp? +model.noteLike_sequenceOptionalRepeatable = note*, noteGrp* +model.noteLike_sequenceRepeatable = note+, noteGrp+ +model.lLike = l +model.lLike_alternation = l +model.lLike_sequence = l +model.lLike_sequenceOptional = l? +model.lLike_sequenceOptionalRepeatable = l* +model.lLike_sequenceRepeatable = l+ +model.pLike = p | ab +model.pLike_alternation = p | ab +model.pLike_sequence = p, ab +model.pLike_sequenceOptional = p?, ab? +model.pLike_sequenceOptionalRepeatable = p*, ab* +model.pLike_sequenceRepeatable = p+, ab+ +model.stageLike = stage | move | view | camera | sound | caption | tech +model.stageLike_alternation = + stage | move | view | camera | sound | caption | tech +model.stageLike_sequence = + stage, move, view, camera, sound, caption, tech +model.stageLike_sequenceOptional = + stage?, move?, view?, camera?, sound?, caption?, tech? +model.stageLike_sequenceOptionalRepeatable = + stage*, move*, view*, camera*, sound*, caption*, tech* +model.stageLike_sequenceRepeatable = + stage+, move+, view+, camera+, sound+, caption+, tech+ +model.featureVal.complex = fs | vColl | vNot | vMerge +model.featureVal.single = + binary | symbol | numeric | \string | vLabel | \default | vAlt +model.entryPart = + superEntry + | hom + | sense + | form + | orth + | pron + | hyph + | syll + | gramGrp + | pos + | subc + | colloc + | def + | etym + | usg + | lbl + | xr + | re +model.entryPart.top = + model.biblLike + | cit + | entry + | dictScrap + | form + | gramGrp + | def + | etym + | usg + | lbl + | xr + | re +model.eventLike = event | listEvent +model.global.edit = + gap + | ellipsis + | addSpan + | damageSpan + | delSpan + | space + | app + | witDetail +model.global.edit_alternation = + gap + | ellipsis + | addSpan + | damageSpan + | delSpan + | space + | app + | witDetail +model.global.edit_sequence = + gap, ellipsis, addSpan, damageSpan, delSpan, space, app, witDetail +model.global.edit_sequenceOptional = + gap?, + ellipsis?, + addSpan?, + damageSpan?, + delSpan?, + space?, + app?, + witDetail? +model.global.edit_sequenceOptionalRepeatable = + gap*, + ellipsis*, + addSpan*, + damageSpan*, + delSpan*, + space*, + app*, + witDetail* +model.global.edit_sequenceRepeatable = + gap+, + ellipsis+, + addSpan+, + damageSpan+, + delSpan+, + space+, + app+, + witDetail+ +model.divPart = + model.lLike + | model.pLike + | lg + | sp + | spGrp + | model.divPart.spoken + | graph + | tree + | eTree + | forest + | listForest +model.persStateLike = + persName + | affiliation + | age + | education + | faith + | floruit + | gender + | langKnowledge + | nationality + | occupation + | persona + | persPronouns + | residence + | sex + | socecStatus + | state + | trait +model.personLike = org | person | personGrp +model.personPart = + model.biblLike + | model.eventLike + | model.persStateLike + | name + | idno + | birth + | death +model.placeNamePart = + placeName | bloc | country | region | settlement | district | geogName +model.placeNamePart_alternation = + placeName | bloc | country | region | settlement | district | geogName +model.placeNamePart_sequence = + placeName, bloc, country, region, settlement, district, geogName +model.placeNamePart_sequenceOptional = + placeName?, + bloc?, + country?, + region?, + settlement?, + district?, + geogName? +model.placeNamePart_sequenceOptionalRepeatable = + placeName*, + bloc*, + country*, + region*, + settlement*, + district*, + geogName* +model.placeNamePart_sequenceRepeatable = + placeName+, + bloc+, + country+, + region+, + settlement+, + district+, + geogName+ +model.placeStateLike = + model.placeNamePart + | climate + | location + | population + | state + | terrain + | trait +model.placeStateLike_alternation = + model.placeNamePart_alternation + | climate + | location + | population + | state + | terrain + | trait +model.placeStateLike_sequence = + model.placeNamePart_sequence, + climate, + location, + population, + state, + terrain, + trait +model.placeStateLike_sequenceOptional = + model.placeNamePart_sequenceOptional?, + climate?, + location?, + population?, + state?, + terrain?, + trait? +model.placeStateLike_sequenceOptionalRepeatable = + model.placeNamePart_sequenceOptionalRepeatable*, + climate*, + location*, + population*, + state*, + terrain*, + trait* +model.placeStateLike_sequenceRepeatable = + model.placeNamePart_sequenceRepeatable+, + climate+, + location+, + population+, + state+, + terrain+, + trait+ +model.orgPart = model.eventLike | listOrg | listPerson | listPlace +model.publicationStmtPart.agency = publisher | distributor | authority +model.publicationStmtPart.detail = + model.ptrLike | address | date | pubPlace | idno | availability +model.availabilityPart = licence +model.certLike = precision | certainty | respons +model.descLike = desc +model.identEquiv = gloss | equiv +model.identSynonyms = model.identEquiv | altIdent +model.quoteLike = quote | cit +model.quoteLike_alternation = quote | cit +model.quoteLike_sequence = quote, cit +model.quoteLike_sequenceOptional = quote?, cit? +model.quoteLike_sequenceOptionalRepeatable = quote*, cit* +model.quoteLike_sequenceRepeatable = quote+, cit+ +model.attributable = model.quoteLike | said | floatingText +model.attributable_alternation = + model.quoteLike_alternation | said | floatingText +model.attributable_sequence = + model.quoteLike_sequence, said, floatingText +model.attributable_sequenceOptional = + model.quoteLike_sequenceOptional?, said?, floatingText? +model.attributable_sequenceOptionalRepeatable = + model.quoteLike_sequenceOptionalRepeatable*, said*, floatingText* +model.attributable_sequenceRepeatable = + model.quoteLike_sequenceRepeatable+, said+, floatingText+ +model.respLike = + author | editor | respStmt | meeting | sponsor | funder | principal +model.divWrapper = + meeting + | byline + | dateline + | argument + | epigraph + | salute + | docAuthor + | docDate +model.divTopPart = model.headLike | opener | signed +model.divTop = model.divWrapper | model.divTopPart +model.frontPart.drama = + set | prologue | epilogue | performance | castList +model.pLike.front = + head + | byline + | dateline + | argument + | epigraph + | docTitle + | titlePart + | docAuthor + | docEdition + | docImprint + | docDate +model.divBottomPart = trailer | closer | signed | postscript +model.divBottom = model.divWrapper | model.divBottomPart +model.titlepagePart = + graphic + | binaryObject + | byline + | argument + | epigraph + | docTitle + | titlePart + | docAuthor + | imprimatur + | docEdition + | docImprint + | docDate +model.msQuoteLike = + title | colophon | explicit | finalRubric | incipit | rubric +model.msItemPart = + model.biblLike + | model.quoteLike + | model.respLike + | model.msQuoteLike + | textLang + | idno + | filiation + | msItem + | msItemStruct + | decoNote +model.choicePart = + sic + | corr + | reg + | orig + | unclear + | abbr + | expan + | ex + | am + | supplied + | seg +model.imprintPart = publisher | biblScope | pubPlace | distributor +model.catDescPart = textDesc +model.settingPart = placeName | locale | activity +model.castItemPart = role | roleDesc | actor +model.addressLike = email | address | affiliation +model.addressLike_alternation = email | address | affiliation +model.addressLike_sequence = email, address, affiliation +model.addressLike_sequenceOptional = email?, address?, affiliation? +model.addressLike_sequenceOptionalRepeatable = + email*, address*, affiliation* +model.addressLike_sequenceRepeatable = email+, address+, affiliation+ +model.nameLike = + model.nameLike.agent + | model.offsetLike + | model.placeStateLike + | rs + | idno + | lang + | model.persNamePart + | objectName +model.nameLike_alternation = + model.nameLike.agent_alternation + | model.offsetLike_alternation + | model.placeStateLike_alternation + | rs + | idno + | lang + | model.persNamePart_alternation + | objectName +model.nameLike_sequence = + model.nameLike.agent_sequence, + model.offsetLike_sequence, + model.placeStateLike_sequence, + rs, + idno, + lang, + model.persNamePart_sequence, + objectName +model.nameLike_sequenceOptional = + model.nameLike.agent_sequenceOptional?, + model.offsetLike_sequenceOptional?, + model.placeStateLike_sequenceOptional?, + rs?, + idno?, + lang?, + model.persNamePart_sequenceOptional?, + objectName? +model.nameLike_sequenceOptionalRepeatable = + model.nameLike.agent_sequenceOptionalRepeatable*, + model.offsetLike_sequenceOptionalRepeatable*, + model.placeStateLike_sequenceOptionalRepeatable*, + rs*, + idno*, + lang*, + model.persNamePart_sequenceOptionalRepeatable*, + objectName* +model.nameLike_sequenceRepeatable = + model.nameLike.agent_sequenceRepeatable+, + model.offsetLike_sequenceRepeatable+, + model.placeStateLike_sequenceRepeatable+, + rs+, + idno+, + lang+, + model.persNamePart_sequenceRepeatable+, + objectName+ +model.global = + model.global.meta + | model.milestoneLike + | model.noteLike + | model.global.edit + | model.global.spoken + | metamark + | notatedMusic + | figure +model.featureVal = model.featureVal.complex | model.featureVal.single +model.biblPart = + model.respLike + | model.imprintPart + | series + | citedRange + | bibl + | relatedItem + | textLang + | edition + | extent + | availability + | msIdentifier + | explicit + | incipit + | decoNote + | listRelation + | objectIdentifier +model.frontPart = + model.frontPart.drama | listBibl | divGen | titlePage | schemaSpec +model.addrPart = model.nameLike | addrLine | street | postCode | postBox +model.pPart.data = + model.dateLike + | model.measureLike + | model.addressLike + | model.nameLike +model.pPart.data_alternation = + model.dateLike_alternation + | model.measureLike_alternation + | model.addressLike_alternation + | model.nameLike_alternation +model.pPart.data_sequence = + model.dateLike_sequence, + model.measureLike_sequence, + model.addressLike_sequence, + model.nameLike_sequence +model.pPart.data_sequenceOptional = + model.dateLike_sequenceOptional?, + model.measureLike_sequenceOptional?, + model.addressLike_sequenceOptional?, + model.nameLike_sequenceOptional? +model.pPart.data_sequenceOptionalRepeatable = + model.dateLike_sequenceOptionalRepeatable*, + model.measureLike_sequenceOptionalRepeatable*, + model.addressLike_sequenceOptionalRepeatable*, + model.nameLike_sequenceOptionalRepeatable* +model.pPart.data_sequenceRepeatable = + model.dateLike_sequenceRepeatable+, + model.measureLike_sequenceRepeatable+, + model.addressLike_sequenceRepeatable+, + model.nameLike_sequenceRepeatable+ +model.inter = + model.egLike + | model.oddDecl + | model.biblLike + | model.labelLike + | model.listLike + | model.stageLike + | model.attributable + | castList +model.common = model.divPart | model.inter | q | model.entryLike +model.phrase = + model.segLike + | model.highlighted + | model.graphicLike + | model.pPart.msdesc + | model.pPart.edit + | model.ptrLike + | model.lPart + | model.phrase.xml + | model.specDescLike + | model.pPart.data + | ruby + | model.ptrLike.form +model.paraPart = + model.gLike + | model.lLike + | model.global + | model.inter + | model.phrase + | lg +model.limitedPhrase = + model.hiLike + | model.emphLike + | model.pPart.msdesc + | model.pPart.editorial + | model.ptrLike + | model.phrase.xml + | model.pPart.data +model.divLike = \div +model.divGenLike = divGen +model.div1Like = div1 +model.div2Like = div2 +model.div3Like = div3 +model.div4Like = div4 +model.div5Like = div5 +model.div6Like = div6 +model.div7Like = div7 +model.annotationLike = note | annotationBlock | annotation +model.annotationPart.body = ptr | ref | note +model.applicationLike = application +model.teiHeaderPart = encodingDesc | profileDesc | xenoData +model.sourceDescPart = scriptStmt | recordingStmt +model.encodingDescPart = + schemaRef + | projectDesc + | samplingDecl + | editorialDecl + | tagsDecl + | styleDefDecl + | refsDecl + | listPrefixDef + | classDecl + | geoDecl + | unitDecl + | appInfo + | charDecl + | metDecl + | transcriptionDesc + | variantEncoding + | fsdDecl + | schemaSpec +model.editorialDeclPart = + correction + | normalization + | quotation + | hyphenation + | segmentation + | stdVals + | interpretation + | punctuation +model.profileDescPart = + abstract + | creation + | langUsage + | textClass + | calendarDesc + | correspDesc + | handNotes + | listTranspose + | textDesc + | particDesc + | settingDesc +model.standOffPart = + model.global.meta + | model.biblLike + | model.listLike + | model.annotationLike + | listChange + | castList + | u + | model.entryLike + | zone + | seg + | listAnnotation + | graph + | tree + | eTree + | forest + | listForest +att.formula.attributes = att.formula.attribute.formula +att.formula.attribute.formula = + [ + a:documentation [ + "A " + ns1:code [ "@formula" ] + " is provided to describe a mathematical calculation such as a conversion between measurement systems." + ] + ] + attribute formula { text }? +att.locatable.attributes = att.locatable.attribute.where +att.locatable.attribute.where = + [ + a:documentation [ + "indicates one or more locations by pointing to a " + ns1:code [ "" ] + " element or other canonical description." + ] + ] + attribute where { + list { + xsd:anyURI { pattern = "\S+" }+ + } + }? +model.correspActionPart = + model.dateLike | model.addressLike | model.nameLike | note | noteGrp +model.correspContextPart = model.ptrLike | model.pLike | note | noteGrp +model.correspDescPart = note | noteGrp | correspAction | correspContext +att.partials.attributes = att.partials.attribute.extent +att.partials.attribute.extent = + + ## indicates whether the pronunciation or orthography applies to all or part of a word. + ## Suggested values include: 1] full (full form); 2] pref (prefix); 3] suff (suffix); 4] inf (infix); 5] part (partial) + attribute extent { + + ## (full form) + "full" + | + ## (prefix) + "pref" + | + ## (suffix) + "suff" + | + ## (infix) + "inf" + | + ## (partial) + "part" + | xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }? +model.resource = \text | facsimile | sourceDoc | standOff | fsdDecl +model.describedResource = teiCorpus | TEI +model.objectLike = object | listObject +att.personal.attributes = + att.naming.attributes, + att.personal.attribute.full, + att.personal.attribute.sort +att.personal.attribute.full = + + ## indicates whether the name component is given in full, as an abbreviation or simply as an initial. + [ a:defaultValue = "yes" ] + attribute full { + + ## (yes) the name component is spelled out in full. + "yes" + | + ## (abbreviated) the name component is given in an abbreviated form. + "abb" + | + ## (initial letter) the name component is indicated only by one initial. + "init" + }? +att.personal.attribute.sort = + + ## (sort) specifies the sort order of the name component in relation to others within the name. + attribute sort { xsd:nonNegativeInteger }? +model.placeLike = place +att.duration.iso.attributes = att.duration.iso.attribute.dur-iso +att.duration.iso.attribute.dur-iso = + + ## (duration) indicates the length of this element in time. + attribute dur-iso { + xsd:token { pattern = "[0-9.,DHMPRSTWYZ/:+\-]+" } + }? +att.milestoneUnit.attributes = att.milestoneUnit.attribute.unit +att.milestoneUnit.attribute.unit = + + ## provides a conventional name for the kind of section changing at this milestone. + ## Suggested values include: 1] page; 2] column; 3] line; 4] book; 5] poem; 6] canto; 7] speaker; 8] stanza; 9] act; 10] scene; 11] section; 12] absent; 13] unnumbered + attribute unit { + [ + a:documentation [ + "physical page breaks (synonymous with the " + ns1:code [ "" ] + " element)." + ] + ] + "page" + | + ## column breaks. + "column" + | [ + a:documentation [ + "line breaks (synonymous with the " + ns1:code [ "" ] + " element)." + ] + ] + "line" + | + ## any units termed book, liber, etc. + "book" + | + ## individual poems in a collection. + "poem" + | + ## cantos or other major sections of a poem. + "canto" + | + ## changes of speaker or narrator. + "speaker" + | + ## stanzas within a poem, book, or canto. + "stanza" + | + ## acts within a play. + "act" + | + ## scenes within a play or act. + "scene" + | + ## sections of any kind. + "section" + | + ## passages not present in the reference edition. + "absent" + | + ## passages present in the text, but not to be included as part of the reference. + "unnumbered" + | xsd:token { pattern = "[^\p{C}\p{Z}]+" } + } +p = + + ## (paragraph) marks paragraphs in prose. [3.1. Paragraphs 7.2.5. Speech Contents] + element p { + macro.paraContent + >> sch:pattern [ + id = + "tei_all-p-abstractModel-structure-p-in-ab-or-p-constraint-report-6" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:p" + "\x{a}" ~ + " " + sch:report [ + test = + "(ancestor::tei:ab or ancestor::tei:p) and not( ancestor::tei:floatingText |parent::tei:exemplum |parent::tei:item |parent::tei:note |parent::tei:q |parent::tei:quote |parent::tei:remarks |parent::tei:said |parent::tei:sp |parent::tei:stage |parent::tei:cell |parent::tei:figure )" + "\x{a}" ~ + " Abstract model violation: Paragraphs may not occur inside other paragraphs or ab elements.\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ] + >> sch:pattern [ + id = + "tei_all-p-abstractModel-structure-p-in-l-or-lg-constraint-report-7" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:p" + "\x{a}" ~ + " " + sch:report [ + test = + "(ancestor::tei:l or ancestor::tei:lg) and not( ancestor::tei:floatingText |parent::tei:figure |parent::tei:note )" + "\x{a}" ~ + " Abstract model violation: Lines may not contain higher-level structural elements such as div, p, or ab, unless p is a child of figure or note, or is a descendant of floatingText.\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ], + att.global.attributes, + att.declaring.attributes, + att.fragmentable.attributes, + att.written.attributes, + empty + } +foreign = + + ## (foreign) identifies a word or phrase as belonging to some language other than that of the surrounding text. [3.3.2.1. Foreign Words or Expressions] + element foreign { macro.phraseSeq, att.global.attributes, empty } +emph = + + ## (emphasized) marks words or phrases which are stressed or emphasized for linguistic or rhetorical effect. [3.3.2.2. Emphatic Words and Phrases 3.3.2. Emphasis, Foreign Words, and Unusual Language] + element emph { macro.paraContent, att.global.attributes, empty } +hi = + + ## (highlighted) marks a word or phrase as graphically distinct from the surrounding text, for reasons concerning which no claim is made. [3.3.2.2. Emphatic Words and Phrases 3.3.2. Emphasis, Foreign Words, and Unusual Language] + element hi { + macro.paraContent, + att.global.attributes, + att.written.attributes, + empty + } +distinct = + + ## identifies any word or phrase which is regarded as linguistically distinct, for example as archaic, technical, dialectal, non-preferred, etc., or as forming part of a sublanguage. [3.3.2.3. Other Linguistically Distinct Material] + element distinct { + macro.phraseSeq, + att.global.attributes, + att.typed.attribute.subtype, + + ## specifies the sublanguage or register to which the word or phrase is being assigned + attribute type { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }?, + + ## specifies how the phrase is distinct diachronically + attribute time { xsd:string }?, + + ## specifies how the phrase is distinct diatopically + attribute space { xsd:string }?, + + ## specifies how the phrase is distinct diastratically + attribute social { xsd:string }?, + empty + } +said = + + ## (speech or thought) indicates passages thought or spoken aloud, whether explicitly indicated in the source or not, whether directly or indirectly reported, whether by real people or fictional characters. [3.3.3. Quotation] + element said { + macro.specialPara, + att.global.attributes, + att.ascribed.directed.attributes, + + ## may be used to indicate whether the quoted matter is regarded as having been vocalized or signed. + attribute aloud { + xsd:boolean + | ( + ## + "unknown" + | + ## + "inapplicable") + }?, + + ## may be used to indicate whether the quoted matter is regarded as direct or indirect speech. + [ a:defaultValue = "true" ] + attribute direct { + xsd:boolean + | ( + ## + "unknown" + | + ## + "inapplicable") + }?, + empty + } +quote = + + ## (quotation) contains a phrase or passage attributed by the narrator or author to some agency external to the text. [3.3.3. Quotation 4.3.1. Grouped Texts] + element quote { + macro.specialPara, + att.global.attributes, + att.typed.attributes, + att.msExcerpt.attributes, + att.notated.attributes, + empty + } +q = + + ## (quoted) contains material which is distinguished from the surrounding text using quotation marks or a similar method, for any one of a variety of reasons including, but not limited to: direct speech or thought, technical terms or jargon, authorial distance, quotations from elsewhere, and passages that are mentioned but not used. [3.3.3. Quotation] + element q { + macro.specialPara, + att.global.attributes, + att.ascribed.directed.attributes, + + ## (type) may be used to indicate whether the offset passage is spoken or thought, or to characterize it more finely. + ## Suggested values include: 1] spoken (spoken); 2] thought (thought); 3] written (written); 4] soCalled (so called); 5] foreign (foreign); 6] distinct (distinct); 7] term; 8] emph (emph); 9] mentioned (mentioned) + attribute type { + + ## (spoken) representation of speech + "spoken" + | + ## (thought) representation of thought, e.g. internal monologue + "thought" + | + ## (written) quotation from a written source + "written" + | + ## (so called) authorial distance + "soCalled" + | + ## (foreign) + "foreign" + | + ## (distinct) linguistically distinct + "distinct" + | + ## technical term + "term" + | + ## (emph) rhetorically emphasized + "emph" + | + ## (mentioned) refering to itself, not its normal referent + "mentioned" + | xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }?, + empty + } +cit = + + ## (cited quotation) contains a quotation from some other document, together with a bibliographic reference to its source. In a dictionary it may contain an example text with at least one occurrence of the word form, used in the sense being described, or a translation of the headword, or an example. [3.3.3. Quotation 4.3.1. Grouped Texts 9.3.5.1. Examples] + element cit { + (model.biblLike + | model.egLike + | model.entryPart + | model.global + | model.graphicLike + | model.ptrLike + | model.attributable + | pc + | q)+, + att.global.attributes, + att.typed.attributes, + empty + } +mentioned = + + ## marks words or phrases mentioned, not used. [3.3.3. Quotation] + element mentioned { macro.phraseSeq, att.global.attributes, empty } +soCalled = + + ## (so called) contains a word or phrase for which the author or narrator indicates a disclaiming of responsibility, for example by the use of scare quotes or italics. [3.3.3. Quotation] + element soCalled { macro.phraseSeq, att.global.attributes, empty } +desc = + + ## (description) contains a short description of the purpose, function, or use of its parent element, or when the parent is a documentation element, describes or defines the object being documented. [22.4.1. Description of Components] + element desc { + macro.limitedContent + >> sch:pattern [ + id = + "tei_all-desc-deprecationInfo-only-in-deprecated-constraint-rule-11" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:desc[ @type eq 'deprecationInfo']" + "\x{a}" ~ + " " + sch:assert [ + test = "../@validUntil" + "Information about a\x{a}" ~ + " deprecation should only be present in a specification element\x{a}" ~ + " that is being deprecated: that is, only an element that has a\x{a}" ~ + " @validUntil attribute should have a child .' + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ], + att.global.attributes, + att.translatable.attributes, + att.typed.attribute.subtype, + + ## characterizes the element in some sense, using any convenient classification scheme or typology. + ## Suggested values include: 1] deprecationInfo (deprecation information) + attribute type { + + ## (deprecation + ## information) This element describes why or how its parent element is being deprecated, typically including recommendations for alternate encoding. + "deprecationInfo" + | xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }?, + empty + } +gloss = + + ## (gloss) identifies a phrase or word used to provide a gloss or definition for some other word or phrase. [3.4.1. Terms and Glosses 22.4.1. Description of Components] + element gloss { + macro.phraseSeq, + att.global.attributes, + att.declaring.attributes, + att.translatable.attributes, + att.typed.attributes, + att.pointing.attributes, + att.cReferencing.attributes, + empty + } +term = + + ## (term) contains a single-word, multi-word, or symbolic designation which is regarded as a technical term. [3.4.1. Terms and Glosses] + element term { + macro.phraseSeq, + att.global.attributes, + att.declaring.attributes, + att.pointing.attributes, + att.typed.attributes, + att.canonical.attributes, + att.sortable.attributes, + att.cReferencing.attributes, + empty + } +ruby = + + ## (ruby container) contains a passage of base text along with its associated ruby gloss(es). [3.4.2. Ruby Annotations] + element ruby { + (rb, rt+), att.global.attributes, att.typed.attributes, empty + } +rb = + + ## (ruby base) contains the base text annotated by a ruby gloss. [3.4.2. Ruby Annotations] + element rb { + macro.phraseSeq, att.global.attributes, att.typed.attributes, empty + } +rt = + + ## (ruby text) contains a ruby text, an annotation closely associated with a passage of the main text. [3.4.2. Ruby Annotations] + element rt { + macro.phraseSeq, + att.global.attributes, + att.typed.attributes, + att.placement.attributes, + att.transcriptional.attributes, + ( + ## supplies a pointer to the base being glossed by this ruby text. + attribute target { + xsd:anyURI { pattern = "\S+" } + }?) + >> sch:pattern [ + id = "tei_all-rt-target-rt-target-not-span-constraint-report-8" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:rt/@target" + "\x{a}" ~ + " " + sch:report [ + test = "../@from | ../@to" + "When target= is\x{a}" ~ + " present, neither from= nor to= should be." + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ], + ( + ## points to the starting point of the span of text being glossed by this ruby text. + attribute from { + xsd:anyURI { pattern = "\S+" } + }?) + >> sch:pattern [ + id = "tei_all-rt-from-rt-from-constraint-assert-7" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:rt/@from" + "\x{a}" ~ + " " + sch:assert [ + test = "../@to" + "When from= is present, the to=\x{a}" ~ + " attribute of " + sch:name [ ] + " is required." + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ], + ( + ## points to the ending point of the span of text being glossed. + attribute to { + xsd:anyURI { pattern = "\S+" } + }?) + >> sch:pattern [ + id = "tei_all-rt-to-rt-to-constraint-assert-8" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:rt/@to" + "\x{a}" ~ + " " + sch:assert [ + test = "../@from" + "When to= is present, the from=\x{a}" ~ + " attribute of " + sch:name [ ] + " is required." + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ], + empty + } +sic = + + ## (Latin for thus or so) contains text reproduced although apparently incorrect or inaccurate. [3.5.1. Apparent Errors] + element sic { macro.paraContent, att.global.attributes, empty } +corr = + + ## (correction) contains the correct form of a passage apparently erroneous in the copy text. [3.5.1. Apparent Errors] + element corr { + macro.paraContent, + att.global.attributes, + att.editLike.attributes, + att.typed.attributes, + empty + } +choice = + + ## (choice) groups a number of alternative encodings for the same point in a text. [3.5. Simple Editorial Changes] + element choice { + (model.choicePart | choice)+, att.global.attributes, empty + } +reg = + + ## (regularization) contains a reading which has been regularized or normalized in some sense. [3.5.2. Regularization and + ## Normalization 12. Critical Apparatus] + element reg { + macro.paraContent, + att.global.attributes, + att.editLike.attributes, + att.typed.attributes, + empty + } +orig = + + ## (original form) contains a reading which is marked as following the original, rather than being normalized or corrected. [3.5.2. Regularization and + ## Normalization 12. Critical Apparatus] + element orig { macro.paraContent, att.global.attributes, empty } +gap = + + ## (gap) indicates a point where material has been omitted in a transcription, whether for editorial reasons described in the TEI header, as part of sampling practice, or because the material is illegible, invisible, or inaudible. [3.5.3. Additions, Deletions, and Omissions] + element gap { + (model.descLike | model.certLike)*, + att.global.attributes, + att.timed.attributes, + att.editLike.attributes, + att.dimensions.attributes, + + ## (reason) gives the reason for omission + ## Suggested values include: 1] cancelled (cancelled); 2] deleted (deleted); 3] editorial (editorial); 4] illegible (illegible); 5] inaudible (inaudible); 6] irrelevant (irrelevant); 7] sampling (sampling) + attribute reason { + list { + ( + ## (cancelled) + "cancelled" + | + ## (deleted) + "deleted" + | + ## (editorial) for features omitted from transcription due to editorial policy + "editorial" + | + ## (illegible) + "illegible" + | + ## (inaudible) + "inaudible" + | + ## (irrelevant) + "irrelevant" + | + ## (sampling) + "sampling" + | xsd:token { pattern = "[^\p{C}\p{Z}]+" })+ + } + }?, + + ## (agent) in the case of text omitted because of damage, categorizes the cause of the damage, if it can be identified. + ## Sample values include: 1] rubbing (rubbing); 2] mildew (mildew); 3] smoke (smoke) + attribute agent { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }?, + empty + } +ellipsis = + + ## (deliberately marked omission) indicates a purposeful marking in the source document signalling that content has been omitted, and may also supply or describe the omitted content. [3.5.3. Additions, Deletions, and Omissions] + element ellipsis { + (metamark, model.descLike?, supplied?), + att.global.attributes, + att.dimensions.attributes, + att.timed.attributes, + empty + } +add = + + ## (addition) contains letters, words, or phrases inserted in the source text by an author, scribe, or a previous annotator or corrector. [3.5.3. Additions, Deletions, and Omissions] + element add { + macro.paraContent, + att.global.attributes, + att.transcriptional.attributes, + att.placement.attributes, + att.typed.attributes, + att.dimensions.attributes, + empty + } +del = + + ## (deletion) contains a letter, word, or passage deleted, marked as deleted, or otherwise indicated as superfluous or spurious in the copy text by an author, scribe, or a previous annotator or corrector. [3.5.3. Additions, Deletions, and Omissions] + element del { + macro.paraContent, + att.global.attributes, + att.transcriptional.attributes, + att.typed.attributes, + att.dimensions.attributes, + empty + } +unclear = + + ## (unclear) contains a word, phrase, or passage which cannot be transcribed with certainty because it is illegible or inaudible in the source. [11.3.3.1. Damage, Illegibility, and Supplied Text 3.5.3. Additions, Deletions, and Omissions] + element unclear { + macro.paraContent, + att.global.attributes, + att.editLike.attributes, + att.dimensions.attributes, + + ## indicates why the material is hard to transcribe. + ## Suggested values include: 1] illegible (illegible); 2] inaudible (inaudible); 3] faded (faded); 4] background_noise (background noise); 5] eccentric_ductus (eccentric ductus) + attribute reason { + list { + ( + ## (illegible) + "illegible" + | + ## (inaudible) + "inaudible" + | + ## (faded) + "faded" + | + ## (background noise) + "background_noise" + | + ## (eccentric ductus) indicates illegibility due to an unusual, awkward, or incompetent execution of a glyph or glyphs + "eccentric_ductus" + | xsd:token { pattern = "[^\p{C}\p{Z}]+" })+ + } + }?, + + ## Where the difficulty in transcription arises from damage, categorizes the cause of the damage, if it can be identified. + ## Sample values include: 1] rubbing; 2] mildew; 3] smoke + attribute agent { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }?, + empty + } +name = + + ## (name, proper noun) contains a proper noun or noun phrase. [3.6.1. Referring Strings] + element name { + macro.phraseSeq, + att.global.attributes, + att.personal.attributes, + att.datable.attributes, + att.editLike.attributes, + att.typed.attributes, + empty + } +rs = + + ## (referencing string) contains a general purpose name or referring string. [13.2.1. Personal Names 3.6.1. Referring Strings] + element rs { + macro.phraseSeq, + att.global.attributes, + att.naming.attributes, + att.typed.attributes, + empty + } +email = + + ## (electronic mail address) contains an email address identifying a location to which email messages can be delivered. [3.6.2. Addresses] + element email { macro.phraseSeq, att.global.attributes, empty } +address = + + ## (address) contains a postal address, for example of a publisher, an organization, or an individual. [3.6.2. Addresses 2.2.4. Publication, Distribution, Licensing, etc. 3.12.2.4. Imprint, Size of a Document, and Reprint Information] + element address { + (model.global*, (model.addrPart, model.global*)+), + att.global.attributes, + empty + } +addrLine = + + ## (address line) contains one line of a postal address. [3.6.2. Addresses 2.2.4. Publication, Distribution, Licensing, etc. 3.12.2.4. Imprint, Size of a Document, and Reprint Information] + element addrLine { macro.phraseSeq, att.global.attributes, empty } +street = + + ## contains a full street address including any name or number identifying a building as well as the name of the street or route on which it is located. [3.6.2. Addresses] + element street { macro.phraseSeq, att.global.attributes, empty } +postCode = + + ## (postal code) contains a numerical or alphanumeric code used as part of a postal address to simplify sorting or delivery of mail. [3.6.2. Addresses] + element postCode { text, att.global.attributes, empty } +postBox = + + ## (postal box or post office box) contains a number or other identifier for some postal delivery point other than a street address. [3.6.2. Addresses] + element postBox { text, att.global.attributes, empty } +num = + + ## (number) contains a number, written in any form. [3.6.3. Numbers and + ## Measures] + element num { + macro.phraseSeq, + att.global.attributes, + att.typed.attribute.subtype, + att.ranging.attributes, + + ## indicates the type of numeric value. + ## Suggested values include: 1] cardinal; 2] ordinal; 3] fraction; 4] percentage + attribute type { + + ## absolute number, e.g. 21, 21.5 + "cardinal" + | + ## ordinal number, e.g. 21st + "ordinal" + | + ## fraction, e.g. one half or three-quarters + "fraction" + | + ## a percentage + "percentage" + | xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }?, + + ## supplies the value of the number in standard form. + attribute value { + xsd:double + | xsd:token { pattern = "(\-?[\d]+/\-?[\d]+)" } + | xsd:decimal + }?, + empty + } +measure = + + ## (measure) contains a word or phrase referring to some quantity of an object or commodity, usually comprising a number, a unit, and a commodity name. [3.6.3. Numbers and + ## Measures] + element measure { + macro.phraseSeq, + att.global.attributes, + att.typed.attribute.subtype, + att.measurement.attributes, + att.ranging.attributes, + + ## specifies the type of measurement in any convenient typology. + attribute type { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }?, + empty + } +measureGrp = + + ## (measure group) contains a group of dimensional specifications which relate to the same object, for example the height and width of a manuscript page. [10.3.4. Dimensions] + element measureGrp { + (text | model.gLike | model.measureLike)*, + att.global.attributes, + att.measurement.attributes, + att.typed.attributes, + empty + } +unit = + + ## contains a symbol, a word or a phrase referring to a unit of measurement in any kind of formal or informal system. [3.6.3. Numbers and + ## Measures] + element unit { + macro.phraseSeq, + att.global.attributes, + att.typed.attributes, + att.measurement.attributes, + empty + } +date = + + ## (date) contains a date in any format. [3.6.4. Dates and Times 2.2.4. Publication, Distribution, Licensing, etc. 2.6. The Revision Description 3.12.2.4. Imprint, Size of a Document, and Reprint Information 15.2.3. The Setting Description 13.4. Dates] + element date { + (text | model.gLike | model.phrase | model.global)*, + att.global.attributes, + att.canonical.attributes, + att.datable.attributes, + att.duration.attributes, + att.editLike.attributes, + att.dimensions.attributes, + att.typed.attributes, + empty + } +time = + + ## (time) contains a phrase defining a time of day in any format. [3.6.4. Dates and Times] + element time { + (text | model.gLike | model.phrase | model.global)*, + att.global.attributes, + att.datable.attributes, + att.canonical.attributes, + att.duration.attributes, + att.editLike.attributes, + att.dimensions.attributes, + att.typed.attributes, + empty + } +abbr = + + ## (abbreviation) contains an abbreviation of any sort. [3.6.5. Abbreviations and Their Expansions] + element abbr { + macro.phraseSeq, + att.global.attributes, + att.typed.attribute.subtype, + + ## (type) allows the encoder to classify the abbreviation according to some convenient typology. + ## Sample values include: 1] suspension (suspension); 2] contraction (contraction); 3] brevigraph; 4] superscription (superscription); 5] acronym (acronym); 6] title (title); 7] organization (organization); 8] geographic (geographic) + attribute type { + xsd:token { pattern = "[^\p{C}\p{Z}]+" } + }?, + empty + } +expan = + + ## (expansion) contains the expansion of an abbreviation. [3.6.5. Abbreviations and Their Expansions] + element expan { + macro.phraseSeq, + att.global.attributes, + att.editLike.attributes, + empty + } +ptr = + + ## (pointer) defines a pointer to another location. [3.7. Simple Links and Cross-References 16.1. Links] + element ptr { + empty + >> sch:pattern [ + id = "tei_all-ptr-ptrAtts-constraint-report-9" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:ptr" + "\x{a}" ~ + " " + sch:report [ + test = "@target and @cRef" + "Only one of the\x{a}" ~ + "attributes @target and @cRef may be supplied on " + sch:name [ ] + "." + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ], + att.cReferencing.attributes, + att.declaring.attributes, + att.global.attributes, + att.internetMedia.attributes, + att.pointing.attributes, + att.typed.attributes, + empty + } +ref = + + ## (reference) defines a reference to another location, possibly modified by additional text or comment. [3.7. Simple Links and Cross-References 16.1. Links] + element ref { + macro.paraContent + >> sch:pattern [ + id = "tei_all-ref-refAtts-constraint-report-10" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:ref" + "\x{a}" ~ + " " + sch:report [ + test = "@target and @cRef" + "Only one of the\x{a}" ~ + " attributes @target' and @cRef' may be supplied on " + sch:name [ ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ], + att.cReferencing.attributes, + att.declaring.attributes, + att.global.attributes, + att.internetMedia.attributes, + att.pointing.attributes, + att.typed.attributes, + empty + } +\list = + + ## (list) contains any sequence of items organized as a list. [3.8. Lists] + element list { + ((model.divTop | model.global | desc*)*, + ((item, model.global*)+ + | (headLabel?, + headItem?, + (label, model.global*, item, model.global*)+)), + (model.divBottom, model.global*)*) + >> sch:pattern [ + id = + "tei_all-list-gloss-list-must-have-labels-constraint-rule-12" + "\x{a}" ~ + " " + sch:rule [ + context = "tei:list[@type='gloss']" + "\x{a}" ~ + " " + sch:assert [ + test = "tei:label" + 'The content of a "gloss" list should include a sequence of one or more pairs of a label element followed by an item element' + ] + "\x{a}" ~ + " " + ] + "\x{a}" ~ + " " + ], + att.global.attributes, + att.sortable.attributes, + att.typed.attribute.subtype, + + ## (type) describes the nature of the items in the list. + ## Suggested values include: 1] gloss (gloss); 2] index (index); 3] instructions (instructions); 4] litany (litany); 5] syllogism (syllogism) + attribute type { + [ + a:documentation [ + "(gloss) each list item glosses some term or concept, which is given by a " + ns1:code [ "