Newer
Older
libconsulte / etc / Pub2TEI / Schemas / IstexSchema.rnc
@Romain Loth Romain Loth on 29 Oct 2015 222 KB Add 'etc/Pub2TEI/' from commit '5ff9187'
default namespace = "http://www.tei-c.org/ns/1.0"
namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
namespace ns1 = "http://www.isocat.org/ns/dcr"
namespace ns2 = "http://www.w3.org/1998/Math/MathML"
namespace ns3 = "http://www.elsevier.com/xml/ja/dtd"
namespace rng = "http://relaxng.org/ns/structure/1.0"
namespace sch = "http://purl.oclc.org/dsdl/schematron"
namespace xlink = "http://www.w3.org/1999/xlink"

# Schema generated from ODD source 2015-03-13T23:00:24Z. .
# TEI Edition: Version 2.7.0. Last updated on
#	16th September 2014, revision 13036
# TEI Edition Location: http://www.tei-c.org/Vault/P5/Version 2.7.0/
#

#
div {
  div {
    math_XLINK.xmlns.attrib = empty
    MATHML.xmlns.extra.attrib = math_XLINK.xmlns.attrib
    MATHML.xmlns.attrib = empty, MATHML.xmlns.extra.attrib
  }
  MATHML.NamespaceDecl.attrib = MATHML.xmlns.attrib
  MATHML.Common.attrib =
    MATHML.NamespaceDecl.attrib,
    attribute xlink:href { text }?,
    attribute xlink:type { text }?,
    attribute class { text }?,
    attribute style { text }?,
    attribute id { xsd:ID }?,
    attribute xref { xsd:IDREF }?,
    attribute other { text }?
  mathml.att-fontsize = attribute fontsize { text }?
  mathml.att-fontweight = attribute fontweight { "normal" | "bold" }?
  mathml.att-fontstyle = attribute fontstyle { "normal" | "italic" }?
  mathml.att-fontfamily = attribute fontfamily { text }?
  mathml.att-color = attribute color { text }?
  mathml.att-mathvariant = attribute mathvariant { text }?
  mathml.att-mathsize = attribute mathsize { text }?
  mathml.att-mathcolor = attribute mathcolor { text }?
  mathml.att-mathbackground = attribute mathbackground { text }?
  mathml.att-fontinfo =
    mathml.att-fontsize,
    mathml.att-fontweight,
    mathml.att-fontstyle,
    mathml.att-fontfamily,
    mathml.att-color,
    mathml.att-mathvariant,
    mathml.att-mathsize,
    mathml.att-mathcolor,
    mathml.att-mathbackground
  mathml.att-form = attribute form { "prefix" | "infix" | "postfix" }?
  mathml.att-fence = attribute fence { "true" | "false" }?
  mathml.att-separator = attribute separator { "true" | "false" }?
  mathml.att-lspace = attribute lspace { text }?
  mathml.att-rspace = attribute rspace { text }?
  mathml.att-stretchy = attribute stretchy { "true" | "false" }?
  mathml.att-symmetric = attribute symmetric { "true" | "false" }?
  mathml.att-maxsize = attribute maxsize { text }?
  mathml.att-minsize = attribute minsize { text }?
  mathml.att-largeop = attribute largeop { "true" | "false" }?
  mathml.att-movablelimits =
    attribute movablelimits { "true" | "false" }?
  mathml.att-accent = attribute accent { "true" | "false" }?
  mathml.att-opinfo =
    mathml.att-form,
    mathml.att-fence,
    mathml.att-separator,
    mathml.att-lspace,
    mathml.att-rspace,
    mathml.att-stretchy,
    mathml.att-symmetric,
    mathml.att-maxsize,
    mathml.att-minsize,
    mathml.att-largeop,
    mathml.att-movablelimits,
    mathml.att-accent
  mathml.att-width = attribute width { text }?
  mathml.att-height = attribute height { text }?
  mathml.att-depth = attribute depth { text }?
  mathml.att-linebreak = attribute linebreak { text }?
  mathml.att-sizeinfo =
    mathml.att-width, mathml.att-height, mathml.att-depth
  mathml.att-lquote = attribute lquote { text }?
  mathml.att-rquote = attribute rquote { text }?
  mathml.att-linethickness = attribute linethickness { text }?
  mathml.att-scriptlevel = attribute scriptlevel { text }?
  mathml.att-displaystyle = attribute displaystyle { "true" | "false" }?
  mathml.att-scriptsizemultiplier =
    attribute scriptsizemultiplier { text }?
  mathml.att-scriptminsize = attribute scriptminsize { text }?
  mathml.att-background = attribute background { text }?
  mathml.att-veryverythinmathspace =
    attribute veryverythinmathspace { text }?
  mathml.att-verythinmathspace = attribute verythinmathspace { text }?
  mathml.att-thinmathspace = attribute thinmathspace { text }?
  mathml.att-mediummathspace = attribute mediummathspace { text }?
  mathml.att-thickmathspace = attribute thickmathspace { text }?
  mathml.att-verythickmathspace = attribute verythickmathspace { text }?
  mathml.att-veryverythickmathspace =
    attribute veryverythickmathspace { text }?
  mathml.att-open = attribute open { text }?
  mathml.att-close = attribute close { text }?
  mathml.att-separators = attribute separators { text }?
  mathml.att-subscriptshift = attribute subscriptshift { text }?
  mathml.att-superscriptshift = attribute superscriptshift { text }?
  mathml.att-accentunder = attribute accentunder { "true" | "false" }?
  mathml.att-align = attribute align { text }?
  mathml.att-numalign = attribute numalign { text }?
  mathml.att-denomalign = attribute denomalign { text }?
  mathml.att-rowalign = attribute rowalign { text }?
  mathml.att-columnalign = attribute columnalign { text }?
  mathml.att-columnwidth = attribute columnwidth { text }?
  mathml.att-groupalign = attribute groupalign { text }?
  mathml.att-alignmentscope = attribute alignmentscope { text }?
  mathml.att-rowspacing = attribute rowspacing { text }?
  mathml.att-columnspacing = attribute columnspacing { text }?
  mathml.att-rowlines = attribute rowlines { text }?
  mathml.att-columnlines = attribute columnlines { text }?
  mathml.att-frame = attribute frame { "none" | "solid" | "dashed" }?
  mathml.att-side =
    attribute side {
      "left" | "right" | "leftoverlap" | "rightoverlap"
    }?
  mathml.att-framespacing = attribute framespacing { text }?
  mathml.att-equalrows = attribute equalrows { text }?
  mathml.att-equalcolumns = attribute equalcolumns { text }?
  mathml.att-tableinfo =
    mathml.att-align,
    mathml.att-rowalign,
    mathml.att-columnalign,
    mathml.att-columnwidth,
    mathml.att-groupalign,
    mathml.att-alignmentscope,
    mathml.att-side,
    mathml.att-rowspacing,
    mathml.att-columnspacing,
    mathml.att-rowlines,
    mathml.att-columnlines,
    mathml.att-width,
    mathml.att-frame,
    mathml.att-framespacing,
    mathml.att-equalrows,
    mathml.att-equalcolumns,
    mathml.att-displaystyle
  mathml.att-rowspan = attribute rowspan { text }?
  mathml.att-columnspan = attribute columnspan { text }?
  mathml.att-edge = attribute edge { "left" | "right" }?
  mathml.att-actiontype = attribute actiontype { text }?
  mathml.att-selection = attribute selection { text }?
  mathml.att-name = attribute name { text }?
  mathml.att-alt = attribute alt { text }?
  mathml.att-index = attribute index { text }?
  mathml.att-bevelled = attribute bevelled { text }?
  mathml.ptoken =
    mathml.mi | mathml.mn | mathml.mo | mathml.mtext | mathml.ms
  mathml.attlist-mi &= MATHML.Common.attrib, mathml.att-fontinfo
  mathml.attlist-mn &= MATHML.Common.attrib, mathml.att-fontinfo
  mathml.attlist-mo &=
    MATHML.Common.attrib, mathml.att-fontinfo, mathml.att-opinfo
  mathml.attlist-mtext &= MATHML.Common.attrib, mathml.att-fontinfo
  mathml.attlist-ms &=
    MATHML.Common.attrib,
    mathml.att-fontinfo,
    mathml.att-lquote,
    mathml.att-rquote
  mathml.petoken = mathml.mspace
  mathml.mspace = element ns2:mspace { mathml.attlist-mspace, empty }
  mathml.any |= mathml.mspace
  mathml.attlist-mspace &=
    mathml.att-sizeinfo, mathml.att-linebreak, MATHML.Common.attrib
  mathml.pgenschema =
    mathml.mrow
    | mathml.mfrac
    | mathml.msqrt
    | mathml.mroot
    | mathml.menclose
    | mathml.mstyle
    | mathml.merror
    | mathml.mpadded
    | mathml.mphantom
    | mathml.mfenced
  mathml.attlist-mrow &= MATHML.Common.attrib
  mathml.attlist-mfrac &=
    MATHML.Common.attrib,
    mathml.att-bevelled,
    mathml.att-numalign,
    mathml.att-denomalign,
    mathml.att-linethickness
  mathml.attlist-msqrt &= MATHML.Common.attrib
  mathml.attlist-menclose &=
    MATHML.Common.attrib,
    [ a:defaultValue = "longdiv" ] attribute notation { text }?
  mathml.attlist-mroot &= MATHML.Common.attrib
  mathml.attlist-mstyle &=
    MATHML.Common.attrib,
    mathml.att-fontinfo,
    mathml.att-opinfo,
    mathml.att-lquote,
    mathml.att-rquote,
    mathml.att-linethickness,
    mathml.att-scriptlevel,
    mathml.att-scriptsizemultiplier,
    mathml.att-scriptminsize,
    mathml.att-background,
    mathml.att-veryverythinmathspace,
    mathml.att-verythinmathspace,
    mathml.att-thinmathspace,
    mathml.att-mediummathspace,
    mathml.att-thickmathspace,
    mathml.att-verythickmathspace,
    mathml.att-veryverythickmathspace,
    mathml.att-open,
    mathml.att-close,
    mathml.att-separators,
    mathml.att-subscriptshift,
    mathml.att-superscriptshift,
    mathml.att-accentunder,
    mathml.att-tableinfo,
    mathml.att-rowspan,
    mathml.att-columnspan,
    mathml.att-edge,
    mathml.att-actiontype,
    mathml.att-selection
  mathml.attlist-merror &= MATHML.Common.attrib
  mathml.attlist-mpadded &=
    MATHML.Common.attrib, mathml.att-sizeinfo, mathml.att-lspace
  mathml.attlist-mphantom &= MATHML.Common.attrib
  mathml.attlist-mfenced &=
    MATHML.Common.attrib,
    mathml.att-open,
    mathml.att-close,
    mathml.att-separators
  mathml.pscrschema =
    mathml.msub
    | mathml.msup
    | mathml.msubsup
    | mathml.munder
    | mathml.mover
    | mathml.munderover
    | mathml.mmultiscripts
  mathml.attlist-msub &= MATHML.Common.attrib, mathml.att-subscriptshift
  mathml.attlist-msup &=
    MATHML.Common.attrib, mathml.att-superscriptshift
  mathml.attlist-msubsup &=
    MATHML.Common.attrib,
    mathml.att-subscriptshift,
    mathml.att-superscriptshift
  mathml.attlist-munder &= MATHML.Common.attrib, mathml.att-accentunder
  mathml.attlist-mover &= MATHML.Common.attrib, mathml.att-accent
  mathml.attlist-munderover &=
    MATHML.Common.attrib, mathml.att-accent, mathml.att-accentunder
  mathml.attlist-mmultiscripts &=
    MATHML.Common.attrib,
    mathml.att-subscriptshift,
    mathml.att-superscriptshift
  mathml.pscreschema = mathml.mprescripts | mathml.none
  mathml.mprescripts =
    element ns2:mprescripts { mathml.attlist-mprescripts, empty }
  mathml.any |= mathml.mprescripts
  mathml.attlist-mprescripts &= MATHML.xmlns.attrib
  mathml.none = element ns2:none { mathml.attlist-none, empty }
  mathml.any |= mathml.none
  mathml.attlist-none &= MATHML.xmlns.attrib
  mathml.ptabschema =
    mathml.mtable | mathml.mtr | mathml.mlabeledtr | mathml.mtd
  mathml.attlist-mtable &= MATHML.Common.attrib, mathml.att-tableinfo
  mathml.attlist-mtr &=
    MATHML.Common.attrib,
    mathml.att-rowalign,
    mathml.att-columnalign,
    mathml.att-groupalign
  mathml.attlist-mlabeledtr &=
    MATHML.Common.attrib,
    mathml.att-rowalign,
    mathml.att-columnalign,
    mathml.att-groupalign
  mathml.attlist-mtd &=
    MATHML.Common.attrib,
    mathml.att-rowalign,
    mathml.att-columnalign,
    mathml.att-groupalign,
    mathml.att-rowspan,
    mathml.att-columnspan
  mathml.plschema =
    mathml.pgenschema | mathml.pscrschema | mathml.ptabschema
  mathml.peschema = mathml.maligngroup | mathml.malignmark
  mathml.malignmark =
    element ns2:malignmark { mathml.attlist-malignmark, empty }
  mathml.any |= mathml.malignmark
  mathml.attlist-malignmark &= mathml.att-edge
  mathml.maligngroup =
    element ns2:maligngroup { mathml.attlist-maligngroup, empty }
  mathml.any |= mathml.maligngroup
  mathml.attlist-maligngroup &=
    MATHML.Common.attrib, mathml.att-groupalign
  mathml.mglyph = element ns2:mglyph { mathml.attlist-mglyph, empty }
  mathml.any |= mathml.mglyph
  mathml.attlist-mglyph &=
    mathml.att-alt, mathml.att-fontfamily, mathml.att-index
  mathml.pactions = mathml.maction
  mathml.attlist-maction &=
    MATHML.Common.attrib, mathml.att-actiontype, mathml.att-selection
  mathml.PresInCont =
    mathml.ptoken
    | mathml.petoken
    | mathml.plschema
    | mathml.peschema
    | mathml.pactions
  mathml.Presentation =
    mathml.ptoken
    | mathml.petoken
    | mathml.pscreschema
    | mathml.plschema
    | mathml.peschema
    | mathml.pactions
  mathml.att-base = [ a:defaultValue = "10" ] attribute base { text }?
  mathml.att-closure =
    [ a:defaultValue = "closed" ] attribute closure { text }?
  mathml.att-definition =
    [ a:defaultValue = "" ] attribute definitionURL { text }?
  mathml.att-encoding =
    [ a:defaultValue = "" ] attribute encoding { text }?
  mathml.att-nargs = [ a:defaultValue = "1" ] attribute nargs { text }?
  mathml.att-occurrence =
    [ a:defaultValue = "function-model" ] attribute occurrence { text }?
  mathml.att-order =
    [ a:defaultValue = "numeric" ] attribute order { text }?
  mathml.att-scope =
    [ a:defaultValue = "local" ] attribute scope { text }?
  mathml.att-type = attribute type { text }?
  mathml.ctoken = mathml.csymbol | mathml.ci | mathml.cn
  mathml.attlist-ci &=
    MATHML.Common.attrib,
    mathml.att-type,
    mathml.att-definition,
    mathml.att-encoding
  mathml.attlist-csymbol &=
    MATHML.Common.attrib,
    mathml.att-encoding,
    mathml.att-type,
    mathml.att-definition
  mathml.attlist-cn &=
    MATHML.Common.attrib,
    mathml.att-type,
    mathml.att-base,
    mathml.att-definition,
    mathml.att-encoding
  mathml.cspecial = mathml.apply | mathml.reln | mathml.lambda
  mathml.attlist-apply &= MATHML.Common.attrib
  mathml.attlist-reln &= MATHML.Common.attrib
  mathml.attlist-lambda &= MATHML.Common.attrib
  mathml.cother = mathml.condition | mathml.declare | mathml.sep
  mathml.attlist-condition &= MATHML.Common.attrib
  mathml.attlist-declare &=
    MATHML.Common.attrib,
    mathml.att-type,
    mathml.att-scope,
    mathml.att-nargs,
    mathml.att-occurrence,
    mathml.att-definition,
    mathml.att-encoding
  mathml.sep = element ns2:sep { mathml.attlist-sep, empty }
  mathml.any |= mathml.sep
  mathml.attlist-sep &= MATHML.xmlns.attrib
  mathml.csemantics =
    mathml.semantics | mathml.annotation | mathml.annotation-xml
  mathml.attlist-semantics &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.attlist-annotation &= MATHML.Common.attrib, mathml.att-encoding
  mathml.attlist-annotation-xml &=
    MATHML.Common.attrib, mathml.att-encoding
  mathml.cconstructor =
    mathml.interval
    | mathml.list
    | mathml.matrix
    | mathml.matrixrow
    | mathml.set
    | mathml.vector
    | mathml.piecewise
  mathml.attlist-interval &= MATHML.Common.attrib, mathml.att-closure
  mathml.attlist-set &= MATHML.Common.attrib, mathml.att-type
  mathml.attlist-list &= MATHML.Common.attrib, mathml.att-order
  mathml.attlist-vector &= MATHML.Common.attrib
  mathml.attlist-matrix &= MATHML.Common.attrib
  mathml.attlist-matrixrow &= MATHML.Common.attrib
  mathml.attlist-piecewise &= MATHML.Common.attrib
  mathml.attlist-piece &= MATHML.Common.attrib
  mathml.attlist-otherwise &= MATHML.Common.attrib
  mathml.c0ary =
    mathml.integers
    | mathml.reals
    | mathml.rationals
    | mathml.naturalnumbers
    | mathml.complexes
    | mathml.primes
    | mathml.exponentiale
    | mathml.imaginaryi
    | mathml.notanumber
    | mathml.true
    | mathml.false
    | mathml.emptyset
    | mathml.pi
    | mathml.eulergamma
    | mathml.infinity
  mathml.integers =
    element ns2:integers { mathml.attlist-integers, empty }
  mathml.any |= mathml.integers
  mathml.attlist-integers &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.reals = element ns2:reals { mathml.attlist-reals, empty }
  mathml.any |= mathml.reals
  mathml.attlist-reals &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.rationals =
    element ns2:rationals { mathml.attlist-rationals, empty }
  mathml.any |= mathml.rationals
  mathml.attlist-rationals &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.naturalnumbers =
    element ns2:naturalnumbers { mathml.attlist-naturalnumbers, empty }
  mathml.any |= mathml.naturalnumbers
  mathml.attlist-naturalnumbers &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.complexes =
    element ns2:complexes { mathml.attlist-complexes, empty }
  mathml.any |= mathml.complexes
  mathml.attlist-complexes &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.primes = element ns2:primes { mathml.attlist-primes, empty }
  mathml.any |= mathml.primes
  mathml.attlist-primes &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.exponentiale =
    element ns2:exponentiale { mathml.attlist-exponentiale, empty }
  mathml.any |= mathml.exponentiale
  mathml.attlist-exponentiale &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.imaginaryi =
    element ns2:imaginaryi { mathml.attlist-imaginaryi, empty }
  mathml.any |= mathml.imaginaryi
  mathml.attlist-imaginaryi &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.notanumber =
    element ns2:notanumber { mathml.attlist-notanumber, empty }
  mathml.any |= mathml.notanumber
  mathml.attlist-notanumber &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.true = element ns2:true { mathml.attlist-true, empty }
  mathml.any |= mathml.true
  mathml.attlist-true &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.false = element ns2:false { mathml.attlist-false, empty }
  mathml.any |= mathml.false
  mathml.attlist-false &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.emptyset =
    element ns2:emptyset { mathml.attlist-emptyset, empty }
  mathml.any |= mathml.emptyset
  mathml.attlist-emptyset &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.pi = element ns2:pi { mathml.attlist-pi, empty }
  mathml.any |= mathml.pi
  mathml.attlist-pi &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.eulergamma =
    element ns2:eulergamma { mathml.attlist-eulergamma, empty }
  mathml.any |= mathml.eulergamma
  mathml.attlist-eulergamma &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.infinity =
    element ns2:infinity { mathml.attlist-infinity, empty }
  mathml.any |= mathml.infinity
  mathml.attlist-infinity &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.cfuncop1ary =
    mathml.inverse
    | mathml.ident
    | mathml.domain
    | mathml.codomain
    | mathml.image
  mathml.inverse = element ns2:inverse { mathml.attlist-inverse, empty }
  mathml.any |= mathml.inverse
  mathml.attlist-inverse &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.domain = element ns2:domain { mathml.attlist-domain, empty }
  mathml.any |= mathml.domain
  mathml.attlist-domain &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.codomain =
    element ns2:codomain { mathml.attlist-codomain, empty }
  mathml.any |= mathml.codomain
  mathml.attlist-codomain &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.image = element ns2:image { mathml.attlist-image, empty }
  mathml.any |= mathml.image
  mathml.attlist-image &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.cfuncopnary = mathml.fn | mathml.compose
  mathml.attlist-fn &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.ident = element ns2:ident { mathml.attlist-ident, empty }
  mathml.any |= mathml.ident
  mathml.attlist-ident &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.compose = element ns2:compose { mathml.attlist-compose, empty }
  mathml.any |= mathml.compose
  mathml.attlist-compose &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.carithop1ary =
    mathml.abs
    | mathml.conjugate
    | mathml.exp
    | mathml.factorial
    | mathml.arg
    | mathml.real
    | mathml.imaginary
    | mathml.floor
    | mathml.ceiling
  mathml.exp = element ns2:exp { mathml.attlist-exp, empty }
  mathml.any |= mathml.exp
  mathml.attlist-exp &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.abs = element ns2:abs { mathml.attlist-abs, empty }
  mathml.any |= mathml.abs
  mathml.attlist-abs &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.arg = element ns2:arg { mathml.attlist-arg, empty }
  mathml.any |= mathml.arg
  mathml.attlist-arg &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.real = element ns2:real { mathml.attlist-real, empty }
  mathml.any |= mathml.real
  mathml.attlist-real &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.imaginary =
    element ns2:imaginary { mathml.attlist-imaginary, empty }
  mathml.any |= mathml.imaginary
  mathml.attlist-imaginary &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.conjugate =
    element ns2:conjugate { mathml.attlist-conjugate, empty }
  mathml.any |= mathml.conjugate
  mathml.attlist-conjugate &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.factorial =
    element ns2:factorial { mathml.attlist-factorial, empty }
  mathml.any |= mathml.factorial
  mathml.attlist-factorial &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.floor = element ns2:floor { mathml.attlist-floor, empty }
  mathml.any |= mathml.floor
  mathml.attlist-floor &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.ceiling = element ns2:ceiling { mathml.attlist-ceiling, empty }
  mathml.any |= mathml.ceiling
  mathml.attlist-ceiling &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.carithop1or2ary = mathml.minus
  mathml.minus = element ns2:minus { mathml.attlist-minus, empty }
  mathml.any |= mathml.minus
  mathml.attlist-minus &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.carithop2ary =
    mathml.quotient | mathml.divide | mathml.power | mathml.rem
  mathml.quotient =
    element ns2:quotient { mathml.attlist-quotient, empty }
  mathml.any |= mathml.quotient
  mathml.attlist-quotient &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.divide = element ns2:divide { mathml.attlist-divide, empty }
  mathml.any |= mathml.divide
  mathml.attlist-divide &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.power = element ns2:power { mathml.attlist-power, empty }
  mathml.any |= mathml.power
  mathml.attlist-power &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.rem = element ns2:rem { mathml.attlist-rem, empty }
  mathml.any |= mathml.rem
  mathml.attlist-rem &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.carithopnary =
    mathml.plus
    | mathml.times
    | mathml.max
    | mathml.min
    | mathml.gcd
    | mathml.lcm
  mathml.plus = element ns2:plus { mathml.attlist-plus, empty }
  mathml.any |= mathml.plus
  mathml.attlist-plus &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.max = element ns2:max { mathml.attlist-max, empty }
  mathml.any |= mathml.max
  mathml.attlist-max &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.min = element ns2:min { mathml.attlist-min, empty }
  mathml.any |= mathml.min
  mathml.attlist-min &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.times = element ns2:times { mathml.attlist-times, empty }
  mathml.any |= mathml.times
  mathml.attlist-times &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.gcd = element ns2:gcd { mathml.attlist-gcd, empty }
  mathml.any |= mathml.gcd
  mathml.attlist-gcd &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.lcm = element ns2:lcm { mathml.attlist-lcm, empty }
  mathml.any |= mathml.lcm
  mathml.attlist-lcm &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.carithoproot = mathml.root
  mathml.root = element ns2:root { mathml.attlist-root, empty }
  mathml.any |= mathml.root
  mathml.attlist-root &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.clogicopquant = mathml.exists | mathml.forall
  mathml.exists = element ns2:exists { mathml.attlist-exists, empty }
  mathml.any |= mathml.exists
  mathml.attlist-exists &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.forall = element ns2:forall { mathml.attlist-forall, empty }
  mathml.any |= mathml.forall
  mathml.attlist-forall &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.clogicopnary = mathml.and | mathml.or | mathml.xor
  mathml.and = element ns2:and { mathml.attlist-and, empty }
  mathml.any |= mathml.and
  mathml.attlist-and &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.or = element ns2:or { mathml.attlist-or, empty }
  mathml.any |= mathml.or
  mathml.attlist-or &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.xor = element ns2:xor { mathml.attlist-xor, empty }
  mathml.any |= mathml.xor
  mathml.attlist-xor &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.clogicop1ary = mathml.not
  mathml.not = element ns2:not { mathml.attlist-not, empty }
  mathml.any |= mathml.not
  mathml.attlist-not &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.clogicop2ary = mathml.implies
  mathml.implies = element ns2:implies { mathml.attlist-implies, empty }
  mathml.any |= mathml.implies
  mathml.attlist-implies &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.ccalcop =
    mathml.log
    | mathml.int
    | mathml.diff
    | mathml.partialdiff
    | mathml.divergence
    | mathml.grad
    | mathml.curl
    | mathml.laplacian
  mathml.divergence =
    element ns2:divergence { mathml.attlist-divergence, empty }
  mathml.any |= mathml.divergence
  mathml.attlist-divergence &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.grad = element ns2:grad { mathml.attlist-grad, empty }
  mathml.any |= mathml.grad
  mathml.attlist-grad &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.curl = element ns2:curl { mathml.attlist-curl, empty }
  mathml.any |= mathml.curl
  mathml.attlist-curl &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.laplacian =
    element ns2:laplacian { mathml.attlist-laplacian, empty }
  mathml.any |= mathml.laplacian
  mathml.attlist-laplacian &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.log = element ns2:log { mathml.attlist-log, empty }
  mathml.any |= mathml.log
  mathml.attlist-log &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.int = element ns2:int { mathml.attlist-int, empty }
  mathml.any |= mathml.int
  mathml.attlist-int &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.diff = element ns2:diff { mathml.attlist-diff, empty }
  mathml.any |= mathml.diff
  mathml.attlist-diff &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.partialdiff =
    element ns2:partialdiff { mathml.attlist-partialdiff, empty }
  mathml.any |= mathml.partialdiff
  mathml.attlist-partialdiff &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.ccalcop1ary = mathml.ln
  mathml.ln = element ns2:ln { mathml.attlist-ln, empty }
  mathml.any |= mathml.ln
  mathml.attlist-ln &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.csetop1ary = mathml.card
  mathml.card = element ns2:card { mathml.attlist-card, empty }
  mathml.any |= mathml.card
  mathml.attlist-card &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.csetop2ary = mathml.setdiff
  mathml.setdiff = element ns2:setdiff { mathml.attlist-setdiff, empty }
  mathml.any |= mathml.setdiff
  mathml.attlist-setdiff &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.csetopnary =
    mathml.union | mathml.intersect | mathml.cartesianproduct
  mathml.union = element ns2:union { mathml.attlist-union, empty }
  mathml.any |= mathml.union
  mathml.attlist-union &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.intersect =
    element ns2:intersect { mathml.attlist-intersect, empty }
  mathml.any |= mathml.intersect
  mathml.attlist-intersect &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.cartesianproduct =
    element ns2:cartesianproduct {
      mathml.attlist-cartesianproduct, empty
    }
  mathml.any |= mathml.cartesianproduct
  mathml.attlist-cartesianproduct &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.cseqop = mathml.sum | mathml.product | mathml.limit
  mathml.sum = element ns2:sum { mathml.attlist-sum, empty }
  mathml.any |= mathml.sum
  mathml.attlist-sum &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.product = element ns2:product { mathml.attlist-product, empty }
  mathml.any |= mathml.product
  mathml.attlist-product &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.limit = element ns2:limit { mathml.attlist-limit, empty }
  mathml.any |= mathml.limit
  mathml.attlist-limit &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.ctrigop =
    mathml.sin
    | mathml.cos
    | mathml.tan
    | mathml.sec
    | mathml.csc
    | mathml.cot
    | mathml.sinh
    | mathml.cosh
    | mathml.tanh
    | mathml.sech
    | mathml.csch
    | mathml.coth
    | mathml.arcsin
    | mathml.arccos
    | mathml.arctan
    | mathml.arccosh
    | mathml.arccot
    | mathml.arccoth
    | mathml.arccsc
    | mathml.arccsch
    | mathml.arcsec
    | mathml.arcsech
    | mathml.arcsinh
    | mathml.arctanh
  mathml.sin = element ns2:sin { mathml.attlist-sin, empty }
  mathml.any |= mathml.sin
  mathml.attlist-sin &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.cos = element ns2:cos { mathml.attlist-cos, empty }
  mathml.any |= mathml.cos
  mathml.attlist-cos &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.tan = element ns2:tan { mathml.attlist-tan, empty }
  mathml.any |= mathml.tan
  mathml.attlist-tan &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.sec = element ns2:sec { mathml.attlist-sec, empty }
  mathml.any |= mathml.sec
  mathml.attlist-sec &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.csc = element ns2:csc { mathml.attlist-csc, empty }
  mathml.any |= mathml.csc
  mathml.attlist-csc &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.cot = element ns2:cot { mathml.attlist-cot, empty }
  mathml.any |= mathml.cot
  mathml.attlist-cot &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.sinh = element ns2:sinh { mathml.attlist-sinh, empty }
  mathml.any |= mathml.sinh
  mathml.attlist-sinh &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.cosh = element ns2:cosh { mathml.attlist-cosh, empty }
  mathml.any |= mathml.cosh
  mathml.attlist-cosh &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.tanh = element ns2:tanh { mathml.attlist-tanh, empty }
  mathml.any |= mathml.tanh
  mathml.attlist-tanh &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.sech = element ns2:sech { mathml.attlist-sech, empty }
  mathml.any |= mathml.sech
  mathml.attlist-sech &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.csch = element ns2:csch { mathml.attlist-csch, empty }
  mathml.any |= mathml.csch
  mathml.attlist-csch &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.coth = element ns2:coth { mathml.attlist-coth, empty }
  mathml.any |= mathml.coth
  mathml.attlist-coth &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.arcsin = element ns2:arcsin { mathml.attlist-arcsin, empty }
  mathml.any |= mathml.arcsin
  mathml.attlist-arcsin &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.arccos = element ns2:arccos { mathml.attlist-arccos, empty }
  mathml.any |= mathml.arccos
  mathml.attlist-arccos &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.arctan = element ns2:arctan { mathml.attlist-arctan, empty }
  mathml.any |= mathml.arctan
  mathml.attlist-arctan &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.arccosh = element ns2:arccosh { mathml.attlist-arccosh, empty }
  mathml.any |= mathml.arccosh
  mathml.attlist-arccosh &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.arccot = element ns2:arccot { mathml.attlist-arccot, empty }
  mathml.any |= mathml.arccot
  mathml.attlist-arccot &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.arccoth = element ns2:arccoth { mathml.attlist-arccoth, empty }
  mathml.any |= mathml.arccoth
  mathml.attlist-arccoth &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.arccsc = element ns2:arccsc { mathml.attlist-arccsc, empty }
  mathml.any |= mathml.arccsc
  mathml.attlist-arccsc &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.arccsch = element ns2:arccsch { mathml.attlist-arccsch, empty }
  mathml.any |= mathml.arccsch
  mathml.attlist-arccsch &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.arcsec = element ns2:arcsec { mathml.attlist-arcsec, empty }
  mathml.any |= mathml.arcsec
  mathml.attlist-arcsec &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.arcsech = element ns2:arcsech { mathml.attlist-arcsech, empty }
  mathml.any |= mathml.arcsech
  mathml.attlist-arcsech &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.arcsinh = element ns2:arcsinh { mathml.attlist-arcsinh, empty }
  mathml.any |= mathml.arcsinh
  mathml.attlist-arcsinh &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.arctanh = element ns2:arctanh { mathml.attlist-arctanh, empty }
  mathml.any |= mathml.arctanh
  mathml.attlist-arctanh &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.cstatopnary =
    mathml.mean
    | mathml.sdev
    | mathml.variance
    | mathml.median
    | mathml.mode
  mathml.mean = element ns2:mean { mathml.attlist-mean, empty }
  mathml.any |= mathml.mean
  mathml.attlist-mean &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.sdev = element ns2:sdev { mathml.attlist-sdev, empty }
  mathml.any |= mathml.sdev
  mathml.attlist-sdev &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.variance =
    element ns2:variance { mathml.attlist-variance, empty }
  mathml.any |= mathml.variance
  mathml.attlist-variance &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.median = element ns2:median { mathml.attlist-median, empty }
  mathml.any |= mathml.median
  mathml.attlist-median &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.mode = element ns2:mode { mathml.attlist-mode, empty }
  mathml.any |= mathml.mode
  mathml.attlist-mode &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.cstatopmoment = mathml.moment
  mathml.moment = element ns2:moment { mathml.attlist-moment, empty }
  mathml.any |= mathml.moment
  mathml.attlist-moment &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.clalgop1ary = mathml.determinant | mathml.transpose
  mathml.determinant =
    element ns2:determinant { mathml.attlist-determinant, empty }
  mathml.any |= mathml.determinant
  mathml.attlist-determinant &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.transpose =
    element ns2:transpose { mathml.attlist-transpose, empty }
  mathml.any |= mathml.transpose
  mathml.attlist-transpose &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.clalgop2ary =
    mathml.vectorproduct | mathml.scalarproduct | mathml.outerproduct
  mathml.vectorproduct =
    element ns2:vectorproduct { mathml.attlist-vectorproduct, empty }
  mathml.any |= mathml.vectorproduct
  mathml.attlist-vectorproduct &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.scalarproduct =
    element ns2:scalarproduct { mathml.attlist-scalarproduct, empty }
  mathml.any |= mathml.scalarproduct
  mathml.attlist-scalarproduct &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.outerproduct =
    element ns2:outerproduct { mathml.attlist-outerproduct, empty }
  mathml.any |= mathml.outerproduct
  mathml.attlist-outerproduct &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.clalgopnary = mathml.selector
  mathml.selector =
    element ns2:selector { mathml.attlist-selector, empty }
  mathml.any |= mathml.selector
  mathml.attlist-selector &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.cgenrel2ary = mathml.neq | mathml.factorof
  mathml.neq = element ns2:neq { mathml.attlist-neq, empty }
  mathml.any |= mathml.neq
  mathml.attlist-neq &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.factorof =
    element ns2:factorof { mathml.attlist-factorof, empty }
  mathml.any |= mathml.factorof
  mathml.attlist-factorof &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.cgenrelnary =
    mathml.eq
    | mathml.leq
    | mathml.lt
    | mathml.geq
    | mathml.gt
    | mathml.equivalent
    | mathml.approx
  mathml.eq = element ns2:eq { mathml.attlist-eq, empty }
  mathml.any |= mathml.eq
  mathml.attlist-eq &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.equivalent =
    element ns2:equivalent { mathml.attlist-equivalent, empty }
  mathml.any |= mathml.equivalent
  mathml.attlist-equivalent &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.approx = element ns2:approx { mathml.attlist-approx, empty }
  mathml.any |= mathml.approx
  mathml.attlist-approx &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.gt = element ns2:gt { mathml.attlist-gt, empty }
  mathml.any |= mathml.gt
  mathml.attlist-gt &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.lt = element ns2:lt { mathml.attlist-lt, empty }
  mathml.any |= mathml.lt
  mathml.attlist-lt &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.geq = element ns2:geq { mathml.attlist-geq, empty }
  mathml.any |= mathml.geq
  mathml.attlist-geq &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.leq = element ns2:leq { mathml.attlist-leq, empty }
  mathml.any |= mathml.leq
  mathml.attlist-leq &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.csetrel2ary =
    mathml.in | mathml.notin | mathml.notsubset | mathml.notprsubset
  mathml.in = element ns2:in { mathml.attlist-in, empty }
  mathml.any |= mathml.in
  mathml.attlist-in &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.notin = element ns2:notin { mathml.attlist-notin, empty }
  mathml.any |= mathml.notin
  mathml.attlist-notin &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.notsubset =
    element ns2:notsubset { mathml.attlist-notsubset, empty }
  mathml.any |= mathml.notsubset
  mathml.attlist-notsubset &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.notprsubset =
    element ns2:notprsubset { mathml.attlist-notprsubset, empty }
  mathml.any |= mathml.notprsubset
  mathml.attlist-notprsubset &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.csetrelnary = mathml.subset | mathml.prsubset
  mathml.subset = element ns2:subset { mathml.attlist-subset, empty }
  mathml.any |= mathml.subset
  mathml.attlist-subset &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.prsubset =
    element ns2:prsubset { mathml.attlist-prsubset, empty }
  mathml.any |= mathml.prsubset
  mathml.attlist-prsubset &=
    MATHML.Common.attrib, mathml.att-definition, mathml.att-encoding
  mathml.cseqrel2ary = mathml.tendsto
  mathml.tendsto = element ns2:tendsto { mathml.attlist-tendsto, empty }
  mathml.any |= mathml.tendsto
  mathml.attlist-tendsto &=
    MATHML.Common.attrib,
    mathml.att-definition,
    mathml.att-encoding,
    mathml.att-type
  mathml.cquantifier =
    mathml.lowlimit
    | mathml.uplimit
    | mathml.bvar
    | mathml.degree
    | mathml.logbase
    | mathml.momentabout
    | mathml.domainofapplication
  mathml.attlist-lowlimit &= MATHML.Common.attrib
  mathml.attlist-uplimit &= MATHML.Common.attrib
  mathml.attlist-bvar &= MATHML.Common.attrib
  mathml.attlist-degree &= MATHML.Common.attrib
  mathml.attlist-logbase &= MATHML.Common.attrib
  mathml.attlist-momentabout &= MATHML.Common.attrib
  mathml.attlist-domainofapplication &= MATHML.Common.attrib
  mathml.cop1ary =
    mathml.cfuncop1ary
    | mathml.carithop1ary
    | mathml.clogicop1ary
    | mathml.ccalcop1ary
    | mathml.ctrigop
    | mathml.clalgop1ary
    | mathml.csetop1ary
  mathml.cop2ary =
    mathml.carithop2ary
    | mathml.clogicop2ary
    | mathml.clalgop2ary
    | mathml.csetop2ary
  mathml.copnary =
    mathml.cfuncopnary
    | mathml.carithopnary
    | mathml.clogicopnary
    | mathml.csetopnary
    | mathml.cstatopnary
    | mathml.clalgopnary
  mathml.copmisc =
    mathml.carithoproot
    | mathml.carithop1or2ary
    | mathml.ccalcop
    | mathml.cseqop
    | mathml.cstatopmoment
    | mathml.clogicopquant
  mathml.crel2ary =
    mathml.cgenrel2ary | mathml.csetrel2ary | mathml.cseqrel2ary
  mathml.crelnary = mathml.cgenrelnary | mathml.csetrelnary
  mathml.Content =
    mathml.ctoken
    | mathml.cspecial
    | mathml.cother
    | mathml.csemantics
    | mathml.c0ary
    | mathml.cconstructor
    | mathml.cquantifier
    | mathml.cop1ary
    | mathml.cop2ary
    | mathml.copnary
    | mathml.copmisc
    | mathml.crel2ary
    | mathml.crelnary
  mathml.ContInPres =
    mathml.ci
    | mathml.csymbol
    | mathml.cn
    | mathml.c0ary
    | mathml.apply
    | mathml.fn
    | mathml.lambda
    | mathml.reln
    | mathml.cconstructor
    | mathml.semantics
    | mathml.declare
  mathml.ContentExpression = (mathml.Content | mathml.PresInCont)*
  mathml.PresExpression = (mathml.Presentation | mathml.ContInPres)*
  mathml.MathExpression = (mathml.PresInCont | mathml.ContInPres)*
  mathml.MathMLCharacters = text | mathml.mglyph
  mathml.ci =
    element ns2:ci {
      mathml.attlist-ci, (mathml.MathMLCharacters | mathml.PresInCont)*
    }
  mathml.any |= mathml.ci
  mathml.csymbol =
    element ns2:csymbol {
      mathml.attlist-csymbol,
      (mathml.MathMLCharacters | mathml.PresInCont)*
    }
  mathml.any |= mathml.csymbol
  mathml.cn =
    element ns2:cn {
      mathml.attlist-cn,
      (mathml.MathMLCharacters | mathml.sep | mathml.PresInCont)*
    }
  mathml.any |= mathml.cn
  mathml.apply =
    element ns2:apply { mathml.attlist-apply, mathml.ContentExpression }
  mathml.any |= mathml.apply
  mathml.reln =
    element ns2:reln { mathml.attlist-reln, mathml.ContentExpression }
  mathml.any |= mathml.reln
  mathml.lambda =
    element ns2:lambda {
      mathml.attlist-lambda, mathml.ContentExpression
    }
  mathml.any |= mathml.lambda
  mathml.condition =
    element ns2:condition {
      mathml.attlist-condition, mathml.ContentExpression
    }
  mathml.any |= mathml.condition
  mathml.declare =
    element ns2:declare {
      mathml.attlist-declare, mathml.ContentExpression
    }
  mathml.any |= mathml.declare
  mathml.semantics =
    element ns2:semantics {
      mathml.attlist-semantics, mathml.ContentExpression
    }
  mathml.any |= mathml.semantics
  mathml.Annotation.content = text
  mathml.annotation =
    element ns2:annotation {
      mathml.attlist-annotation, mathml.Annotation.content
    }
  mathml.any |= mathml.annotation
  mathml.annotation-xml =
    element ns2:annotation-xml {
      mathml.attlist-annotation-xml, mathml.any
    }
  mathml.any |= mathml.annotation-xml
  mathml.interval =
    element ns2:interval {
      mathml.attlist-interval, mathml.ContentExpression
    }
  mathml.any |= mathml.interval
  mathml.set =
    element ns2:set { mathml.attlist-set, mathml.ContentExpression }
  mathml.any |= mathml.set
  mathml.list =
    element ns2:list { mathml.attlist-list, mathml.ContentExpression }
  mathml.any |= mathml.list
  mathml.vector =
    element ns2:vector {
      mathml.attlist-vector, mathml.ContentExpression
    }
  mathml.any |= mathml.vector
  mathml.matrix =
    element ns2:matrix {
      mathml.attlist-matrix, mathml.ContentExpression
    }
  mathml.any |= mathml.matrix
  mathml.matrixrow =
    element ns2:matrixrow {
      mathml.attlist-matrixrow, mathml.ContentExpression
    }
  mathml.any |= mathml.matrixrow
  mathml.piecewise =
    element ns2:piecewise {
      mathml.attlist-piecewise, mathml.piece*, mathml.otherwise?
    }
  mathml.any |= mathml.piecewise
  mathml.piece =
    element ns2:piece { mathml.attlist-piece, mathml.ContentExpression }
  mathml.any |= mathml.piece
  mathml.otherwise =
    element ns2:otherwise {
      mathml.attlist-otherwise, mathml.ContentExpression
    }
  mathml.any |= mathml.otherwise
  mathml.fn =
    element ns2:fn { mathml.attlist-fn, mathml.ContentExpression }
  mathml.any |= mathml.fn
  mathml.lowlimit =
    element ns2:lowlimit {
      mathml.attlist-lowlimit, mathml.ContentExpression
    }
  mathml.any |= mathml.lowlimit
  mathml.uplimit =
    element ns2:uplimit {
      mathml.attlist-uplimit, mathml.ContentExpression
    }
  mathml.any |= mathml.uplimit
  mathml.bvar =
    element ns2:bvar { mathml.attlist-bvar, mathml.ContentExpression }
  mathml.any |= mathml.bvar
  mathml.degree =
    element ns2:degree {
      mathml.attlist-degree, mathml.ContentExpression
    }
  mathml.any |= mathml.degree
  mathml.logbase =
    element ns2:logbase {
      mathml.attlist-logbase, mathml.ContentExpression
    }
  mathml.any |= mathml.logbase
  mathml.momentabout =
    element ns2:momentabout {
      mathml.attlist-momentabout, mathml.ContentExpression
    }
  mathml.any |= mathml.momentabout
  mathml.domainofapplication =
    element ns2:domainofapplication {
      mathml.attlist-domainofapplication, mathml.ContentExpression
    }
  mathml.any |= mathml.domainofapplication
  mathml.mstyle =
    element ns2:mstyle { mathml.attlist-mstyle, mathml.PresExpression }
  mathml.any |= mathml.mstyle
  mathml.merror =
    element ns2:merror { mathml.attlist-merror, mathml.PresExpression }
  mathml.any |= mathml.merror
  mathml.mphantom =
    element ns2:mphantom {
      mathml.attlist-mphantom, mathml.PresExpression
    }
  mathml.any |= mathml.mphantom
  mathml.mrow =
    element ns2:mrow { mathml.attlist-mrow, mathml.PresExpression }
  mathml.any |= mathml.mrow
  mathml.mfrac =
    element ns2:mfrac { mathml.attlist-mfrac, mathml.PresExpression }
  mathml.any |= mathml.mfrac
  mathml.msqrt =
    element ns2:msqrt { mathml.attlist-msqrt, mathml.PresExpression }
  mathml.any |= mathml.msqrt
  mathml.menclose =
    element ns2:menclose {
      mathml.attlist-menclose, mathml.PresExpression
    }
  mathml.any |= mathml.menclose
  mathml.mroot =
    element ns2:mroot { mathml.attlist-mroot, mathml.PresExpression }
  mathml.any |= mathml.mroot
  mathml.msub =
    element ns2:msub { mathml.attlist-msub, mathml.PresExpression }
  mathml.any |= mathml.msub
  mathml.msup =
    element ns2:msup { mathml.attlist-msup, mathml.PresExpression }
  mathml.any |= mathml.msup
  mathml.msubsup =
    element ns2:msubsup {
      mathml.attlist-msubsup, mathml.PresExpression
    }
  mathml.any |= mathml.msubsup
  mathml.mmultiscripts =
    element ns2:mmultiscripts {
      mathml.attlist-mmultiscripts, mathml.PresExpression
    }
  mathml.any |= mathml.mmultiscripts
  mathml.munder =
    element ns2:munder { mathml.attlist-munder, mathml.PresExpression }
  mathml.any |= mathml.munder
  mathml.mover =
    element ns2:mover { mathml.attlist-mover, mathml.PresExpression }
  mathml.any |= mathml.mover
  mathml.munderover =
    element ns2:munderover {
      mathml.attlist-munderover, mathml.PresExpression
    }
  mathml.any |= mathml.munderover
  mathml.mtable =
    element ns2:mtable { mathml.attlist-mtable, mathml.PresExpression }
  mathml.any |= mathml.mtable
  mathml.mtr =
    element ns2:mtr { mathml.attlist-mtr, mathml.PresExpression }
  mathml.any |= mathml.mtr
  mathml.mlabeledtr =
    element ns2:mlabeledtr {
      mathml.attlist-mlabeledtr, mathml.PresExpression
    }
  mathml.any |= mathml.mlabeledtr
  mathml.mtd =
    element ns2:mtd { mathml.attlist-mtd, mathml.PresExpression }
  mathml.any |= mathml.mtd
  mathml.maction =
    element ns2:maction {
      mathml.attlist-maction, mathml.PresExpression
    }
  mathml.any |= mathml.maction
  mathml.mfenced =
    element ns2:mfenced {
      mathml.attlist-mfenced, mathml.PresExpression
    }
  mathml.any |= mathml.mfenced
  mathml.mpadded =
    element ns2:mpadded {
      mathml.attlist-mpadded, mathml.PresExpression
    }
  mathml.any |= mathml.mpadded
  mathml.mi =
    element ns2:mi {
      mathml.attlist-mi, (mathml.MathMLCharacters | mathml.malignmark)*
    }
  mathml.any |= mathml.mi
  mathml.mn =
    element ns2:mn {
      mathml.attlist-mn, (mathml.MathMLCharacters | mathml.malignmark)*
    }
  mathml.any |= mathml.mn
  mathml.mo =
    element ns2:mo {
      mathml.attlist-mo, (mathml.MathMLCharacters | mathml.malignmark)*
    }
  mathml.any |= mathml.mo
  mathml.mtext =
    element ns2:mtext {
      mathml.attlist-mtext,
      (mathml.MathMLCharacters | mathml.malignmark)*
    }
  mathml.any |= mathml.mtext
  mathml.ms =
    element ns2:ms {
      mathml.attlist-ms, (mathml.MathMLCharacters | mathml.malignmark)*
    }
  mathml.any |= mathml.ms
  mathml.att-macros = attribute macros { text }?
  mathml.att-mode = attribute mode { text }?
  mathml.att-display = attribute display { text }?
  mathml.att-topinfo =
    MATHML.Common.attrib,
    mathml.att-macros,
    mathml.att-mode,
    mathml.att-display
  mathml.att-baseline = attribute baseline { text }?
  mathml.att-overflow =
    [ a:defaultValue = "scroll" ]
    attribute overflow { "scroll" | "elide" | "truncate" | "scale" }?
  mathml.att-altimg = attribute altimg { text }?
  mathml.att-alttext = attribute alttext { text }?
  mathml.att-browif =
    mathml.att-type,
    mathml.att-name,
    mathml.att-height,
    mathml.att-width,
    mathml.att-baseline,
    mathml.att-overflow,
    mathml.att-altimg,
    mathml.att-alttext
  mathml.math =
    element ns2:math { mathml.attlist-math, mathml.MathExpression }
  mathml.any |= mathml.math
  mathml.attlist-math &= mathml.att-topinfo, mathml.att-browif
  mathml.any |= text
}
tei_macro.paraContent =
  (text
   | tei_model.gLike
   | tei_model.phrase
   | tei_model.inter
   | tei_model.global
   | tei_lg)*
tei_macro.limitedContent =
  (text | tei_model.limitedPhrase | tei_model.inter)*
tei_macro.phraseSeq =
  (text | tei_model.gLike | tei_model.phrase | tei_model.global)*
tei_macro.phraseSeq.limited =
  (text | tei_model.limitedPhrase | tei_model.global)*
tei_macro.specialPara =
  (text
   | tei_model.gLike
   | tei_model.phrase
   | tei_model.inter
   | tei_model.divPart
   | tei_model.global)*
tei_data.certainty = "high" | "medium" | "low" | "unknown"
tei_data.probability =
  xsd:double { minInclusive = "0" maxInclusive = "1" }
tei_data.numeric =
  xsd:double
  | xsd:token { pattern = "(\-?[\d]+/\-?[\d]+)" }
  | xsd:decimal
tei_data.interval =
  xsd:float { minExclusive = "0" }
  | "regular"
  | "irregular"
  | "unknown"
tei_data.count = xsd:nonNegativeInteger
tei_data.temporal.w3c =
  xsd:date
  | xsd:gYear
  | xsd:gMonth
  | xsd:gDay
  | xsd:gYearMonth
  | xsd:gMonthDay
  | xsd:time
  | xsd:dateTime
tei_data.truthValue = xsd:boolean
tei_data.xTruthValue = xsd:boolean | "unknown" | "inapplicable"
tei_data.language = xsd:language | ""
tei_data.namespace = xsd:anyURI
tei_data.outputMeasurement =
  xsd:token {
    pattern =
      "[\-+]?\d+(\.\d+)?(%|cm|mm|in|pt|pc|px|em|ex|gd|rem|vw|vh|vm)"
  }
tei_data.pattern = xsd:token
tei_data.pointer = xsd:anyURI
tei_data.version = xsd:token { pattern = "[\d]+(\.[\d]+){0,2}" }
tei_data.versionNumber =
  xsd:token { pattern = "[\d]+[a-z]*[\d]*(\.[\d]+[a-z]*[\d]*){0,3}" }
tei_data.replacement = text
tei_data.word = xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
tei_data.sex = tei_data.word
tei_data.text = xsd:string
tei_data.name = xsd:Name
tei_data.enumerated = tei_data.name
tei_data.temporal.iso =
  xsd:date
  | xsd:gYear
  | xsd:gMonth
  | xsd:gDay
  | xsd:gYearMonth
  | xsd:gMonthDay
  | xsd:time
  | xsd:dateTime
  | xsd:token { pattern = "[0-9.,DHMPRSTWYZ/:+\-]+" }
tei_att.ascribed.attributes = tei_att.ascribed.attribute.who
tei_att.ascribed.attribute.who =
  
  ## indicates the person, or group of people, to whom the element content is ascribed.
  attribute who {
    list { tei_data.pointer+ }
  }?
tei_att.canonical.attributes =
  tei_att.canonical.attribute.key, tei_att.canonical.attribute.ref
tei_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 { tei_data.text }?
tei_att.canonical.attribute.ref =
  
  ## (reference) provides an explicit means of locating a full definition for the entity being named by means of one or more URIs.
  attribute ref {
    list { tei_data.pointer+ }
  }?
tei_att.ranging.attributes =
  tei_att.ranging.attribute.atLeast,
  tei_att.ranging.attribute.atMost,
  tei_att.ranging.attribute.min,
  tei_att.ranging.attribute.max,
  tei_att.ranging.attribute.confidence
tei_att.ranging.attribute.atLeast =
  
  ## gives a minimum estimated value for the approximate measurement.
  attribute atLeast { tei_data.numeric }?
tei_att.ranging.attribute.atMost =
  
  ## gives a maximum estimated value for the approximate measurement.
  attribute atMost { tei_data.numeric }?
tei_att.ranging.attribute.min =
  
  ## where the measurement summarizes more than one observation or a range, supplies the minimum value observed.
  attribute min { tei_data.numeric }?
tei_att.ranging.attribute.max =
  
  ## where the measurement summarizes more than one observation or a range, supplies the maximum value observed.
  attribute max { tei_data.numeric }?
tei_att.ranging.attribute.confidence =
  
  ## specifies the degree of statistical confidence (between zero and one) that a value falls within the range specified by min and max, or the proportion of observed values that fall within that range.
  attribute confidence { tei_data.probability }?
tei_att.dimensions.attributes =
  tei_att.ranging.attributes,
  tei_att.dimensions.attribute.unit,
  tei_att.dimensions.attribute.quantity,
  tei_att.dimensions.attribute.extent,
  tei_att.dimensions.attribute.precision,
  tei_att.dimensions.attribute.scope
tei_att.dimensions.attribute.unit =
  
  ## names the unit used for the measurement
  ## Suggested values include: 1] cm(centimetres) ; 2] mm(millimetres) ; 3] in(inches) ; 4] lines; 5] chars(characters) 
  attribute unit {
    
    ## (centimetres) 
    "cm"
    | 
      ## (millimetres) 
      "mm"
    | 
      ## (inches) 
      "in"
    | 
      ## lines of text
      "lines"
    | 
      ## (characters) characters of text
      "chars"
    | xsd:Name
  }?
tei_att.dimensions.attribute.quantity =
  
  ## specifies the length in the units specified
  attribute quantity { tei_data.numeric }?
tei_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 { tei_data.text }?
tei_att.dimensions.attribute.precision =
  
  ## characterizes the precision of the values specified by the other attributes.
  attribute precision { tei_data.certainty }?
tei_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 { tei_data.enumerated }?
tei_att.breaking.attributes = tei_att.breaking.attribute.break
tei_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 { tei_data.enumerated }?
tei_att.cReferencing.attributes = tei_att.cReferencing.attribute.cRef
tei_att.cReferencing.attribute.cRef =
  
  ## (canonical reference) specifies the destination of the pointer by supplying a canonical reference expressed using the scheme defined in a refsDecl element in the TEI header
  attribute cRef { tei_data.text }?
tei_att.datable.w3c.attributes =
  tei_att.datable.w3c.attribute.when,
  tei_att.datable.w3c.attribute.notBefore,
  tei_att.datable.w3c.attribute.notAfter,
  tei_att.datable.w3c.attribute.from,
  tei_att.datable.w3c.attribute.to
tei_att.datable.w3c.attribute.when =
  
  ## supplies the value of the date or time in a standard form, e.g. yyyy-mm-dd.
  attribute when { tei_data.temporal.w3c }?
tei_att.datable.w3c.attribute.notBefore =
  
  ## specifies the earliest possible date for the event in standard form, e.g. yyyy-mm-dd.
  attribute notBefore { tei_data.temporal.w3c }?
tei_att.datable.w3c.attribute.notAfter =
  
  ## specifies the latest possible date for the event in standard form, e.g. yyyy-mm-dd.
  attribute notAfter { tei_data.temporal.w3c }?
tei_att.datable.w3c.attribute.from =
  
  ## indicates the starting point of the period in standard form, e.g. yyyy-mm-dd.
  attribute from { tei_data.temporal.w3c }?
tei_att.datable.w3c.attribute.to =
  
  ## indicates the ending point of the period in standard form, e.g. yyyy-mm-dd.
  attribute to { tei_data.temporal.w3c }?
tei_att.datable.attributes =
  tei_att.datable.w3c.attributes,
  tei_att.datable.iso.attributes,
  tei_att.datable.custom.attributes,
  tei_att.datable.attribute.calendar,
  tei_att.datable.attribute.period
tei_att.datable.attribute.calendar =
  
  ## indicates the system or calendar to which the date represented by the content of this element belongs.
  attribute calendar { tei_data.pointer }?
sch:pattern [
  id = "IstexSchema-att.datable-calendar-calendar-constraint-1"
  "\x{a}" ~
  "      "
  sch:rule [
    context = "tei:*[@calendar]"
    "\x{a}" ~
    "            "
    sch:assert [
      test = "string-length(.) gt 0"
      "\x{a}" ~
      "@calendar indicates the system or calendar to which the date represented by the content of this element\x{a}" ~
      "belongs, but this "
      sch:name [ ]
      " element has no textual content."
    ]
    "\x{a}" ~
    "          "
  ]
  "\x{a}" ~
  "   "
]
tei_att.datable.attribute.period =
  
  ## supplies a pointer to some location defining a named period of time within which the datable item is understood to have occurred.
  attribute period { tei_data.pointer }?
tei_att.datcat.attributes =
  tei_att.datcat.attribute.datcat, tei_att.datcat.attribute.valueDatcat
tei_att.datcat.attribute.datcat =
  
  ## contains a PID (persistent identifier) that aligns the given element with the appropriate Data Category (or categories) in ISOcat.
  attribute ns1:datcat {
    list { tei_data.pointer+ }
  }?
tei_att.datcat.attribute.valueDatcat =
  
  ## contains a PID (persistent identifier) that aligns the content of the given element or the value of the given attribute with the appropriate simple Data Category (or categories) in ISOcat.
  attribute ns1:valueDatcat {
    list { tei_data.pointer+ }
  }?
tei_att.declarable.attributes = tei_att.declarable.attribute.default
tei_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"
  }?
tei_att.declaring.attributes = tei_att.declaring.attribute.decls
tei_att.declaring.attribute.decls =
  
  ## 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 { tei_data.pointer+ }
  }?
tei_att.fragmentable.attributes = tei_att.fragmentable.attribute.part
tei_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) either 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"
  }?
tei_att.divLike.attributes =
  tei_att.fragmentable.attributes,
  tei_att.divLike.attribute.org,
  tei_att.divLike.attribute.sample
tei_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"
  }?
tei_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"
  }?
tei_att.docStatus.attributes = tei_att.docStatus.attribute.status
tei_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 { tei_data.enumerated }?
tei_att.responsibility.attributes =
  tei_att.source.attributes,
  tei_att.responsibility.attribute.cert,
  tei_att.responsibility.attribute.resp
tei_att.responsibility.attribute.cert =
  
  ## (certainty) signifies the degree of certainty associated with the intervention or interpretation.
  attribute cert { tei_data.certainty }?
tei_att.responsibility.attribute.resp =
  
  ## (responsible party) indicates the agency responsible for the intervention or interpretation, for example an editor or transcriber.
  attribute resp {
    list { tei_data.pointer+ }
  }?
tei_att.editLike.attributes =
  tei_att.dimensions.attributes,
  tei_att.responsibility.attributes,
  tei_att.editLike.attribute.evidence,
  tei_att.editLike.attribute.instant
tei_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:Name)+
    }
  }?
tei_att.editLike.attribute.instant =
  
  ## indicates whether this is an instant revision or not.
  [ a:defaultValue = "false" ]
  attribute instant { tei_data.xTruthValue }?
tei_att.global.attributes =
  tei_att.global.linking.attributes,
  tei_att.global.attribute.xmlid,
  tei_att.global.attribute.n,
  tei_att.global.attribute.xmllang,
  tei_att.global.attribute.rend,
  tei_att.global.attribute.style,
  tei_att.global.attribute.rendition,
  tei_att.global.attribute.xmlbase,
  tei_att.global.attribute.xmlspace
tei_att.global.attribute.xmlid =
  
  ## (identifier) provides a unique identifier for the element bearing the attribute.
  attribute xml:id { xsd:ID }?
tei_att.global.attribute.n =
  
  ## (number) gives a number (or other label) for an element, which is not necessarily unique within the document.
  attribute n { tei_data.text }?
tei_att.global.attribute.xmllang =
  
  ## (language) indicates the language of the element content using a tag generated according to BCP 47.
  attribute xml:lang { tei_data.language }?
tei_att.global.attribute.rend =
  
  ## (rendition) indicates how the element in question was rendered or presented in the source text.
  attribute rend {
    list { tei_data.word+ }
  }?
tei_att.global.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 { tei_data.text }?
tei_att.global.attribute.rendition =
  
  ## points to a description of the rendering or presentation used for this element in the source text.
  attribute rendition {
    list { tei_data.pointer+ }
  }?
tei_att.global.attribute.xmlbase =
  
  ## provides a base URI reference with which applications can resolve relative URI references into absolute URI references.
  attribute xml:base { tei_data.pointer }?
tei_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"
  }?
tei_att.internetMedia.attributes =
  tei_att.internetMedia.attribute.mimeType
tei_att.internetMedia.attribute.mimeType =
  
  ## (MIME media type) specifies the applicable multimedia internet mail extension (MIME) media type
  attribute mimeType {
    list { tei_data.word+ }
  }?
tei_att.media.attributes =
  tei_att.internetMedia.attributes,
  tei_att.media.attribute.width,
  tei_att.media.attribute.height,
  tei_att.media.attribute.scale
tei_att.media.attribute.width =
  
  ## Where the media are displayed, indicates the display width
  attribute width { tei_data.outputMeasurement }?
tei_att.media.attribute.height =
  
  ## Where the media are displayed, indicates the display height
  attribute height { tei_data.outputMeasurement }?
tei_att.media.attribute.scale =
  
  ## Where the media are displayed, indicates a scale factor to be applied when generating the desired display size
  attribute scale { tei_data.numeric }?
tei_att.resourced.attributes = tei_att.resourced.attribute.url
tei_att.resourced.attribute.url =
  
  ## (uniform resource locator) specifies the URL from which the media concerned may be obtained.
  attribute url { tei_data.pointer }
tei_att.measurement.attributes =
  tei_att.measurement.attribute.unit,
  tei_att.measurement.attribute.quantity,
  tei_att.measurement.attribute.commodity
tei_att.measurement.attribute.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:Name
  }?
tei_att.measurement.attribute.quantity =
  
  ## specifies the number of the specified units that comprise the measurement
  attribute quantity { tei_data.numeric }?
tei_att.measurement.attribute.commodity =
  
  ## indicates the substance that is being measured
  attribute commodity {
    list { tei_data.word+ }
  }?
tei_att.naming.attributes =
  tei_att.canonical.attributes,
  tei_att.naming.attribute.role,
  tei_att.naming.attribute.nymRef
tei_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 { tei_data.enumerated+ }
  }?
tei_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 { tei_data.pointer+ }
  }?
tei_att.placement.attributes = tei_att.placement.attribute.place
tei_att.placement.attribute.place =
  
  ## specifies where this item is placed
  ## Suggested values include: 1] below; 2] bottom; 3] margin; 4] top; 5] opposite; 6] overleaf; 7] above; 8] end; 9] inline; 10] inspace
  attribute place {
    list {
      (
       ## below the line
       "below"
       | 
         ## at the foot of the page
         "bottom"
       | 
         ## in the margin (left, right, or both)
         "margin"
       | 
         ## at the top of the page
         "top"
       | 
         ## on the opposite, i.e. facing, page
         "opposite"
       | 
         ## on the other side of the leaf
         "overleaf"
       | 
         ## above the line
         "above"
       | 
         ## 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:Name)+
    }
  }?
tei_att.typed.attributes =
  tei_att.typed.attribute.type, tei_att.typed.attribute.subtype
tei_att.typed.attribute.type =
  
  ## characterizes the element in some sense, using any convenient classification scheme or typology.
  attribute type { tei_data.enumerated }?
tei_att.typed.attribute.subtype =
  
  ## provides a sub-categorization of the element, if needed
  attribute subtype { tei_data.enumerated }?
sch:pattern [
  id = "IstexSchema-att.typed-subtypeTyped-constraint-2"
  "\x{a}" ~
  "      "
  sch:rule [
    context = "*[@subtype]"
    "\x{a}" ~
    "        "
    sch:assert [
      test = "@type"
      "The "
      sch:name [ ]
      " element should not be categorized in detail with @subtype\x{a}" ~
      " unless also categorized in general with @type"
    ]
    "\x{a}" ~
    "      "
  ]
  "\x{a}" ~
  "   "
]
tei_att.pointing.attributes =
  tei_att.pointing.attribute.targetLang,
  tei_att.pointing.attribute.target,
  tei_att.pointing.attribute.evaluate
tei_att.pointing.attribute.targetLang =
  
  ## specifies the language of the content to be found at the destination referenced by target, using a language tag generated according to BCP 47.
  attribute targetLang { tei_data.language }?
sch:pattern [
  id = "IstexSchema-att.pointing-targetLang-targetLang-constraint-3"
  "\x{a}" ~
  "      "
  sch:rule [
    context = "tei:*[not(self::tei:schemaSpec)][@targetLang]"
    "\x{a}" ~
    "            "
    sch:assert [
      test = "count(@target)"
      "@targetLang can only be used if @target is specified."
    ]
    "\x{a}" ~
    "          "
  ]
  "\x{a}" ~
  "   "
]
tei_att.pointing.attribute.target =
  
  ## specifies the destination of the reference by supplying one or more URI References
  attribute target {
    list { tei_data.pointer+ }
  }?
tei_att.pointing.attribute.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"
  }?
tei_att.pointing.group.attributes =
  tei_att.pointing.attributes,
  tei_att.typed.attributes,
  tei_att.pointing.group.attribute.domains,
  tei_att.pointing.group.attribute.targFunc
tei_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 { tei_data.pointer, tei_data.pointer, tei_data.pointer* }
  }?
tei_att.pointing.group.attribute.targFunc =
  
  ## (target function) describes the function of each of the values of the target attribute of the enclosed link, join, or alt tags.
  attribute targFunc {
    list { tei_data.word, tei_data.word, tei_data.word* }
  }?
tei_att.segLike.attributes =
  tei_att.datcat.attributes,
  tei_att.fragmentable.attributes,
  tei_att.segLike.attribute.function
tei_att.segLike.attribute.function =
  
  ## characterizes the function of the segment.
  attribute function { tei_data.enumerated }?
tei_att.sortable.attributes = tei_att.sortable.attribute.sortKey
tei_att.sortable.attribute.sortKey =
  
  ## supplies the sort key for this element in an index, list or group which contains it.
  attribute sortKey { tei_data.word }?
tei_att.edition.attributes =
  tei_att.edition.attribute.ed, tei_att.edition.attribute.edRef
tei_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 { tei_data.word+ }
  }?
tei_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 { tei_data.pointer+ }
  }?
tei_att.spanning.attributes = tei_att.spanning.attribute.spanTo
tei_att.spanning.attribute.spanTo =
  
  ## indicates the end of a span initiated by the element bearing this attribute.
  attribute spanTo { tei_data.pointer }?
sch:pattern [
  id = "IstexSchema-att.spanning-spanTo-spanTo-2-constraint-4"
  "\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}" ~
  "   "
]
tei_att.styleDef.attributes =
  tei_att.styleDef.attribute.scheme,
  tei_att.styleDef.attribute.schemeVersion
tei_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"
  }?
tei_att.styleDef.attribute.schemeVersion =
  
  ## supplies a version number for the style language provided in scheme.
  attribute schemeVersion { tei_data.versionNumber }?
sch:pattern [
  id =
    "IstexSchema-att.styleDef-schemeVersion-schemeVersionRequiresScheme-constraint-5"
  "\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}" ~
  "   "
]
tei_att.tableDecoration.attributes =
  tei_att.tableDecoration.attribute.role,
  tei_att.tableDecoration.attribute.rows,
  tei_att.tableDecoration.attribute.cols
tei_att.tableDecoration.attribute.role =
  
  ## indicates the kind of information held in this cell or in each cell of this row.
  ## Suggested values include: 1] label; 2] data
  [ a:defaultValue = "data" ]
  attribute role {
    
    ## labelling or descriptive information only.
    "label"
    | 
      ## data values.
      "data"
    | xsd:Name
  }?
tei_att.tableDecoration.attribute.rows =
  
  ## indicates the number of rows occupied by this cell or row.
  [ a:defaultValue = "1" ] attribute rows { tei_data.count }?
tei_att.tableDecoration.attribute.cols =
  
  ## (columns) indicates the number of columns occupied by this cell or row.
  [ a:defaultValue = "1" ] attribute cols { tei_data.count }?
tei_att.timed.attributes =
  tei_att.timed.attribute.start, tei_att.timed.attribute.end
tei_att.timed.attribute.start =
  
  ## indicates the location within a temporal alignment at which this element begins.
  attribute start { tei_data.pointer }?
tei_att.timed.attribute.end =
  
  ## indicates the location within a temporal alignment at which this element ends.
  attribute end { tei_data.pointer }?
tei_att.transcriptional.attributes =
  tei_att.editLike.attributes,
  tei_att.transcriptional.attribute.hand,
  tei_att.transcriptional.attribute.status,
  tei_att.transcriptional.attribute.cause,
  tei_att.transcriptional.attribute.seq
tei_att.transcriptional.attribute.hand =
  
  ## indicates the hand of the agent which made the intervention.
  attribute hand { tei_data.pointer }?
tei_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 { tei_data.enumerated }?
tei_att.transcriptional.attribute.cause =
  
  ## documents the presumed cause for the intervention.
  attribute cause {
    
    ## repeated for the purpose of fixation
    "fix"
    | 
      ## repeated to clarify a previously illegible or badly written text or mark
      "unclear"
  }?
tei_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 { tei_data.count }?
tei_att.translatable.attributes =
  tei_att.translatable.attribute.versionDate
tei_att.translatable.attribute.versionDate =
  
  ## specifies the date on which the source text was extracted and sent to the translator
  attribute versionDate { tei_data.temporal.w3c }?
tei_att.citing.attributes =
  tei_att.citing.attribute.unit,
  tei_att.citing.attribute.from,
  tei_att.citing.attribute.to
tei_att.citing.attribute.unit =
  
  ## identifies the unit of information conveyed by the element, e.g. columns, pages, volume.
  ## Suggested values include: 1] volume; 2] issue; 3] page; 4] line; 5] chapter; 6] part; 7] column
  attribute unit {
    
    ## the element contains a volume number.
    "volume"
    | 
      ## the element contains an issue number, or volume and issue numbers.
      "issue"
    | 
      ## the element contains a page number or page range.
      "page"
    | 
      ## the element contains a line number or line range.
      "line"
    | 
      ## 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"
    | xsd:Name
  }?
tei_att.citing.attribute.from =
  
  ## specifies the starting point of the range of units indicated by the unit attribute.
  attribute from { tei_data.word }?
tei_att.citing.attribute.to =
  
  ## specifies the end-point of the range of units indicated by the unit attribute.
  attribute to { tei_data.word }?
tei_model.nameLike.agent = tei_name | tei_orgName | tei_persName
tei_model.nameLike.agent_alternation =
  tei_name | tei_orgName | tei_persName
tei_model.nameLike.agent_sequence = tei_name, tei_orgName, tei_persName
tei_model.nameLike.agent_sequenceOptional =
  tei_name?, tei_orgName?, tei_persName?
tei_model.nameLike.agent_sequenceOptionalRepeatable =
  tei_name*, tei_orgName*, tei_persName*
tei_model.nameLike.agent_sequenceRepeatable =
  tei_name+, tei_orgName+, tei_persName+
tei_model.segLike = tei_seg
tei_model.hiLike = tei_hi
tei_model.hiLike_alternation = tei_hi
tei_model.hiLike_sequence = tei_hi
tei_model.hiLike_sequenceOptional = tei_hi?
tei_model.hiLike_sequenceOptionalRepeatable = tei_hi*
tei_model.hiLike_sequenceRepeatable = tei_hi+
tei_model.emphLike =
  tei_foreign
  | tei_emph
  | tei_distinct
  | tei_mentioned
  | tei_soCalled
  | tei_gloss
  | tei_term
  | tei_title
tei_model.emphLike_alternation =
  tei_foreign
  | tei_emph
  | tei_distinct
  | tei_mentioned
  | tei_soCalled
  | tei_gloss
  | tei_term
  | tei_title
tei_model.emphLike_sequence =
  tei_foreign,
  tei_emph,
  tei_distinct,
  tei_mentioned,
  tei_soCalled,
  tei_gloss,
  tei_term,
  tei_title
tei_model.emphLike_sequenceOptional =
  tei_foreign?,
  tei_emph?,
  tei_distinct?,
  tei_mentioned?,
  tei_soCalled?,
  tei_gloss?,
  tei_term?,
  tei_title?
tei_model.emphLike_sequenceOptionalRepeatable =
  tei_foreign*,
  tei_emph*,
  tei_distinct*,
  tei_mentioned*,
  tei_soCalled*,
  tei_gloss*,
  tei_term*,
  tei_title*
tei_model.emphLike_sequenceRepeatable =
  tei_foreign+,
  tei_emph+,
  tei_distinct+,
  tei_mentioned+,
  tei_soCalled+,
  tei_gloss+,
  tei_term+,
  tei_title+
tei_model.highlighted = tei_model.hiLike | tei_model.emphLike
tei_model.dateLike = tei_date | tei_time
tei_model.dateLike_alternation = tei_date | tei_time
tei_model.dateLike_sequence = tei_date, tei_time
tei_model.dateLike_sequenceOptional = tei_date?, tei_time?
tei_model.dateLike_sequenceOptionalRepeatable = tei_date*, tei_time*
tei_model.dateLike_sequenceRepeatable = tei_date+, tei_time+
tei_model.measureLike = tei_num | tei_measure | tei_measureGrp | tei_geo
tei_model.measureLike_alternation =
  tei_num | tei_measure | tei_measureGrp | tei_geo
tei_model.measureLike_sequence =
  tei_num, tei_measure, tei_measureGrp, tei_geo
tei_model.measureLike_sequenceOptional =
  tei_num?, tei_measure?, tei_measureGrp?, tei_geo?
tei_model.measureLike_sequenceOptionalRepeatable =
  tei_num*, tei_measure*, tei_measureGrp*, tei_geo*
tei_model.measureLike_sequenceRepeatable =
  tei_num+, tei_measure+, tei_measureGrp+, tei_geo+
tei_model.egLike = notAllowed
tei_model.egLike_alternation = notAllowed
tei_model.egLike_sequence = empty
tei_model.egLike_sequenceOptional = empty
tei_model.egLike_sequenceOptionalRepeatable = empty
tei_model.egLike_sequenceRepeatable = notAllowed
tei_model.graphicLike =
  tei_media | tei_graphic | tei_binaryObject | tei_formula
tei_model.offsetLike = tei_offset | tei_geogFeat
tei_model.offsetLike_alternation = tei_offset | tei_geogFeat
tei_model.offsetLike_sequence = tei_offset, tei_geogFeat
tei_model.offsetLike_sequenceOptional = tei_offset?, tei_geogFeat?
tei_model.offsetLike_sequenceOptionalRepeatable =
  tei_offset*, tei_geogFeat*
tei_model.offsetLike_sequenceRepeatable = tei_offset+, tei_geogFeat+
tei_model.pPart.msdesc = notAllowed
tei_model.pPart.editorial = tei_choice | tei_abbr | tei_expan
tei_model.pPart.editorial_alternation =
  tei_choice | tei_abbr | tei_expan
tei_model.pPart.editorial_sequence = tei_choice, tei_abbr, tei_expan
tei_model.pPart.editorial_sequenceOptional =
  tei_choice?, tei_abbr?, tei_expan?
tei_model.pPart.editorial_sequenceOptionalRepeatable =
  tei_choice*, tei_abbr*, tei_expan*
tei_model.pPart.editorial_sequenceRepeatable =
  tei_choice+, tei_abbr+, tei_expan+
tei_model.pPart.transcriptional =
  tei_sic
  | tei_corr
  | tei_reg
  | tei_orig
  | tei_add
  | tei_del
  | tei_unclear
tei_model.pPart.transcriptional_alternation =
  tei_sic
  | tei_corr
  | tei_reg
  | tei_orig
  | tei_add
  | tei_del
  | tei_unclear
tei_model.pPart.transcriptional_sequence =
  tei_sic, tei_corr, tei_reg, tei_orig, tei_add, tei_del, tei_unclear
tei_model.pPart.transcriptional_sequenceOptional =
  tei_sic?,
  tei_corr?,
  tei_reg?,
  tei_orig?,
  tei_add?,
  tei_del?,
  tei_unclear?
tei_model.pPart.transcriptional_sequenceOptionalRepeatable =
  tei_sic*,
  tei_corr*,
  tei_reg*,
  tei_orig*,
  tei_add*,
  tei_del*,
  tei_unclear*
tei_model.pPart.transcriptional_sequenceRepeatable =
  tei_sic+,
  tei_corr+,
  tei_reg+,
  tei_orig+,
  tei_add+,
  tei_del+,
  tei_unclear+
tei_model.pPart.edit =
  tei_model.pPart.editorial | tei_model.pPart.transcriptional
tei_model.ptrLike = tei_ptr | tei_ref
tei_model.lPart = notAllowed
tei_model.global.meta =
  tei_index
  | tei_link
  | tei_linkGrp
  | tei_timeline
  | tei_join
  | tei_joinGrp
  | tei_alt
  | tei_altGrp
tei_model.milestoneLike =
  tei_milestone | tei_gb | tei_pb | tei_lb | tei_cb | tei_anchor
tei_model.gLike = notAllowed
tei_model.oddDecl = notAllowed
tei_model.oddDecl_alternation = notAllowed
tei_model.oddDecl_sequence = empty
tei_model.oddDecl_sequenceOptional = empty
tei_model.oddDecl_sequenceOptionalRepeatable = empty
tei_model.oddDecl_sequenceRepeatable = notAllowed
tei_model.phrase.xml = notAllowed
tei_model.specDescLike = notAllowed
tei_model.biblLike =
  tei_bibl | tei_biblStruct | tei_listBibl | tei_biblFull
tei_model.biblLike_alternation =
  tei_bibl | tei_biblStruct | tei_listBibl | tei_biblFull
tei_model.biblLike_sequence =
  tei_bibl, tei_biblStruct, tei_listBibl, tei_biblFull
tei_model.biblLike_sequenceOptional =
  tei_bibl?, tei_biblStruct?, tei_listBibl?, tei_biblFull?
tei_model.biblLike_sequenceOptionalRepeatable =
  tei_bibl*, tei_biblStruct*, tei_listBibl*, tei_biblFull*
tei_model.biblLike_sequenceRepeatable =
  tei_bibl+, tei_biblStruct+, tei_listBibl+, tei_biblFull+
tei_model.headLike = tei_head
tei_model.headLike_alternation = tei_head
tei_model.headLike_sequence = tei_head
tei_model.headLike_sequenceOptional = tei_head?
tei_model.headLike_sequenceOptionalRepeatable = tei_head*
tei_model.headLike_sequenceRepeatable = tei_head+
tei_model.labelLike = tei_desc | tei_label
tei_model.labelLike_alternation = tei_desc | tei_label
tei_model.labelLike_sequence = tei_desc, tei_label
tei_model.labelLike_sequenceOptional = tei_desc?, tei_label?
tei_model.labelLike_sequenceOptionalRepeatable = tei_desc*, tei_label*
tei_model.labelLike_sequenceRepeatable = tei_desc+, tei_label+
tei_model.listLike =
  tei_list
  | tei_listOrg
  | tei_listEvent
  | tei_listPerson
  | tei_listPlace
  | tei_listNym
  | tei_table
tei_model.listLike_alternation =
  tei_list
  | tei_listOrg
  | tei_listEvent
  | tei_listPerson
  | tei_listPlace
  | tei_listNym
  | tei_table
tei_model.listLike_sequence =
  tei_list,
  tei_listOrg,
  tei_listEvent,
  tei_listPerson,
  tei_listPlace,
  tei_listNym,
  tei_table
tei_model.listLike_sequenceOptional =
  tei_list?,
  tei_listOrg?,
  tei_listEvent?,
  tei_listPerson?,
  tei_listPlace?,
  tei_listNym?,
  tei_table?
tei_model.listLike_sequenceOptionalRepeatable =
  tei_list*,
  tei_listOrg*,
  tei_listEvent*,
  tei_listPerson*,
  tei_listPlace*,
  tei_listNym*,
  tei_table*
tei_model.listLike_sequenceRepeatable =
  tei_list+,
  tei_listOrg+,
  tei_listEvent+,
  tei_listPerson+,
  tei_listPlace+,
  tei_listNym+,
  tei_table+
tei_model.noteLike = tei_note
tei_model.lLike = tei_l
tei_model.lLike_alternation = tei_l
tei_model.lLike_sequence = tei_l
tei_model.lLike_sequenceOptional = tei_l?
tei_model.lLike_sequenceOptionalRepeatable = tei_l*
tei_model.lLike_sequenceRepeatable = tei_l+
tei_model.pLike = tei_p | tei_ab
tei_model.pLike_alternation = tei_p | tei_ab
tei_model.pLike_sequence = tei_p, tei_ab
tei_model.pLike_sequenceOptional = tei_p?, tei_ab?
tei_model.pLike_sequenceOptionalRepeatable = tei_p*, tei_ab*
tei_model.pLike_sequenceRepeatable = tei_p+, tei_ab+
tei_model.stageLike = tei_stage
tei_model.stageLike_alternation = tei_stage
tei_model.stageLike_sequence = tei_stage
tei_model.stageLike_sequenceOptional = tei_stage?
tei_model.stageLike_sequenceOptionalRepeatable = tei_stage*
tei_model.stageLike_sequenceRepeatable = tei_stage+
tei_model.entryPart = notAllowed
tei_model.global.edit = tei_gap
tei_model.divPart = tei_model.lLike | tei_model.pLike | tei_lg | tei_sp
tei_model.persStateLike =
  tei_persName
  | tei_affiliation
  | tei_age
  | tei_education
  | tei_faith
  | tei_floruit
  | tei_langKnowledge
  | tei_nationality
  | tei_occupation
  | tei_residence
  | tei_sex
  | tei_socecStatus
  | tei_state
  | tei_trait
tei_model.persEventLike =
  tei_birth | tei_death | tei_event | tei_listEvent
tei_model.personLike = tei_org | tei_person | tei_personGrp
tei_model.personPart =
  tei_model.biblLike
  | tei_model.persStateLike
  | tei_model.persEventLike
  | tei_idno
tei_model.placeNamePart =
  tei_placeName
  | tei_bloc
  | tei_country
  | tei_region
  | tei_district
  | tei_settlement
  | tei_geogName
tei_model.placeNamePart_alternation =
  tei_placeName
  | tei_bloc
  | tei_country
  | tei_region
  | tei_district
  | tei_settlement
  | tei_geogName
tei_model.placeNamePart_sequence =
  tei_placeName,
  tei_bloc,
  tei_country,
  tei_region,
  tei_district,
  tei_settlement,
  tei_geogName
tei_model.placeNamePart_sequenceOptional =
  tei_placeName?,
  tei_bloc?,
  tei_country?,
  tei_region?,
  tei_district?,
  tei_settlement?,
  tei_geogName?
tei_model.placeNamePart_sequenceOptionalRepeatable =
  tei_placeName*,
  tei_bloc*,
  tei_country*,
  tei_region*,
  tei_district*,
  tei_settlement*,
  tei_geogName*
tei_model.placeNamePart_sequenceRepeatable =
  tei_placeName+,
  tei_bloc+,
  tei_country+,
  tei_region+,
  tei_district+,
  tei_settlement+,
  tei_geogName+
tei_model.placeStateLike =
  tei_model.placeNamePart
  | tei_climate
  | tei_location
  | tei_population
  | tei_state
  | tei_terrain
  | tei_trait
tei_model.placeStateLike_alternation =
  tei_model.placeNamePart_alternation
  | tei_climate
  | tei_location
  | tei_population
  | tei_state
  | tei_terrain
  | tei_trait
tei_model.placeStateLike_sequence =
  tei_model.placeNamePart_sequence,
  tei_climate,
  tei_location,
  tei_population,
  tei_state,
  tei_terrain,
  tei_trait
tei_model.placeStateLike_sequenceOptional =
  tei_model.placeNamePart_sequenceOptional?,
  tei_climate?,
  tei_location?,
  tei_population?,
  tei_state?,
  tei_terrain?,
  tei_trait?
tei_model.placeStateLike_sequenceOptionalRepeatable =
  tei_model.placeNamePart_sequenceOptionalRepeatable*,
  tei_climate*,
  tei_location*,
  tei_population*,
  tei_state*,
  tei_terrain*,
  tei_trait*
tei_model.placeStateLike_sequenceRepeatable =
  tei_model.placeNamePart_sequenceRepeatable+,
  tei_climate+,
  tei_location+,
  tei_population+,
  tei_state+,
  tei_terrain+,
  tei_trait+
tei_model.placeEventLike = tei_event
tei_model.orgPart = tei_listOrg | tei_listPerson | tei_listPlace
tei_model.publicationStmtPart.agency =
  tei_publisher | tei_distributor | tei_authority
tei_model.publicationStmtPart.detail =
  tei_address | tei_date | tei_pubPlace | tei_idno | tei_availability
tei_model.availabilityPart = tei_licence
tei_model.certLike = notAllowed
tei_model.descLike = tei_desc
tei_model.glossLike = tei_gloss
tei_model.quoteLike = tei_quote | tei_cit
tei_model.quoteLike_alternation = tei_quote | tei_cit
tei_model.quoteLike_sequence = tei_quote, tei_cit
tei_model.quoteLike_sequenceOptional = tei_quote?, tei_cit?
tei_model.quoteLike_sequenceOptionalRepeatable = tei_quote*, tei_cit*
tei_model.quoteLike_sequenceRepeatable = tei_quote+, tei_cit+
tei_model.qLike =
  tei_model.quoteLike | tei_said | tei_q | tei_floatingText
tei_model.qLike_alternation =
  tei_model.quoteLike_alternation | tei_said | tei_q | tei_floatingText
tei_model.qLike_sequence =
  tei_model.quoteLike_sequence, tei_said, tei_q, tei_floatingText
tei_model.qLike_sequenceOptional =
  tei_model.quoteLike_sequenceOptional?,
  tei_said?,
  tei_q?,
  tei_floatingText?
tei_model.qLike_sequenceOptionalRepeatable =
  tei_model.quoteLike_sequenceOptionalRepeatable*,
  tei_said*,
  tei_q*,
  tei_floatingText*
tei_model.qLike_sequenceRepeatable =
  tei_model.quoteLike_sequenceRepeatable+,
  tei_said+,
  tei_q+,
  tei_floatingText+
tei_model.respLike =
  tei_author
  | tei_editor
  | tei_respStmt
  | tei_meeting
  | tei_sponsor
  | tei_funder
  | tei_principal
tei_model.divWrapper =
  tei_meeting
  | tei_byline
  | tei_dateline
  | tei_argument
  | tei_epigraph
  | tei_salute
  | tei_docAuthor
  | tei_docDate
tei_model.divTopPart = tei_model.headLike | tei_opener | tei_signed
tei_model.divTop = tei_model.divWrapper | tei_model.divTopPart
tei_model.frontPart.drama = notAllowed
tei_model.pLike.front =
  tei_head
  | tei_byline
  | tei_argument
  | tei_epigraph
  | tei_docTitle
  | tei_titlePart
  | tei_docAuthor
  | tei_docEdition
  | tei_docImprint
  | tei_docDate
tei_model.divBottomPart =
  tei_trailer | tei_closer | tei_signed | tei_postscript
tei_model.divBottom = tei_model.divWrapper | tei_model.divBottomPart
tei_model.titlepagePart =
  tei_graphic
  | tei_binaryObject
  | tei_byline
  | tei_argument
  | tei_epigraph
  | tei_docTitle
  | tei_titlePart
  | tei_docAuthor
  | tei_imprimatur
  | tei_docEdition
  | tei_docImprint
  | tei_docDate
tei_model.choicePart =
  tei_sic
  | tei_corr
  | tei_reg
  | tei_orig
  | tei_unclear
  | tei_abbr
  | tei_expan
  | tei_seg
tei_model.imprintPart =
  tei_publisher | tei_biblScope | tei_pubPlace | tei_distributor
tei_model.catDescPart = notAllowed
tei_model.addressLike = tei_email | tei_address | tei_affiliation
tei_model.addressLike_alternation =
  tei_email | tei_address | tei_affiliation
tei_model.addressLike_sequence = tei_email, tei_address, tei_affiliation
tei_model.addressLike_sequenceOptional =
  tei_email?, tei_address?, tei_affiliation?
tei_model.addressLike_sequenceOptionalRepeatable =
  tei_email*, tei_address*, tei_affiliation*
tei_model.addressLike_sequenceRepeatable =
  tei_email+, tei_address+, tei_affiliation+
tei_model.nameLike =
  tei_model.nameLike.agent
  | tei_model.offsetLike
  | tei_model.placeStateLike
  | tei_rs
  | tei_idno
  | tei_model.persNamePart
tei_model.nameLike_alternation =
  tei_model.nameLike.agent_alternation
  | tei_model.offsetLike_alternation
  | tei_model.placeStateLike_alternation
  | tei_rs
  | tei_idno
  | tei_model.persNamePart_alternation
tei_model.nameLike_sequence =
  tei_model.nameLike.agent_sequence,
  tei_model.offsetLike_sequence,
  tei_model.placeStateLike_sequence,
  tei_rs,
  tei_idno,
  tei_model.persNamePart_sequence
tei_model.nameLike_sequenceOptional =
  tei_model.nameLike.agent_sequenceOptional?,
  tei_model.offsetLike_sequenceOptional?,
  tei_model.placeStateLike_sequenceOptional?,
  tei_rs?,
  tei_idno?,
  tei_model.persNamePart_sequenceOptional?
tei_model.nameLike_sequenceOptionalRepeatable =
  tei_model.nameLike.agent_sequenceOptionalRepeatable*,
  tei_model.offsetLike_sequenceOptionalRepeatable*,
  tei_model.placeStateLike_sequenceOptionalRepeatable*,
  tei_rs*,
  tei_idno*,
  tei_model.persNamePart_sequenceOptionalRepeatable*
tei_model.nameLike_sequenceRepeatable =
  tei_model.nameLike.agent_sequenceRepeatable+,
  tei_model.offsetLike_sequenceRepeatable+,
  tei_model.placeStateLike_sequenceRepeatable+,
  tei_rs+,
  tei_idno+,
  tei_model.persNamePart_sequenceRepeatable+
tei_model.global =
  tei_model.global.meta
  | tei_model.milestoneLike
  | tei_model.noteLike
  | tei_model.global.edit
  | tei_notatedMusic
  | tei_figure
tei_model.biblPart =
  tei_model.respLike
  | tei_model.imprintPart
  | tei_series
  | tei_citedRange
  | tei_bibl
  | tei_relatedItem
  | tei_textLang
  | tei_edition
  | tei_extent
  | tei_availability
  | tei_listRelation
tei_model.frontPart =
  tei_model.frontPart.drama | tei_divGen | tei_titlePage
tei_model.addrPart =
  tei_model.nameLike
  | tei_addrLine
  | tei_street
  | tei_postCode
  | tei_postBox
tei_model.pPart.data =
  tei_model.dateLike
  | tei_model.measureLike
  | tei_model.addressLike
  | tei_model.nameLike
tei_model.inter =
  tei_model.egLike
  | tei_model.oddDecl
  | tei_model.biblLike
  | tei_model.labelLike
  | tei_model.listLike
  | tei_model.stageLike
  | tei_model.qLike
tei_model.common = tei_model.divPart | tei_model.inter
tei_model.phrase =
  tei_model.segLike
  | tei_model.highlighted
  | tei_model.graphicLike
  | tei_model.pPart.msdesc
  | tei_model.pPart.edit
  | tei_model.ptrLike
  | tei_model.lPart
  | tei_model.phrase.xml
  | tei_model.specDescLike
  | tei_model.pPart.data
tei_model.limitedPhrase =
  tei_model.hiLike
  | tei_model.emphLike
  | tei_model.pPart.msdesc
  | tei_model.pPart.editorial
  | tei_model.ptrLike
  | tei_model.phrase.xml
  | tei_model.pPart.data
tei_model.divLike = tei_div
tei_model.divGenLike = tei_divGen
tei_model.div1Like = tei_div1
tei_model.div2Like = tei_div2
tei_model.div3Like = tei_div3
tei_model.div4Like = tei_div4
tei_model.div5Like = tei_div5
tei_model.div6Like = tei_div6
tei_model.div7Like = tei_div7
tei_model.applicationLike = tei_application
tei_model.teiHeaderPart = tei_encodingDesc | tei_profileDesc
tei_model.sourceDescPart = notAllowed
tei_model.encodingDescPart =
  tei_projectDesc
  | tei_samplingDecl
  | tei_editorialDecl
  | tei_tagsDecl
  | tei_styleDefDecl
  | tei_refsDecl
  | tei_listPrefixDef
  | tei_classDecl
  | tei_geoDecl
  | tei_appInfo
tei_model.editorialDeclPart =
  tei_correction
  | tei_normalization
  | tei_quotation
  | tei_hyphenation
  | tei_segmentation
  | tei_stdVals
  | tei_interpretation
  | tei_punctuation
tei_model.profileDescPart =
  tei_abstract
  | tei_creation
  | tei_langUsage
  | tei_textClass
  | tei_calendarDesc
tei_att.source.attributes = tei_att.source.attribute.source
tei_att.source.attribute.source =
  
  ## provides a pointer to the bibliographical source from which a quotation or citation is drawn.
  attribute source {
    list { tei_data.pointer+ }
  }?
tei_model.resourceLike = notAllowed
tei_att.personal.attributes =
  tei_att.naming.attributes,
  tei_att.personal.attribute.full,
  tei_att.personal.attribute.sort
tei_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 {
    
    ## 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"
  }?
tei_att.personal.attribute.sort =
  
  ## specifies the sort order of the name component in relation to others within the name.
  attribute sort { tei_data.count }?
tei_model.placeLike = tei_place
tei_att.milestoneUnit.attributes = tei_att.milestoneUnit.attribute.unit
tei_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 {
    
    ## physical page breaks (synonymous with the pb element).
    "page"
    | 
      ## column breaks.
      "column"
    | 
      ## line breaks (synonymous with the lb 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:Name
  }
tei_p =
  
  ## (paragraph) marks paragraphs in prose. [3.1.  7.2.5. ]
  element p {
    tei_macro.paraContent,
    tei_att.global.attributes,
    tei_att.declaring.attributes,
    tei_att.fragmentable.attributes,
    empty
  }
tei_foreign =
  
  ## identifies a word or phrase as belonging to some language other than that of the surrounding text. [3.3.2.1. ]
  element foreign {
    tei_macro.phraseSeq, tei_att.global.attributes, empty
  }
tei_emph =
  
  ## (emphasized) marks words or phrases which are stressed or emphasized for linguistic or rhetorical effect. [3.3.2.2.  3.3.2. ]
  element emph {
    tei_macro.paraContent, tei_att.global.attributes, empty
  }
tei_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.  3.3.2. ]
  element hi { tei_macro.paraContent, tei_att.global.attributes, empty }
tei_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. ]
  element distinct {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    
    ## specifies the sublanguage or register to which the word or phrase is being assigned
    attribute type { tei_data.enumerated }?,
    
    ## specifies how the phrase is distinct diachronically
    attribute time { tei_data.text }?,
    
    ## specifies how the phrase is distinct diatopically
    attribute space { tei_data.text }?,
    
    ## specifies how the phrase is distinct diastatically
    attribute social { tei_data.text }?,
    empty
  }
tei_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. ]
  element said {
    tei_macro.specialPara,
    tei_att.global.attributes,
    tei_att.ascribed.attributes,
    
    ## may be used to indicate whether the quoted matter is regarded as having been vocalized or signed.
    [ a:defaultValue = "unknown" ]
    attribute aloud { tei_data.xTruthValue }?,
    
    ## may be used to indicate whether the quoted matter is regarded as direct or indirect speech.
    [ a:defaultValue = "true" ]
    attribute direct { tei_data.xTruthValue }?,
    empty
  }
tei_quote =
  
  ## (quotation) contains a phrase or passage attributed by the narrator or author to some agency external to the text. [3.3.3.  4.3.1. ]
  element quote {
    tei_macro.specialPara,
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.source.attributes,
    empty
  }
tei_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. ]
  element q {
    tei_macro.specialPara,
    tei_att.global.attributes,
    tei_att.ascribed.attributes,
    tei_att.source.attributes,
    
    ## may be used to indicate whether the offset passage is spoken or thought, or to characterize it more finely.
    ## Suggested values include: 1] spoken; 2] thought; 3] written; 4] soCalled; 5] foreign; 6] distinct; 7] term; 8] emph; 9] mentioned
    attribute type {
      
      ## representation of speech
      "spoken"
      | 
        ## representation of thought, e.g. internal monologue
        "thought"
      | 
        ## quotation from a written source
        "written"
      | 
        ## authorial distance
        "soCalled"
      | 
        ##
        "foreign"
      | 
        ## linguistically distinct
        "distinct"
      | 
        ## technical term
        "term"
      | 
        ## rhetorically emphasized
        "emph"
      | 
        ## refering to itself, not its normal referent
        "mentioned"
      | xsd:Name
    }?,
    empty
  }
tei_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.  4.3.1.  9.3.5.1. ]
  element cit {
    (tei_model.qLike
     | tei_model.egLike
     | tei_model.biblLike
     | tei_model.ptrLike
     | tei_model.global
     | tei_model.entryPart)+,
    tei_att.global.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_mentioned =
  
  ## marks words or phrases mentioned, not used. [3.3.3. ]
  element mentioned {
    tei_macro.phraseSeq, tei_att.global.attributes, empty
  }
tei_soCalled =
  
  ## 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. ]
  element soCalled {
    tei_macro.phraseSeq, tei_att.global.attributes, empty
  }
tei_desc =
  
  ## (description) contains a brief description of the object documented by its parent element, including its intended usage, purpose, or application where this is appropriate. [22.4.1. ]
  element desc {
    tei_macro.limitedContent,
    tei_att.global.attributes,
    tei_att.translatable.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_gloss =
  
  ## identifies a phrase or word used to provide a gloss or definition for some other word or phrase. [3.3.4.  22.4.1. ]
  element gloss {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.declaring.attributes,
    tei_att.translatable.attributes,
    tei_att.typed.attributes,
    tei_att.pointing.attributes,
    tei_att.cReferencing.attributes,
    empty
  }
tei_term =
  
  ## contains a single-word, multi-word, or symbolic designation which is regarded as a technical term. [3.3.4. ]
  element term {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.declaring.attributes,
    tei_att.pointing.attributes,
    tei_att.typed.attributes,
    tei_att.canonical.attributes,
    tei_att.sortable.attributes,
    tei_att.cReferencing.attributes,
    empty
  }
tei_sic =
  
  ## (Latin for thus or so
  ##    ) contains text reproduced although apparently incorrect or inaccurate. [3.4.1. ]
  element sic {
    tei_macro.paraContent,
    tei_att.global.attributes,
    tei_att.responsibility.attributes,
    empty
  }
tei_corr =
  
  ## (correction) contains the correct form of a passage apparently erroneous in the copy text. [3.4.1. ]
  element corr {
    tei_macro.paraContent,
    tei_att.global.attributes,
    tei_att.editLike.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_choice =
  
  ## groups a number of alternative encodings for the same point in a text. [3.4. ]
  element choice {
    (tei_model.choicePart | tei_choice)*,
    tei_att.global.attributes,
    empty
  }
tei_reg =
  
  ## (regularization) contains a reading which has been regularized or normalized in some sense. [3.4.2.  12. ]
  element reg {
    tei_macro.paraContent,
    tei_att.global.attributes,
    tei_att.editLike.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_orig =
  
  ## (original form) contains a reading which is marked as following the original, rather than being normalized or corrected. [3.4.2.  12. ]
  element orig {
    tei_macro.paraContent,
    tei_att.global.attributes,
    tei_att.responsibility.attributes,
    empty
  }
tei_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.4.3. ]
  element gap {
    (tei_model.descLike | tei_model.certLike)*,
    tei_att.global.attributes,
    tei_att.editLike.attributes,
    
    ## gives the reason for omission. Sample values include sampling, inaudible, irrelevant, cancelled.
    attribute reason {
      list { tei_data.word+ }
    }?,
    
    ## in the case of text omitted from the transcription because of deliberate deletion by an identifiable hand, indicates the hand which made the deletion.
    attribute hand { tei_data.pointer }?,
    
    ## 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; 2] mildew; 3] smoke
    attribute agent { tei_data.enumerated }?,
    empty
  }
tei_add =
  
  ## (addition) contains letters, words, or phrases inserted in the source text by an author, scribe, or a previous annotator or corrector. [3.4.3. ]
  element add {
    tei_macro.paraContent,
    tei_att.global.attributes,
    tei_att.transcriptional.attributes,
    tei_att.placement.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_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.4.3. ]
  element del {
    tei_macro.paraContent,
    tei_att.global.attributes,
    tei_att.transcriptional.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_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.  3.4.3. ]
  element unclear {
    tei_macro.paraContent,
    tei_att.global.attributes,
    tei_att.editLike.attributes,
    
    ## indicates why the material is hard to transcribe.
    attribute reason {
      list { tei_data.word+ }
    }?,
    
    ## Where the difficulty in transcription arises from action (partial deletion, etc.) assignable to an identifiable hand, signifies the hand responsible for the action.
    attribute hand { tei_data.pointer }?,
    
    ## 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 { tei_data.enumerated }?,
    empty
  }
tei_name =
  
  ## (name, proper noun) contains a proper noun or noun phrase. [3.5.1. ]
  element name {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.personal.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_rs =
  
  ## (referencing string) contains a general purpose name or referring string. [13.2.1.  3.5.1. ]
  element rs {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.naming.attributes,
    tei_att.typed.attributes,
    tei_att.responsibility.attributes,
    empty
  }
tei_email =
  
  ## (electronic mail address) contains an email address identifying a location to which email messages can be delivered. [3.5.2. ]
  element email {
    tei_macro.phraseSeq, tei_att.global.attributes, empty
  }
tei_address =
  
  ## contains a postal address, for example of a publisher, an organization, or an individual. [3.5.2.  2.2.4.  3.11.2.4. ]
  element address {
    (tei_model.global*, (tei_model.addrPart, tei_model.global*)+),
    tei_att.global.attributes,
    empty
  }
tei_addrLine =
  
  ## (address line) contains one line of a postal address. [3.5.2.  2.2.4.  3.11.2.4. ]
  element addrLine {
    tei_macro.phraseSeq, tei_att.global.attributes, empty
  }
tei_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.5.2. ]
  element street {
    tei_macro.phraseSeq, tei_att.global.attributes, empty
  }
tei_postCode =
  
  ## (postal code) contains a numerical or alphanumeric code used as part of a postal address to simplify sorting or delivery of mail. [3.5.2. ]
  element postCode { text, tei_att.global.attributes, empty }
tei_postBox =
  
  ## (postal box or post office box) contains a number or other identifier for some postal delivery point other than a street address. [3.5.2. ]
  element postBox { text, tei_att.global.attributes, empty }
tei_num =
  
  ## (number) contains a number, written in any form. [3.5.3. ]
  element num {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_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:Name
    }?,
    
    ## supplies the value of the number in standard form.
    attribute value { tei_data.numeric }?,
    empty
  }
tei_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.5.3. ]
  element measure {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.measurement.attributes,
    
    ## specifies the type of measurement in any convenient typology.
    attribute type { tei_data.enumerated }?,
    empty
  }
tei_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. ]
  element measureGrp {
    (text | tei_model.gLike | tei_model.measureLike)*,
    tei_att.global.attributes,
    tei_att.measurement.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_date =
  
  ## contains a date in any format. [3.5.4.  2.2.4.  2.5.  3.11.2.4.  15.2.3.  13.3.6. ]
  element date {
    (text | tei_model.gLike | tei_model.phrase | tei_model.global)*,
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_time =
  
  ## contains a phrase defining a time of day in any format. [3.5.4. ]
  element time {
    (text | tei_model.gLike | tei_model.phrase | tei_model.global)*,
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_abbr =
  
  ## (abbreviation) contains an abbreviation of any sort. [3.5.5. ]
  element abbr {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.responsibility.attributes,
    tei_att.typed.attribute.subtype,
    
    ## allows the encoder to classify the abbreviation according to some convenient typology.
    attribute type { tei_data.enumerated }?,
    empty
  }
tei_expan =
  
  ## (expansion) contains the expansion of an abbreviation. [3.5.5. ]
  element expan {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.editLike.attributes,
    empty
  }
tei_ptr =
  
  ## (pointer) defines a pointer to another location. [3.6.  16.1. ]
  element ptr {
    empty
    >> sch:pattern [
         id = "IstexSchema-ptr-ptrAtts-constraint-1"
         "\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}" ~
         "         "
       ],
    tei_att.global.attributes,
    tei_att.pointing.attributes,
    tei_att.internetMedia.attributes,
    tei_att.typed.attributes,
    tei_att.declaring.attributes,
    tei_att.cReferencing.attributes,
    empty
  }
tei_ref =
  
  ## (reference) defines a reference to another location, possibly modified by additional text or comment. [3.6.  16.1. ]
  element ref {
    tei_macro.paraContent
    >> sch:pattern [
         id = "IstexSchema-ref-refAtts-constraint-2"
         "\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}" ~
         "         "
       ],
    tei_att.global.attributes,
    tei_att.pointing.attributes,
    tei_att.internetMedia.attributes,
    tei_att.typed.attributes,
    tei_att.declaring.attributes,
    tei_att.cReferencing.attributes,
    empty
  }
tei_list =
  
  ## contains any sequence of items organized as a list. [3.7. ]
  element list {
    ((tei_model.divTop | tei_model.global)*,
     ((tei_item, tei_model.global*)+
      | (tei_headLabel?,
         tei_headItem?,
         (tei_label, tei_model.global*, tei_item, tei_model.global*)+)),
     (tei_model.divBottom, tei_model.global*)*),
    tei_att.global.attributes,
    tei_att.sortable.attributes,
    tei_att.typed.attribute.subtype,
    
    ## describes the nature of the items in the list.
    ## Suggested values include: 1] gloss; 2] index; 3] instructions; 4] litany; 5] syllogism
    attribute type {
      
      ## each list item glosses some term or concept, which is given by a label element preceding the list item.
      "gloss"
      | 
        ## each list item is an entry in an index such as the alphabetical topical index at the back of a print volume.
        "index"
      | 
        ## each list item is a step in a sequence of instructions, as in a recipe.
        "instructions"
      | 
        ## each list item is one of a sequence of petitions, supplications or invocations, typically in a religious ritual.
        "litany"
      | 
        ## each list item is part of an argument consisting of two or more propositions and a final conclusion derived from them.
        "syllogism"
      | xsd:Name
    }?,
    empty
  }
tei_item =
  
  ## contains one component of a list. [3.7.  2.5. ]
  element item {
    tei_macro.specialPara,
    tei_att.global.attributes,
    tei_att.sortable.attributes,
    empty
  }
tei_label =
  
  ## contains any label or heading used to identify part of a text, typically but not exclusively in a list or glossary. [3.7. ]
  element label {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.placement.attributes,
    empty
  }
tei_head =
  
  ## (heading) contains any type of heading, for example the title of a section, or the heading of a list, glossary, manuscript description, etc. [4.2.1. ]
  element head {
    (text
     | tei_lg
     | tei_model.gLike
     | tei_model.phrase
     | tei_model.inter
     | tei_model.lLike
     | tei_model.global)*,
    tei_att.global.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_headLabel =
  
  ## (heading for list labels) contains the heading for the label or term column in a glossary list or similar structured list. [3.7. ]
  element headLabel {
    tei_macro.phraseSeq, tei_att.global.attributes, empty
  }
tei_headItem =
  
  ## (heading for list items) contains the heading for the item or gloss column in a glossary list or similar structured list. [3.7. ]
  element headItem {
    tei_macro.phraseSeq, tei_att.global.attributes, empty
  }
tei_note =
  
  ## contains a note or annotation. [3.8.1.  2.2.6.  3.11.2.8.  9.3.5.4. ]
  element note {
    tei_macro.specialPara,
    tei_att.global.attributes,
    tei_att.placement.attributes,
    tei_att.pointing.attributes,
    tei_att.responsibility.attributes,
    tei_att.typed.attributes,
    
    ## indicates whether the copy text shows the exact place of reference for the note.
    [ a:defaultValue = "true" ]
    attribute anchored { tei_data.truthValue }?,
    
    ## 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 { tei_data.pointer+ }
    }?,
    empty
  }
tei_index =
  
  ## (index entry) marks a location to be indexed for whatever purpose. [3.8.2. ]
  element index {
    (tei_term, tei_index?)*,
    tei_att.global.attributes,
    tei_att.spanning.attributes,
    
    ## a single word which follows the rules defining a legal XML name (see ), supplying a name to specify which index (of several) the index entry belongs to.
    attribute indexName { tei_data.name }?,
    empty
  }
tei_media =
  
  ## indicates the location of any form of external media such as an audio or video clip etc. [3.9. ]
  element media {
    tei_model.descLike*,
    tei_att.typed.attributes,
    tei_att.global.attributes,
    tei_att.media.attribute.width,
    tei_att.media.attribute.height,
    tei_att.media.attribute.scale,
    tei_att.resourced.attributes,
    tei_att.declaring.attributes,
    tei_att.timed.attributes,
    
    ## (MIME media type) specifies the applicable multimedia internet mail extension (MIME) media type
    attribute mimeType {
      list { tei_data.word+ }
    },
    empty
  }
tei_graphic =
  
  ## indicates the location of an inline graphic, illustration, or figure. [3.9. ]
  element graphic {
    tei_model.descLike*,
    tei_att.global.attributes,
    tei_att.media.attributes,
    tei_att.resourced.attributes,
    tei_att.declaring.attributes,
    empty
  }
tei_binaryObject =
  
  ## provides encoded binary data representing an inline graphic, audio, video or other object. [3.9. ]
  element binaryObject {
    text,
    tei_att.global.attributes,
    tei_att.media.attributes,
    tei_att.timed.attributes,
    tei_att.typed.attributes,
    
    ## The encoding used to encode the binary data. If not specified, this is assumed to be Base64.
    attribute encoding {
      list { tei_data.word+ }
    }?,
    empty
  }
tei_milestone =
  
  ## marks a boundary point separating any kind of section of a text, typically but not necessarily indicating a point at which some part of a standard reference system changes, where the change is not represented by a structural element. [3.10.3. ]
  element milestone {
    empty,
    tei_att.global.attributes,
    tei_att.milestoneUnit.attributes,
    tei_att.typed.attributes,
    tei_att.edition.attributes,
    tei_att.spanning.attributes,
    tei_att.breaking.attributes,
    empty
  }
tei_gb =
  
  ## (gathering begins) marks the point in a transcribed codex at which a new gathering or quire begins. [3.10.3. ]
  element gb {
    empty,
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.spanning.attributes,
    tei_att.breaking.attributes,
    empty
  }
tei_pb =
  
  ## (page break) marks the start of a new page in a paginated document. [3.10.3. ]
  element pb {
    empty,
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.edition.attributes,
    tei_att.spanning.attributes,
    tei_att.breaking.attributes,
    empty
  }
tei_lb =
  
  ## (line break) marks the start of a new (typographic) line in some edition or version of a text. [3.10.3.  7.2.5. ]
  element lb {
    empty,
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.edition.attributes,
    tei_att.spanning.attributes,
    tei_att.breaking.attributes,
    empty
  }
tei_cb =
  
  ## (column break) marks the beginning of a new column of a text on a multi-column page. [3.10.3. ]
  element cb {
    empty,
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.edition.attributes,
    tei_att.spanning.attributes,
    tei_att.breaking.attributes,
    empty
  }
tei_analytic =
  
  ## (analytic level) contains bibliographic elements describing an item (e.g. an article or poem) published within a monograph or journal and not as an independent publication. [3.11.2.1. ]
  element analytic {
    (tei_author
     | tei_editor
     | tei_respStmt
     | tei_title
     | tei_model.ptrLike
     | tei_date
     | tei_textLang
     | tei_idno
     | tei_availability)*,
    tei_att.global.attributes,
    empty
  }
tei_monogr =
  
  ## (monographic level) contains bibliographic elements describing an item (e.g. a book or journal) published as an independent item (i.e. as a separate physical object). [3.11.2.1. ]
  element monogr {
    ((((tei_author | tei_editor | tei_meeting | tei_respStmt),
       (tei_author | tei_editor | tei_meeting | tei_respStmt)*,
       tei_title+,
       (tei_model.ptrLike
        | tei_idno
        | tei_textLang
        | tei_editor
        | tei_respStmt)*)
      | ((tei_title | tei_model.ptrLike | tei_idno)+,
         (tei_textLang
          | tei_author
          | tei_editor
          | tei_meeting
          | tei_respStmt)*)
      | (tei_authority, tei_idno))?,
     tei_availability*,
     tei_model.noteLike*,
     (tei_edition,
      (tei_idno
       | tei_model.ptrLike
       | tei_editor
       | tei_sponsor
       | tei_funder
       | tei_respStmt)*)*,
     tei_imprint,
     (tei_imprint | tei_extent | tei_biblScope)*),
    tei_att.global.attributes,
    empty
  }
tei_series =
  
  ## (series information) contains information about the series in which a book or other bibliographic item has appeared. [3.11.2.1. ]
  element series {
    (text
     | tei_model.gLike
     | tei_title
     | tei_model.ptrLike
     | tei_editor
     | tei_respStmt
     | tei_biblScope
     | tei_idno
     | tei_textLang
     | tei_model.global
     | tei_availability)*,
    tei_att.global.attributes,
    empty
  }
tei_author =
  
  ## in a bibliographic reference, contains the name(s) of an author, personal or corporate, of a work; for example in the same form as that provided by a recognized bibliographic name authority. [3.11.2.2.  2.2.1. ]
  element author {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.naming.attributes,
    empty
  }
tei_editor =
  
  ## contains a secondary statement of responsibility for a bibliographic item, for example the name of an individual, institution or organization, (or of several such) acting as editor, compiler, translator, etc. [3.11.2.2. ]
  element editor {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.naming.attributes,
    empty
  }
tei_respStmt =
  
  ## (statement of responsibility) supplies a statement of responsibility for the intellectual content of a text, edition, recording, or series, where the specialized elements for authors, editors, etc. do not suffice or do not apply. May also be used to encode information about individuals or organizations which have played a role in the production or distribution of a bibliographic work. [3.11.2.2.  2.2.1.  2.2.2.  2.2.5. ]
  element respStmt {
    ((tei_resp+, tei_model.nameLike.agent+)
     | (tei_model.nameLike.agent+, tei_resp+)),
    tei_att.global.attributes,
    tei_att.canonical.attributes,
    empty
  }
tei_resp =
  
  ## (responsibility) contains a phrase describing the nature of a person's intellectual responsibility, or an organization's role in the production or distribution of a work. [3.11.2.2.  2.2.1.  2.2.2.  2.2.5. ]
  element resp {
    tei_macro.phraseSeq.limited,
    tei_att.global.attributes,
    tei_att.canonical.attributes,
    tei_att.datable.attributes,
    empty
  }
tei_title =
  
  ## contains a title for any kind of work. [3.11.2.2.  2.2.1.  2.2.5. ]
  element title {
    tei_macro.paraContent,
    tei_att.global.attributes,
    tei_att.canonical.attributes,
    tei_att.typed.attribute.subtype,
    
    ## classifies the title according to some convenient typology.
    ## Sample values include: 1] main; 2] sub(subordinate) ; 3] alt(alternate) ; 4] short; 5] desc(descriptive) 
    attribute type { tei_data.enumerated }?,
    
    ## indicates the bibliographic level for a title, that is, whether it identifies an article, book, journal, series, or unpublished material.
    attribute level {
      
      ## (analytic) the title applies to an analytic item, such as an article, poem, or other work published as part of a larger item.
      "a"
      | 
        ## (monographic) the title applies to a monograph such as a book or other item considered to be a distinct publication, including single volumes of multi-volume works
        "m"
      | 
        ## (journal) the title applies to any serial or periodical publication such as a journal, magazine, or newspaper
        "j"
      | 
        ## (series) the title applies to a series of otherwise distinct publications such as a collection
        "s"
      | 
        ## (unpublished) the title applies to any unpublished material (including theses and dissertations unless published by a commercial press)
        "u"
    }?,
    empty
  }
tei_meeting =
  
  ## contains the formalized descriptive title for a meeting or conference, for use in a bibliographic description for an item derived from such a meeting, or as a heading or preamble to publications emanating from it. [3.11.2.2. ]
  element meeting {
    tei_macro.limitedContent,
    tei_att.global.attributes,
    tei_att.canonical.attributes,
    empty
  }
tei_imprint =
  
  ## groups information relating to the publication or distribution of a bibliographic item. [3.11.2.4. ]
  element imprint {
    ((tei_classCode | tei_catRef)*,
     ((tei_model.imprintPart | tei_model.dateLike),
      tei_respStmt*,
      tei_model.global*)+),
    tei_att.global.attributes,
    empty
  }
tei_publisher =
  
  ## provides the name of the organization responsible for the publication or distribution of a bibliographic item. [3.11.2.4.  2.2.4. ]
  element publisher {
    tei_macro.phraseSeq, tei_att.global.attributes, empty
  }
tei_biblScope =
  
  ## (scope of bibliographic reference) defines the scope of a bibliographic reference, for example as a list of page numbers, or a named subdivision of a larger work. [3.11.2.5. ]
  element biblScope {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.citing.attributes,
    
    ## identifies the type of information conveyed by the element, e.g. columns, pages, volume.
    ## Suggested values include: 1] vol(volume) ; 2] issue; 3] pp(pages) ; 4] ll(lines) ; 5] chap(chapter) ; 6] part
    attribute type {
      
      ## (volume) the element contains a volume number.
      "vol"
      | 
        ## the element contains an issue number, or volume and issue numbers.
        "issue"
      | 
        ## (pages) the element contains a page number or page range.
        "pp"
      | 
        ## (lines) the element contains a line number or line range.
        "ll"
      | 
        ## (chapter) the element contains a chapter indication (number and/or title)
        "chap"
      | 
        ## the element identifies a part of a book or collection.
        "part"
      | xsd:Name
    }?,
    empty
  }
tei_citedRange =
  
  ## (cited range) defines the range of cited content, often represented by pages or other units [3.11.2.5. ]
  element citedRange {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.pointing.attributes,
    tei_att.citing.attributes,
    empty
  }
tei_pubPlace =
  
  ## (publication place) contains the name of the place where a bibliographic item was published. [3.11.2.4. ]
  element pubPlace {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.naming.attributes,
    empty
  }
tei_bibl =
  
  ## (bibliographic citation) contains a loosely-structured bibliographic citation of which the sub-components may or may not be explicitly tagged. [3.11.1.  2.2.7.  15.3.2. ]
  element bibl {
    (text
     | tei_model.gLike
     | tei_model.highlighted
     | tei_model.pPart.data
     | tei_model.pPart.edit
     | tei_model.segLike
     | tei_model.ptrLike
     | tei_model.biblPart
     | tei_model.global)*,
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    tei_att.typed.attributes,
    tei_att.sortable.attributes,
    tei_att.docStatus.attributes,
    empty
  }
tei_biblStruct =
  
  ## (structured bibliographic citation) contains a structured bibliographic citation, in which only bibliographic sub-elements appear and in a specified order. [3.11.1.  2.2.7.  15.3.2. ]
  element biblStruct {
    (tei_analytic*,
     (tei_monogr, tei_series*)+,
     (tei_model.noteLike
      | tei_idno
      | tei_model.ptrLike
      | tei_relatedItem
      | tei_citedRange)*),
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    tei_att.typed.attributes,
    tei_att.sortable.attributes,
    tei_att.docStatus.attributes,
    empty
  }
tei_listBibl =
  
  ## (citation list) contains a list of bibliographic citations of any kind. [3.11.1.  2.2.7.  15.3.2. ]
  element listBibl {
    (tei_model.headLike*,
     (tei_model.biblLike | tei_model.milestoneLike)+,
     (tei_relation | tei_listRelation)*),
    tei_att.global.attributes,
    tei_att.sortable.attributes,
    tei_att.declarable.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_relatedItem =
  
  ## contains or references some other bibliographic item which is related to the present one in some specified manner, for example as a constituent or alternative version of it. [3.11.2.7. ]
  element relatedItem {
    ((tei_model.biblLike | tei_model.ptrLike)?)
    >> sch:pattern [
         id = "IstexSchema-relatedItem-targetorcontent1-constraint-3"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:relatedItem"
           "\x{a}" ~
           "               "
           sch:report [
             test = "@target and count( child::* ) > 0"
             "\x{a}" ~
             "If the @target attribute on "
             sch:name [ ]
             " is used, the\x{a}" ~
             "relatedItem element must be empty"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ]
    >> sch:pattern [
         id = "IstexSchema-relatedItem-targetorcontent1-constraint-6"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:relatedItem"
           "\x{a}" ~
           "               "
           sch:assert [
             test = "@target or child::*"
             "A relatedItem element should have either a 'target' attribute\x{a}" ~
             "        or a child element to indicate the related bibliographic item"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    tei_att.global.attributes,
    tei_att.typed.attributes,
    
    ## points to the related bibliographic element by means of an absolute or relative URI reference
    attribute target { tei_data.pointer }?,
    empty
  }
tei_l =
  
  ## (verse line) contains a single, possibly incomplete, line of verse. [3.12.1.  3.12.  7.2.5. ]
  element l {
    tei_macro.paraContent,
    tei_att.global.attributes,
    tei_att.fragmentable.attributes,
    empty
  }
tei_lg =
  
  ## (line group) contains one or more verse lines functioning as a formal unit, e.g. a stanza, refrain, verse paragraph, etc. [3.12.1.  3.12.  7.2.5. ]
  element lg {
    ((tei_model.divTop | tei_model.global)*,
     (tei_model.lLike
      | tei_model.stageLike
      | tei_model.labelLike
      | tei_lg),
     (tei_model.lLike
      | tei_model.stageLike
      | tei_model.labelLike
      | tei_model.global
      | tei_lg)*,
     (tei_model.divBottom, tei_model.global*)*)
    >> sch:pattern [
         id = "IstexSchema-lg-atleast1oflggapl-constraint-7"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:lg"
           "\x{a}" ~
           "               "
           sch:assert [
             test =
               "count(descendant::tei:lg|descendant::tei:l|descendant::tei:gap) > 0"
             "An lg element\x{a}" ~
             "        must contain at least one child l, lg or gap element."
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    tei_att.global.attributes,
    tei_att.divLike.attributes,
    tei_att.typed.attributes,
    tei_att.declaring.attributes,
    empty
  }
tei_sp =
  
  ## (speech) contains an individual speech in a performance text, or a passage presented as such in a prose or verse text. [3.12.2.  3.12.  7.2.2. ]
  element sp {
    (tei_model.global*,
     (tei_speaker, tei_model.global*)?,
     ((tei_lg
       | tei_model.lLike
       | tei_model.pLike
       | tei_model.listLike
       | tei_model.stageLike
       | tei_model.qLike),
      tei_model.global*)+),
    tei_att.global.attributes,
    tei_att.ascribed.attributes,
    empty
  }
tei_speaker =
  
  ## contains a specialized form of heading or label, giving the name of one or more speakers in a dramatic text or fragment. [3.12.2. ]
  element speaker {
    tei_macro.phraseSeq, tei_att.global.attributes, empty
  }
tei_stage =
  
  ## (stage direction) contains any kind of stage direction within a dramatic text or fragment. [3.12.2.  3.12.  7.2.4. ]
  element stage {
    tei_macro.specialPara,
    tei_att.ascribed.attributes,
    tei_att.global.attributes,
    tei_att.placement.attributes,
    
    ## indicates the kind of stage direction.
    ## Suggested values include: 1] setting; 2] entrance; 3] exit; 4] business; 5] novelistic; 6] delivery; 7] modifier; 8] location; 9] mixed
    attribute type {
      
      ## describes a setting.
      "setting"
      | 
        ## describes an entrance.
        "entrance"
      | 
        ## describes an exit.
        "exit"
      | 
        ## describes stage business.
        "business"
      | 
        ## is a narrative, motivating stage direction.
        "novelistic"
      | 
        ## describes how a character speaks.
        "delivery"
      | 
        ## gives some detail about a character.
        "modifier"
      | 
        ## describes a location.
        "location"
      | 
        ## more than one of the above
        "mixed"
      | xsd:Name
    }?,
    empty
  }
tei_teiCorpus =
  
  ## contains the whole of a TEI encoded corpus, comprising a single corpus header and one or more TEI elements, each containing a single text header and a text. [4.  15.1. ]
  element teiCorpus {
    (tei_teiHeader,
     ((tei_model.resourceLike+, (tei_TEI | tei_teiCorpus)*)
      | (tei_TEI | tei_teiCorpus)+)),
    tei_att.global.attributes,
    
    ## The version of the TEI scheme
    [ a:defaultValue = "5.0" ] attribute version { tei_data.version }?,
    empty
  }
tei_divGen =
  
  ## (automatically generated text division) indicates the location at which a textual division generated automatically by a text-processing application is to appear. [3.8.2. ]
  element divGen {
    tei_model.headLike*,
    tei_att.global.attributes,
    
    ## specifies what type of generated text division (e.g. index, table of contents, etc.) is to appear.
    ## Sample values include: 1] index; 2] toc; 3] figlist; 4] tablist
    attribute type { tei_data.enumerated }?,
    empty
  }
tei_textLang =
  
  ## (text language) describes the languages and writing systems identified within the bibliographic work being described, rather than its description. [3.11.2.4.  10.6.6. ]
  element textLang {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    
    ## (main language) supplies a code which identifies the chief language used in the bibliographic work.
    attribute mainLang { tei_data.language }?,
    
    ## (other languages) one or more codes identifying any other languages used in the bibliographic work.
    attribute otherLangs {
      list { tei_data.language* }
    }?,
    empty
  }
tei_att.patternReplacement.attributes =
  tei_att.patternReplacement.attribute.matchPattern,
  tei_att.patternReplacement.attribute.replacementPattern
tei_att.patternReplacement.attribute.matchPattern =
  
  ## specifies a regular expression against which the values of other attributes can be matched.
  attribute matchPattern { tei_data.pattern }
tei_att.patternReplacement.attribute.replacementPattern =
  
  ## specifies a replacement pattern, that is, the skeleton of a relative or absolute URI containing references to groups in the matchPattern which, once subpattern substitution has been performed, complete the URI.
  attribute replacementPattern { tei_data.replacement }
tei_teiHeader =
  
  ## (TEI header) supplies the descriptive and declarative information making up an electronic title page for every TEI-conformant document. [2.1.1.  15.1. ]
  element teiHeader {
    (tei_fileDesc, tei_model.teiHeaderPart*, tei_revisionDesc?),
    tei_att.global.attributes,
    
    ## specifies the kind of document to which the header is attached, for example whether it is a corpus or individual text.
    ## Sample values include: 1] text; 2] corpus
    [ a:defaultValue = "text" ] attribute type { tei_data.enumerated }?,
    empty
  }
tei_fileDesc =
  
  ## (file description) contains a full bibliographic description of an electronic file. [2.2.  2.1.1. ]
  element fileDesc {
    ((tei_titleStmt,
      tei_editionStmt?,
      tei_extent?,
      tei_publicationStmt,
      tei_seriesStmt?,
      tei_notesStmt?),
     tei_sourceDesc+),
    tei_att.global.attributes,
    empty
  }
tei_titleStmt =
  
  ## (title statement) groups information about the title of a work and those responsible for its content. [2.2.1.  2.2. ]
  element titleStmt {
    (tei_title+, tei_model.respLike*), tei_att.global.attributes, empty
  }
tei_sponsor =
  
  ## specifies the name of a sponsoring organization or institution. [2.2.1. ]
  element sponsor {
    tei_macro.phraseSeq.limited,
    tei_att.global.attributes,
    tei_att.canonical.attributes,
    empty
  }
tei_funder =
  
  ## (funding body) specifies the name of an individual, institution, or organization responsible for the funding of a project or text. [2.2.1. ]
  element funder {
    tei_macro.phraseSeq.limited,
    tei_att.global.attributes,
    tei_att.canonical.attributes,
    empty
  }
tei_principal =
  
  ## (principal researcher) supplies the name of the principal researcher responsible for the creation of an electronic text. [2.2.1. ]
  element principal {
    tei_macro.phraseSeq.limited,
    tei_att.global.attributes,
    tei_att.canonical.attributes,
    empty
  }
tei_editionStmt =
  
  ## (edition statement) groups information relating to one edition of a text. [2.2.2.  2.2. ]
  element editionStmt {
    (tei_model.pLike+ | (tei_edition, tei_model.respLike*)),
    tei_att.global.attributes,
    empty
  }
tei_edition =
  
  ## describes the particularities of one edition of a text. [2.2.2. ]
  element edition {
    tei_macro.phraseSeq, tei_att.global.attributes, empty
  }
tei_extent =
  
  ## describes the approximate size of a text stored on some carrier medium or of some other object, digital or non-digital, specified in any convenient units. [2.2.3.  2.2.  3.11.2.4.  10.7.1. ]
  element extent {
    tei_macro.phraseSeq, tei_att.global.attributes, empty
  }
tei_publicationStmt =
  
  ## (publication statement) groups information concerning the publication or distribution of an electronic or other text. [2.2.4.  2.2. ]
  element publicationStmt {
    ((tei_model.publicationStmtPart.agency,
      tei_model.publicationStmtPart.detail*)+
     | tei_model.pLike+),
    tei_att.global.attributes,
    empty
  }
tei_distributor =
  
  ## supplies the name of a person or other agency responsible for the distribution of a text. [2.2.4. ]
  element distributor {
    tei_macro.phraseSeq, tei_att.global.attributes, empty
  }
tei_authority =
  
  ## (release authority) supplies the name of a person or other agency responsible for making a work available, other than a publisher or distributor. [2.2.4. ]
  element authority {
    tei_macro.phraseSeq.limited, tei_att.global.attributes, empty
  }
tei_idno =
  
  ## (identifier) supplies any form of identifier used to identify some object, such as a bibliographic item, a person, a title, an organization, etc. in a standardized way. [2.2.4.  2.2.5.  3.11.2.4. ]
  element idno {
    (text | tei_model.gLike | tei_idno)*,
    tei_att.global.attributes,
    tei_att.sortable.attributes,
    
    ## categorizes the identifier, for example as an ISBN, Social Security number, etc.
    attribute type { tei_data.enumerated }?,
    empty
  }
tei_availability =
  
  ## supplies information about the availability of a text, for example any restrictions on its use or distribution, its copyright status, any licence applying to it, etc. [2.2.4. ]
  element availability {
    (tei_model.availabilityPart | tei_model.pLike)+,
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    
    ## supplies a code identifying the current availability of the text.
    [ a:defaultValue = "unknown" ]
    attribute status {
      
      ## the text is freely available.
      "free"
      | 
        ## the status of the text is unknown.
        "unknown"
      | 
        ## the text is not freely available.
        "restricted"
    }?,
    empty
  }
tei_licence =
  
  ## contains information about a licence or other legal agreement applicable to the text. [2.2.4. ]
  element licence {
    tei_macro.specialPara,
    tei_att.global.attributes,
    tei_att.pointing.attributes,
    tei_att.datable.attributes,
    empty
  }
tei_seriesStmt =
  
  ## (series statement) groups information about the series, if any, to which a publication belongs. [2.2.5.  2.2. ]
  element seriesStmt {
    (tei_model.pLike+
     | (tei_title+,
        (tei_editor | tei_respStmt)*,
        (tei_idno | tei_biblScope)*)),
    tei_att.global.attributes,
    empty
  }
tei_notesStmt =
  
  ## (notes statement) collects together any notes providing information about a text additional to that recorded in other parts of the bibliographic description. [2.2.6.  2.2. ]
  element notesStmt {
    (tei_model.noteLike | tei_relatedItem)+,
    tei_att.global.attributes,
    empty
  }
tei_sourceDesc =
  
  ## (source description) describes the source from which an electronic text was derived or generated, typically a bibliographic description in the case of a digitized text, or a phrase such as "born digital" for a text which has no previous existence. [2.2.7. ]
  element sourceDesc {
    (tei_model.pLike+
     | (tei_model.biblLike
        | tei_model.sourceDescPart
        | tei_model.listLike)+),
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    empty
  }
tei_biblFull =
  
  ## (fully-structured bibliographic citation) contains a fully-structured bibliographic citation, in which all components of the TEI file description are present. [3.11.1.  2.2.  2.2.7.  15.3.2. ]
  element biblFull {
    ((tei_titleStmt,
      tei_editionStmt?,
      tei_extent?,
      tei_publicationStmt,
      tei_seriesStmt?,
      tei_notesStmt?),
     tei_sourceDesc*),
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    tei_att.sortable.attributes,
    tei_att.docStatus.attributes,
    empty
  }
tei_encodingDesc =
  
  ## (encoding description) documents the relationship between an electronic text and the source or sources from which it was derived. [2.3.  2.1.1. ]
  element encodingDesc {
    (tei_model.encodingDescPart | tei_model.pLike)+,
    tei_att.global.attributes,
    empty
  }
tei_projectDesc =
  
  ## (project description) describes in detail the aim or purpose for which an electronic file was encoded, together with any other relevant information concerning the process by which it was assembled or collected. [2.3.1.  2.3.  15.3.2. ]
  element projectDesc {
    tei_model.pLike+,
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    empty
  }
tei_samplingDecl =
  
  ## (sampling declaration) contains a prose description of the rationale and methods used in sampling texts in the creation of a corpus or collection. [2.3.2.  2.3.  15.3.2. ]
  element samplingDecl {
    tei_model.pLike+,
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    empty
  }
tei_editorialDecl =
  
  ## (editorial practice declaration) provides details of editorial principles and practices applied during the encoding of a text. [2.3.3.  2.3.  15.3.2. ]
  element editorialDecl {
    (tei_model.pLike | tei_model.editorialDeclPart)+,
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    empty
  }
tei_correction =
  
  ## (correction principles) states how and under what circumstances corrections have been made in the text. [2.3.3.  15.3.2. ]
  element correction {
    tei_model.pLike+,
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    
    ## indicates the degree of correction applied to the text.
    [ a:defaultValue = "unknown" ]
    attribute status {
      
      ## the text has been thoroughly checked and proofread.
      "high"
      | 
        ## the text has been checked at least once.
        "medium"
      | 
        ## the text has not been checked.
        "low"
      | 
        ## the correction status of the text is unknown.
        "unknown"
    }?,
    
    ## indicates the method adopted to indicate corrections within the text.
    [ a:defaultValue = "silent" ]
    attribute method {
      
      ## corrections have been made silently
      "silent"
      | 
        ## corrections have been represented using markup
        "markup"
    }?,
    empty
  }
tei_normalization =
  
  ## indicates the extent of normalization or regularization of the original source carried out in converting it to electronic form. [2.3.3.  15.3.2. ]
  element normalization {
    tei_model.pLike+,
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    
    ## indicates a bibliographic description or other resource documenting the principles underlying the normalization carried out.
    attribute source { tei_data.pointer }?,
    
    ## indicates the method adopted to indicate normalizations within the text.
    [ a:defaultValue = "silent" ]
    attribute method {
      
      ## normalization made silently
      "silent"
      | 
        ## normalization represented using markup
        "markup"
    }?,
    empty
  }
tei_quotation =
  
  ## specifies editorial practice adopted with respect to quotation marks in the original. [2.3.3.  15.3.2. ]
  element quotation {
    (tei_model.pLike*)
    >> sch:pattern [
         id = "IstexSchema-quotation-quotationContents-constraint-4"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:quotation"
           "\x{a}" ~
           "               "
           sch:report [
             test = "not(@marks) and not (tei:p)"
             "\x{a}" ~
             "On "
             sch:name [ ]
             ", either the @marks attribute should be used, or a paragraph of description provided"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    
    ## (quotation marks) indicates whether or not quotation marks have been retained as content within the text.
    attribute marks {
      
      ## no quotation marks have been retained
      "none"
      | 
        ## some quotation marks have been retained
        "some"
      | 
        ## all quotation marks have been retained
        "all"
    }?,
    empty
  }
tei_hyphenation =
  
  ## summarizes the way in which hyphenation in a source text has been treated in an encoded version of it. [2.3.3.  15.3.2. ]
  element hyphenation {
    tei_model.pLike+,
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    
    ## (end-of-line) indicates whether or not end-of-line hyphenation has been retained in a text.
    [ a:defaultValue = "some" ]
    attribute eol {
      
      ## all end-of-line hyphenation has been retained, even though the lineation of the original may not have been.
      "all"
      | 
        ## end-of-line hyphenation has been retained in some cases.
        "some"
      | 
        ## all soft end-of-line hyphenation has been removed: any remaining end-of-line hyphenation should be retained.
        "hard"
      | 
        ## all end-of-line hyphenation has been removed: any remaining hyphenation occurred within the line.
        "none"
    }?,
    empty
  }
tei_segmentation =
  
  ## describes the principles according to which the text has been segmented, for example into sentences, tone-units, graphemic strata, etc. [2.3.3.  15.3.2. ]
  element segmentation {
    tei_model.pLike+,
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    empty
  }
tei_stdVals =
  
  ## (standard values) specifies the format used when standardized date or number values are supplied. [2.3.3.  15.3.2. ]
  element stdVals {
    tei_model.pLike+,
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    empty
  }
tei_interpretation =
  
  ## describes the scope of any analytic or interpretive information added to the text in addition to the transcription. [2.3.3. ]
  element interpretation {
    tei_model.pLike+,
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    empty
  }
tei_punctuation =
  
  ## specifies editorial practice adopted with respect to punctuation marks in the original. [2.3.3.  3.2. ]
  element punctuation {
    tei_model.pLike*,
    tei_att.declarable.attributes,
    tei_att.global.attributes,
    
    ## indicates whether or not punctation marks have been retained as content within the text.
    attribute marks {
      
      ## no punctuation marks have been retained
      "none"
      | 
        ## some punctuation marks have been retained
        "some"
      | 
        ## all punctuation marks have been retained
        "all"
    }?,
    
    ## indicates whether punctation marks have been captured inside or outside of an adjacent element.
    attribute placement {
      
      ## punctuation marks are captured inside adjacent elements
      "internal"
      | 
        ## punctuation marks are captured outside adjacent elements
        "external"
    }?,
    empty
  }
tei_tagsDecl =
  
  ## (tagging declaration) provides detailed information about the tagging applied to a document. [2.3.4.  2.3. ]
  element tagsDecl {
    (tei_rendition*, tei_namespace*), tei_att.global.attributes, empty
  }
tei_tagUsage =
  
  ## supplies information about the usage of a specific element within a text. [2.3.4. ]
  element tagUsage {
    tei_macro.limitedContent,
    tei_att.global.attributes,
    
    ## (generic identifier) specifies the name (generic identifier) of the element indicated by the tag, within the namespace indicated by the parent namespace element.
    attribute gi { tei_data.name },
    
    ## specifies the number of occurrences of this element within the text.
    attribute occurs { tei_data.count }?,
    
    ## (with unique identifier) specifies the number of occurrences of this element within the text which bear a distinct value for the global xml:id attribute.
    attribute withId { tei_data.count }?,
    
    ## specifies the identifier of a rendition element which defines how this element was rendered in the source text.
    attribute render {
      list { tei_data.pointer+ }
    }?,
    empty
  }
tei_namespace =
  
  ## supplies the formal name of the namespace to which the elements documented by its children belong. [2.3.4. ]
  element namespace {
    tei_tagUsage+,
    tei_att.global.attributes,
    
    ## specifies the full formal name of the namespace concerned.
    attribute name { tei_data.namespace },
    empty
  }
tei_rendition =
  
  ## supplies information about the rendition or appearance of one or more elements in the source text. [2.3.4. ]
  element rendition {
    tei_macro.limitedContent,
    tei_att.global.attributes,
    tei_att.styleDef.attributes,
    
    ## where CSS is used, provides a way of defining pseudo-elements, that is, styling rules applicable to specific sub-portions of an element.
    ## Sample values include: 1] first-line; 2] first-letter; 3] before; 4] after
    attribute scope { tei_data.enumerated }?,
    empty
  }
tei_styleDefDecl =
  
  ## (style definition language declaration) specifies the name of the formal language in which style or renditional information is supplied elsewhere in the document. The specific version of the scheme may also be supplied. [2.3.5. ]
  element styleDefDecl {
    tei_model.pLike*,
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    tei_att.styleDef.attributes,
    empty
  }
tei_refsDecl =
  
  ## (references declaration) specifies how canonical references are constructed for this text. [2.3.6.3.  2.3.  2.3.6. ]
  element refsDecl {
    (tei_model.pLike+ | tei_cRefPattern+ | tei_refState+),
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    empty
  }
tei_cRefPattern =
  
  ## (canonical reference pattern) specifies an expression and replacement pattern for transforming a canonical reference into a URI. [2.3.6.3.  2.3.6.  2.3.6.2. ]
  element cRefPattern {
    tei_model.pLike*,
    tei_att.global.attributes,
    tei_att.patternReplacement.attributes,
    empty
  }
tei_prefixDef =
  
  ## (prefixing scheme used in data.pointer values) defines a prefixing scheme used in data.pointer values, showing how abbreviated URIs using the scheme may be expanded into full URIs. [16.2.3. ]
  element prefixDef {
    tei_model.pLike*,
    tei_att.global.attributes,
    tei_att.patternReplacement.attributes,
    
    ## supplies a name which functions as the prefix for an abbreviated pointing scheme such as a private URI scheme. The prefix constitutes the text preceding the first colon.
    attribute ident { tei_data.name },
    empty
  }
tei_listPrefixDef =
  
  ## (list of prefix definitions) contains a list of definitions of prefixing schemes used in data.pointer values, showing how abbreviated URIs using each scheme may be expanded into full URIs. [16.2.3. ]
  element listPrefixDef {
    (tei_prefixDef | tei_listPrefixDef)+,
    tei_att.global.attributes,
    empty
  }
tei_refState =
  
  ## (reference state) specifies one component of a canonical reference defined by the milestone method. [2.3.6.3.  2.3.6. ]
  element refState {
    empty,
    tei_att.global.attributes,
    tei_att.milestoneUnit.attributes,
    tei_att.edition.attributes,
    
    ## specifies the fixed length of the reference component.
    attribute length { tei_data.count }?,
    
    ## (delimiter) supplies a delimiting string following the reference component.
    attribute delim { tei_data.text }?,
    empty
  }
tei_classDecl =
  
  ## (classification declarations) contains one or more taxonomies defining any classificatory codes used elsewhere in the text. [2.3.7.  2.3. ]
  element classDecl { tei_taxonomy+, tei_att.global.attributes, empty }
tei_taxonomy =
  
  ## defines a typology either implicitly, by means of a bibliographic citation, or explicitly by a structured taxonomy. [2.3.7. ]
  element taxonomy {
    ((tei_model.glossLike | tei_model.descLike)*
     | tei_category+
     | (tei_model.biblLike, tei_category*)),
    tei_att.global.attributes,
    empty
  }
tei_category =
  
  ## contains an individual descriptive category, possibly nested within a superordinate category, within a user-defined taxonomy. [2.3.7. ]
  element category {
    ((tei_catDesc+ | (tei_model.descLike | tei_model.glossLike)*),
     tei_category*),
    tei_att.global.attributes,
    empty
  }
tei_catDesc =
  
  ## (category description) describes some category within a taxonomy or text typology, either in the form of a brief prose description or in terms of the situational parameters used by the TEI formal textDesc. [2.3.7. ]
  element catDesc {
    (text | tei_model.limitedPhrase | tei_model.catDescPart)*,
    tei_att.global.attributes,
    empty
  }
tei_geoDecl =
  
  ## (geographic coordinates declaration) documents the notation and the datum used for geographic coordinates expressed as content of the geo element elsewhere within the document. [2.3.8. ]
  element geoDecl {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    
    ## supplies a commonly used code name for the datum employed.
    ## Suggested values include: 1] WGS84(World Geodetic System) ; 2] MGRS(Military Grid Reference System) ; 3] OSGB36(ordnance survey great britain) ; 4] ED50(European Datum coordinate system) 
    [ a:defaultValue = "WGS84" ]
    attribute datum {
      
      ## (World Geodetic System) a pair of numbers to be interpreted as latitude followed by longitude according to the World Geodetic System.
      "WGS84"
      | 
        ## (Military Grid Reference System) the values supplied are geospatial entity object codes, based on
        "MGRS"
      | 
        ## (ordnance survey great britain) the value supplied is to be interpreted as a British National Grid Reference.
        "OSGB36"
      | 
        ## (European Datum coordinate system) the value supplied is to be interpreted as latitude followed by longitude according to the European Datum coordinate system.
        "ED50"
      | xsd:Name
    }?,
    empty
  }
tei_appInfo =
  
  ## (application information) records information about an application which has edited the TEI file. [2.3.10. ]
  element appInfo {
    tei_model.applicationLike+, tei_att.global.attributes, empty
  }
tei_application =
  
  ## provides information about an application which has acted upon the document. [2.3.10. ]
  element application {
    (tei_model.labelLike+, (tei_model.ptrLike* | tei_model.pLike*)),
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.datable.attributes,
    
    ## supplies an identifier for the application, independent of its version number or display name.
    attribute ident { tei_data.name },
    
    ## supplies a version number for the application, independent of its identifier or display name.
    attribute version { tei_data.versionNumber },
    empty
  }
tei_profileDesc =
  
  ## (text-profile description) provides a detailed description of non-bibliographic aspects of a text, specifically the languages and sublanguages used, the situation in which it was produced, the participants and their setting. [2.4.  2.1.1. ]
  element profileDesc {
    tei_model.profileDescPart*, tei_att.global.attributes, empty
  }
tei_abstract =
  
  ## contains a summary or formal abstract prefixed to an existing source document by the encoder. [2.4.4. ]
  element abstract {
    (tei_model.pLike | tei_model.listLike)+,
    tei_att.global.attributes,
    tei_att.responsibility.attributes,
    empty
  }
tei_creation =
  
  ## contains information about the creation of a text. [2.4.1.  2.4. ]
  element creation {
    (text | tei_model.limitedPhrase | tei_listChange)*,
    tei_att.global.attributes,
    tei_att.datable.attributes,
    empty
  }
tei_langUsage =
  
  ## (language usage) describes the languages, sublanguages, registers, dialects, etc. represented within a text. [2.4.2.  2.4.  15.3.2. ]
  element langUsage {
    tei_language+,
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    empty
  }
tei_language =
  
  ## characterizes a single language or sublanguage used within a text. [2.4.2. ]
  element language {
    tei_macro.phraseSeq.limited,
    tei_att.global.attributes,
    
    ## (identifier) Supplies a language code constructed as defined in BCP 47 which is used to identify the language documented by this element, and which is referenced by the global xml:lang attribute.
    attribute ident { tei_data.language },
    
    ## specifies the approximate percentage (by volume) of the text which uses this language.
    attribute usage {
      xsd:nonNegativeInteger { maxInclusive = "100" }
    }?,
    empty
  }
tei_textClass =
  
  ## (text classification) groups information which describes the nature or topic of a text in terms of a standard classification scheme, thesaurus, etc. [2.4.3. ]
  element textClass {
    (tei_classCode | tei_catRef | tei_keywords)*,
    tei_att.global.attributes,
    tei_att.declarable.attributes,
    empty
  }
tei_keywords =
  
  ## contains a list of keywords or phrases identifying the topic or nature of a text. [2.4.3. ]
  element keywords {
    (tei_term+ | tei_list),
    tei_att.global.attributes,
    
    ## identifies the controlled vocabulary within which the set of keywords concerned is defined identifies the classification scheme within which the set of categories concerned is defined, for example by a taxonomy element, or by some other resource.
    attribute scheme { tei_data.pointer }?,
    empty
  }
tei_classCode =
  
  ## (classification code) contains the classification code used for this text in some standard classification system. [2.4.3. ]
  element classCode {
    tei_macro.phraseSeq.limited,
    tei_att.global.attributes,
    
    ## identifies the classification system in use, as defined by for example by a taxonomy element, or some other resource..
    attribute scheme { tei_data.pointer },
    empty
  }
tei_catRef =
  
  ## (category reference) specifies one or more defined categories within some taxonomy or text typology. [2.4.3. ]
  element catRef {
    empty,
    tei_att.global.attributes,
    tei_att.pointing.attributes,
    
    ## identifies the classification scheme within which the set of categories concerned is defined, for example by a taxonomy element, or by some other resource.
    attribute scheme { tei_data.pointer }?,
    empty
  }
tei_calendarDesc =
  
  ## (calendar description) contains a description of the calendar system used in any dating expression found in the text. [2.4.  2.4.5. ]
  element calendarDesc {
    tei_calendar+, tei_att.global.attributes, empty
  }
tei_calendar =
  
  ## describes a calendar or dating system used in a dating formula in the text. [2.4.5. ]
  element calendar {
    tei_model.pLike+,
    tei_att.global.attributes,
    tei_att.pointing.attributes,
    empty
  }
tei_revisionDesc =
  
  ## (revision description) summarizes the revision history for a file. [2.5.  2.1.1. ]
  element revisionDesc {
    (tei_list | tei_listChange | tei_change+),
    tei_att.global.attributes,
    tei_att.docStatus.attributes,
    empty
  }
tei_change =
  
  ## documents a change or set of changes made during the production of a source document, or during the revision of an electronic file. [2.5.  2.4.1.  11.7. ]
  element change {
    tei_macro.specialPara,
    tei_att.ascribed.attributes,
    tei_att.datable.attributes,
    tei_att.docStatus.attributes,
    tei_att.global.attributes,
    tei_att.typed.attributes,
    
    ## points to one or more elements that belong to this change.
    attribute target {
      list { tei_data.pointer+ }
    }?,
    empty
  }
tei_listChange =
  
  ## groups a number of change descriptions associated with either the creation of a source text or the revision of an encoded text. [2.5.  11.7. ]
  element listChange {
    (tei_listChange | tei_change)+,
    tei_att.global.attributes,
    tei_att.sortable.attributes,
    
    ## indicates whether the ordering of its child change elements is to be considered significant or not
    [ a:defaultValue = "true" ]
    attribute ordered { tei_data.truthValue }?,
    empty
  }
tei_TEI =
  
  ## (TEI document) contains a single TEI-conformant document, comprising a TEI header and a text, either in isolation or as part of a teiCorpus element. [4.  15.1. ]
  element TEI {
    tei_teiHeader,
    tei_model.resourceLike?,
    (tei_text?)
    >> sch:ns [ prefix = "tei" uri = "http://www.tei-c.org/ns/1.0" ]
    >> sch:ns [ prefix = "xs" uri = "http://www.w3.org/2001/XMLSchema" ]
    >> sch:ns [
         prefix = "rng"
         uri = "http://relaxng.org/ns/structure/1.0"
       ],
    tei_att.global.attributes,
    
    ## specifies the major version number of the TEI Guidelines against which this document is valid.
    attribute version { tei_data.version }?,
    empty
  }
tei_text =
  
  ## contains a single text of any kind, whether unitary or composite, for example a poem or drama, a collection of essays, a novel, a dictionary, or a corpus sample. [4.  15.1. ]
  element text {
    (tei_model.global*,
     (tei_front, tei_model.global*)?,
     (tei_body | tei_group),
     tei_model.global*,
     (tei_back, tei_model.global*)?),
    tei_att.global.attributes,
    tei_att.declaring.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_body =
  
  ## (text body) contains the whole body of a single unitary text, excluding any front or back matter. [4. ]
  element body {
    (tei_model.global*,
     (tei_model.divTop, (tei_model.global | tei_model.divTop)*)?,
     (tei_model.divGenLike,
      (tei_model.global | tei_model.divGenLike)*)?,
     ((tei_model.divLike, (tei_model.global | tei_model.divGenLike)*)+
      | (tei_model.div1Like,
         (tei_model.global | tei_model.divGenLike)*)+
      | ((tei_model.common, tei_model.global*)+,
         ((tei_model.divLike,
           (tei_model.global | tei_model.divGenLike)*)+
          | (tei_model.div1Like,
             (tei_model.global | tei_model.divGenLike)*)+)?)),
     (tei_model.divBottom, tei_model.global*)*),
    tei_att.global.attributes,
    tei_att.declaring.attributes,
    empty
  }
tei_group =
  
  ## contains the body of a composite text, grouping together a sequence of distinct texts (or groups of such texts) which are regarded as a unit for some purpose, for example the collected works of an author, a sequence of prose essays, etc. [4.  4.3.1.  15.1. ]
  element group {
    ((tei_model.divTop | tei_model.global)*,
     ((tei_text | tei_group),
      (tei_text | tei_group | tei_model.global)*),
     tei_model.divBottom*),
    tei_att.global.attributes,
    tei_att.declaring.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_floatingText =
  
  ## contains a single text of any kind, whether unitary or composite, which interrupts the text containing it at any point and after which the surrounding text resumes. [4.3.2. ]
  element floatingText {
    (tei_model.global*,
     (tei_front, tei_model.global*)?,
     (tei_body | tei_group),
     tei_model.global*,
     (tei_back, tei_model.global*)?),
    tei_att.global.attributes,
    tei_att.declaring.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_div =
  
  ## (text division) contains a subdivision of the front, body, or back of a text. [4.1. ]
  element div {
    ((tei_model.divTop | tei_model.global)*,
     ((((tei_model.divLike | tei_model.divGenLike), tei_model.global*)+
       | ((tei_model.common, tei_model.global*)+,
          ((tei_model.divLike | tei_model.divGenLike),
           tei_model.global*)*)),
      (tei_model.divBottom, tei_model.global*)*)?),
    tei_att.global.attributes,
    tei_att.divLike.attributes,
    tei_att.typed.attributes,
    tei_att.declaring.attributes,
    empty
  }
tei_div1 =
  
  ## (level-1 text division) contains a first-level subdivision of the front, body, or back of a text. [4.1.2. ]
  element div1 {
    ((tei_model.divTop | tei_model.global)*,
     ((((tei_model.div2Like | tei_model.divGenLike), tei_model.global*)+
       | ((tei_model.common, tei_model.global*)+,
          ((tei_model.div2Like | tei_model.divGenLike),
           tei_model.global*)*)),
      (tei_model.divBottom, tei_model.global*)*)?),
    tei_att.global.attributes,
    tei_att.divLike.attributes,
    tei_att.typed.attributes,
    tei_att.declaring.attributes,
    empty
  }
tei_div2 =
  
  ## (level-2 text division) contains a second-level subdivision of the front, body, or back of a text. [4.1.2. ]
  element div2 {
    ((tei_model.divTop | tei_model.global)*,
     ((((tei_model.div3Like | tei_model.divGenLike), tei_model.global*)+
       | ((tei_model.common, tei_model.global*)+,
          ((tei_model.div3Like | tei_model.divGenLike),
           tei_model.global*)*)),
      (tei_model.divBottom, tei_model.global*)*)?),
    tei_att.global.attributes,
    tei_att.divLike.attributes,
    tei_att.typed.attributes,
    tei_att.declaring.attributes,
    empty
  }
tei_div3 =
  
  ## (level-3 text division) contains a third-level subdivision of the front, body, or back of a text. [4.1.2. ]
  element div3 {
    ((tei_model.divTop | tei_model.global)*,
     ((((tei_model.div4Like | tei_model.divGenLike), tei_model.global*)+
       | ((tei_model.common, tei_model.global*)+,
          ((tei_model.div4Like | tei_model.divGenLike),
           tei_model.global*)*)),
      (tei_model.divBottom, tei_model.global*)*)?),
    tei_att.global.attributes,
    tei_att.divLike.attributes,
    tei_att.typed.attributes,
    tei_att.declaring.attributes,
    empty
  }
tei_div4 =
  
  ## (level-4 text division) contains a fourth-level subdivision of the front, body, or back of a text. [4.1.2. ]
  element div4 {
    ((tei_model.divTop | tei_model.global)*,
     ((((tei_model.div5Like | tei_model.divGenLike), tei_model.global*)+
       | ((tei_model.common, tei_model.global*)+,
          ((tei_model.div5Like | tei_model.divGenLike),
           tei_model.global*)*)),
      (tei_model.divBottom, tei_model.global*)*)?),
    tei_att.global.attributes,
    tei_att.divLike.attributes,
    tei_att.typed.attributes,
    tei_att.declaring.attributes,
    empty
  }
tei_div5 =
  
  ## (level-5 text division) contains a fifth-level subdivision of the front, body, or back of a text. [4.1.2. ]
  element div5 {
    ((tei_model.divTop | tei_model.global)*,
     ((((tei_model.div6Like | tei_model.divGenLike), tei_model.global*)+
       | ((tei_model.common, tei_model.global*)+,
          ((tei_model.div6Like | tei_model.divGenLike),
           tei_model.global*)*)),
      (tei_model.divBottom, tei_model.global*)*)?),
    tei_att.global.attributes,
    tei_att.divLike.attributes,
    tei_att.typed.attributes,
    tei_att.declaring.attributes,
    empty
  }
tei_div6 =
  
  ## (level-6 text division) contains a sixth-level subdivision of the front, body, or back of a text. [4.1.2. ]
  element div6 {
    ((tei_model.divTop | tei_model.global)*,
     ((((tei_model.div7Like | tei_model.divGenLike), tei_model.global*)+
       | ((tei_model.common, tei_model.global*)+,
          ((tei_model.div7Like | tei_model.divGenLike),
           tei_model.global*)*)),
      (tei_model.divBottom, tei_model.global*)*)?),
    tei_att.global.attributes,
    tei_att.divLike.attributes,
    tei_att.typed.attributes,
    tei_att.declaring.attributes,
    empty
  }
tei_div7 =
  
  ## (level-7 text division) contains the smallest possible subdivision of the front, body or back of a text, larger than a paragraph. [4.1.2. ]
  element div7 {
    ((tei_model.divTop | tei_model.global)*,
     ((tei_model.common, tei_model.global*)+,
      (tei_model.divBottom, tei_model.global*)*)?),
    tei_att.global.attributes,
    tei_att.divLike.attributes,
    tei_att.typed.attributes,
    tei_att.declaring.attributes,
    empty
  }
tei_trailer =
  
  ## contains a closing title or footer appearing at the end of a division of a text. [4.2.4.  4.2. ]
  element trailer {
    (text
     | tei_lg
     | tei_model.gLike
     | tei_model.phrase
     | tei_model.inter
     | tei_model.lLike
     | tei_model.global)*,
    tei_att.global.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_byline =
  
  ## contains the primary statement of responsibility given for a work on its title page or at the head or end of the work. [4.2.2.  4.5. ]
  element byline {
    (text
     | tei_model.gLike
     | tei_model.phrase
     | tei_docAuthor
     | tei_model.global)*,
    tei_att.global.attributes,
    empty
  }
tei_dateline =
  
  ## contains a brief description of the place, date, time, etc. of production of a letter, newspaper story, or other work, prefixed or suffixed to it as a kind of heading or trailer. [4.2.2. ]
  element dateline {
    (text
     | tei_model.gLike
     | tei_model.phrase
     | tei_model.global
     | tei_docDate)*,
    tei_att.global.attributes,
    empty
  }
tei_argument =
  
  ## contains a formal list or prose description of the topics addressed by a subdivision of a text. [4.2.  4.6. ]
  element argument {
    ((tei_model.global | tei_model.headLike)*,
     (tei_model.common, tei_model.global*)+),
    tei_att.global.attributes,
    empty
  }
tei_epigraph =
  
  ## contains a quotation, anonymous or attributed, appearing at the start or end of a section or on a title page. [4.2.3.  4.2.  4.6. ]
  element epigraph {
    (tei_model.common | tei_model.global)*,
    tei_att.global.attributes,
    empty
  }
tei_opener =
  
  ## groups together dateline, byline, salutation, and similar phrases appearing as a preliminary group at the start of a division, especially of a letter. [4.2. ]
  element opener {
    (text
     | tei_model.gLike
     | tei_model.phrase
     | tei_argument
     | tei_byline
     | tei_dateline
     | tei_epigraph
     | tei_salute
     | tei_signed
     | tei_model.global)*,
    tei_att.global.attributes,
    empty
  }
tei_closer =
  
  ## groups together salutations, datelines, and similar phrases appearing as a final group at the end of a division, especially of a letter. [4.2.2.  4.2. ]
  element closer {
    (text
     | tei_model.gLike
     | tei_signed
     | tei_dateline
     | tei_salute
     | tei_model.phrase
     | tei_model.global)*,
    tei_att.global.attributes,
    empty
  }
tei_salute =
  
  ## (salutation) contains a salutation or greeting prefixed to a foreword, dedicatory epistle, or other division of a text, or the salutation in the closing of a letter, preface, etc. [4.2.2. ]
  element salute {
    tei_macro.paraContent, tei_att.global.attributes, empty
  }
tei_signed =
  
  ## (signature) contains the closing salutation, etc., appended to a foreword, dedicatory epistle, or other division of a text. [4.2.2. ]
  element signed {
    tei_macro.paraContent, tei_att.global.attributes, empty
  }
tei_postscript =
  
  ## contains a postscript, e.g. to a letter. [4.2. ]
  element postscript {
    ((tei_model.global | tei_model.divTopPart)*,
     tei_model.common,
     (tei_model.global | tei_model.common)*,
     (tei_model.divBottomPart, tei_model.global*)*),
    tei_att.global.attributes,
    empty
  }
tei_titlePage =
  
  ## (title page) contains the title page of a text, appearing within the front or back matter. [4.6. ]
  element titlePage {
    (tei_model.global*,
     tei_model.titlepagePart,
     (tei_model.titlepagePart | tei_model.global)*),
    tei_att.global.attributes,
    
    ## classifies the title page according to any convenient typology.
    attribute type { tei_data.enumerated }?,
    empty
  }
tei_docTitle =
  
  ## (document title) contains the title of a document, including all its constituents, as given on a title page. [4.6. ]
  element docTitle {
    (tei_model.global*, (tei_titlePart, tei_model.global*)+),
    tei_att.global.attributes,
    tei_att.canonical.attributes,
    empty
  }
tei_titlePart =
  
  ## contains a subsection or division of the title of a work, as indicated on a title page. [4.6. ]
  element titlePart {
    tei_macro.paraContent,
    tei_att.global.attributes,
    
    ## specifies the role of this subdivision of the title.
    ## Suggested values include: 1] main; 2] sub(subordinate) ; 3] alt(alternate) ; 4] short; 5] desc(descriptive) 
    [ a:defaultValue = "main" ]
    attribute type {
      
      ## main title of the work
      "main"
      | 
        ## (subordinate) subtitle of the work
        "sub"
      | 
        ## (alternate) alternative title of the work
        "alt"
      | 
        ## abbreviated form of title
        "short"
      | 
        ## (descriptive) descriptive paraphrase of the work
        "desc"
      | xsd:Name
    }?,
    empty
  }
tei_docAuthor =
  
  ## (document author) contains the name of the author of the document, as given on the title page (often but not always contained in a byline). [4.6. ]
  element docAuthor {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.canonical.attributes,
    empty
  }
tei_imprimatur =
  
  ## contains a formal statement authorizing the publication of a work, sometimes required to appear on a title page or its verso. [4.6. ]
  element imprimatur {
    tei_macro.paraContent, tei_att.global.attributes, empty
  }
tei_docEdition =
  
  ## (document edition) contains an edition statement as presented on a title page of a document. [4.6. ]
  element docEdition {
    tei_macro.paraContent, tei_att.global.attributes, empty
  }
tei_docImprint =
  
  ## (document imprint) contains the imprint statement (place and date of publication, publisher name), as given (usually) at the foot of a title page. [4.6. ]
  element docImprint {
    (text
     | tei_model.gLike
     | tei_model.phrase
     | tei_pubPlace
     | tei_docDate
     | tei_publisher
     | tei_model.global)*,
    tei_att.global.attributes,
    empty
  }
tei_docDate =
  
  ## (document date) contains the date of a document, as given on a title page or in a dateline. [4.6. ]
  element docDate {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    
    ## gives the value of the date in standard form, i.e. YYYY-MM-DD.
    attribute when { tei_data.temporal.w3c }?,
    empty
  }
tei_front =
  
  ## (front matter) contains any prefatory matter (headers, title page, prefaces, dedications, etc.) found at the start of a document, before the main body. [4.6.  4. ]
  element front {
    ((tei_model.frontPart
      | tei_model.pLike
      | tei_model.pLike.front
      | tei_model.global)*,
     (((tei_model.div1Like,
        (tei_model.div1Like | tei_model.frontPart | tei_model.global)*)
       | (tei_model.divLike,
          (tei_model.divLike
           | tei_model.frontPart
           | tei_model.global)*)),
      (tei_model.divBottom,
       (tei_model.divBottom | tei_model.global)*)?)?),
    tei_att.global.attributes,
    tei_att.declaring.attributes,
    empty
  }
tei_back =
  
  ## (back matter) contains any appendixes, etc. following the main part of a text. [4.7.  4. ]
  element back {
    ((tei_model.frontPart
      | tei_model.pLike.front
      | tei_model.pLike
      | tei_model.listLike
      | tei_model.global)*,
     ((tei_model.div1Like,
       (tei_model.frontPart | tei_model.div1Like | tei_model.global)*)
      | (tei_model.divLike,
         (tei_model.frontPart
          | tei_model.divLike
          | tei_model.global)*))?,
     (tei_model.divBottomPart,
      (tei_model.divBottomPart | tei_model.global)*)?),
    tei_att.global.attributes,
    tei_att.declaring.attributes,
    empty
  }
tei_att.datable.custom.attributes =
  tei_att.datable.custom.attribute.when-custom,
  tei_att.datable.custom.attribute.notBefore-custom,
  tei_att.datable.custom.attribute.notAfter-custom,
  tei_att.datable.custom.attribute.from-custom,
  tei_att.datable.custom.attribute.to-custom,
  tei_att.datable.custom.attribute.datingPoint,
  tei_att.datable.custom.attribute.datingMethod
tei_att.datable.custom.attribute.when-custom =
  
  ## supplies the value of a date or time in some standard form.
  attribute when-custom {
    list { tei_data.word+ }
  }?
tei_att.datable.custom.attribute.notBefore-custom =
  
  ## specifies the earliest possible date for the event in some custom standard form.
  attribute notBefore-custom {
    list { tei_data.word+ }
  }?
tei_att.datable.custom.attribute.notAfter-custom =
  
  ## specifies the latest possible date for the event in some custom standard form.
  attribute notAfter-custom {
    list { tei_data.word+ }
  }?
tei_att.datable.custom.attribute.from-custom =
  
  ## indicates the starting point of the period in some standard form.
  attribute from-custom {
    list { tei_data.word+ }
  }?
tei_att.datable.custom.attribute.to-custom =
  
  ## indicates the ending point of the period in some standard form.
  attribute to-custom {
    list { tei_data.word+ }
  }?
tei_att.datable.custom.attribute.datingPoint =
  
  ## supplies a pointer to some location defining a named point in time with reference to which the datable item is understood to have occurred
  attribute datingPoint { tei_data.pointer }?
tei_att.datable.custom.attribute.datingMethod =
  
  ## supplies a pointer to a calendar element or other means of interpreting the values of the custom dating attributes.
  attribute datingMethod { tei_data.pointer }?
tei_model.persNamePart =
  tei_surname
  | tei_forename
  | tei_genName
  | tei_nameLink
  | tei_addName
  | tei_roleName
tei_model.persNamePart_alternation =
  tei_surname
  | tei_forename
  | tei_genName
  | tei_nameLink
  | tei_addName
  | tei_roleName
tei_model.persNamePart_sequence =
  tei_surname,
  tei_forename,
  tei_genName,
  tei_nameLink,
  tei_addName,
  tei_roleName
tei_model.persNamePart_sequenceOptional =
  tei_surname?,
  tei_forename?,
  tei_genName?,
  tei_nameLink?,
  tei_addName?,
  tei_roleName?
tei_model.persNamePart_sequenceOptionalRepeatable =
  tei_surname*,
  tei_forename*,
  tei_genName*,
  tei_nameLink*,
  tei_addName*,
  tei_roleName*
tei_model.persNamePart_sequenceRepeatable =
  tei_surname+,
  tei_forename+,
  tei_genName+,
  tei_nameLink+,
  tei_addName+,
  tei_roleName+
tei_att.datable.iso.attributes =
  tei_att.datable.iso.attribute.when-iso,
  tei_att.datable.iso.attribute.notBefore-iso,
  tei_att.datable.iso.attribute.notAfter-iso,
  tei_att.datable.iso.attribute.from-iso,
  tei_att.datable.iso.attribute.to-iso
tei_att.datable.iso.attribute.when-iso =
  
  ## supplies the value of a date or time in a standard form.
  attribute when-iso { tei_data.temporal.iso }?
tei_att.datable.iso.attribute.notBefore-iso =
  
  ## specifies the earliest possible date for the event in standard form, e.g. yyyy-mm-dd.
  attribute notBefore-iso { tei_data.temporal.iso }?
tei_att.datable.iso.attribute.notAfter-iso =
  
  ## specifies the latest possible date for the event in standard form, e.g. yyyy-mm-dd.
  attribute notAfter-iso { tei_data.temporal.iso }?
tei_att.datable.iso.attribute.from-iso =
  
  ## indicates the starting point of the period in standard form.
  attribute from-iso { tei_data.temporal.iso }?
tei_att.datable.iso.attribute.to-iso =
  
  ## indicates the ending point of the period in standard form.
  attribute to-iso { tei_data.temporal.iso }?
tei_orgName =
  
  ## (organization name) contains an organizational name. [13.2.2. ]
  element orgName {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.personal.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_persName =
  
  ## (personal name) contains a proper noun or proper-noun phrase referring to a person, possibly including one or more of the person's forenames, surnames, honorifics, added names, etc. [13.2.1. ]
  element persName {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.personal.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_surname =
  
  ## contains a family (inherited) name, as opposed to a given, baptismal, or nick name. [13.2.1. ]
  element surname {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.personal.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_forename =
  
  ## contains a forename, given or baptismal name. [13.2.1. ]
  element forename {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.personal.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_genName =
  
  ## (generational name component) contains a name component used to distinguish otherwise similar names on the basis of the relative ages or generations of the persons named. [13.2.1. ]
  element genName {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.personal.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_nameLink =
  
  ## (name link) contains a connecting phrase or link used within a name but not regarded as part of it, such as van der or of. [13.2.1. ]
  element nameLink {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_addName =
  
  ## (additional name) contains an additional name component, such as a nickname, epithet, or alias, or any other descriptive phrase used within a personal name. [13.2.1. ]
  element addName {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.personal.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_roleName =
  
  ## contains a name component which indicates that the referent has a particular role or position in society, such as an official title or rank. [13.2.1. ]
  element roleName {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.personal.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_placeName =
  
  ## contains an absolute or relative place name. [13.2.3. ]
  element placeName {
    tei_macro.phraseSeq,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.global.attributes,
    tei_att.personal.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_bloc =
  
  ## contains the name of a geo-political unit consisting of two or more nation states or countries. [13.2.3. ]
  element bloc {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.naming.attributes,
    tei_att.typed.attributes,
    tei_att.datable.attributes,
    empty
  }
tei_country =
  
  ## contains the name of a geo-political unit, such as a nation, country, colony, or commonwealth, larger than or administratively superior to a region and smaller than a bloc. [13.2.3. ]
  element country {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.naming.attributes,
    tei_att.typed.attributes,
    tei_att.datable.attributes,
    empty
  }
tei_region =
  
  ## contains the name of an administrative unit such as a state, province, or county, larger than a settlement, but smaller than a country. [13.2.3. ]
  element region {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.naming.attributes,
    tei_att.typed.attributes,
    tei_att.datable.attributes,
    empty
  }
tei_district =
  
  ## contains the name of any kind of subdivision of a settlement, such as a parish, ward, or other administrative or geographic unit. [13.2.3. ]
  element district {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.naming.attributes,
    tei_att.typed.attributes,
    tei_att.datable.attributes,
    empty
  }
tei_settlement =
  
  ## contains the name of a settlement such as a city, town, or village identified as a single geo-political or administrative unit. [13.2.3. ]
  element settlement {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.naming.attributes,
    tei_att.typed.attributes,
    tei_att.datable.attributes,
    empty
  }
tei_offset =
  
  ## marks that part of a relative temporal or spatial expression which indicates the direction of the offset between the two place names, dates, or times involved in the expression. [13.2.3. ]
  element offset {
    tei_macro.phraseSeq,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.global.attributes,
    tei_att.naming.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_geogName =
  
  ## (geographical name) identifies a name associated with some geographical feature such as Windrush Valley or Mount Sinai. [13.2.3. ]
  element geogName {
    tei_macro.phraseSeq,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.global.attributes,
    tei_att.naming.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_geogFeat =
  
  ## (geographical feature name) contains a common noun identifying some geographical feature contained within a geographic name, such as valley, mount, etc. [13.2.3. ]
  element geogFeat {
    tei_macro.phraseSeq,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.global.attributes,
    tei_att.naming.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_affiliation =
  
  ## contains an informal description of a person's present or past affiliation with some organization, for example an employer or sponsor. [15.2.2. ]
  element affiliation {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.editLike.attributes,
    tei_att.datable.attributes,
    tei_att.naming.attributes,
    empty
  }
tei_age =
  
  ## specifies the age of a person. [13.3.2.1. ]
  element age {
    tei_macro.phraseSeq.limited,
    tei_att.global.attributes,
    tei_att.editLike.attributes,
    tei_att.datable.attributes,
    
    ## supplies a numeric code representing the age or age group
    attribute value { tei_data.count }?,
    empty
  }
tei_birth =
  
  ## contains information about a person's birth, such as its date and place. [15.2.2. ]
  element birth {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.editLike.attributes,
    tei_att.datable.attributes,
    tei_att.naming.attributes,
    empty
  }
tei_climate =
  
  ## contains information about the physical climate of a place. [13.3.4.3. ]
  element climate {
    (tei_model.headLike*,
     (tei_model.pLike+ | tei_model.labelLike+),
     (tei_model.noteLike | tei_model.biblLike)*,
     tei_climate*),
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.naming.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_death =
  
  ## contains information about a person's death, such as its date and place. [15.2.2. ]
  element death {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.editLike.attributes,
    tei_att.datable.attributes,
    tei_att.naming.attributes,
    empty
  }
tei_education =
  
  ## contains a description of the educational experience of a person. [15.2.2. ]
  element education {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.editLike.attributes,
    tei_att.datable.attributes,
    tei_att.naming.attributes,
    empty
  }
tei_event =
  
  ## contains data relating to any kind of significant event associated with a person, place, or organization. [13.3.1. ]
  element event {
    (tei_model.headLike*,
     (tei_model.pLike+ | tei_model.labelLike+),
     (tei_model.noteLike
      | tei_model.biblLike
      | tei_linkGrp
      | tei_link)*,
     tei_event*),
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.typed.attributes,
    tei_att.naming.attributes,
    tei_att.sortable.attributes,
    
    ## indicates the location of an event by pointing to a place element
    attribute where { tei_data.pointer }?,
    empty
  }
tei_faith =
  
  ## specifies the faith, religion, or belief set of a person. [13.3.2.1. ]
  element faith {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.editLike.attributes,
    tei_att.datable.attributes,
    tei_att.canonical.attributes,
    empty
  }
tei_floruit =
  
  ## contains information about a person's period of activity. [13.3.2.1. ]
  element floruit {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    empty
  }
tei_geo =
  
  ## (geographical coordinates) contains any expression of a set of geographic coordinates, representing a point, line, or area on the surface of the earth in some notation. [13.3.4.1. ]
  element geo {
    text, tei_att.global.attributes, tei_att.declaring.attributes, empty
  }
tei_langKnowledge =
  
  ## (language knowledge) summarizes the state of a person's linguistic knowledge, either as prose or by a list of langKnown elements. [13.3.2.1. ]
  element langKnowledge {
    (tei_model.pLike | tei_langKnown+),
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    
    ## supplies one or more valid language tags for the languages specified
    attribute tags {
      list { tei_data.language+ }
    }?,
    empty
  }
tei_langKnown =
  
  ## (language known) summarizes the state of a person's linguistic competence, i.e., knowledge of a single language. [15.2.2. ]
  element langKnown {
    tei_macro.phraseSeq.limited,
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    
    ## supplies a valid language tag for the language concerned.
    attribute tag { tei_data.language },
    
    ## a code indicating the person's level of knowledge for this language
    attribute level { tei_data.word }?,
    empty
  }
tei_listOrg =
  
  ## (list of organizations) contains a list of elements, each of which provides information about an identifiable organization. [13.2.2. ]
  element listOrg {
    (tei_model.headLike*,
     (tei_org | tei_listOrg)+,
     (tei_relation | tei_listRelation)*),
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.declarable.attributes,
    tei_att.sortable.attributes,
    empty
  }
tei_listEvent =
  
  ## (list of events) contains a list of descriptions, each of which provides information about an identifiable event. [13.3.1. ]
  element listEvent {
    (tei_model.headLike*,
     (tei_event | tei_listEvent)+,
     (tei_relation | tei_listRelation)*),
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.declarable.attributes,
    tei_att.sortable.attributes,
    empty
  }
tei_listPerson =
  
  ## (list of persons) contains a list of descriptions, each of which provides information about an identifiable person or a group of people, for example the participants in a language interaction, or the people referred to in a historical source. [13.3.2.  15.2.  2.4.  15.3.2. ]
  element listPerson {
    (tei_model.headLike*,
     (tei_model.personLike | tei_listPerson)+,
     (tei_relation | tei_listRelation)*),
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.declarable.attributes,
    tei_att.sortable.attributes,
    empty
  }
tei_listPlace =
  
  ## (list of places) contains a list of places, optionally followed by a list of relationships (other than containment) defined amongst them. [2.2.7.  13.3.4. ]
  element listPlace {
    (tei_model.headLike*,
     (tei_model.placeLike | tei_listPlace)+,
     (tei_relation | tei_listRelation)*),
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.declarable.attributes,
    tei_att.sortable.attributes,
    empty
  }
tei_location =
  
  ## defines the location of a place as a set of geographical coordinates, in terms of other named geo-political entities, or as an address. [13.3.4. ]
  element location {
    (tei_model.labelLike
     | tei_model.placeNamePart
     | tei_model.offsetLike
     | tei_model.measureLike
     | tei_model.addressLike
     | tei_model.noteLike
     | tei_model.biblLike)*,
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    empty
  }
tei_nationality =
  
  ## contains an informal description of a person's present or past nationality or citizenship. [15.2.2. ]
  element nationality {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.naming.attributes,
    empty
  }
tei_occupation =
  
  ## contains an informal description of a person's trade, profession or occupation. [15.2.2. ]
  element occupation {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.naming.attributes,
    
    ## indicates the classification system or taxonomy in use, for example by supplying the identifier of a taxonomy element, or pointing to some other resource.
    attribute scheme { tei_data.pointer }?,
    
    ## identifies an occupation code defined within the classification system or taxonomy defined by the scheme attribute.
    attribute code { tei_data.pointer }?,
    empty
  }
tei_org =
  
  ## (organization) provides information about an identifiable organization such as a business, a tribe, or any other grouping of people. [13.2.2. ]
  element org {
    (tei_model.headLike*,
     (tei_model.pLike*
      | (tei_model.labelLike
         | tei_model.nameLike
         | tei_model.placeLike
         | tei_model.orgPart)*),
     (tei_model.noteLike
      | tei_model.biblLike
      | tei_linkGrp
      | tei_link)*,
     tei_model.personLike*),
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.editLike.attributes,
    tei_att.sortable.attributes,
    
    ## specifies a primary role or classification for the organization.
    attribute role {
      list { tei_data.word+ }
    }?,
    empty
  }
tei_listRelation =
  
  ## provides information about relationships identified amongst people, places, and organizations, either informally as prose or as formally expressed relation links. [13.3.2.3. ]
  element listRelation {
    (tei_model.headLike*,
     (tei_model.pLike | (tei_relation | tei_listRelation)+)),
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.sortable.attributes,
    empty
  }
tei_person =
  
  ## provides information about an identifiable individual, for example a participant in a language interaction, or a person referred to in a historical source. [13.3.2.  15.2.2. ]
  element person {
    (tei_model.pLike+ | (tei_model.personPart | tei_model.global)*),
    tei_att.global.attributes,
    tei_att.editLike.attributes,
    tei_att.sortable.attributes,
    
    ## specifies a primary role or classification for the person.
    attribute role {
      list { tei_data.enumerated+ }
    }?,
    
    ## specifies the sex of the person.
    attribute sex {
      list { tei_data.sex+ }
    }?,
    
    ## specifies an age group for the person.
    attribute age { tei_data.enumerated }?,
    empty
  }
tei_personGrp =
  
  ## (personal group) describes a group of individuals treated as a single person for analytic purposes. [15.2.2. ]
  element personGrp {
    (tei_model.pLike+ | (tei_model.personPart | tei_model.global)*),
    tei_att.global.attributes,
    tei_att.sortable.attributes,
    
    ## specifies the role of this group of participants in the interaction.
    attribute role { tei_data.enumerated }?,
    
    ## specifies the sex of the participant group.
    attribute sex {
      list { tei_data.sex+ }
    }?,
    
    ## specifies the age group of the participants.
    attribute age { tei_data.enumerated }?,
    
    ## describes informally the size or approximate size of the group for example by means of a number and an indication of accuracy e.g. approx 200.
    attribute size {
      list { tei_data.word+ }
    }?,
    empty
  }
tei_place =
  
  ## contains data about a geographic location [13.3.4. ]
  element place {
    (tei_model.headLike*,
     (tei_model.pLike*
      | (tei_model.labelLike
         | tei_model.placeStateLike
         | tei_model.placeEventLike)*),
     (tei_model.noteLike
      | tei_model.biblLike
      | tei_idno
      | tei_linkGrp
      | tei_link)*,
     (tei_model.placeLike | tei_listPlace)*),
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.editLike.attributes,
    tei_att.sortable.attributes,
    empty
  }
tei_population =
  
  ## contains information about the population of a place. [13.3.4.3. ]
  element population {
    (tei_model.headLike*,
     ((tei_model.pLike+ | tei_model.labelLike+),
      (tei_model.noteLike | tei_model.biblLike)*)?,
     tei_population*),
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.naming.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_relation =
  
  ## (relationship) describes any kind of relationship or linkage amongst a specified group of places, events, persons, objects or other items. [13.3.2.3. ]
  element relation {
    (tei_desc?)
    >> sch:pattern [
         id = "IstexSchema-relation-reforkeyorname-constraint-8"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:relation"
           "\x{a}" ~
           "               "
           sch:assert [
             test = "@ref or @key or @name"
             "One of the attributes  'name', 'ref' or 'key' must be supplied"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ]
    >> sch:pattern [
         id = "IstexSchema-relation-activemutual-constraint-5"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:relation"
           "\x{a}" ~
           "               "
           sch:report [
             test = "@active and @mutual"
             "Only one of the attributes\x{a}" ~
             "@active and @mutual may be supplied"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ]
    >> sch:pattern [
         id = "IstexSchema-relation-activepassive-constraint-6"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:relation"
           "\x{a}" ~
           "               "
           sch:report [
             test = "@passive and not(@active)"
             "the attribute 'passive'\x{a}" ~
             "	may be supplied only if the attribute 'active' is\x{a}" ~
             "	supplied"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.canonical.attributes,
    tei_att.sortable.attributes,
    tei_att.typed.attributes,
    
    ## supplies a name for the kind of relationship of which this is an instance.
    attribute name { tei_data.enumerated }?,
    (
     ## identifies the active participants in a non-mutual relationship, or all the participants in a mutual one.
     attribute active {
       list { tei_data.pointer+ }
     }?
     | 
       ## supplies a list of participants amongst all of whom the relationship holds equally.
       attribute mutual {
         list { tei_data.pointer+ }
       }?),
    
    ## identifies the passive participants in a non-mutual relationship.
    attribute passive {
      list { tei_data.pointer+ }
    }?,
    empty
  }
tei_residence =
  
  ## describes a person's present or past places of residence. [15.2.2. ]
  element residence {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.naming.attributes,
    empty
  }
tei_sex =
  
  ## specifies the sex of a person. [13.3.2.1. ]
  element sex {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.editLike.attributes,
    tei_att.datable.attributes,
    
    ## supplies a coded value for sex
    attribute value {
      list { tei_data.sex+ }
    }?,
    empty
  }
tei_socecStatus =
  
  ## (socio-economic status) contains an informal description of a person's perceived social or economic status. [15.2.2. ]
  element socecStatus {
    tei_macro.phraseSeq,
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.naming.attributes,
    
    ## identifies the classification system or taxonomy in use, for example by pointing to a locally-defined taxonomy element or by supplying a URI for an externally-defined system.
    attribute scheme { tei_data.pointer }?,
    
    ## identifies a status code defined within the classification system or taxonomy defined by the scheme attribute.
    attribute code { tei_data.pointer }?,
    empty
  }
tei_state =
  
  ## contains a description of some status or quality attributed to a person, place, or organization often at some specific time or for a specific date range. [13.3.1.  13.3.2.1. ]
  element state {
    (tei_state+
     | (tei_model.headLike*,
        tei_model.pLike+,
        (tei_model.noteLike | tei_model.biblLike)*)
     | (tei_model.labelLike
        | tei_model.noteLike
        | tei_model.biblLike)*),
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.typed.attributes,
    tei_att.naming.attributes,
    empty
  }
tei_terrain =
  
  ## contains information about the physical terrain of a place. [13.3.4.3. ]
  element terrain {
    (tei_model.headLike*,
     (tei_model.pLike+ | tei_model.labelLike+),
     (tei_model.noteLike | tei_model.biblLike)*,
     tei_terrain*),
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.naming.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_trait =
  
  ## contains a description of some status or quality attributed to a person, place, or organization typically, but not necessarily, independent of the volition or action of the holder and usually not at some specific time or for a specific date range. [13.3.1.  13.3.2.1. ]
  element trait {
    (tei_trait+
     | (tei_model.headLike*,
        tei_model.pLike+,
        (tei_model.noteLike | tei_model.biblLike)*)
     | (tei_model.labelLike
        | tei_model.noteLike
        | tei_model.biblLike)*),
    tei_att.global.attributes,
    tei_att.datable.attributes,
    tei_att.editLike.attributes,
    tei_att.naming.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_nym =
  
  ## (canonical name) contains the definition for a canonical name or name component of any kind. [13.3.5. ]
  element nym {
    (tei_model.entryPart*, tei_model.pLike*, tei_nym*),
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.sortable.attributes,
    
    ## points to constituent nyms
    attribute parts {
      list { tei_data.pointer+ }
    }?,
    empty
  }
tei_listNym =
  
  ## (list of canonical names) contains a list of nyms, that is, standardized names for any thing. [13.3.5. ]
  element listNym {
    (tei_model.headLike*,
     (tei_nym | tei_listNym)+,
     (tei_relation | tei_listRelation)*),
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.declarable.attributes,
    tei_att.sortable.attributes,
    empty
  }
tei_att.global.linking.attributes =
  tei_att.global.linking.attribute.corresp,
  tei_att.global.linking.attribute.synch,
  tei_att.global.linking.attribute.sameAs,
  tei_att.global.linking.attribute.copyOf,
  tei_att.global.linking.attribute.next,
  tei_att.global.linking.attribute.prev,
  tei_att.global.linking.attribute.exclude,
  tei_att.global.linking.attribute.select
tei_att.global.linking.attribute.corresp =
  
  ## (corresponds) points to elements that correspond to the current element in some way.
  attribute corresp {
    list { tei_data.pointer+ }
  }?
tei_att.global.linking.attribute.synch =
  
  ## (synchronous) points to elements that are synchronous with the current element.
  attribute synch {
    list { tei_data.pointer+ }
  }?
tei_att.global.linking.attribute.sameAs =
  
  ## points to an element that is the same as the current element.
  attribute sameAs { tei_data.pointer }?
tei_att.global.linking.attribute.copyOf =
  
  ## points to an element of which the current element is a copy.
  attribute copyOf { tei_data.pointer }?
tei_att.global.linking.attribute.next =
  
  ## points to the next element of a virtual aggregate of which the current element is part.
  attribute next { tei_data.pointer }?
tei_att.global.linking.attribute.prev =
  
  ## (previous) points to the previous element of a virtual aggregate of which the current element is part.
  attribute prev { tei_data.pointer }?
tei_att.global.linking.attribute.exclude =
  
  ## points to elements that are in exclusive alternation with the current element.
  attribute exclude {
    list { tei_data.pointer+ }
  }?
tei_att.global.linking.attribute.select =
  
  ## selects one or more alternants; if one alternant is selected, the ambiguity or uncertainty is marked as resolved. If more than one alternant is selected, the degree of ambiguity or uncertainty is marked as reduced by the number of alternants not selected.
  attribute select {
    list { tei_data.pointer+ }
  }?
tei_link =
  
  ## defines an association or hypertextual link among elements or passages, of some type not more precisely specifiable by other elements. [16.1. ]
  element link {
    empty
    >> sch:pattern [
         id = "IstexSchema-link-linkTargets3-constraint-9"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:link"
           "\x{a}" ~
           "               "
           sch:assert [
             test = "contains(normalize-space(@target),' ')"
             "You must supply at least two values for @target or  on "
             sch:name [ ]
             "\x{a}" ~
             "               "
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    tei_att.global.attributes,
    tei_att.pointing.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_linkGrp =
  
  ## (link group) defines a collection of associations or hypertextual links. [16.1. ]
  element linkGrp {
    (tei_link | tei_ptr)+,
    tei_att.global.attributes,
    tei_att.pointing.group.attributes,
    empty
  }
tei_ab =
  
  ## (anonymous block) contains any arbitrary component-level unit of text, acting as an anonymous container for phrase or inter level elements analogous to, but without the semantic baggage of, a paragraph. [16.3. ]
  element ab {
    tei_macro.paraContent,
    tei_att.global.attributes,
    tei_att.typed.attributes,
    tei_att.declaring.attributes,
    tei_att.fragmentable.attributes,
    empty
  }
tei_anchor =
  
  ## (anchor point) attaches an identifier to a point within a text, whether or not it corresponds with a textual element. [8.4.2.  16.4. ]
  element anchor {
    empty, tei_att.global.attributes, tei_att.typed.attributes, empty
  }
tei_seg =
  
  ## (arbitrary segment) represents any segmentation of text below the chunk level. [16.3.  6.2.  7.2.5. ]
  element seg {
    tei_macro.paraContent,
    tei_att.global.attributes,
    tei_att.segLike.attributes,
    tei_att.typed.attributes,
    tei_att.responsibility.attributes,
    empty
  }
tei_when =
  
  ## indicates a point in time either relative to other elements in the same timeline tag, or absolutely. [16.5.2. ]
  element when {
    empty,
    tei_att.global.attributes,
    
    ## supplies an absolute value for the time.
    attribute absolute { tei_data.temporal.w3c }?,
    
    ## specifies the unit of time in which the interval value is expressed, if this is not inherited from the parent timeline.
    ## Suggested values include: 1] d(days) ; 2] h(hours) ; 3] min(minutes) ; 4] s(seconds) ; 5] ms(milliseconds) 
    attribute unit {
      
      ## (days) 
      "d"
      | 
        ## (hours) 
        "h"
      | 
        ## (minutes) 
        "min"
      | 
        ## (seconds) 
        "s"
      | 
        ## (milliseconds) 
        "ms"
      | xsd:Name
    }?,
    
    ## specifies a time interval either as a number or as one of the keywords defined by the datatype data.interval
    attribute interval { tei_data.interval }?,
    
    ## identifies the reference point for determining the time of the current when element, which is obtained by adding the interval to the time of the reference point.
    attribute since { tei_data.pointer }?,
    empty
  }
tei_timeline =
  
  ## provides a set of ordered points in time which can be linked to elements of a spoken text to create a temporal alignment of that text. [16.5.2. ]
  element timeline {
    tei_when+,
    tei_att.global.attributes,
    
    ## designates the origin of the timeline, i.e. the time at which it begins.
    attribute origin { tei_data.pointer }?,
    
    ## specifies the unit of time corresponding to the interval value of the timeline or of its constituent points in time.
    ## Suggested values include: 1] d(days) ; 2] h(hours) ; 3] min(minutes) ; 4] s(seconds) ; 5] ms(milliseconds) 
    attribute unit {
      
      ## (days) 
      "d"
      | 
        ## (hours) 
        "h"
      | 
        ## (minutes) 
        "min"
      | 
        ## (seconds) 
        "s"
      | 
        ## (milliseconds) 
        "ms"
      | xsd:Name
    }?,
    
    ## specifies a time interval either as a positive integral value or using one of a set of predefined codes.
    attribute interval { tei_data.interval }?,
    empty
  }
tei_join =
  
  ## identifies a possibly fragmented segment of text, by pointing at the possibly discontiguous elements which compose it. [16.7. ]
  element join {
    ((tei_model.descLike | tei_model.certLike)*)
    >> sch:pattern [
         id = "IstexSchema-join-joinTargets3-constraint-10"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:join"
           "\x{a}" ~
           "               "
           sch:assert [
             test = "contains(@target,' ')"
             "\x{a}" ~
             "You must supply at least two values for @target on "
             sch:name [ ]
             "\x{a}" ~
             "               "
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    tei_att.global.attributes,
    tei_att.pointing.attributes,
    tei_att.typed.attributes,
    
    ## specifies the name of an element which this aggregation may be understood to represent.
    attribute result { tei_data.name }?,
    
    ## indicates whether the targets to be joined include the entire element indicated (the entire subtree including its root), or just the children of the target (the branches of the subtree).
    [ a:defaultValue = "root" ]
    attribute scope {
      
      ## the rooted subtrees indicated by the target attribute are joined, each subtree become a child of the virtual element created by the join
      "root"
      | 
        ## the children of the subtrees indicated by the target attribute become the children of the virtual element (i.e. the roots of the subtrees are discarded)
        "branches"
    }?,
    empty
  }
tei_joinGrp =
  
  ## (join group) groups a collection of join elements and possibly pointers. [16.7. ]
  element joinGrp {
    (tei_model.glossLike*, (tei_join | tei_ptr)+),
    tei_att.global.attributes,
    tei_att.pointing.group.attributes,
    
    ## supplies the default value for the result on each join included within the group.
    attribute result { tei_data.name }?,
    empty
  }
tei_alt =
  
  ## (alternation) identifies an alternation or a set of choices among elements or passages. [16.8. ]
  element alt {
    empty,
    tei_att.global.attributes,
    tei_att.pointing.attribute.targetLang,
    tei_att.pointing.attribute.evaluate,
    tei_att.typed.attributes,
    
    ## specifies the destination of the reference by supplying one or more URI References
    attribute target {
      list { tei_data.pointer, tei_data.pointer, tei_data.pointer* }
    }?,
    
    ## states whether the alternations gathered in this collection are exclusive or inclusive.
    attribute mode {
      
      ## (exclusive) indicates that the alternation is exclusive, i.e. that at most one of the alternatives occurs.
      "excl"
      | 
        ## (inclusive) indicates that the alternation is not exclusive, i.e. that one or more of the alternatives occur.
        "incl"
    }?,
    
    ## If mode is , each weight states the probability that the corresponding alternative occurs. If mode is incl each weight states the probability that the corresponding alternative occurs given that at least one of the other alternatives occurs.
    attribute weights {
      list {
        tei_data.probability,
        tei_data.probability,
        tei_data.probability*
      }
    }?,
    empty
  }
tei_altGrp =
  
  ## (alternation group) groups a collection of alt elements and possibly pointers. [16.8. ]
  element altGrp {
    (tei_alt | tei_ptr)*,
    tei_att.global.attributes,
    tei_att.pointing.group.attributes,
    
    ## states whether the alternations gathered in this collection are exclusive or inclusive.
    [ a:defaultValue = "excl" ]
    attribute mode {
      
      ## (exclusive) indicates that the alternation is exclusive, i.e. that at most one of the alternatives occurs.
      "excl"
      | 
        ## (inclusive) indicates that the alternation is not exclusive, i.e. that one or more of the alternatives occur.
        "incl"
    }?,
    empty
  }
tei_table =
  
  ## contains text displayed in tabular form, in rows and columns. [14.1.1. ]
  element table {
    ((tei_model.headLike | tei_model.global)*,
     ((tei_row, tei_model.global*)+
      | (tei_model.graphicLike, tei_model.global*)+),
     (tei_model.divBottom, tei_model.global*)*),
    tei_att.global.attributes,
    
    ## indicates the number of rows in the table.
    attribute rows { tei_data.count }?,
    
    ## (columns) indicates the number of columns in each row of the table.
    attribute cols { tei_data.count }?,
    empty
  }
tei_row =
  
  ## contains one row of a table. [14.1.1. ]
  element row {
    tei_cell+,
    tei_att.global.attributes,
    tei_att.tableDecoration.attributes,
    empty
  }
tei_cell =
  
  ## contains one cell of a table. [14.1.1. ]
  element cell {
    tei_macro.specialPara,
    tei_att.global.attributes,
    tei_att.tableDecoration.attributes,
    empty
  }
tei_formula =
  
  ## contains a mathematical or other formula. [14.2. ]
  element formula {
    (text
     | tei_model.graphicLike
     | tei_model.hiLike
     | mathml.math
     | els_math)*,
    tei_att.global.attributes,
    
    ## names the notation used for the content of the element.
    attribute notation { tei_data.enumerated }?,
    empty
  }
tei_notatedMusic =
  
  ## encodes the presence of music notation in a text [14.3. ]
  element notatedMusic {
    (tei_model.labelLike
     | tei_model.ptrLike
     | tei_graphic
     | tei_binaryObject)*,
    tei_att.global.attributes,
    tei_att.placement.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_figure =
  
  ## groups elements representing or containing graphic information such as an illustration, formula, or figure. [14.4. ]
  element figure {
    (tei_model.headLike
     | tei_model.common
     | tei_figDesc
     | tei_model.graphicLike
     | tei_model.global
     | tei_model.divBottom)*,
    tei_att.global.attributes,
    tei_att.placement.attributes,
    tei_att.typed.attributes,
    empty
  }
tei_figDesc =
  
  ## (description of figure) contains a brief prose description of the appearance or content of a graphic figure, for use when documenting an image without displaying it. [14.4. ]
  element figDesc {
    tei_macro.limitedContent, tei_att.global.attributes, empty
  }
els_math =
  
  ##
  element ns3:math {
    mixed { tei_model.fData* }
  }
tei_model.fData =
  els_a
  | els_ovl
  | els_ov
  | els_ovr
  | els_unl
  | els_un
  | els_unr
  | els_lim
  | els_fen
  | els_cp
  | els_box
  | els_fr
  | els_rad
  | els_arrow
  | els_ar
  | els_sup
  | els_inf
  | els_b
  | els_ge
  | els_it
  | els_of
  | els_sc
  | els_scp
  | els_ssf
  | els_ty
  | els_rm
els_a =
  
  ##
  element ns3:a { text }
els_ovl =
  
  ##
  element ns3:ovl { text }
els_ov =
  
  ##
  element ns3:ov { text }
els_ovr =
  
  ##
  element ns3:ovr { text }
els_unl =
  
  ##
  element ns3:unl { text }
els_un =
  
  ##
  element ns3:un { text }
els_unr =
  
  ##
  element ns3:unr { text }
els_lim =
  
  ##
  element ns3:lim { els_op, els_ll?, els_ul? }
els_op =
  
  ##
  element ns3:op {
    mixed { tei_model.fData* }
  }
els_ll =
  
  ##
  element ns3:ll {
    mixed { tei_model.fData* }
  }
els_ul =
  
  ##
  element ns3:ul {
    mixed { tei_model.fData* }
  }
els_fen =
  
  ##
  element ns3:fen {
    mixed { (tei_model.fData | els_cp)* }
  }
els_cp =
  
  ##
  element ns3:cp {
    empty,
    tei_att.typed.attributes,
    
    ##
    attribute style { text }?,
    empty
  }
els_box =
  
  ##
  element ns3:box { text }
els_fr =
  
  ##
  element ns3:fr {
    els_nu,
    els_de,
    
    ##
    attribute shape { text }?,
    
    ##
    attribute align { text }?,
    
    ##
    attribute style { text }?,
    empty
  }
els_nu =
  
  ##
  element ns3:nu {
    mixed { tei_model.fData* }
  }
els_de =
  
  ##
  element ns3:de {
    mixed { tei_model.fData* }
  }
els_rad =
  
  ##
  element ns3:rad { text }
els_arrow =
  
  ##
  element ns3:arrow { text }
els_ar =
  
  ##
  element ns3:ar { text }
els_sup =
  
  ##
  element ns3:sup {
    mixed { tei_model.fData* }
  }
els_inf =
  
  ##
  element ns3:inf {
    mixed { tei_model.fData* },
    
    ##
    attribute loc { text }?,
    
    ##
    attribute arrange { text }?,
    empty
  }
els_b =
  
  ##
  element ns3:b { text }
els_ge =
  
  ##
  element ns3:ge { text }
els_it =
  
  ##
  element ns3:it { text }
els_of =
  
  ##
  element ns3:of { text }
els_sc =
  
  ##
  element ns3:sc { text }
els_scp =
  
  ##
  element ns3:scp { text }
els_ssf =
  
  ##
  element ns3:ssf { text }
els_ty =
  
  ##
  element ns3:ty { text }
els_rm =
  
  ##
  element ns3:rm { text }
start = tei_TEI | tei_teiCorpus