Revision 1092e99c37b272bc0fbffda5bc51dbbd8cfb1414 authored by Stuart Yeates on 30 July 2015, 10:08:47 UTC, committed by Stuart Yeates on 30 July 2015, 10:08:47 UTC
1 parent 3259028
Raw File
geneticTEI.rnc
default namespace = "http://www.w3.org/2001/XInclude"
namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
namespace ge = "http://www.tei-c.org/ns/geneticEditions"
namespace ns1 = "http://www.tei-c.org/ns/1.0"
namespace ns2 = "http://www.tei-c.org/ns/Examples"
namespace rng = "http://relaxng.org/ns/structure/1.0"
namespace s = "http://www.ascc.net/xml/schematron"
namespace sch = "http://purl.oclc.org/dsdl/schematron"
namespace xlink = "http://www.w3.org/1999/xlink"

# Schema generated from ODD source 2011-04-22T09:42:48Z. 
# Edition: 1.9.0. Last updated on February 25th 2011.
# Edition Location: http://www.tei-c.org/Vault/P5/1.9.0/
#

#
macro.paraContent =
  (text | model.gLike | model.phrase | model.inter | model.global)*
macro.limitedContent = (text | model.limitedPhrase | model.inter)*
macro.phraseSeq = (text | model.gLike | model.phrase | model.global)*
macro.phraseSeq.limited = (text | model.limitedPhrase | model.global)*
macro.specialPara =
  (text
   | model.gLike
   | model.phrase
   | model.inter
   | model.divPart
   | model.global)*
macro.xtext = (text | model.gLike)*
data.certainty = "high" | "medium" | "low" | "unknown"
data.probability = xsd:double { minInclusive = "0" maxInclusive = "1" }
data.numeric =
  xsd:double
  | xsd:token { pattern = "(\-?[\d]+/\-?[\d]+)" }
  | xsd:decimal
data.count = xsd:nonNegativeInteger
data.temporal.w3c =
  xsd:date
  | xsd:gYear
  | xsd:gMonth
  | xsd:gDay
  | xsd:gYearMonth
  | xsd:gMonthDay
  | xsd:time
  | xsd:dateTime
data.truthValue = xsd:boolean
data.xTruthValue = xsd:boolean | "unknown" | "inapplicable"
data.language = xsd:language
data.namespace = xsd:anyURI
data.outputMeasurement =
  xsd:token {
    pattern =
      "[\-+]?\d+(\.\d+)?(%|cm|mm|in|pt|pc|px|em|ex|gd|rem|vw|vh|vm)"
  }
data.pattern = xsd:token
data.point =
  xsd:token { pattern = "(\-?[0-9]+\.?[0-9]*,\-?[0-9]+\.?[0-9]*)" }
data.pointer = xsd:anyURI
data.version = xsd:token { pattern = "[\d]+(\.[\d]+){0,2}" }
data.key = xsd:string
data.word = xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
data.code = xsd:anyURI
data.name = xsd:Name
data.enumerated = data.name
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/:+\-]+" }
macro.anyXML =
  element * - (ns1:* | ns2:egXML) {
    attribute * { text }*,
    (text | macro.anyXML)*
  }
AnyThing =
  (element * {
     attribute * - (xml:id | xml:lang) { text }*,
     AnyThing
   }
   | text)*
att.ascribed.attributes = att.ascribed.attribute.who
att.ascribed.attribute.who =
  
  ## indicates the person, or group of people, to whom the element content is ascribed.
  attribute who {
    list { data.pointer, data.pointer* }
  }?
att.canonical.attributes =
  att.canonical.attribute.key, att.canonical.attribute.ref
att.canonical.attribute.key =
  
  ## provides an externally-defined means of identifying the entity (or entities) being
  ##         named, using a coded value of some kind.
  attribute key { data.key }?
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 { data.pointer, data.pointer* }
  }?
att.ranging.attributes =
  att.ranging.attribute.atLeast,
  att.ranging.attribute.atMost,
  att.ranging.attribute.min,
  att.ranging.attribute.max
att.ranging.attribute.atLeast =
  
  ## gives a minimum estimated value for the approximate measurement.
  attribute atLeast { data.numeric }?
att.ranging.attribute.atMost =
  
  ## gives a maximum estimated value for the approximate measurement.
  attribute atMost { data.numeric }?
att.ranging.attribute.min =
  
  ## where the measurement summarizes more than one observation
  ##       or a range, supplies the minimum value
  ##         observed.
  attribute min { data.numeric }?
att.ranging.attribute.max =
  
  ## where the measurement summarizes more than one observation
  ##       or a range, supplies the maximum value
  ##       observed.
  attribute max { data.numeric }?
att.dimensions.attributes =
  att.ranging.attributes,
  att.dimensions.attribute.unit,
  att.dimensions.attribute.quantity,
  att.dimensions.attribute.extent,
  att.dimensions.attribute.precision,
  att.dimensions.attribute.scope
att.dimensions.attribute.unit =
  
  ## names the unit used for the measurement
  ## Suggested values include: 1] cm(centimetres) ; 2] mm(millimetres) ; 3] in(inches) ; 4] lines; 5] chars(characters) 
  attribute unit {
    
    ## (centimetres) 
    "cm"
    | 
      ## (millimetres) 
      "mm"
    | 
      ## (inches) 
      "in"
    | 
      ## lines of text
      "lines"
    | 
      ## (characters) characters of text
      "chars"
    | xsd:Name
  }?
att.dimensions.attribute.quantity =
  
  ## specifies the length in the units specified
  attribute quantity { data.numeric }?
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 {
    list { data.word, data.word* }
  }?
att.dimensions.attribute.precision =
  
  ## characterizes the precision of the values specified by the other attributes.
  attribute precision { data.certainty }?
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 { data.enumerated }?
att.damaged.attributes =
  att.dimensions.attributes,
  att.damaged.attribute.hand,
  att.damaged.attribute.agent,
  att.damaged.attribute.degree,
  att.damaged.attribute.group
att.damaged.attribute.hand =
  
  ## In the case of damage (deliberate defacement, inking out, etc.) assignable to a distinct
  ##         hand, signifies the hand responsible for the damage.
  attribute hand { data.pointer }?
att.damaged.attribute.agent =
  
  ## categorizes the cause of the damage, if it can be identified.
  ## Sample values include: 1] rubbing; 2] mildew; 3] smoke
  attribute agent { data.enumerated }?
att.damaged.attribute.degree =
  
  ## Signifies the degree of damage according to a convenient scale. The damage tag
  ##         with the degree attribute should only be used where the text may be read with
  ##         some confidence; text supplied from other sources should be tagged as supplied.
  attribute degree { data.probability | data.certainty }?
att.damaged.attribute.group =
  
  ## assigns an arbitrary number to each stretch of damage regarded as forming part of the
  ##         same physical phenomenon.
  attribute group { data.count }?
att.breaking.attributes = att.breaking.attribute.break
att.breaking.attribute.break =
  
  ## indicates whether or not the  element
  ##	bearing this attribute should be considered to mark the end of
  ##	an orthographic token in the same way as whitespace.
  attribute break { data.enumerated }?
att.datable.w3c.attributes =
  att.datable.w3c.attribute.period,
  att.datable.w3c.attribute.when,
  att.datable.w3c.attribute.notBefore,
  att.datable.w3c.attribute.notAfter,
  att.datable.w3c.attribute.from,
  att.datable.w3c.attribute.to
att.datable.w3c.attribute.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 { data.pointer }?
att.datable.w3c.attribute.when =
  
  ## supplies the value of the date or time in a standard form,
  ##       e.g. yyyy-mm-dd.
  attribute when { data.temporal.w3c }?
att.datable.w3c.attribute.notBefore =
  
  ## specifies the earliest possible date for the event in
  ##	  standard form, e.g. yyyy-mm-dd.
  attribute notBefore { data.temporal.w3c }?
att.datable.w3c.attribute.notAfter =
  
  ## specifies the latest possible date for the event in
  ##	  standard form, e.g. yyyy-mm-dd.
  attribute notAfter { data.temporal.w3c }?
att.datable.w3c.attribute.from =
  
  ## indicates the starting point of the period in standard form, e.g. yyyy-mm-dd.
  attribute from { data.temporal.w3c }?
att.datable.w3c.attribute.to =
  
  ## indicates the ending point of the period in standard
  ##	  form, e.g. yyyy-mm-dd.
  attribute to { data.temporal.w3c }?
att.datable.attributes =
  att.datable.w3c.attributes, att.datable.iso.attributes
att.declarable.attributes = att.declarable.attribute.default
att.declarable.attribute.default =
  
  ## indicates whether or not this element is selected by default when
  ## its parent is selected.
  [ a:defaultValue = "false" ]
  attribute default {
    
    ## This element is selected if its parent is selected
    "true"
    | 
      ## This element can only be selected explicitly, unless it is the
      ## only one of its kind, in which case it is selected if its parent is selected.
      "false"
  }?
att.declaring.attributes = att.declaring.attribute.decls
att.declaring.attribute.decls =
  
  ## 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 { data.pointer, data.pointer* }
  }?
att.divLike.attributes =
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part
att.divLike.attribute.org =
  
  ## (organization) specifies how the content of the division is organized.
  [ a:defaultValue = "uniform" ]
  attribute org {
    
    ## composite content: i.e. no claim is made about the
    ##		  sequence in which the immediate contents of this division
    ##		  are to be processed, or their inter-relationships.
    "composite"
    | 
      ## uniform content: i.e. the immediate contents of this
      ##		  element are regarded as forming a logical unit, to be
      ##		  processed in sequence.
      "uniform"
  }?
att.divLike.attribute.sample =
  
  ## indicates whether this division is a sample of the
  ##		original source and if so, from which part.
  [ a:defaultValue = "complete" ]
  attribute sample {
    
    ## division lacks material present at end in source.
    "initial"
    | 
      ## division lacks material at start and end.
      "medial"
    | 
      ## division lacks material at start.
      "final"
    | 
      ## position of sampled material within original unknown.
      "unknown"
    | 
      ## division is not a sample.
      "complete"
  }?
att.divLike.attribute.part =
  
  ## specifies whether or not the division is fragmented by
  ##		some other structural element, for example a speech which is
  ##		divided between two or more verse stanzas.
  [ a:defaultValue = "N" ]
  attribute part {
    
    ## (yes) the division is incomplete in some respect
    "Y"
    | 
      ## (no) either the division is complete, or no claim is made as to its completeness.
      "N"
    | 
      ## (initial) the initial part of an incomplete division
      "I"
    | 
      ## (medial) a medial part of an incomplete division
      "M"
    | 
      ## (final) the final part of an incomplete division
      "F"
  }?
att.docStatus.attributes = att.docStatus.attribute.status
att.docStatus.attribute.status =
  
  ## describes the status of a document either currently or, when
  ## associated with a dated element, at the time indicated.
  ## Sample values include: 1] approved; 2] candidate; 3] cleared; 4] deprecated; 5] draft; 6] embargoed; 7] expired; 8] frozen; 9] galley; 10] proposed; 11] published; 12] recommendation; 13] submitted; 14] unfinished; 15] withdrawn
  [ a:defaultValue = "draft" ] attribute status { data.enumerated }?
att.responsibility.attributes =
  att.responsibility.attribute.cert, att.responsibility.attribute.resp
att.responsibility.attribute.cert =
  
  ## (certainty) signifies the degree of certainty associated with the intervention or interpretation.
  attribute cert { data.certainty }?
att.responsibility.attribute.resp =
  
  ## (responsible party) indicates the agency responsible for the intervention or interpretation, for example an
  ##         editor or transcriber.
  attribute resp {
    list { data.pointer, data.pointer* }
  }?
att.editLike.attributes =
  att.dimensions.attributes,
  att.responsibility.attributes,
  att.editLike.attribute.instant,
  att.editLike.attribute.evidence,
  att.editLike.attribute.source
att.editLike.attribute.instant =
  
  ## Is this an instant revision?
  [ a:defaultValue = "false" ] attribute instant { data.xTruthValue }?
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),
      (
       ## 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)*
    }
  }?
att.editLike.attribute.source =
  
  ## contains a list of one or more pointers indicating sources
  ##       supporting the given  intervention or interpretation.
  attribute source {
    list { data.pointer, data.pointer* }
  }?
att.global.attributes =
  att.global.linking.attributes,
  att.global.analytic.attributes,
  att.global.facs.attributes,
  att.staged.attributes,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.rendition,
  att.global.attribute.xmlbase,
  att.global.attribute.xmlspace
att.global.attribute.xmlid =
  
  ## (identifier) provides a unique identifier for the element bearing the attribute.
  attribute xml:id { xsd:ID }?
att.global.attribute.n =
  
  ## (number) gives a number (or other label) for an element, which is not necessarily unique within
  ##         the document.
  attribute n {
    list { data.word, data.word* }
  }?
att.global.attribute.xmllang =
  
  ## (language) indicates the language of the element content using a tag generated
  ##         according to BCP 47
  ##          
  attribute xml:lang { data.language }?
att.global.attribute.rend =
  
  ## (rendition) indicates how the element in question was rendered or presented in the source text.
  attribute rend {
    list { data.word, data.word* }
  }?
att.global.attribute.rendition =
  
  ## points to a description of the rendering or presentation used for this element in the
  ##         source text.
  attribute rendition {
    list { data.pointer, data.pointer* }
  }?
att.global.attribute.xmlbase =
  
  ## provides a base URI reference with which applications can resolve relative URI
  ##         references into absolute URI references.
  attribute xml:base { data.pointer }?
att.global.attribute.xmlspace =
  
  ## signals an intention about how white space should be 
  ##       managed by  applications. 
  attribute xml:space {
    
    ## the processor should treat white space according to the
    ##	default XML white space handling rules
    "default"
    | 
      ## the processor should preserve unchanged any and all
      ##	white space in the source
      "preserve"
  }?
att.handFeatures.attributes =
  att.handFeatures.attribute.scribe,
  att.handFeatures.attribute.scribeRef,
  att.handFeatures.attribute.script,
  att.handFeatures.attribute.scriptRef,
  att.handFeatures.attribute.medium,
  att.handFeatures.attribute.scope
att.handFeatures.attribute.scribe =
  
  ## gives a name or other identifier for the scribe
  ## believed to be responsible for this hand.
  attribute scribe { data.name }?
att.handFeatures.attribute.scribeRef =
  
  ## points to a full description of the scribe concerned, typically supplied by a person element
  ##       elsewhere in the description.
  attribute scribeRef {
    list { data.pointer, data.pointer* }
  }?
att.handFeatures.attribute.script =
  
  ## characterizes the particular script or writing style used by
  ## this hand, for example secretary, copperplate, Chancery, Italian, etc.
  attribute script {
    list { data.name, data.name* }
  }?
att.handFeatures.attribute.scriptRef =
  
  ## points to a full description of the script or writing style used by
  ## this hand, typically supplied by a scriptNote element
  ##       elsewhere in the description.
  attribute scriptRef {
    list { data.pointer, data.pointer* }
  }?
att.handFeatures.attribute.medium =
  
  ## describes the tint or type of ink, e.g. brown, or other
  ## writing medium, e.g. pencil
  attribute medium { data.enumerated }?
att.handFeatures.attribute.scope =
  
  ## specifies how widely this  hand is used in the manuscript.
  attribute scope {
    
    ## only this hand is used throughout the manuscript
    "sole"
    | 
      ## this hand is used through most of the manuscript
      "major"
    | 
      ## this hand is used occasionally in the manuscript
      "minor"
  }?
att.internetMedia.attributes = att.internetMedia.attribute.mimeType
att.internetMedia.attribute.mimeType =
  
  ## (MIME media type) specifies the applicable multimedia internet mail extension (MIME) media type
  attribute mimeType { data.word }?
att.interpLike.attributes =
  att.responsibility.attributes,
  att.interpLike.attribute.type,
  att.interpLike.attribute.inst
att.interpLike.attribute.type =
  
  ## indicates what kind of phenomenon is being noted in the passage.
  ## Sample values include: 1] image; 2] character; 3] theme; 4] allusion
  attribute type { data.enumerated }?
att.interpLike.attribute.inst =
  
  ## (instances) points to instances of the analysis or interpretation represented
  ## by the current element.
  attribute inst {
    list { data.pointer, data.pointer* }
  }?
att.measurement.attributes =
  att.measurement.attribute.unit,
  att.measurement.attribute.quantity,
  att.measurement.attribute.commodity
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
  }?
att.measurement.attribute.quantity =
  
  ## specifies the number of the specified units that
  ##       comprise the measurement
  attribute quantity { data.numeric }?
att.measurement.attribute.commodity =
  
  ## indicates the substance that is being measured
  attribute commodity {
    list { data.word, data.word* }
  }?
att.naming.attributes =
  att.canonical.attributes,
  att.naming.attribute.role,
  att.naming.attribute.nymRef
att.naming.attribute.role =
  
  ## may be used to specify further information about the entity referenced by
  ## this name, for example the occupation of a person, or the status of a place. 
  attribute role { data.enumerated }?
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 { data.pointer, data.pointer* }
  }?
att.placement.attributes = att.placement.attribute.place
att.placement.attribute.place =
  
  ## 
  ## 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),
      (
       ## 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)*
    }
  }?
att.typed.attributes =
  att.typed.attribute.type, att.typed.attribute.subtype
att.typed.attribute.type =
  
  ## characterizes the element in some sense, using any convenient
  ##  classification scheme or typology.
  attribute type { data.enumerated }?
att.typed.attribute.subtype =
  
  ## provides a sub-categorization of the element, if needed
  attribute subtype { data.enumerated }?
att.pointing.attributes =
  att.pointing.attribute.target, att.pointing.attribute.evaluate
att.pointing.attribute.target =
  
  ## specifies the destination of the reference by supplying one or more URI References
  attribute target {
    list { data.pointer, data.pointer* }
  }?
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"
  }?
att.pointing.group.attributes =
  att.pointing.attributes,
  att.typed.attributes,
  att.pointing.group.attribute.domains,
  att.pointing.group.attribute.targFunc
att.pointing.group.attribute.domains =
  
  ## optionally specifies the identifiers of the elements
  ##       within which all elements indicated by the contents of this
  ##       element lie.
  attribute domains {
    list { data.pointer, data.pointer, data.pointer* }
  }?
att.pointing.group.attribute.targFunc =
  
  ## (target function) describes the function of each of the values of the
  ##       targets attribute of the enclosed link,
  ##       join, or alt tags.
  attribute targFunc {
    list { data.word, data.word, data.word* }
  }?
att.scoping.attributes =
  att.scoping.attribute.target, att.scoping.attribute.match
att.scoping.attribute.target =
  
  ## points at one or several  elements or  sets of elements by
  ##       means of one or more
  ##       data pointers, using the URI syntax.
  attribute target {
    list { data.pointer, data.pointer* }
  }?
att.scoping.attribute.match =
  
  ## supplies an arbitrary XPath expression identifying a set
  ##       of nodes, selected within the context identified by the
  ##       target attribute if this is supplied, or within the
  ##       context of the element bearing this attribute if it is not.
  ##
  attribute match { text }?
att.segLike.attributes =
  att.segLike.attribute.function, att.segLike.attribute.part
att.segLike.attribute.function =
  
  ## characterizes the function of the segment.
  attribute function { data.enumerated }?
att.segLike.attribute.part =
  
  ## specifies whether or not the segment is fragmented by some other
  ## structural element, for example a clause which is divided between two
  ## or more sentences.
  [ a:defaultValue = "N" ]
  attribute part {
    
    ## (yes) the segment is incomplete in some respect
    "Y"
    | 
      ## (no) either the segment is complete, or no claim is made as to
      ## its completeness
      "N"
    | 
      ## (initial) the initial part of an incomplete segment
      "I"
    | 
      ## (medial) a medial part of an incomplete segment
      "M"
    | 
      ## (final) the final part of an incomplete segment
      "F"
  }?
att.sourced.attributes = att.sourced.attribute.ed
att.sourced.attribute.ed =
  
  ## (edition) supplies an 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 { data.code, data.code* }
  }?
att.spanning.attributes = att.spanning.attribute.spanTo
att.spanning.attribute.spanTo =
  
  ## indicates the end of a span initiated by the element
  ##	bearing this attribute.
  attribute spanTo { data.pointer }?
att.tableDecoration.attributes =
  att.tableDecoration.attribute.role,
  att.tableDecoration.attribute.rows,
  att.tableDecoration.attribute.cols
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
  }?
att.tableDecoration.attribute.rows =
  
  ## indicates the number of rows occupied by this cell or row.
  [ a:defaultValue = "1" ] attribute rows { data.count }?
att.tableDecoration.attribute.cols =
  
  ## (columns) indicates the number of columns occupied by this cell or
  ##	row.
  [ a:defaultValue = "1" ] attribute cols { data.count }?
att.transcriptional.attributes =
  att.editLike.attributes,
  att.transcriptional.attribute.hand,
  att.transcriptional.attribute.status,
  att.transcriptional.attribute.seq
att.transcriptional.attribute.hand =
  
  ## signifies the hand of the agent which made the intervention.
  attribute hand { data.pointer }?
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 { data.enumerated }?
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 { data.count }?
att.translatable.attributes = att.translatable.attribute.version
att.translatable.attribute.version =
  
  ## specifies the version name or number of the source from
  ##	which the translated version was derived
  attribute version { data.word }?
model.nameLike.agent = name | persName
model.nameLike.agent_alternation = name | persName
model.nameLike.agent_sequence = name, persName
model.nameLike.agent_sequenceOptional = name?, persName?
model.nameLike.agent_sequenceOptionalRepeatable = name*, persName*
model.nameLike.agent_sequenceRepeatable = name+, persName+
model.segLike = s | phr | m | pc | seg
model.segLike_alternation = s | phr | m | pc | seg
model.segLike_sequence = s, phr, m, pc, seg
model.segLike_sequenceOptional = s?, phr?, m?, pc?, seg?
model.segLike_sequenceOptionalRepeatable = s*, phr*, m*, pc*, seg*
model.segLike_sequenceRepeatable = s+, phr+, m+, pc+, seg+
model.hiLike = hi
model.hiLike_alternation = hi
model.hiLike_sequence = hi
model.hiLike_sequenceOptional = hi?
model.hiLike_sequenceOptionalRepeatable = hi*
model.hiLike_sequenceRepeatable = hi+
model.emphLike =
  foreign
  | emph
  | distinct
  | mentioned
  | soCalled
  | gloss
  | term
  | title
model.emphLike_alternation =
  foreign
  | emph
  | distinct
  | mentioned
  | soCalled
  | gloss
  | term
  | title
model.emphLike_sequence =
  foreign, emph, distinct, mentioned, soCalled, gloss, term, title
model.emphLike_sequenceOptional =
  foreign?,
  emph?,
  distinct?,
  mentioned?,
  soCalled?,
  gloss?,
  term?,
  title?
model.emphLike_sequenceOptionalRepeatable =
  foreign*,
  emph*,
  distinct*,
  mentioned*,
  soCalled*,
  gloss*,
  term*,
  title*
model.emphLike_sequenceRepeatable =
  foreign+,
  emph+,
  distinct+,
  mentioned+,
  soCalled+,
  gloss+,
  term+,
  title+
model.highlighted = model.hiLike | model.emphLike
model.highlighted_alternation =
  model.hiLike_alternation | model.emphLike_alternation
model.highlighted_sequence =
  model.hiLike_sequence, model.emphLike_sequence
model.highlighted_sequenceOptional =
  model.hiLike_sequenceOptional?, model.emphLike_sequenceOptional?
model.highlighted_sequenceOptionalRepeatable =
  model.hiLike_sequenceOptionalRepeatable*,
  model.emphLike_sequenceOptionalRepeatable*
model.highlighted_sequenceRepeatable =
  model.hiLike_sequenceRepeatable+, model.emphLike_sequenceRepeatable+
model.dateLike = date | time
model.dateLike_alternation = date | time
model.dateLike_sequence = date, time
model.dateLike_sequenceOptional = date?, time?
model.dateLike_sequenceOptionalRepeatable = date*, time*
model.dateLike_sequenceRepeatable = date+, time+
model.dimLike = height | depth | width
model.measureLike =
  num | measure | measureGrp | dim | height | depth | width
model.measureLike_alternation =
  num | measure | measureGrp | dim | height | depth | width
model.measureLike_sequence =
  num, measure, measureGrp, dim, height, depth, width
model.measureLike_sequenceOptional =
  num?, measure?, measureGrp?, dim?, height?, depth?, width?
model.measureLike_sequenceOptionalRepeatable =
  num*, measure*, measureGrp*, dim*, height*, depth*, width*
model.measureLike_sequenceRepeatable =
  num+, measure+, measureGrp+, dim+, height+, depth+, width+
model.egLike = notAllowed
model.egLike_alternation = notAllowed
model.egLike_sequence = empty
model.egLike_sequenceOptional = empty
model.egLike_sequenceOptionalRepeatable = empty
model.egLike_sequenceRepeatable = notAllowed
model.graphicLike = graphic | formula
model.graphicLike_alternation = graphic | formula
model.graphicLike_sequence = graphic, formula
model.graphicLike_sequenceOptional = graphic?, formula?
model.graphicLike_sequenceOptionalRepeatable = graphic*, formula*
model.graphicLike_sequenceRepeatable = graphic+, formula+
model.pPart.msdesc =
  catchwords
  | dimensions
  | heraldry
  | locus
  | locusGrp
  | material
  | objectType
  | origDate
  | origPlace
  | secFol
  | signatures
  | stamp
  | watermark
  | handShift
model.pPart.msdesc_alternation =
  catchwords
  | dimensions
  | heraldry
  | locus
  | locusGrp
  | material
  | objectType
  | origDate
  | origPlace
  | secFol
  | signatures
  | stamp
  | watermark
  | handShift
model.pPart.msdesc_sequence =
  catchwords,
  dimensions,
  heraldry,
  locus,
  locusGrp,
  material,
  objectType,
  origDate,
  origPlace,
  secFol,
  signatures,
  stamp,
  watermark,
  handShift
model.pPart.msdesc_sequenceOptional =
  catchwords?,
  dimensions?,
  heraldry?,
  locus?,
  locusGrp?,
  material?,
  objectType?,
  origDate?,
  origPlace?,
  secFol?,
  signatures?,
  stamp?,
  watermark?,
  handShift?
model.pPart.msdesc_sequenceOptionalRepeatable =
  catchwords*,
  dimensions*,
  heraldry*,
  locus*,
  locusGrp*,
  material*,
  objectType*,
  origDate*,
  origPlace*,
  secFol*,
  signatures*,
  stamp*,
  watermark*,
  handShift*
model.pPart.msdesc_sequenceRepeatable =
  catchwords+,
  dimensions+,
  heraldry+,
  locus+,
  locusGrp+,
  material+,
  objectType+,
  origDate+,
  origPlace+,
  secFol+,
  signatures+,
  stamp+,
  watermark+,
  handShift+
model.pPart.editorial = choice | abbr | expan | ex | am | subst
model.pPart.editorial_alternation =
  choice | abbr | expan | ex | am | subst
model.pPart.editorial_sequence = choice, abbr, expan, ex, am, subst
model.pPart.editorial_sequenceOptional =
  choice?, abbr?, expan?, ex?, am?, subst?
model.pPart.editorial_sequenceOptionalRepeatable =
  choice*, abbr*, expan*, ex*, am*, subst*
model.pPart.editorial_sequenceRepeatable =
  choice+, abbr+, expan+, ex+, am+, subst+
model.pPart.transcriptional =
  sic
  | corr
  | reg
  | orig
  | add
  | del
  | unclear
  | app
  | damage
  | restore
  | supplied
  | surplus
  | mod
  | undo
  | redo
  | rewrite
  | metaMark
  | used
model.pPart.transcriptional_alternation =
  sic
  | corr
  | reg
  | orig
  | add
  | del
  | unclear
  | app
  | damage
  | restore
  | supplied
  | surplus
  | mod
  | undo
  | redo
  | rewrite
  | metaMark
  | used
model.pPart.transcriptional_sequence =
  sic,
  corr,
  reg,
  orig,
  add,
  del,
  unclear,
  app,
  damage,
  restore,
  supplied,
  surplus,
  mod,
  undo,
  redo,
  rewrite,
  metaMark,
  used
model.pPart.transcriptional_sequenceOptional =
  sic?,
  corr?,
  reg?,
  orig?,
  add?,
  del?,
  unclear?,
  app?,
  damage?,
  restore?,
  supplied?,
  surplus?,
  mod?,
  undo?,
  redo?,
  rewrite?,
  metaMark?,
  used?
model.pPart.transcriptional_sequenceOptionalRepeatable =
  sic*,
  corr*,
  reg*,
  orig*,
  add*,
  del*,
  unclear*,
  app*,
  damage*,
  restore*,
  supplied*,
  surplus*,
  mod*,
  undo*,
  redo*,
  rewrite*,
  metaMark*,
  used*
model.pPart.transcriptional_sequenceRepeatable =
  sic+,
  corr+,
  reg+,
  orig+,
  add+,
  del+,
  unclear+,
  app+,
  damage+,
  restore+,
  supplied+,
  surplus+,
  mod+,
  undo+,
  redo+,
  rewrite+,
  metaMark+,
  used+
model.pPart.edit = model.pPart.editorial | model.pPart.transcriptional
model.pPart.edit_alternation =
  model.pPart.editorial_alternation
  | model.pPart.transcriptional_alternation
model.pPart.edit_sequence =
  model.pPart.editorial_sequence, model.pPart.transcriptional_sequence
model.pPart.edit_sequenceOptional =
  model.pPart.editorial_sequenceOptional?,
  model.pPart.transcriptional_sequenceOptional?
model.pPart.edit_sequenceOptionalRepeatable =
  model.pPart.editorial_sequenceOptionalRepeatable*,
  model.pPart.transcriptional_sequenceOptionalRepeatable*
model.pPart.edit_sequenceRepeatable =
  model.pPart.editorial_sequenceRepeatable+,
  model.pPart.transcriptional_sequenceRepeatable+
model.ptrLike = ptr | ref
model.ptrLike_alternation = ptr | ref
model.ptrLike_sequence = ptr, ref
model.ptrLike_sequenceOptional = ptr?, ref?
model.ptrLike_sequenceOptionalRepeatable = ptr*, ref*
model.ptrLike_sequenceRepeatable = ptr+, ref+
model.global.meta =
  index
  | precision
  | certainty
  | respons
  | span
  | spanGrp
  | interp
  | interpGrp
  | link
  | linkGrp
  | timeline
  | join
  | joinGrp
  | alt
  | altGrp
  | transposeGrp
model.global.meta_alternation =
  index
  | precision
  | certainty
  | respons
  | span
  | spanGrp
  | interp
  | interpGrp
  | link
  | linkGrp
  | timeline
  | join
  | joinGrp
  | alt
  | altGrp
  | transposeGrp
model.global.meta_sequence =
  index,
  precision,
  certainty,
  respons,
  span,
  spanGrp,
  interp,
  interpGrp,
  link,
  linkGrp,
  timeline,
  join,
  joinGrp,
  alt,
  altGrp,
  transposeGrp
model.global.meta_sequenceOptional =
  index?,
  precision?,
  certainty?,
  respons?,
  span?,
  spanGrp?,
  interp?,
  interpGrp?,
  link?,
  linkGrp?,
  timeline?,
  join?,
  joinGrp?,
  alt?,
  altGrp?,
  transposeGrp?
model.global.meta_sequenceOptionalRepeatable =
  index*,
  precision*,
  certainty*,
  respons*,
  span*,
  spanGrp*,
  interp*,
  interpGrp*,
  link*,
  linkGrp*,
  timeline*,
  join*,
  joinGrp*,
  alt*,
  altGrp*,
  transposeGrp*
model.global.meta_sequenceRepeatable =
  index+,
  precision+,
  certainty+,
  respons+,
  span+,
  spanGrp+,
  interp+,
  interpGrp+,
  link+,
  linkGrp+,
  timeline+,
  join+,
  joinGrp+,
  alt+,
  altGrp+,
  transposeGrp+
model.milestoneLike = milestone | pb | lb | cb | anchor | fw | gb
model.milestoneLike_alternation =
  milestone | pb | lb | cb | anchor | fw | gb
model.milestoneLike_sequence = milestone, pb, lb, cb, anchor, fw, gb
model.milestoneLike_sequenceOptional =
  milestone?, pb?, lb?, cb?, anchor?, fw?, gb?
model.milestoneLike_sequenceOptionalRepeatable =
  milestone*, pb*, lb*, cb*, anchor*, fw*, gb*
model.milestoneLike_sequenceRepeatable =
  milestone+, pb+, lb+, cb+, anchor+, fw+, gb+
model.gLike = g
model.gLike_alternation = g
model.gLike_sequence = g
model.gLike_sequenceOptional = g?
model.gLike_sequenceOptionalRepeatable = g*
model.gLike_sequenceRepeatable = g+
model.biblLike = bibl | biblFull | msDesc
model.biblLike_alternation = bibl | biblFull | msDesc
model.biblLike_sequence = bibl, biblFull, msDesc
model.biblLike_sequenceOptional = bibl?, biblFull?, msDesc?
model.biblLike_sequenceOptionalRepeatable = bibl*, biblFull*, msDesc*
model.biblLike_sequenceRepeatable = bibl+, biblFull+, msDesc+
model.headLike = head
model.headLike_alternation = head
model.headLike_sequence = head
model.headLike_sequenceOptional = head?
model.headLike_sequenceOptionalRepeatable = head*
model.headLike_sequenceRepeatable = head+
model.labelLike = desc | label
model.labelLike_alternation = desc | label
model.labelLike_sequence = desc, label
model.labelLike_sequenceOptional = desc?, label?
model.labelLike_sequenceOptionalRepeatable = desc*, label*
model.labelLike_sequenceRepeatable = desc+, label+
model.listLike = \list | listBibl | listWit | listEvent | listNym
model.listLike_alternation =
  \list | listBibl | listWit | listEvent | listNym
model.listLike_sequence = \list, listBibl, listWit, listEvent, listNym
model.listLike_sequenceOptional =
  \list?, listBibl?, listWit?, listEvent?, listNym?
model.listLike_sequenceOptionalRepeatable =
  \list*, listBibl*, listWit*, listEvent*, listNym*
model.listLike_sequenceRepeatable =
  \list+, listBibl+, listWit+, listEvent+, listNym+
model.noteLike = note | witDetail
model.noteLike_alternation = note | witDetail
model.noteLike_sequence = note, witDetail
model.noteLike_sequenceOptional = note?, witDetail?
model.noteLike_sequenceOptionalRepeatable = note*, witDetail*
model.noteLike_sequenceRepeatable = note+, witDetail+
model.lLike = l
model.lLike_alternation = l
model.lLike_sequence = l
model.lLike_sequenceOptional = l?
model.lLike_sequenceOptionalRepeatable = l*
model.lLike_sequenceRepeatable = l+
model.pLike = p | ab
model.pLike_alternation = p | ab
model.pLike_sequence = p, ab
model.pLike_sequenceOptional = p?, ab?
model.pLike_sequenceOptionalRepeatable = p*, ab*
model.pLike_sequenceRepeatable = p+, ab+
model.stageLike = stage | move | view | camera | sound | caption | tech
model.stageLike_alternation =
  stage | move | view | camera | sound | caption | tech
model.stageLike_sequence =
  stage, move, view, camera, sound, caption, tech
model.stageLike_sequenceOptional =
  stage?, move?, view?, camera?, sound?, caption?, tech?
model.stageLike_sequenceOptionalRepeatable =
  stage*, move*, view*, camera*, sound*, caption*, tech*
model.stageLike_sequenceRepeatable =
  stage+, move+, view+, camera+, sound+, caption+, tech+
model.entryPart = notAllowed
model.global.edit =
  gap | addSpan | damageSpan | delSpan | space | modSpan
model.global.edit_alternation =
  gap | addSpan | damageSpan | delSpan | space | modSpan
model.global.edit_sequence =
  gap, addSpan, damageSpan, delSpan, space, modSpan
model.global.edit_sequenceOptional =
  gap?, addSpan?, damageSpan?, delSpan?, space?, modSpan?
model.global.edit_sequenceOptionalRepeatable =
  gap*, addSpan*, damageSpan*, delSpan*, space*, modSpan*
model.global.edit_sequenceRepeatable =
  gap+, addSpan+, damageSpan+, delSpan+, space+, modSpan+
model.divPart =
  model.lLike
  | model.pLike
  | lg
  | sp
  | floatingText
  | graph
  | tree
  | eTree
  | forest
  | forestGrp
model.divPart_alternation =
  model.lLike_alternation
  | model.pLike_alternation
  | lg
  | sp
  | floatingText
  | graph
  | tree
  | eTree
  | forest
  | forestGrp
model.divPart_sequence =
  model.lLike_sequence,
  model.pLike_sequence,
  lg,
  sp,
  floatingText,
  graph,
  tree,
  eTree,
  forest,
  forestGrp
model.divPart_sequenceOptional =
  model.lLike_sequenceOptional?,
  model.pLike_sequenceOptional?,
  lg?,
  sp?,
  floatingText?,
  graph?,
  tree?,
  eTree?,
  forest?,
  forestGrp?
model.divPart_sequenceOptionalRepeatable =
  model.lLike_sequenceOptionalRepeatable*,
  model.pLike_sequenceOptionalRepeatable*,
  lg*,
  sp*,
  floatingText*,
  graph*,
  tree*,
  eTree*,
  forest*,
  forestGrp*
model.divPart_sequenceRepeatable =
  model.lLike_sequenceRepeatable+,
  model.pLike_sequenceRepeatable+,
  lg+,
  sp+,
  floatingText+,
  graph+,
  tree+,
  eTree+,
  forest+,
  forestGrp+
model.persStateLike = persName | affiliation
model.persStateLike_alternation = persName | affiliation
model.persStateLike_sequence = persName, affiliation
model.persStateLike_sequenceOptional = persName?, affiliation?
model.persStateLike_sequenceOptionalRepeatable = persName*, affiliation*
model.persStateLike_sequenceRepeatable = persName+, affiliation+
model.placeNamePart = placeName | country | settlement
model.placeNamePart_alternation = placeName | country | settlement
model.placeNamePart_sequence = placeName, country, settlement
model.placeNamePart_sequenceOptional = placeName?, country?, settlement?
model.placeNamePart_sequenceOptionalRepeatable =
  placeName*, country*, settlement*
model.placeNamePart_sequenceRepeatable =
  placeName+, country+, settlement+
model.placeStateLike = model.placeNamePart
model.placeStateLike_alternation = model.placeNamePart_alternation
model.placeStateLike_sequence = model.placeNamePart_sequence
model.placeStateLike_sequenceOptional =
  model.placeNamePart_sequenceOptional?
model.placeStateLike_sequenceOptionalRepeatable =
  model.placeNamePart_sequenceOptionalRepeatable*
model.placeStateLike_sequenceRepeatable =
  model.placeNamePart_sequenceRepeatable+
model.publicationStmtPart =
  address
  | date
  | publisher
  | pubPlace
  | distributor
  | authority
  | idno
  | availability
model.glossLike = desc | gloss | precision | certainty | respons
model.quoteLike = quote | cit
model.quoteLike_alternation = quote | cit
model.quoteLike_sequence = quote, cit
model.quoteLike_sequenceOptional = quote?, cit?
model.quoteLike_sequenceOptionalRepeatable = quote*, cit*
model.quoteLike_sequenceRepeatable = quote+, cit+
model.qLike = model.quoteLike | said | q
model.qLike_alternation = model.quoteLike_alternation | said | q
model.qLike_sequence = model.quoteLike_sequence, said, q
model.qLike_sequenceOptional =
  model.quoteLike_sequenceOptional?, said?, q?
model.qLike_sequenceOptionalRepeatable =
  model.quoteLike_sequenceOptionalRepeatable*, said*, q*
model.qLike_sequenceRepeatable =
  model.quoteLike_sequenceRepeatable+, said+, q+
model.respLike =
  author | editor | respStmt | sponsor | funder | principal
model.respLike_alternation =
  author | editor | respStmt | sponsor | funder | principal
model.respLike_sequence =
  author, editor, respStmt, sponsor, funder, principal
model.respLike_sequenceOptional =
  author?, editor?, respStmt?, sponsor?, funder?, principal?
model.respLike_sequenceOptionalRepeatable =
  author*, editor*, respStmt*, sponsor*, funder*, principal*
model.respLike_sequenceRepeatable =
  author+, editor+, respStmt+, sponsor+, funder+, principal+
model.divWrapper =
  byline | dateline | argument | epigraph | salute | docAuthor | docDate
model.divWrapper_alternation =
  byline | dateline | argument | epigraph | salute | docAuthor | docDate
model.divWrapper_sequence =
  byline, dateline, argument, epigraph, salute, docAuthor, docDate
model.divWrapper_sequenceOptional =
  byline?,
  dateline?,
  argument?,
  epigraph?,
  salute?,
  docAuthor?,
  docDate?
model.divWrapper_sequenceOptionalRepeatable =
  byline*,
  dateline*,
  argument*,
  epigraph*,
  salute*,
  docAuthor*,
  docDate*
model.divWrapper_sequenceRepeatable =
  byline+,
  dateline+,
  argument+,
  epigraph+,
  salute+,
  docAuthor+,
  docDate+
model.divTopPart = model.headLike | opener
model.divTopPart_alternation = model.headLike_alternation | opener
model.divTopPart_sequence = model.headLike_sequence, opener
model.divTopPart_sequenceOptional =
  model.headLike_sequenceOptional?, opener?
model.divTopPart_sequenceOptionalRepeatable =
  model.headLike_sequenceOptionalRepeatable*, opener*
model.divTopPart_sequenceRepeatable =
  model.headLike_sequenceRepeatable+, opener+
model.divTop = model.divWrapper | model.divTopPart
model.frontPart.drama =
  set | prologue | epilogue | performance | castList
model.frontPart.drama_alternation =
  set | prologue | epilogue | performance | castList
model.frontPart.drama_sequence =
  set, prologue, epilogue, performance, castList
model.frontPart.drama_sequenceOptional =
  set?, prologue?, epilogue?, performance?, castList?
model.frontPart.drama_sequenceOptionalRepeatable =
  set*, prologue*, epilogue*, performance*, castList*
model.frontPart.drama_sequenceRepeatable =
  set+, prologue+, epilogue+, performance+, castList+
model.pLike.front =
  head
  | byline
  | argument
  | epigraph
  | docTitle
  | titlePart
  | docAuthor
  | docEdition
  | docImprint
  | docDate
model.divBottomPart = trailer | closer | signed | postscript
model.divBottomPart_alternation = trailer | closer | signed | postscript
model.divBottomPart_sequence = trailer, closer, signed, postscript
model.divBottomPart_sequenceOptional =
  trailer?, closer?, signed?, postscript?
model.divBottomPart_sequenceOptionalRepeatable =
  trailer*, closer*, signed*, postscript*
model.divBottomPart_sequenceRepeatable =
  trailer+, closer+, signed+, postscript+
model.divBottom = model.divWrapper | model.divBottomPart
model.titlepagePart =
  graphic
  | byline
  | argument
  | epigraph
  | docTitle
  | titlePart
  | docAuthor
  | imprimatur
  | docEdition
  | docImprint
  | docDate
model.msQuoteLike =
  title | colophon | explicit | finalRubric | incipit | rubric
model.msQuoteLike_alternation =
  title | colophon | explicit | finalRubric | incipit | rubric
model.msQuoteLike_sequence =
  title, colophon, explicit, finalRubric, incipit, rubric
model.msQuoteLike_sequenceOptional =
  title?, colophon?, explicit?, finalRubric?, incipit?, rubric?
model.msQuoteLike_sequenceOptionalRepeatable =
  title*, colophon*, explicit*, finalRubric*, incipit*, rubric*
model.msQuoteLike_sequenceRepeatable =
  title+, colophon+, explicit+, finalRubric+, incipit+, rubric+
model.msItemPart =
  model.quoteLike
  | model.respLike
  | model.msQuoteLike
  | bibl
  | listBibl
  | filiation
  | msItem
  | msItemStruct
  | textLang
  | decoNote
model.choicePart =
  sic | corr | reg | orig | unclear | abbr | expan | seg | ex | am
model.imprintPart = publisher | biblScope | pubPlace | distributor
model.imprintPart_alternation =
  publisher | biblScope | pubPlace | distributor
model.imprintPart_sequence = publisher, biblScope, pubPlace, distributor
model.imprintPart_sequenceOptional =
  publisher?, biblScope?, pubPlace?, distributor?
model.imprintPart_sequenceOptionalRepeatable =
  publisher*, biblScope*, pubPlace*, distributor*
model.imprintPart_sequenceRepeatable =
  publisher+, biblScope+, pubPlace+, distributor+
model.catDescPart = notAllowed
model.castItemPart = role | roleDesc | actor
model.physDescPart_sequenceOptional =
  objectDesc?,
  handDesc?,
  typeDesc?,
  scriptDesc?,
  musicNotation?,
  decoDesc?,
  additions?,
  bindingDesc?,
  sealDesc?,
  accMat?
model.addressLike = email | address | affiliation
model.addressLike_alternation = email | address | affiliation
model.addressLike_sequence = email, address, affiliation
model.addressLike_sequenceOptional = email?, address?, affiliation?
model.addressLike_sequenceOptionalRepeatable =
  email*, address*, affiliation*
model.addressLike_sequenceRepeatable = email+, address+, affiliation+
model.nameLike = model.nameLike.agent | model.placeStateLike | rs | idno
model.nameLike_alternation =
  model.nameLike.agent_alternation
  | model.placeStateLike_alternation
  | rs
  | idno
model.nameLike_sequence =
  model.nameLike.agent_sequence, model.placeStateLike_sequence, rs, idno
model.nameLike_sequenceOptional =
  model.nameLike.agent_sequenceOptional?,
  model.placeStateLike_sequenceOptional?,
  rs?,
  idno?
model.nameLike_sequenceOptionalRepeatable =
  model.nameLike.agent_sequenceOptionalRepeatable*,
  model.placeStateLike_sequenceOptionalRepeatable*,
  rs*,
  idno*
model.nameLike_sequenceRepeatable =
  model.nameLike.agent_sequenceRepeatable+,
  model.placeStateLike_sequenceRepeatable+,
  rs+,
  idno+
model.global =
  model.global.meta
  | model.milestoneLike
  | model.noteLike
  | model.global.edit
  | figure
  | rewrite
  | used
model.biblPart =
  model.respLike
  | model.imprintPart
  | series
  | relatedItem
  | edition
  | extent
  | msIdentifier
model.frontPart = model.frontPart.drama | divGen | titlePage
model.addrPart = model.nameLike | addrLine
model.pPart.data =
  model.dateLike
  | model.measureLike
  | model.addressLike
  | model.nameLike
model.pPart.data_alternation =
  model.dateLike_alternation
  | model.measureLike_alternation
  | model.addressLike_alternation
  | model.nameLike_alternation
model.pPart.data_sequence =
  model.dateLike_sequence,
  model.measureLike_sequence,
  model.addressLike_sequence,
  model.nameLike_sequence
model.pPart.data_sequenceOptional =
  model.dateLike_sequenceOptional?,
  model.measureLike_sequenceOptional?,
  model.addressLike_sequenceOptional?,
  model.nameLike_sequenceOptional?
model.pPart.data_sequenceOptionalRepeatable =
  model.dateLike_sequenceOptionalRepeatable*,
  model.measureLike_sequenceOptionalRepeatable*,
  model.addressLike_sequenceOptionalRepeatable*,
  model.nameLike_sequenceOptionalRepeatable*
model.pPart.data_sequenceRepeatable =
  model.dateLike_sequenceRepeatable+,
  model.measureLike_sequenceRepeatable+,
  model.addressLike_sequenceRepeatable+,
  model.nameLike_sequenceRepeatable+
model.inter =
  model.egLike
  | model.biblLike
  | model.labelLike
  | model.listLike
  | model.stageLike
  | model.qLike
  | castList
  | table
model.inter_alternation =
  model.egLike_alternation
  | model.biblLike_alternation
  | model.labelLike_alternation
  | model.listLike_alternation
  | model.stageLike_alternation
  | model.qLike_alternation
  | castList
  | table
model.inter_sequence =
  model.egLike_sequence,
  model.biblLike_sequence,
  model.labelLike_sequence,
  model.listLike_sequence,
  model.stageLike_sequence,
  model.qLike_sequence,
  castList,
  table
model.inter_sequenceOptional =
  model.egLike_sequenceOptional?,
  model.biblLike_sequenceOptional?,
  model.labelLike_sequenceOptional?,
  model.listLike_sequenceOptional?,
  model.stageLike_sequenceOptional?,
  model.qLike_sequenceOptional?,
  castList?,
  table?
model.inter_sequenceOptionalRepeatable =
  model.egLike_sequenceOptionalRepeatable*,
  model.biblLike_sequenceOptionalRepeatable*,
  model.labelLike_sequenceOptionalRepeatable*,
  model.listLike_sequenceOptionalRepeatable*,
  model.stageLike_sequenceOptionalRepeatable*,
  model.qLike_sequenceOptionalRepeatable*,
  castList*,
  table*
model.inter_sequenceRepeatable =
  model.egLike_sequenceRepeatable+,
  model.biblLike_sequenceRepeatable+,
  model.labelLike_sequenceRepeatable+,
  model.listLike_sequenceRepeatable+,
  model.stageLike_sequenceRepeatable+,
  model.qLike_sequenceRepeatable+,
  castList+,
  table+
model.common = model.divPart | model.inter | \include
model.phrase =
  model.segLike
  | model.highlighted
  | model.graphicLike
  | model.pPart.msdesc
  | model.pPart.edit
  | model.ptrLike
  | model.pPart.data
model.limitedPhrase =
  model.emphLike
  | model.pPart.msdesc
  | model.pPart.editorial
  | model.ptrLike
  | model.pPart.data
model.divLike = \div
model.divGenLike = divGen
model.div1Like = notAllowed
model.applicationLike = application
model.teiHeaderPart = encodingDesc | profileDesc
model.sourceDescPart = notAllowed
model.encodingDescPart =
  projectDesc
  | samplingDecl
  | editorialDecl
  | tagsDecl
  | refsDecl
  | classDecl
  | appInfo
  | geoDecl
  | variantEncoding
  | charDecl
model.editorialDeclPart =
  correction
  | normalization
  | quotation
  | hyphenation
  | segmentation
  | interpretation
model.profileDescPart =
  creation
  | langUsage
  | textClass
  | handNotes
  | transposeGrp
  | geneticGrp
model.resourceLike = facsimile | document
att.personal.attributes =
  att.naming.attributes,
  att.personal.attribute.full,
  att.personal.attribute.sort
att.personal.attribute.full =
  
  ## indicates whether the name component is given in full, as an
  ## abbreviation or simply as an initial.
  [ a:defaultValue = "yes" ]
  attribute full {
    
    ## the name component is spelled out in full.
    "yes"
    | 
      ## (abbreviated) the name component is given in an abbreviated form.
      "abb"
    | 
      ## (initial letter) the name component is indicated only by
      ## one initial.
      "init"
  }?
att.personal.attribute.sort =
  
  ## specifies the sort order of the name component in relation
  ## to others within the personal name.
  attribute sort { data.count }?
p =
  
  ## (paragraph) marks paragraphs in prose.
  element ns1:p {
    macro.paraContent,
    att.global.attributes,
    att.declaring.attributes,
    empty
  }
foreign =
  
  ## (foreign) identifies a word or phrase as belonging to some language other than that of the
  ##                 surrounding text. 
  element ns1:foreign { macro.phraseSeq, att.global.attributes, empty }
emph =
  
  ## (emphasized) marks words or phrases which are stressed or emphasized for
  ##         linguistic or rhetorical effect.
  element ns1:emph { macro.paraContent, att.global.attributes, empty }
hi =
  
  ## (highlighted) marks a word or phrase as graphically distinct from the
  ##         surrounding text, for reasons concerning which no claim is
  ##         made. 
  element ns1:hi { macro.paraContent, att.global.attributes, empty }
distinct =
  
  ## identifies any word or phrase which is regarded as linguistically distinct, for example as
  ##         archaic, technical, dialectal, non-preferred, etc., or as forming part of a sublanguage. 
  element ns1:distinct {
    macro.phraseSeq,
    att.global.attributes,
    
    ## specifies the sublanguage or register to which the word or phrase is being
    ##                 assigned
    attribute type { data.enumerated }?,
    
    ## specifies how the phrase is distinct diachronically
    attribute time { data.code }?,
    
    ## specifies how the phrase is distinct diatopically
    attribute space { data.code }?,
    
    ## specifies how the phrase is distinct diastatically
    attribute social { data.code }?,
    empty
  }
said =
  
  ## (speech or thought) indicates passages thought or spoken aloud, whether explicitly indicated in the source or
  ##     not, whether directly or indirectly reported, whether by real people or fictional characters.
  element ns1:said {
    macro.specialPara,
    att.global.attributes,
    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 { data.xTruthValue }?,
    
    ## may be used to indicate whether the quoted matter is regarded as direct or indirect
    ##         speech.
    [ a:defaultValue = "true" ] attribute direct { data.xTruthValue }?,
    empty
  }
quote =
  
  ## (quotation) contains a phrase or passage attributed by the narrator or author to some agency external
  ##         to the text.
  element ns1:quote {
    macro.specialPara,
    att.global.attributes,
    att.typed.attributes,
    att.msExcerpt.attributes,
    empty
  }
q =
  
  ## (separated from the surrounding text with quotation marks) contains material which is marked as (ostensibly) being somehow different than the
  ##     surrounding text, 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.
  element ns1:q {
    macro.specialPara,
    att.global.attributes,
    att.ascribed.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(foreign words) ; 6] distinct(linguistically distinct) ; 7] term(technical term) ; 8] emph(rhetorically emphasized) ; 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 words) 
        "foreign"
      | 
        ## (linguistically distinct) 
        "distinct"
      | 
        ## (technical term) 
        "term"
      | 
        ## (rhetorically emphasized) 
        "emph"
      | 
        ## refering to itself, not its normal referant
        "mentioned"
      | xsd:Name
    }?,
    empty
  }
cit =
  
  ## (cited quotation) contains a quotation from some other document, together with a bibliographic reference to
  ##     its source. In a dictionary it may contain an example text with at least one occurrence of the
  ##     word form, used in the sense being described, or a translation of the headword, or an example. 
  element ns1:cit {
    (model.qLike
     | model.egLike
     | model.biblLike
     | model.ptrLike
     | model.global
     | model.entryPart)+,
    att.global.attributes,
    att.typed.attributes,
    empty
  }
mentioned =
  
  ## marks words or phrases mentioned, not used.
  element ns1:mentioned {
    macro.phraseSeq, att.global.attributes, empty
  }
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.
  element ns1:soCalled { macro.phraseSeq, att.global.attributes, empty }
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.
  element ns1:desc {
    macro.limitedContent,
    att.global.attributes,
    att.translatable.attributes,
    empty
  }
gloss =
  
  ## identifies a phrase or word used to provide a gloss or definition for some other word or
  ##     phrase.
  element ns1:gloss {
    macro.phraseSeq,
    att.global.attributes,
    att.declaring.attributes,
    att.translatable.attributes,
    att.typed.attributes,
    att.pointing.attributes,
    
    ## (canonical reference) identifies the associated term element using a canonical reference from a
    ##         scheme defined in a refsDecl element in the TEI header
    attribute cRef { data.pointer }?,
    empty
  }
term =
  
  ## contains a single-word, multi-word, or symbolic designation which is regarded as a technical
  ##     term.
  element ns1:term {
    macro.phraseSeq,
    att.global.attributes,
    att.declaring.attributes,
    att.pointing.attributes,
    att.typed.attributes,
    att.canonical.attributes,
    
    ## identifies the associated gloss element using a canonical reference from a
    ##           scheme defined in a refsDecl element in the TEI header
    attribute cRef { data.pointer }?,
    
    ## supplies the sort key for this term in an index.
    attribute sortKey { data.word }?,
    empty
  }
sic =
  
  ## (latin for thus or so
  ##   ) contains text reproduced although apparently incorrect or inaccurate.
  element ns1:sic {
    macro.paraContent,
    att.global.attributes,
    att.responsibility.attributes,
    empty
  }
corr =
  
  ## (correction) contains the correct form of a passage apparently erroneous in the copy text.
  element ns1:corr {
    macro.paraContent,
    att.global.attributes,
    att.editLike.attributes,
    att.typed.attributes,
    empty
  }
choice =
  
  ## groups a number of alternative encodings for the same point in
  ##         a text.
  element ns1:choice {
    (model.choicePart | choice)*, att.global.attributes, empty
  }
reg =
  
  ## (regularization) contains a reading which has been regularized or normalized in some sense.
  element ns1:reg {
    macro.paraContent,
    att.global.attributes,
    att.editLike.attributes,
    att.typed.attributes,
    empty
  }
orig =
  
  ## (original form) contains a reading which is marked as following the original, rather than being normalized
  ##         or corrected.
  element ns1:orig {
    macro.paraContent,
    att.global.attributes,
    att.responsibility.attributes,
    empty
  }
gap =
  
  ## (gap) indicates a point where material has been omitted in a transcription, whether for editorial
  ##     reasons described in the TEI header, as part of sampling practice, or because the material is
  ##     illegible, invisible, or inaudible.
  element ns1:gap {
    model.glossLike*,
    att.global.attributes,
    att.editLike.attributes,
    
    ## gives the reason for omission. Sample values include sampling,
    ##         inaudible, irrelevant, cancelled.
    attribute reason {
      list { data.word, data.word* }
    }?,
    
    ## in the case of text omitted from the transcription because of deliberate deletion by an
    ##         identifiable hand, signifies the hand which made the deletion.
    attribute hand { 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 { data.enumerated }?,
    empty
  }
add =
  
  ## (addition) contains letters, words, or phrases inserted in the text by an
  ##         author, scribe, annotator, or corrector.
  element ns1:add {
    macro.paraContent,
    att.global.attributes,
    att.transcriptional.attributes,
    att.placement.attributes,
    att.typed.attributes,
    empty
  }
del =
  
  ## (deletion) contains a letter, word, or passage deleted, marked as deleted, or otherwise indicated as
  ##     superfluous or spurious in the copy text by an author, scribe, annotator, or corrector.
  element ns1:del {
    macro.paraContent,
    att.global.attributes,
    att.transcriptional.attributes,
    att.typed.attributes,
    empty
  }
unclear =
  
  ## contains a word, phrase, or passage which cannot be transcribed with certainty because it
  ##         is illegible or inaudible in the source.
  element ns1:unclear {
    macro.paraContent,
    
    ## indicates why the material is hard to transcribe.
    attribute reason {
      list { data.word, 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 { 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 { data.enumerated }?,
    att.editLike.attributes,
    att.typed.attributes,
    att.global.attributes,
    empty
  }
name =
  
  ## (name, proper noun) contains a proper noun or noun phrase.
  element ns1:name {
    macro.phraseSeq,
    att.global.attributes,
    att.naming.attributes,
    att.typed.attributes,
    empty
  }
rs =
  
  ## (referencing string) contains a general purpose name or referring string.
  element ns1:rs {
    macro.phraseSeq,
    att.global.attributes,
    att.naming.attributes,
    
    ## indicates more specifically the object referred to by the referencing string.
    ##                 Values might include person, place, ship,
    ##                     element etc.
    attribute type { data.enumerated }?,
    empty
  }
email =
  
  ## (electronic mail address) contains an e-mail address identifying a location to which
  ##         e-mail messages can be delivered.
  ##     
  element ns1:email { macro.phraseSeq, att.global.attributes, empty }
address =
  
  ## contains a postal  address, for example of a
  ##         publisher, an organization, or an individual.
  element ns1:address {
    (model.global*, (model.addrPart, model.global*)+),
    att.global.attributes,
    empty
  }
addrLine =
  
  ## (address line) contains one line of a postal address.
  element ns1:addrLine { macro.phraseSeq, att.global.attributes, empty }
num =
  
  ## (number) contains a number, written in any form.
  element ns1:num {
    macro.phraseSeq,
    att.global.attributes,
    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 { data.numeric }?,
    empty
  }
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.
  element ns1:measure {
    macro.phraseSeq,
    att.global.attributes,
    att.measurement.attributes,
    
    ## specifies the type of measurement in any convenient typology.
    attribute type { data.enumerated }?,
    empty
  }
measureGrp =
  
  ## (measure group) contains a group of dimensional specifications which relate to the same object, for example
  ##     the height and width of a manuscript page.
  element ns1:measureGrp {
    (text | model.gLike | model.measureLike)*,
    att.global.attributes,
    att.measurement.attributes,
    att.typed.attributes,
    empty
  }
date =
  
  ## contains a date in any format.
  element ns1:date {
    (text | model.gLike | model.phrase | model.global)*,
    att.global.attributes,
    att.datable.attributes,
    att.editLike.attributes,
    att.typed.attributes,
    
    ## indicates the system or calendar to which the date represented by the content of this
    ##         element belongs.
    ## Suggested values include: 1] Gregorian; 2] Julian; 3] Islamic; 4] Hebrew; 5] Revolutionary; 6] Iranian; 7] Coptic; 8] Chinese
    attribute calendar {
      
      ## Gregorian calendar
      "Gregorian"
      | 
        ## Julian calendar
        "Julian"
      | 
        ## Islamic or Muslim (hijri) lunar calendar
        "Islamic"
      | 
        ## Hebrew or Jewish lunisolar calendar
        "Hebrew"
      | 
        ## French Revolutionary calendar
        "Revolutionary"
      | 
        ## Iranian or Persian (Jalaali) solar calendar
        "Iranian"
      | 
        ## Coptic or Alexandrian calendar
        "Coptic"
      | 
        ## Chinese lunisolar calendar
        "Chinese"
      | xsd:Name
    }?,
    empty
  }
time =
  
  ## contains a phrase defining a time of day in any format.
  element ns1:time {
    (text | model.gLike | model.phrase | model.global)*,
    att.global.attributes,
    att.datable.attributes,
    att.editLike.attributes,
    att.typed.attributes,
    empty
  }
abbr =
  
  ## (abbreviation) contains an abbreviation of any sort.
  element ns1:abbr {
    macro.phraseSeq,
    att.global.attributes,
    att.responsibility.attributes,
    
    ## allows the encoder to classify the abbreviation according to some convenient
    ##                 typology.
    ## Sample values include: 1] suspension; 2] contraction; 3] brevigraph; 4] superscription; 5] acronym; 6] title; 7] organization; 8] geographic
    attribute type { data.enumerated }?,
    empty
  }
expan =
  
  ## (expansion) contains the expansion of an abbreviation.
  element ns1:expan {
    macro.phraseSeq,
    att.global.attributes,
    att.editLike.attributes,
    empty
  }
ptr =
  
  ## (pointer) defines a pointer to another location.
  element ns1:ptr {
    empty
    >> sch:pattern [
         id = "ptr-constraint-ptrAtts"
         "\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."
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    att.global.attributes,
    att.pointing.attributes,
    att.typed.attributes,
    att.declaring.attributes,
    
    ## (canonical reference) specifies the destination of the pointer by supplying a canonical reference from a
    ##         scheme defined in a refsDecl element in the TEI header
    attribute cRef {
      list { data.word, data.word* }
    }?,
    empty
  }
ref =
  
  ## (reference) defines a reference to another location, possibly modified by additional text or comment.
  element ns1:ref {
    macro.paraContent
    >> sch:pattern [
         id = "ref-constraint-refAtts"
         "\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."
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    att.global.attributes,
    att.pointing.attributes,
    att.typed.attributes,
    att.declaring.attributes,
    
    ## (canonical reference) specifies the destination of the reference by supplying a canonical reference from a
    ##         scheme defined in a refsDecl element in the TEI header
    attribute cRef {
      list { data.word, data.word* }
    }?,
    empty
  }
\list =
  
  ## (list) contains any sequence of items organized as a list.
  element ns1:list {
    ((model.divTop | model.global)*,
     ((item, model.global*)+
      | (label, model.global*, item, model.global*)+),
     (model.divBottom, model.global*)*),
    att.global.attributes,
    
    ## describes the form of the list.
    ## Suggested values include: 1] ordered; 2] bulleted; 3] simple; 4] gloss
    [ a:defaultValue = "simple" ]
    attribute type {
      
      ## list items are numbered or lettered. 
      "ordered"
      | 
        ## list items are marked with a bullet or other typographic device. 
        "bulleted"
      | 
        ## list items are not numbered or bulleted. 
        "simple"
      | 
        ## each list item glosses some term or concept, which is given by a label element
        ##             preceding the list item.
        "gloss"
      | xsd:Name
    }?,
    empty
  }
item =
  
  ## contains one component of a list.
  element ns1:item { macro.specialPara, att.global.attributes, empty }
label =
  
  ## contains the label associated with an item in a list; in glossaries, marks the term being
  ##     defined.
  element ns1:label { macro.phraseSeq, att.global.attributes, empty }
head =
  
  ## (heading) contains any type of heading, for example the title of a section, or the heading of a list,
  ##     glossary, manuscript description, etc.
  element ns1:head {
    macro.paraContent,
    att.global.attributes,
    att.typed.attributes,
    empty
  }
note =
  
  ## contains a note or annotation.
  element ns1:note {
    macro.specialPara,
    att.global.attributes,
    att.placement.attributes,
    att.pointing.attributes,
    att.responsibility.attributes,
    att.typed.attributes,
    
    ## indicates whether the copy text shows the exact place of reference for the note.
    [ a:defaultValue = "true" ] attribute anchored { 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 { data.pointer, data.pointer* }
    }?,
    empty
  }
index =
  
  ## (index entry) marks a location to be indexed for whatever purpose.
  element ns1:index {
    (term, index?)*,
    att.global.attributes,
    att.spanning.attributes,
    
    ## supplies a name to specify which index (of several) the index entry belongs to.
    attribute indexName { data.name }?,
    empty
  }
graphic =
  
  ## indicates the location of an inline graphic, illustration, or figure.
  element ns1:graphic {
    model.glossLike*,
    att.global.attributes,
    att.internetMedia.attributes,
    att.declaring.attributes,
    
    ## The display width of the image
    attribute width { data.outputMeasurement }?,
    
    ## The display height of the image
    attribute height { data.outputMeasurement }?,
    
    ## A scale factor to be applied to the image to make it the desired display size
    attribute scale { data.numeric }?,
    
    ## (uniform resource locator) A URL which refers to the image itself.
    attribute url { data.pointer },
    empty
  }
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.
  element ns1:milestone {
    empty,
    
    ## 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
    },
    att.spanning.attributes,
    att.typed.attributes,
    att.sourced.attributes,
    empty
  }
pb =
  
  ## (page break) marks the boundary between one page of a text and the next in a standard reference system.
  element ns1:pb {
    empty,
    att.global.attributes,
    att.typed.attributes,
    att.sourced.attributes,
    att.spanning.attributes,
    att.breaking.attributes,
    empty
  }
lb =
  
  ## (line break) marks the start of a new (typographic) line in some edition or version of a text.
  element ns1:lb {
    empty,
    att.global.attributes,
    att.typed.attributes,
    att.sourced.attributes,
    att.spanning.attributes,
    att.breaking.attributes,
    empty
  }
cb =
  
  ## (column break) marks the boundary between one column of a text and the next
  ##         in a standard reference system.
  element ns1:cb {
    empty,
    att.global.attributes,
    att.typed.attributes,
    att.sourced.attributes,
    att.spanning.attributes,
    att.breaking.attributes,
    empty
  }
series =
  
  ## (series information) contains information about the series in which a book or other bibliographic item has
  ##     appeared.
  element ns1:series {
    (text
     | model.gLike
     | title
     | ref
     | editor
     | respStmt
     | biblScope
     | model.global)*,
    att.global.attributes,
    empty
  }
author =
  
  ## in a bibliographic reference, contains the name(s) of the
  ##   author(s), personal or corporate, of a work; for example in the same
  ##   form as that provided by a recognized bibliographic name authority. 
  element ns1:author {
    macro.phraseSeq, att.global.attributes, att.naming.attributes, empty
  }
editor =
  
  ## 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. 
  element ns1:editor {
    macro.phraseSeq, att.global.attributes, att.naming.attributes, empty
  }
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.
  element ns1:respStmt {
    ((resp+, model.nameLike.agent+) | (model.nameLike.agent+, resp+)),
    att.global.attributes,
    empty
  }
resp =
  
  ## (responsibility) contains a phrase describing the nature of a person's intellectual responsibility.
  element ns1:resp {
    macro.phraseSeq.limited,
    att.global.attributes,
    att.canonical.attributes,
    empty
  }
title =
  
  ## contains a title for any kind of work.
  element ns1:title {
    macro.paraContent,
    att.global.attributes,
    att.canonical.attributes,
    
    ## indicates the bibliographic level for a title, that is, whether
    ##                                         it identifies an article, book, journal, series, or
    ##                                         unpublished material.
    attribute level {
      
      ## (analytic) analytic title (article, poem, or other item
      ##                                                   published as part of a larger item) 
      "a"
      | 
        ## (monographic) monographic title (book, collection, or
        ##                                                   other item published as a distinct item,
        ##                                                   including single volumes of multi-volume
        ##                                                   works) 
        "m"
      | 
        ## (journal) journal title 
        "j"
      | 
        ## (series) series title 
        "s"
      | 
        ## (unpublished) title of unpublished material (including
        ##                                                   theses and dissertations unless
        ##                                                   published by a commercial press)
        "u"
    }?,
    
    ## 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 { data.enumerated }?,
    empty
  }
publisher =
  
  ## provides the name of the organization responsible for the publication or distribution of a
  ##         bibliographic item.
  element ns1:publisher {
    macro.phraseSeq, att.global.attributes, empty
  }
biblScope =
  
  ## (scope of citation) defines the scope of a bibliographic reference, for example as a
  ##         list of page numbers, or a named subdivision of a larger work.
  element ns1:biblScope {
    macro.phraseSeq,
    att.global.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
    }?,
    
    ## specifies the starting point of the range of units indicated by the type attribute.
    attribute from { data.word }?,
    
    ## specifies the end-point of the range of units indicated by the type attribute.
    attribute to { data.word }?,
    empty
  }
pubPlace =
  
  ## (publication place) contains the name of the place where a bibliographic item was published.
  element ns1:pubPlace {
    macro.phraseSeq, att.global.attributes, att.naming.attributes, empty
  }
bibl =
  
  ## (bibliographic citation) contains a loosely-structured bibliographic citation of which the sub-components may or may
  ##     not be explicitly tagged. 
  element ns1:bibl {
    (text
     | model.gLike
     | model.highlighted
     | model.pPart.data
     | model.pPart.edit
     | model.segLike
     | model.ptrLike
     | model.biblPart
     | model.global)*,
    att.global.attributes,
    att.declarable.attributes,
    att.typed.attributes,
    empty
  }
listBibl =
  
  ## (citation list) contains a list of bibliographic citations of any kind. 
  element ns1:listBibl {
    (model.headLike*,
     (model.biblLike | model.milestoneLike | listBibl)+),
    att.global.attributes,
    att.declarable.attributes,
    att.typed.attributes,
    empty
  }
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.
  element ns1:relatedItem {
    ((model.biblLike | model.ptrLike)?)
    >> sch:pattern [
         id = "relatedItem-constraint-targetorcontent11"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:relatedItem"
           "\x{a}" ~
           "               "
           sch:report [
             test = "@target and count( child::* ) > 0"
             "If the 'target' attribute is used, the\x{a}" ~
             "        relatedItem element must be empty"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ]
    >> sch:pattern [
         id = "relatedItem-constraint-targetorcontent11"
         "\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}" ~
         "         "
       ],
    att.global.attributes,
    att.typed.attributes,
    
    ## points to the related bibliographic element by means of an
    ##       absolute or relative URI reference
    attribute target { data.pointer }?,
    empty
  }
l =
  
  ## (verse line) contains a single, possibly incomplete, line of verse.
  element ns1:l {
    macro.paraContent,
    att.global.attributes,
    
    ## specifies whether or not the line is metrically complete. 
    [ a:defaultValue = "N" ]
    attribute part {
      
      ## (yes) the line is metrically incomplete
      "Y"
      | 
        ## (no) either the line is complete, or no claim is made as to its completeness
        "N"
      | 
        ## (initial) the initial part of an incomplete line
        "I"
      | 
        ## (medial) a medial part of an incomplete line
        "M"
      | 
        ## (final) the final part of an incomplete line
        "F"
    }?,
    empty
  }
lg =
  
  ## (line group) contains a group of verse lines functioning as a formal unit, e.g. a stanza, refrain,
  ##         verse paragraph, etc.
  element ns1:lg {
    ((model.divTop | model.global)*,
     (model.lLike | lg),
     (model.lLike | lg | model.global)*,
     (model.divBottom, model.global*)*),
    att.global.attributes,
    att.divLike.attributes,
    att.typed.attributes,
    att.declaring.attributes,
    empty
  }
sp =
  
  ## (speech) An individual speech in a performance text, or a passage presented as such in a prose or
  ##     verse text.
  element ns1:sp {
    (model.global*,
     (speaker, model.global*)?,
     ((model.lLike | lg | model.pLike | model.stageLike | model.qLike),
      model.global*)+),
    att.global.attributes,
    att.ascribed.attributes,
    empty
  }
speaker =
  
  ## A specialized form of heading or label, giving the name of one or more speakers in a
  ##         dramatic text or fragment.
  element ns1:speaker { macro.phraseSeq, att.global.attributes, empty }
stage =
  
  ## (stage direction) contains any kind of stage direction within a dramatic text or fragment.
  element ns1:stage {
    macro.specialPara,
    att.global.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
  }
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.
  element ns1:teiCorpus {
    (teiHeader, (TEI | teiCorpus)+),
    att.global.attributes,
    
    ## The version of the TEI scheme
    [ a:defaultValue = "5.0" ] attribute version { data.version }?,
    empty
  }
divGen =
  
  ## (automatically generated text division) indicates the location at which a textual division generated
  ##         automatically by a text-processing application is to appear.
  element ns1:divGen {
    model.headLike*,
    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 { data.enumerated }?,
    empty
  }
teiHeader =
  
  ## (TEI Header) supplies the descriptive and declarative information making up an electronic title page
  ##     prefixed to every TEI-conformant text.
  element ns1:teiHeader {
    (fileDesc, model.teiHeaderPart*, revisionDesc?),
    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 { data.enumerated }?,
    empty
  }
fileDesc =
  
  ## (file description) contains a full bibliographic description of an electronic file.
  element ns1:fileDesc {
    ((titleStmt,
      editionStmt?,
      extent?,
      publicationStmt,
      seriesStmt?,
      notesStmt?),
     sourceDesc+),
    att.global.attributes,
    empty
  }
titleStmt =
  
  ## (title statement) groups information about the title of a work and those responsible for its intellectual
  ##     content.
  element ns1:titleStmt {
    (title+, model.respLike*), att.global.attributes, empty
  }
sponsor =
  
  ## specifies the name of a sponsoring organization or institution.
  element ns1:sponsor {
    macro.phraseSeq.limited, att.global.attributes, empty
  }
funder =
  
  ## (funding body) specifies the name of an individual, institution, or organization responsible for the
  ##     funding of a project or text.
  element ns1:funder {
    macro.phraseSeq.limited, att.global.attributes, empty
  }
principal =
  
  ## (principal researcher) supplies the name of the principal researcher responsible for the
  ## creation of an electronic text.
  element ns1:principal {
    macro.phraseSeq.limited, att.global.attributes, empty
  }
editionStmt =
  
  ## (edition statement) groups information relating to one edition of a text.
  element ns1:editionStmt {
    (model.pLike+ | (edition, respStmt*)),
    att.global.attributes,
    empty
  }
edition =
  
  ## (edition) describes the particularities of one edition of a text.
  element ns1:edition { macro.phraseSeq, att.global.attributes, empty }
extent =
  
  ## describes the approximate size of a text as stored on some carrier medium, whether digital
  ##     or non-digital, specified in any convenient units.
  element ns1:extent { macro.phraseSeq, att.global.attributes, empty }
publicationStmt =
  
  ## (publication statement) groups information concerning the publication or distribution of an electronic or other
  ##     text. 
  element ns1:publicationStmt {
    (model.pLike+ | model.publicationStmtPart+),
    att.global.attributes,
    empty
  }
distributor =
  
  ## supplies the name of a person or other agency responsible for the
  ## distribution of a text.
  element ns1:distributor {
    macro.phraseSeq, att.global.attributes, empty
  }
authority =
  
  ## (release authority) supplies the name of a person or other agency responsible for
  ##   making an electronic file available, other than a publisher or
  ##   distributor.
  element ns1:authority {
    macro.phraseSeq.limited, att.global.attributes, empty
  }
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.
  element ns1:idno {
    macro.xtext,
    att.global.attributes,
    
    ## categorizes the identifier, for example as an ISBN, Social
    ##       Security number, etc. 
    attribute type { data.enumerated }?,
    empty
  }
availability =
  
  ## supplies information about the availability of a text, for example any restrictions on its
  ##     use or distribution, its copyright status, etc.
  element ns1:availability {
    model.pLike+,
    att.global.attributes,
    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
  }
seriesStmt =
  
  ## (series statement) groups information about the series, if any, to which a publication belongs.
  element ns1:seriesStmt {
    (model.pLike+
     | (title+, (idno | respStmt)*)),
    att.global.attributes,
    empty
  }
notesStmt =
  
  ## (notes statement) collects together any notes providing information about a text additional to that recorded
  ##     in other parts of the bibliographic description.
  element ns1:notesStmt {
    model.noteLike+, att.global.attributes, empty
  }
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.
  element ns1:sourceDesc {
    (model.pLike+
     | (model.biblLike | model.sourceDescPart | model.listLike)+),
    att.global.attributes,
    att.declarable.attributes,
    empty
  }
biblFull =
  
  ## (fully-structured bibliographic citation) contains a fully-structured bibliographic citation, in which all components of the TEI file
  ##     description are present.
  element ns1:biblFull {
    ((titleStmt,
      editionStmt?,
      extent?,
      publicationStmt,
      seriesStmt?,
      notesStmt?),
     sourceDesc*),
    att.global.attributes,
    att.declarable.attributes,
    empty
  }
encodingDesc =
  
  ## (encoding description) documents the relationship between an electronic text and the
  ## source or sources from which it was derived.
  element ns1:encodingDesc {
    (model.encodingDescPart | model.pLike)+,
    att.global.attributes,
    empty
  }
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.
  element ns1:projectDesc {
    model.pLike+,
    att.global.attributes,
    att.declarable.attributes,
    empty
  }
samplingDecl =
  
  ## (sampling declaration) contains a prose description of the rationale and methods used in sampling texts in the
  ##     creation of a corpus or collection.
  element ns1:samplingDecl {
    model.pLike+,
    att.global.attributes,
    att.declarable.attributes,
    empty
  }
editorialDecl =
  
  ## (editorial practice declaration) provides details of editorial principles and practices applied
  ## during the encoding of a text.
  element ns1:editorialDecl {
    (model.pLike | model.editorialDeclPart)+,
    att.global.attributes,
    att.declarable.attributes,
    empty
  }
correction =
  
  ## (correction principles) states how and under what circumstances corrections have been made in the text.
  element ns1:correction {
    model.pLike+,
    att.global.attributes,
    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
  }
normalization =
  
  ## indicates the extent of normalization or regularization of the original source carried out
  ##     in converting it to electronic form.
  element ns1:normalization {
    model.pLike+,
    att.global.attributes,
    att.declarable.attributes,
    
    ## indicates the authority for any normalization carried out. 
    attribute source { 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
  }
quotation =
  
  ## specifies editorial practice adopted with respect to quotation marks in the original. 
  element ns1:quotation {
    model.pLike+,
    att.global.attributes,
    att.declarable.attributes,
    
    ## (quotation marks) indicates whether or not quotation marks have been retained as content within the text. 
    [ a:defaultValue = "all" ]
    attribute marks {
      
      ## no quotation marks have been retained 
      "none"
      | 
        ## some quotation marks have been retained 
        "some"
      | 
        ## all quotation marks have been retained 
        "all"
    }?,
    
    ## specifies how quotation marks are indicated within the text.
    [ a:defaultValue = "unknown" ] attribute form { text }?,
    empty
  }
hyphenation =
  
  ## summarizes the way in which hyphenation in a source text has been treated in an encoded
  ##     version of it.
  element ns1:hyphenation {
    model.pLike+,
    att.global.attributes,
    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-od-line
        ##             hyphenation should be retained. 
        "hard"
      | 
        ## all end-of-line hyphenation has been removed: any remaining hyphenation occurred
        ##             within the line. 
        "none"
    }?,
    empty
  }
segmentation =
  
  ## describes the principles according to which the text has been segmented, for example into
  ##     sentences, tone-units, graphemic strata, etc.
  element ns1:segmentation {
    model.pLike+,
    att.global.attributes,
    att.declarable.attributes,
    empty
  }
interpretation =
  
  ## describes the scope of any analytic or interpretive information added to the text in
  ##     addition to the transcription. 
  element ns1:interpretation {
    model.pLike+,
    att.global.attributes,
    att.declarable.attributes,
    empty
  }
tagsDecl =
  
  ## (tagging declaration) provides detailed information about the tagging applied to a document.
  element ns1:tagsDecl { \namespace*, att.global.attributes, empty }
tagUsage =
  
  ## supplies information about the usage of a specific element within a text. 
  element ns1:tagUsage {
    macro.limitedContent,
    att.global.attributes,
    
    ## (element name) the name (generic identifier) of the element indicated by the tag.
    attribute gi { data.name },
    
    ## specifies the number of occurrences of this element within the text.
    attribute occurs { 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 { data.count }?,
    
    ## specifies the identifier of a rendition element which defines how this element
    ##         is to be rendered.
    attribute render { data.pointer }?,
    empty
  }
\namespace =
  
  ## supplies the formal name of the namespace to which the elements documented by its children
  ##     belong. 
  element ns1:namespace {
    tagUsage+,
    att.global.attributes,
    
    ## the full formal name of the namespace concerned.
    attribute name { data.namespace },
    empty
  }
refsDecl =
  
  ## (references declaration) specifies how canonical references are constructed for this
  ##   text.
  element ns1:refsDecl {
    (model.pLike+ | cRefPattern+ | refState+),
    att.global.attributes,
    att.declarable.attributes,
    empty
  }
cRefPattern =
  
  ## (canonical reference pattern) specifies an expression and replacement pattern for transforming a canonical reference into
  ##     a URI. 
  element ns1:cRefPattern {
    model.pLike*,
    att.global.attributes,
    
    ## specifies a regular expression against which the values of cRef attributes
    ##         can be matched.
    attribute matchPattern { data.pattern },
    
    ## specifies a replacement pattern which, once subpattern substitution
    ##         has been performed, provides a URI.
    attribute replacementPattern { text },
    empty
  }
refState =
  
  ## (reference state) specifies one component of a canonical reference defined by the milestone method.
  element ns1:refState {
    empty,
    att.global.attributes,
    att.sourced.attributes,
    
    ## indicates what kind of state is changing at this milestone.
    ## Suggested values include: 1] page; 2] column; 3] line; 4] book; 5] poem; 6] canto; 7] stanza; 8] act; 9] scene; 10] section; 11] absent
    attribute unit {
      
      ## page breaks in the reference edition. 
      "page"
      | 
        ## column breaks. 
        "column"
      | 
        ## line breaks. 
        "line"
      | 
        ## any units termed book, liber, etc. 
        "book"
      | 
        ## individual poems in a collection. 
        "poem"
      | 
        ## cantos or other major sections of a poem. 
        "canto"
      | 
        ## 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"
      | xsd:Name
    },
    
    ## specifies the fixed length of the reference component.
    attribute length { data.count }?,
    
    ## (delimiter) supplies a delimiting string following the reference component.
    attribute delim { text }?,
    empty
  }
classDecl =
  
  ## (classification declarations) contains one or more taxonomies defining any classificatory
  ## codes used elsewhere in the text.
  element ns1:classDecl { taxonomy+, att.global.attributes, empty }
taxonomy =
  
  ## defines a typology used to classify texts either implicitly, by means of a bibliographic
  ##     citation, or explicitly by a structured taxonomy.
  element ns1:taxonomy {
    (model.glossLike* | category+ | (model.biblLike, category*)),
    att.global.attributes,
    empty
  }
category =
  
  ## contains an individual descriptive category, possibly nested within a superordinate
  ##     category, within a user-defined taxonomy.
  element ns1:category {
    ((catDesc+ | model.glossLike*), category*),
    att.global.attributes,
    empty
  }
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.
  element ns1:catDesc {
    (text | model.limitedPhrase | model.catDescPart)*,
    att.global.attributes,
    empty
  }
appInfo =
  
  ## (application information) records information about an application which has
  ##   edited the TEI file. 
  element ns1:appInfo {
    model.applicationLike+, att.global.attributes, empty
  }
application =
  
  ## provides information about an application which has acted upon the document.
  element ns1:application {
    (model.labelLike+, (model.ptrLike* | model.pLike*)),
    att.global.attributes,
    att.typed.attributes,
    att.datable.attributes,
    
    ## Supplies an identifier for the application, independent of its version number or display
    ##         name.
    attribute ident { data.name },
    
    ## Supplies a version number for the application, independent of its identifier or display
    ##         name.
    attribute version {
      xsd:token {
        pattern = "[\d]+[a-z]*[\d]*(\.[\d]+[a-z]*[\d]*){0,3}"
      }
    },
    empty
  }
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.
  element ns1:profileDesc {
    model.profileDescPart*, att.global.attributes, empty
  }
handNote =
  
  ## (note on hand) describes a particular style or hand distinguished within a manuscript.
  element ns1:handNote {
    macro.specialPara,
    att.global.attributes,
    att.handFeatures.attributes,
    empty
  }
creation =
  
  ## contains information about the creation of a text.
  element ns1:creation {
    macro.phraseSeq.limited, stageNotes?, att.global.attributes, empty
  }
langUsage =
  
  ## (language usage) describes the languages, sublanguages, registers, dialects, etc.
  ## represented within a text.
  element ns1:langUsage {
    language+, att.global.attributes, att.declarable.attributes, empty
  }
language =
  
  ## characterizes a single language or sublanguage used within a text.
  element ns1:language {
    macro.phraseSeq.limited,
    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 { data.language },
    
    ## specifies the approximate percentage (by volume) of the text which uses this language. 
    attribute usage {
      xsd:nonNegativeInteger { maxInclusive = "100" }
    }?,
    empty
  }
textClass =
  
  ## (text classification) groups information which describes the nature or topic of a text in terms of a standard
  ##     classification scheme, thesaurus, etc.
  element ns1:textClass {
    (classCode | catRef | keywords)*,
    att.global.attributes,
    att.declarable.attributes,
    empty
  }
keywords =
  
  ## contains a list of keywords or phrases identifying the topic or nature of a text.
  element ns1:keywords {
    (term+ | \list),
    att.global.attributes,
    
    ## identifies the controlled vocabulary within which the set of keywords concerned is
    ##         defined. 
    attribute scheme { data.pointer },
    empty
  }
classCode =
  
  ## (classification code) contains the classification code used for this text in some standard classification system.
  element ns1:classCode {
    macro.phraseSeq.limited,
    att.global.attributes,
    
    ## identifies the classification system or taxonomy in use.
    attribute scheme { data.pointer },
    empty
  }
catRef =
  
  ## (category reference) specifies one or more defined categories within some taxonomy or text typology.
  element ns1:catRef {
    empty,
    att.global.attributes,
    att.pointing.attributes,
    
    ## identifies the classification scheme within which the set of categories concerned is
    ##         defined 
    attribute scheme { data.pointer }?,
    empty
  }
revisionDesc =
  
  ## (revision description) summarizes the revision history for a file.
  element ns1:revisionDesc {
    (\list | change+),
    att.global.attributes,
    att.docStatus.attributes,
    empty
  }
change =
  
  ## summarizes a particular change or correction made to a particular version of an electronic
  ##     text which is shared between several researchers.
  element ns1:change {
    (text | model.limitedPhrase | model.inter | model.global)*,
    att.global.attributes,
    att.ascribed.attributes,
    att.datable.attributes,
    att.docStatus.attributes,
    empty
  }
typeNote =
  
  ## describes a particular font or other significant typographic feature distinguished within
  ##     the description of a printed resource.
  element ns1:typeNote {
    macro.specialPara,
    att.global.attributes,
    att.handFeatures.attributes,
    empty
  }
scriptNote =
  
  ## describes a particular script distinguished within
  ##     the description of a manuscript or similar resource.
  element ns1:scriptNote {
    macro.specialPara,
    att.global.attributes,
    att.handFeatures.attributes,
    empty
  }
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.
  element ns1:geoDecl {
    macro.phraseSeq,
    att.global.attributes,
    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 =
  
  ## (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.
  element ns1:TEI {
    (teiHeader,
     ((model.resourceLike+, \text?) | \text))
    >> sch:ns [ prefix = "tei" uri = "http://www.tei-c.org/ns/1.0" ]
    >> sch:ns [
         prefix = "rng"
         uri = "http://relaxng.org/ns/structure/1.0"
       ],
    att.global.attributes,
    
    ## specifies the version number of the TEI Guidelines against
    ##       which this document is valid.
    attribute version { data.version }?,
    empty
  }
\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.
  element ns1:text {
    (model.global*,
     (front, model.global*)?,
     (body | group),
     model.global*,
     (back, model.global*)?),
    att.global.attributes,
    att.declaring.attributes,
    att.typed.attributes,
    empty
  }
body =
  
  ## (text body) contains the whole body of a single unitary text, excluding any front or back matter.
  element ns1:body {
    (model.global*,
     (model.divTop, (model.global | model.divTop)*)?,
     (model.divGenLike, (model.global | model.divGenLike)*)?,
     ((model.divLike, (model.global | model.divGenLike)*)+
      | (model.div1Like, (model.global | model.divGenLike)*)+
      | ((model.common, model.global*)+,
         ((model.divLike, (model.global | model.divGenLike)*)+
          | (model.div1Like, (model.global | model.divGenLike)*)+)?)),
     (model.divBottom, model.global*)*),
    att.global.attributes,
    att.declaring.attributes,
    empty
  }
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.
  element ns1:group {
    ((model.divTop | model.global)*,
     ((\text | group), (\text | group | model.global)*),
     model.divBottom*),
    att.global.attributes,
    att.declaring.attributes,
    empty
  }
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.
  element ns1:floatingText {
    (model.global*,
     (front, model.global*)?,
     (body | group),
     model.global*,
     (back, model.global*)?),
    att.global.attributes,
    att.declaring.attributes,
    att.typed.attributes,
    empty
  }
\div =
  
  ## (text division) contains a subdivision of the front, body, or back of a text.
  element ns1:div {
    ((model.divTop | model.global)*,
     ((((model.divLike | model.divGenLike), model.global*)+
       | ((model.common, model.global*)+,
          ((model.divLike | model.divGenLike), model.global*)*)),
      (model.divBottom, model.global*)*)?),
    att.global.attributes,
    att.divLike.attributes,
    att.typed.attributes,
    att.declaring.attributes,
    empty
  }
trailer =
  
  ## contains a closing title or footer appearing at the end of a division of a text. 
  element ns1:trailer { macro.phraseSeq, att.global.attributes, empty }
byline =
  
  ## contains the primary statement of responsibility given for a work
  ## on its title page or at the head or end of the work.
  element ns1:byline {
    (text | model.gLike | model.phrase | docAuthor | model.global)*,
    att.global.attributes,
    empty
  }
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. 
  element ns1:dateline { macro.phraseSeq, att.global.attributes, empty }
argument =
  
  ## A formal list or prose description of the topics addressed by
  ##	a subdivision of a text.
  element ns1:argument {
    ((model.global | model.headLike)*, (model.common, model.global*)+),
    att.global.attributes,
    empty
  }
epigraph =
  
  ## contains a quotation, anonymous or attributed, appearing at the start of a section or
  ##     chapter, or on a title page. 
  element ns1:epigraph {
    (model.common | model.global)*, att.global.attributes, empty
  }
opener =
  
  ## groups together dateline, byline, salutation, and similar phrases appearing as a preliminary
  ##     group at the start of a division, especially of a letter.
  element ns1:opener {
    (text
     | model.gLike
     | model.phrase
     | argument
     | byline
     | dateline
     | epigraph
     | salute
     | signed
     | model.global)*,
    att.global.attributes,
    empty
  }
closer =
  
  ## groups together salutations, datelines, and similar phrases appearing as a final group at
  ##     the end of a division, especially of a letter.
  element ns1:closer {
    (text
     | model.gLike
     | signed
     | dateline
     | salute
     | model.phrase
     | model.global)*,
    att.global.attributes,
    empty
  }
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.
  element ns1:salute { macro.phraseSeq, att.global.attributes, empty }
signed =
  
  ## (signature) contains the closing salutation, etc., appended to a foreword,
  ## dedicatory epistle, or other division of a text. 
  element ns1:signed { macro.phraseSeq, att.global.attributes, empty }
postscript =
  
  ## contains a postscript, e.g. to a letter.
  element ns1:postscript {
    (model.common | model.global)*, att.global.attributes, empty
  }
titlePage =
  
  ## (title page) contains the title page of a text, appearing within the front or back matter. 
  element ns1:titlePage {
    (model.global*,
     model.titlepagePart,
     (model.titlepagePart | model.global)*),
    att.global.attributes,
    
    ## classifies the title page according to any convenient typology.
    attribute type { data.enumerated }?,
    empty
  }
docTitle =
  
  ## (document title) contains the title of a document, including all its
  ## constituents, as given on a title page.
  element ns1:docTitle {
    (model.global*, (titlePart, model.global*)+),
    att.global.attributes,
    att.canonical.attributes,
    empty
  }
titlePart =
  
  ## contains a subsection or division of the title of a work, as
  ## indicated on a title page.
  element ns1:titlePart {
    macro.paraContent,
    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
  }
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).
  element ns1:docAuthor {
    macro.phraseSeq,
    att.global.attributes,
    att.canonical.attributes,
    empty
  }
imprimatur =
  
  ## contains a formal statement authorizing the publication of a work, sometimes required to
  ##     appear on a title page or its verso.
  element ns1:imprimatur {
    macro.paraContent, att.global.attributes, empty
  }
docEdition =
  
  ## (document edition) contains an edition statement as presented on a title page of a
  ## document.
  element ns1:docEdition {
    macro.paraContent, att.global.attributes, empty
  }
docImprint =
  
  ## (document imprint) contains the imprint statement (place and date of publication,
  ## publisher name), as given
  ## (usually) at the foot of a title page.
  element ns1:docImprint {
    (text
     | model.gLike
     | model.phrase
     | pubPlace
     | docDate
     | publisher
     | model.global)*,
    att.global.attributes,
    empty
  }
docDate =
  
  ## (document date) contains the date of a document, as given
  ## (usually) on a title page.
  element ns1:docDate {
    macro.phraseSeq,
    att.global.attributes,
    
    ## gives the value of the date in standard form, i.e. YYYY-MM-DD.
    attribute when { data.temporal.w3c }?,
    empty
  }
front =
  
  ## (front matter) contains any prefatory matter (headers,
  ## title page, prefaces, dedications, etc.)
  ## found  at the start of a document, before the main body.
  element ns1:front {
    ((model.frontPart | model.pLike.front | model.global)*,
     ((model.div1Like,
       (model.frontPart | model.div1Like | model.global)*)
      | (model.divLike,
         (model.frontPart | model.divLike | model.global)*))?,
     (model.divBottomPart, (model.divBottomPart | model.global)*)?),
    att.global.attributes,
    att.declaring.attributes,
    empty
  }
back =
  
  ## (back matter) contains any appendixes, etc. following the main part of a text.
  element ns1:back {
    ((model.frontPart | model.pLike.front | model.global)*,
     ((model.div1Like,
       (model.frontPart | model.div1Like | model.global)*)
      | (model.divLike,
         (model.frontPart | model.divLike | model.global)*))?,
     (model.divBottomPart, (model.divBottomPart | model.global)*)?),
    att.global.attributes,
    att.declaring.attributes,
    empty
  }
precision =
  
  ## indicates the numerical accuracy or precision  associated
  ##   with some aspect of the text markup. 
  element ns1:precision {
    model.glossLike*,
    att.global.attributes,
    att.scoping.attributes,
    
    ## indicates the degree of precision to be assigned as a
    ##       value between 0 (none) and 1 (optimally precise)
    attribute degree { data.probability }?,
    
    ## supplies a standard deviation associated with the value in
    ##       question
    attribute stdDeviation { data.numeric }?,
    empty
  }
certainty =
  
  ## indicates the degree of certainty associated
  ##   with some aspect of the text markup. 
  element ns1:certainty {
    model.glossLike*,
    att.global.attributes,
    att.scoping.attributes,
    
    ## indicates more exactly the aspect concerning which
    ##       certainty is being expressed: specifically, whether the markup
    ##       is correctly located, whether the correct element or attribute
    ##       name has been used, or whether the content of the element or
    ##       attribute is correct,
    ##	etc.
    attribute locus {
      
      ## uncertainty concerns whether the name of the element
      ##	  or attribute  used is correctly applied.
      "name"
      | 
        ## uncertainty concerns whether the start of the element
        ##	  is correctly identified.
        "start"
      | 
        ## uncertainty concerns whether the end of the element
        ##	  is correctly identified.
        "end"
      | 
        ## uncertainty concerns both the start and the end of the
        ##	  element.
        "location"
      | 
        ## uncertainty concerns the content (for an element) or
        ##	  the value (for an attribute)
        "value"
    },
    
    ## provides an alternative value for the aspect of the markup in
    ## question—an alternative generic identifier, transcription,
    ## or attribute value, or the identifier of an anchor element (to
    ## indicate an alternative starting or ending location).  If an
    ## assertedValue is given, the confidence level specified by
    ## degree applies to the alternative markup specified by
    ## assertedValue; if none is given, it applies to the markup
    ## in the text.
    attribute assertedValue { data.pointer | data.name | data.word }?,
    
    ## indicates conditions assumed in the assignment of a degree
    ##       of confidence.
    attribute given {
      list { data.pointer, data.pointer* }
    }?,
    
    ## indicates the degree of confidence assigned to the aspect
    ## of the markup named by the locus attribute.
    attribute degree { data.probability }?,
    empty
  }
respons =
  
  ## (responsibility) identifies the individual(s) responsible for some aspect of the
  ## markup of particular element(s).
  element ns1:respons {
    model.glossLike*,
    att.global.attributes,
    att.scoping.attributes,
    
    ## indicates the specific aspect of the markup for which
    ## responsibility is being assigned.
    attribute locus {
      list {
        (
         ## responsibility is being assigned concerning the name of the element
         ##	  or attribute used.
         "name"
         | 
           ## responsibility is being assigned concerning the start of the element
           ##	  concerned.
           "start"
         | 
           ## responsibility is being assigned concerning the end of the element
           ##	  concerned.
           "end"
         | 
           ## responsibility is being assigned concerning the location of the element
           ##	  concerned.
           "location"
         | 
           ## responsibility is being assigned concerning the content (for an element) or
           ##	  the value (for an attribute)
           "value"),
        (
         ## responsibility is being assigned concerning the name of the element
         ##	  or attribute used.
         "name"
         | 
           ## responsibility is being assigned concerning the start of the element
           ##	  concerned.
           "start"
         | 
           ## responsibility is being assigned concerning the end of the element
           ##	  concerned.
           "end"
         | 
           ## responsibility is being assigned concerning the location of the element
           ##	  concerned.
           "location"
         | 
           ## responsibility is being assigned concerning the content (for an element) or
           ##	  the value (for an attribute)
           "value")*
      }
    },
    
    ## (responsible party) identifies the individual or agency responsible for the indicated
    ## aspect of the electronic text.
    attribute resp { data.pointer },
    empty
  }
s =
  
  ## (s-unit) contains a sentence-like division of a text.
  element ns1:s {
    macro.phraseSeq
    >> sch:pattern [
         id = "s-constraint-noNestedS"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:s"
           "\x{a}" ~
           "               "
           sch:report [
             test = "tei:s"
             "You may not nest one s element within\x{a}" ~
             "      another: use seg instead"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    att.global.attributes,
    att.segLike.attributes,
    att.typed.attributes,
    empty
  }
phr =
  
  ## (phrase) represents a grammatical phrase.
  element ns1:phr {
    macro.phraseSeq,
    att.global.attributes,
    att.segLike.attributes,
    att.typed.attributes,
    empty
  }
m =
  
  ## (morpheme) represents a grammatical morpheme.
  element ns1:m {
    (text | model.gLike | seg | m | model.global)*,
    att.global.attributes,
    att.segLike.attributes,
    att.typed.attributes,
    
    ## identifies the morpheme's base form.
    attribute baseForm { data.word }?,
    empty
  }
pc =
  
  ##  (punctuation character) a character or string of characters regarded as constituting a
  ##   single punctuation mark.
  element ns1:pc {
    (text | model.gLike)*,
    att.global.attributes,
    att.segLike.attributes,
    att.typed.attributes,
    
    ## indicates the extent to which this punctuation mark
    ##       conventionally separates words or phrases
    attribute force {
      
      ## the punctuation mark is a word separator
      "strong"
      | 
        ## the punctuation mark is not a word separator
        "weak"
      | 
        ## the punctuation mark may or may not be a
        ## word separator
        "inter"
    }?,
    
    ## provides a name for the kind of unit delimited by  this punctuation mark.
    attribute unit { data.enumerated }?,
    
    ## indicates whether this punctuation mark precedes or
    ##       follows the unit it delimits.
    attribute pre { data.truthValue }?,
    empty
  }
att.global.analytic.attributes = att.global.analytic.attribute.ana
att.global.analytic.attribute.ana =
  
  ## (analysis) indicates one or more elements containing interpretations of the
  ## element on which the ana attribute appears.
  attribute ana {
    list { data.pointer, data.pointer* }
  }?
span =
  
  ## associates an interpretative annotation directly with a span of text.
  element ns1:span {
    macro.phraseSeq.limited,
    att.global.attributes,
    att.interpLike.attributes,
    
    ## specifies the beginning of the passage being annotated; if not accompanied by a
    ##         to attribute, then specifies the entire passage.
    attribute from { data.pointer },
    
    ## specifies the end of the passage being annotated.
    attribute to { data.pointer }?,
    empty
  }
spanGrp =
  
  ## (span group) collects together span tags.
  element ns1:spanGrp {
    span*, att.global.attributes, att.interpLike.attributes, empty
  }
interp =
  
  ## (interpretation) summarizes a specific interpretative annotation which can be linked to a span of text.
  element ns1:interp {
    (text | model.gLike | model.glossLike)*,
    att.global.attributes,
    att.interpLike.attributes,
    empty
  }
interpGrp =
  
  ## (interpretation group) collects together a set of related interpretations which share responsibility or type.
  element ns1:interpGrp {
    (model.glossLike*, interp+),
    att.global.attributes,
    att.interpLike.attributes,
    empty
  }
set =
  
  ## (setting) contains a description of the setting, time, locale, appearance, etc., of the action of a
  ##     play, typically found in the front matter of a printed performance text (not a stage direction).
  element ns1:set {
    ((model.headLike | model.global)*, (model.common, model.global*)*),
    att.global.attributes,
    empty
  }
prologue =
  
  ## contains the prologue to a drama, typically spoken by an actor out of character, possibly in
  ##     association with a particular performance or venue.
  element ns1:prologue {
    ((model.divTop | model.global)*,
     (model.common, model.global*)+,
     (model.divBottom, model.global*)*),
    att.global.attributes,
    empty
  }
epilogue =
  
  ## contains the epilogue to a drama, typically spoken by an actor out of character, possibly in
  ##     association with a particular performance or venue.
  element ns1:epilogue {
    ((model.divTop | model.global)*,
     (model.common, model.global*)+,
     (model.divBottom, model.global*)*),
    att.global.attributes,
    empty
  }
performance =
  
  ## contains a section of front or back matter describing how a dramatic piece is to be
  ##     performed in general or how it was performed on some specific occasion. 
  element ns1:performance {
    ((model.divTop | model.global)*,
     (model.common, model.global*)+,
     (model.divBottom, model.global*)*),
    att.global.attributes,
    empty
  }
castList =
  
  ## (cast list) contains a single cast list or dramatis personae.
  element ns1:castList {
    ((model.divTop | model.global)*,
     (model.common, model.global*)*,
     ((castItem | castGroup), model.global*)+,
     (model.common, model.global*)*),
    att.global.attributes,
    empty
  }
castGroup =
  
  ## (cast list grouping) groups one or more individual castItem
  ## elements within a cast list.
  element ns1:castGroup {
    ((model.global | model.headLike)*,
     ((castItem | castGroup | roleDesc), model.global*)+,
     (trailer, model.global*)?),
    att.global.attributes,
    empty
  }
castItem =
  
  ## (cast list item) contains a single entry within a cast list, describing
  ## either a single role or a list of non-speaking roles.
  element ns1:castItem {
    (text
     | model.gLike
     | model.castItemPart
     | model.phrase
     | model.global)*,
    att.global.attributes,
    
    ## characterizes the cast item.
    ##    
    [ a:defaultValue = "role" ]
    attribute type {
      
      ## the item describes a single role.
      ##        
      "role"
      | 
        ## the item describes a list of non-speaking roles.
        ##    
        "list"
    }?,
    empty
  }
role =
  
  ## the name of a dramatic role, as given in a cast list.
  element ns1:role { macro.phraseSeq, att.global.attributes, empty }
roleDesc =
  
  ## (role description) describes a character's role in a drama.
  element ns1:roleDesc { macro.phraseSeq, att.global.attributes, empty }
actor =
  
  ## Name of an actor appearing within a cast list.
  element ns1:actor { macro.phraseSeq, att.global.attributes, empty }
move =
  
  ## (movement) marks the actual entrance or exit of one or more characters on stage.
  element ns1:move {
    empty,
    att.global.attributes,
    att.ascribed.attributes,
    
    ## characterizes the movement, for example as an entrance or exit.
    ## Suggested values include: 1] entrance; 2] exit; 3] onStage
    attribute type {
      
      ## character is entering the stage.
      "entrance"
      | 
        ## character is exiting the stage.
        "exit"
      | 
        ## character moves on stage
        "onStage"
      | xsd:Name
    }?,
    
    ## specifies the direction of a stage movement.
    ## Sample values include: 1] L(left) ; 2] R(right) ; 3] C(center) 
    attribute where {
      list { data.enumerated, data.enumerated* }
    }?,
    
    ## (performance) identifies the performance or performances in which this movement occurred as specified.
    attribute perf {
      list { data.pointer, data.pointer* }
    }?,
    empty
  }
view =
  
  ## describes the visual context of some part of a screen play in
  ## terms of what the spectator sees, generally independent of any
  ## dialogue.
  element ns1:view { macro.specialPara, att.global.attributes, empty }
camera =
  
  ## describes a particular camera angle or viewpoint in a screen play.
  element ns1:camera {
    macro.paraContent,
    att.global.attributes,
    att.typed.attributes,
    empty
  }
sound =
  
  ## describes a sound effect or musical sequence specified within a screen play or radio script.
  element ns1:sound {
    macro.paraContent,
    att.global.attributes,
    
    ## categorizes the sound in some respect, e.g. as music, special effect, etc.
    attribute type { data.enumerated }?,
    
    ## indicates whether the sound overlaps the surrounding speeches or interrupts them.
    [ a:defaultValue = "unknown" ]
    attribute discrete { data.xTruthValue }?,
    empty
  }
caption =
  
  ## contains the text of a caption or other text displayed as part of
  ## a film script or screenplay.
  element ns1:caption {
    macro.paraContent, att.global.attributes, empty
  }
tech =
  
  ## (technical stage direction) describes a special-purpose stage direction that is not
  ## meant for the actors.
  element ns1:tech {
    macro.paraContent,
    att.global.attributes,
    
    ## categorizes the technical stage direction.
    attribute type {
      
      ## a lighting cue
      "light"
      | 
        ## a sound cue
        "sound"
      | 
        ## a prop cue
        "prop"
      | 
        ## a blocking instruction
        "block"
    }?,
    
    ## (performance) identifies the performance or performances to which this
    ## technical direction applies.
    attribute perf { data.enumerated }?,
    empty
  }
link =
  
  ## defines an association or hypertextual link among elements or passages, of some type not more precisely specifiable by other elements.
  element ns1:link {
    empty
    >> sch:pattern [
         id = "link-constraint-linkTargets1"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:link"
           "\x{a}" ~
           "               "
           sch:report [
             test = "@target and @targets"
             "You may not supply both \x{a}" ~
             "	@target and @targets"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ]
    >> sch:pattern [
         id = "link-constraint-linkTargets2"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:link"
           "\x{a}" ~
           "               "
           sch:report [
             test = "not(@target) and not(@targets)"
             "You must\x{a}" ~
             "	supply either @target or @targets"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ]
    >> sch:pattern [
         id = "link-constraint-linkTargets3"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:link"
           "\x{a}" ~
           "               "
           sch:assert [
             test = "contains(@target,' ')"
             "You must supply at least two\x{a}" ~
             "values for @target"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    att.global.attributes,
    att.pointing.attributes,
    att.typed.attributes,
    
    ## specifies the identifiers of the elements or passages to be linked or associated. 
    attribute targets {
      list { data.pointer, data.pointer, data.pointer* }
    }?,
    empty
  }
linkGrp =
  
  ## (link group) defines a collection of associations or hypertextual links.
  element ns1:linkGrp {
    (link | ptr)+,
    att.global.attributes,
    att.pointing.group.attributes,
    empty
  }
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.
  element ns1:ab {
    macro.paraContent,
    att.global.attributes,
    att.typed.attributes,
    att.declaring.attributes,
    
    ## specifies whether or not the block is complete. 
    [ a:defaultValue = "N" ]
    attribute part {
      
      ## (yes) the block is incomplete
      "Y"
      | 
        ## (no) either the block is complete, or no claim is made as to its completeness
        "N"
      | 
        ## (initial) the initial part of an incomplete block
        "I"
      | 
        ## (medial) a medial part of an incomplete block
        "M"
      | 
        ## (final) the final part of an incomplete block
        "F"
    }?,
    empty
  }
anchor =
  
  ## (anchor point) attaches an identifier to a point within a text, whether or not it corresponds with a textual element.
  element ns1:anchor {
    empty, att.global.attributes, att.typed.attributes, empty
  }
seg =
  
  ## (arbitrary segment) represents any segmentation of text below the chunk level.
  element ns1:seg {
    macro.paraContent,
    att.global.attributes,
    att.segLike.attributes,
    att.typed.attributes,
    att.responsibility.attributes,
    empty
  }
when =
  
  ## indicates a point in time either relative to other elements in the same timeline tag, or absolutely.
  element ns1:when {
    empty,
    att.global.attributes,
    
    ## supplies an absolute value for the time.
    attribute absolute { 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 the numeric portion of a time interval
    attribute interval {
      xsd:float { minExclusive = "0" }
      | "unknown"
    }?,
    
    ## 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 { data.pointer }?,
    empty
  }
timeline =
  
  ## (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.
  element ns1:timeline {
    when+,
    att.global.attributes,
    
    ## designates the origin of the timeline, i.e. the time at which it begins.
    attribute origin { 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 the numeric portion of a time interval
    attribute interval {
      xsd:float { minExclusive = "0" }
      | "regular"
      | "irregular"
    }?,
    empty
  }
join =
  
  ## identifies a possibly fragmented segment of text, by pointing at the possibly discontiguous elements which compose it.
  element ns1:join {
    (model.glossLike*)
    >> sch:pattern [
         id = "join-constraint-joinTargets1"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:join"
           "\x{a}" ~
           "               "
           sch:report [
             test = "@target and @targets"
             "You may not supply both \x{a}" ~
             "	@target and @targets"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ]
    >> sch:pattern [
         id = "join-constraint-joinTargets2"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:join"
           "\x{a}" ~
           "               "
           sch:report [
             test = "not(@target) and not(@targets)"
             "You must\x{a}" ~
             "	supply either @target or @targets"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ]
    >> sch:pattern [
         id = "join-constraint-joinTargets3"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:join"
           "\x{a}" ~
           "               "
           sch:assert [
             test = "contains(@target,' ')"
             "You must supply at least two\x{a}" ~
             "values for @target"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    att.global.attributes,
    att.pointing.attributes,
    att.typed.attributes,
    
    ## specifies the identifiers of the elements or passages to be joined into a virtual element.
    attribute targets {
      list { data.pointer, data.pointer, data.pointer* }
    }?,
    
    ## specifies the name of an element which this aggregation may be understood to represent.
    attribute result { 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 targets 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 targets attribute become the children of the virtual element (i.e. the roots of the subtrees are discarded)
        "branches"
    }?,
    empty
  }
joinGrp =
  
  ## (join group) groups a collection of join elements and possibly pointers.
  element ns1:joinGrp {
    (model.glossLike*, (join | ptr)+),
    att.global.attributes,
    att.pointing.group.attributes,
    
    ## describes the result of the joins gathered in this collection.
    attribute result { data.name }?,
    empty
  }
alt =
  
  ## (alternation) identifies an alternation or a set of choices among elements or passages.
  element ns1:alt {
    empty
    >> sch:pattern [
         id = "alt-constraint-altTargets1"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:alt"
           "\x{a}" ~
           "               "
           sch:report [
             test = "@target and @targets"
             "You may not supply both \x{a}" ~
             "	@target and @targets"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ]
    >> sch:pattern [
         id = "alt-constraint-altTargets2"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:alt"
           "\x{a}" ~
           "               "
           sch:report [
             test = "not(@target) and not(@targets)"
             "You must\x{a}" ~
             "	supply either @target or @targets"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ]
    >> sch:pattern [
         id = "alt-constraint-altTargets3"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:alt"
           "\x{a}" ~
           "               "
           sch:assert [
             test = "contains(@target,' ')"
             "You must supply at least two\x{a}" ~
             "values for @target"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    att.global.attributes,
    att.pointing.attributes,
    att.typed.attributes,
    
    ## specifies the identifiers of the alternative elements or passages.
    attribute targets {
      list { data.pointer, data.pointer, 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 { data.probability, data.probability, data.probability* }
    }?,
    empty
  }
altGrp =
  
  ## (alternation group) groups a collection of alt elements and possibly pointers.
  element ns1:altGrp {
    (alt | ptr)*,
    att.global.attributes,
    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
  }
att.global.linking.attributes =
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.global.linking.attribute.copyOf,
  att.global.linking.attribute.next,
  att.global.linking.attribute.prev,
  att.global.linking.attribute.exclude,
  att.global.linking.attribute.select
att.global.linking.attribute.corresp =
  
  ## (corresponds) points to elements that correspond to the current
  ##       element in some way.
  attribute corresp {
    list { data.pointer, data.pointer* }
  }?
att.global.linking.attribute.synch =
  
  ## (synchronous) points to elements that are synchronous with the current
  ##       element.
  attribute synch {
    list { data.pointer, data.pointer* }
  }?
att.global.linking.attribute.sameAs =
  
  ## points to an element that is the same as the current
  ##       element.
  attribute sameAs { data.pointer }?
att.global.linking.attribute.copyOf =
  
  ## points to an element of which the current element is a
  ##	copy.
  attribute copyOf { data.pointer }?
att.global.linking.attribute.next =
  
  ## points to the next element of a virtual aggregate of which
  ##       the current element is part.
  attribute next { data.pointer }?
att.global.linking.attribute.prev =
  
  ## (previous) points to the previous element of a virtual aggregate of
  ##       which the current element is part.
  attribute prev { data.pointer }?
att.global.linking.attribute.exclude =
  
  ## points to elements that are in exclusive alternation
  ##       with the current element.
  attribute exclude {
    list { data.pointer, data.pointer* }
  }?
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 { data.pointer, data.pointer* }
  }?
msDesc =
  
  ## (manuscript description) contains a description of a single identifiable
  ## manuscript or other text-bearing object.
  element ns1:msDesc {
    (msIdentifier,
     model.headLike*,
     (model.pLike+
      | (msContents?, physDesc?, history?, additional?, msPart*))),
    att.global.attributes,
    empty
  }
catchwords =
  
  ## describes the system used to ensure
  ## correct ordering of the quires making up a codex or incunable,
  ## typically by means of annotations at the foot of the page.
  element ns1:catchwords {
    macro.phraseSeq, att.global.attributes, empty
  }
dimensions =
  
  ## contains a dimensional specification.
  element ns1:dimensions {
    ((dim | model.dimLike)*)
    >> sch:pattern [
         id = "dimensions-constraint-duplicateDim1"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:dimensions"
           "\x{a}" ~
           "               "
           sch:report [
             test = "count(tei:width)> 1"
             "\x{a}" ~
             "	Width element may appear once only\x{a}" ~
             "      "
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ]
    >> sch:pattern [
         id = "dimensions-constraint-duplicateDim2"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:dimensions"
           "\x{a}" ~
           "               "
           sch:report [
             test = "count(tei:height)> 1"
             "\x{a}" ~
             "	Height element may appear once only\x{a}" ~
             "      "
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ]
    >> sch:pattern [
         id = "dimensions-constraint-duplicateDim3"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:dimensions"
           "\x{a}" ~
           "               "
           sch:report [
             test = "count(tei:depth)> 1"
             "\x{a}" ~
             "	Depth element may appear once only\x{a}" ~
             "      "
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    att.global.attributes,
    att.dimensions.attributes,
    
    ## indicates which aspect of the object is being measured. 
    ## Sample values include: 1] leaves; 2] ruled; 3] pricked; 4] written; 5] miniatures; 6] binding; 7] box
    attribute type { data.enumerated }?,
    empty
  }
dim =
  
  ## contains any single measurement forming part of a dimensional
  ## specification of some sort.
  element ns1:dim {
    macro.xtext,
    att.global.attributes,
    att.typed.attributes,
    att.dimensions.attributes,
    empty
  }
height =
  
  ## contains a measurement measured along the
  ##   axis at right angles to the bottom of the written surface,
  ##   i.e. parallel to the spine for a codex or book. 
  element ns1:height {
    macro.xtext, att.global.attributes, att.dimensions.attributes, empty
  }
depth =
  
  ## contains a measurement measured across the
  ##   spine of a book or codex, or (for other text-bearing objects) perpendicular to the measurement given by the
  ##   width element. 
  element ns1:depth {
    macro.xtext, att.global.attributes, att.dimensions.attributes, empty
  }
width =
  
  ## contains a measurement measured along the
  ##   axis parallel to the bottom of the written surface, i.e. 
  ## perpendicular to the spine of a book or codex. 
  element ns1:width {
    macro.xtext, att.global.attributes, att.dimensions.attributes, empty
  }
heraldry =
  
  ## contains a heraldic formula
  ## or phrase, typically found as part of a blazon, coat of arms, etc. 
  ##
  element ns1:heraldry { macro.phraseSeq, att.global.attributes, empty }
locus =
  
  ## defines a location within a manuscript or manuscript part, usually as a
  ##     (possibly discontinuous) sequence of folio references. 
  element ns1:locus {
    macro.xtext,
    att.global.attributes,
    att.pointing.attributes,
    
    ## identifies the foliation scheme in terms of which the location is being
    ##         specified.
    attribute scheme { data.pointer }?,
    
    ## specifies the starting point of the location in a normalized form.
    attribute from { data.word }?,
    
    ## specifies the end-point of the location in a normalized form.
    attribute to { data.word }?,
    empty
  }
locusGrp =
  
  ## groups a number of locations which together form a
  ##   distinct but discontinuous item within a manuscript or manuscript
  ##   part, according to a specific foliation.
  ##   
  element ns1:locusGrp {
    locus+,
    att.global.attributes,
    
    ## identifies the foliation scheme in terms of which all the
    ##       locations contained by the group are specified.
    attribute scheme { data.pointer }?,
    empty
  }
material =
  
  ## contains a word or phrase describing the
  ##   material of which  the object being described is composed.
  ##   
  element ns1:material {
    macro.phraseSeq,
    att.global.attributes,
    att.canonical.attributes,
    empty
  }
objectType =
  
  ## contains a word or phrase describing the type of object being refered to.
  ##   
  element ns1:objectType {
    macro.phraseSeq,
    att.global.attributes,
    att.canonical.attributes,
    empty
  }
origDate =
  
  ## (origin date) contains any form of date, used to
  ##   identify the date of origin for a manuscript or manuscript part.
  ##   
  element ns1:origDate {
    (text | model.gLike | model.phrase | model.global)*,
    att.global.attributes,
    att.datable.attributes,
    att.editLike.attributes,
    att.typed.attributes,
    empty
  }
origPlace =
  
  ## (origin place) contains any form of place name, used to identify the
  ## place of origin for a manuscript or manuscript part. 
  element ns1:origPlace {
    macro.phraseSeq,
    att.global.attributes,
    att.naming.attributes,
    att.datable.attributes,
    att.editLike.attributes,
    empty
  }
secFol =
  
  ## (second folio) The word or words taken from a fixed point
  ## in a codex (typically the beginning of the
  ## second leaf) in order
  ## to provide a unique identifier for it.
  ## 
  ##
  element ns1:secFol { macro.phraseSeq, att.global.attributes, empty }
signatures =
  
  ## contains discussion of the leaf or quire signatures found within a codex.
  element ns1:signatures {
    macro.phraseSeq, att.global.attributes, empty
  }
stamp =
  
  ## contains a word or phrase describing a
  ## stamp or similar device.
  element ns1:stamp {
    macro.phraseSeq,
    att.global.attributes,
    att.typed.attributes,
    att.datable.attributes,
    empty
  }
watermark =
  
  ## contains a word or phrase describing a
  ## watermark or similar device.
  element ns1:watermark {
    macro.phraseSeq, att.global.attributes, empty
  }
msIdentifier =
  
  ## (manuscript identifier) contains the information required to identify
  ## the  manuscript being described. 
  element ns1:msIdentifier {
    ((model.placeNamePart_sequenceOptional,
      institution?,
      repository?,
      collection*,
      idno?),
     (msName | altIdentifier)*)
    >> sch:pattern [
         id = "msIdentifier-constraint-msId_minimal"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:msIdentifier"
           "\x{a}" ~
           "               "
           sch:report [
             test =
               "local-name(*[1])='idno' or                              local-name(*[1])='altIdentifier' or        .='' "
             "\x{a}" ~
             "	    You must supply either a locator of some type or a\x{a}" ~
             "	    name"
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    att.global.attributes,
    empty
  }
institution =
  
  ## contains the name of an organization such as a university or
  ##   library, with which a manuscript is identified, generally its
  ##   holding institution.
  element ns1:institution {
    macro.xtext, att.global.attributes, att.naming.attributes, empty
  }
repository =
  
  ## contains the name of a repository within which manuscripts are stored, possibly forming part of an institution.
  element ns1:repository {
    macro.xtext, att.global.attributes, att.naming.attributes, empty
  }
collection =
  
  ## contains the name of a collection of
  ## manuscripts, not necessarily located within a single repository. 
  element ns1:collection {
    macro.xtext,
    att.global.attributes,
    att.naming.attributes,
    att.typed.attributes,
    empty
  }
altIdentifier =
  
  ## (alternative identifier) contains an alternative or former structured identifier used for
  ## a manuscript, such as a former catalogue number.
  element ns1:altIdentifier {
    (model.placeNamePart_sequenceOptional,
     institution?,
     repository?,
     collection?,
     idno,
     note?),
    att.global.attributes,
    att.typed.attributes,
    empty
  }
msName =
  
  ## (alternative name) contains any form of unstructured alternative
  ## name used for a manuscript, such as an  ocellus
  ## nominum, or nickname. 
  element ns1:msName {
    macro.xtext, att.global.attributes, att.typed.attributes, empty
  }
colophon =
  
  ## contains the  colophon
  ## of a  manuscript item: that is, a statement providing information regarding the date, place, agency, or reason for production of the manuscript.
  element ns1:colophon { macro.phraseSeq, att.global.attributes, empty }
explicit =
  
  ## contains the  explicit of a
  ## manuscript item, that is, the closing words of the text proper,
  ## exclusive of any rubric or colophon which might follow it.
  ##   
  element ns1:explicit {
    macro.phraseSeq,
    att.global.attributes,
    att.typed.attributes,
    att.msExcerpt.attributes,
    empty
  }
filiation =
  
  ## contains information concerning the manuscript's filiation, i.e. its relationship to other surviving manuscripts of the same text, its protographs, antigraphs and apographs.
  element ns1:filiation {
    macro.specialPara,
    att.global.attributes,
    att.typed.attributes,
    empty
  }
finalRubric =
  
  ## contains the string of words that denotes the end of a text division, often with an assertion as to its author and title, usually set off from the text itself by red ink, by a different size or type of script, or by some other such visual device.
  element ns1:finalRubric {
    macro.phraseSeq, att.global.attributes, att.typed.attributes, empty
  }
incipit =
  
  ## contains the incipit of a manuscript item, that is the opening words of the text proper, exclusive of any rubric which might precede it, of sufficient length to identify the work uniquely; such incipts were, in fomer times, frequently used a means of reference to a work, in place of a title.
  element ns1:incipit {
    macro.phraseSeq,
    att.global.attributes,
    att.typed.attributes,
    att.msExcerpt.attributes,
    empty
  }
msContents =
  
  ## (manuscript contents) describes the intellectual content of a manuscript or manuscript
  ##     part, either as a series of paragraphs or as a series of structured manuscript items.
  element ns1:msContents {
    (model.pLike+
     | (summary?, textLang?, titlePage?, (msItem | msItemStruct)*)),
    att.global.attributes,
    att.msExcerpt.attributes,
    
    ## identifies the text types or classifications applicable to this object.
    attribute class { data.code }?,
    empty
  }
msItem =
  
  ## (manuscript item) describes an individual work or item within the intellectual
  ##   content of a manuscript or manuscript part. 
  element ns1:msItem {
    ((locus | locusGrp)*,
     (model.pLike+
      | (model.titlepagePart | model.msItemPart | model.global)+)),
    att.global.attributes,
    att.msExcerpt.attributes,
    
    ## identifies the text types or classifications applicable to this
    ## item
    attribute class { data.code }?,
    empty
  }
msItemStruct =
  
  ## (structured manuscript item) contains a structured description for an
  ##   individual work or item within the intellectual content of a
  ##   manuscript or manuscript part.
  element ns1:msItemStruct {
    (locus?,
     (model.pLike+
      | (author*,
         respStmt*,
         title*,
         rubric?,
         incipit?,
         msItemStruct*,
         explicit?,
         finalRubric?,
         colophon*,
         decoNote*,
         listBibl*,
         bibl*,
         filiation*,
         model.noteLike*,
         textLang?))),
    att.global.attributes,
    att.msExcerpt.attributes,
    
    ## identifies the text types or classifications applicable to this
    ## item
    attribute class { data.code }?,
    empty
  }
rubric =
  
  ## contains the text of any rubric or heading attached to a particular manuscript item, that is, a string of words through which a
  ## manuscript signals the beginning of a text division, often with an assertion as to its author and title, which is in some way set off from the text itself, usually in red ink, or by use of different size or type of script, or some other such visual device.
  element ns1:rubric {
    macro.phraseSeq, att.global.attributes, att.typed.attributes, empty
  }
summary =
  
  ## contains an overview of the available
  ##   information concerning some aspect of an item (for example, its
  ## intellectual content, history, layout, typography etc.) as a
  ## complement or alternative to the  more detailed information  carried by
  ##   more specific elements.
  element ns1:summary { macro.phraseSeq, att.global.attributes, empty }
textLang =
  
  ## (text language) in a manuscript description, describes
  ##   the languages and writing systems identified within the manuscript
  ##   being described. 
  element ns1:textLang {
    macro.phraseSeq,
    att.global.attributes,
    
    ## (main language) supplies a code which identifies the chief language used in the manuscript.
    attribute mainLang { data.language }?,
    
    ## (other languages) one or more codes identifying any other languages used in the manuscript.
    attribute otherLangs {
      list { data.language* }
    }?,
    empty
  }
att.msExcerpt.attributes = att.msExcerpt.attribute.defective
att.msExcerpt.attribute.defective =
  
  ## indicates whether the passage being quoted is defective,
  ##       i.e. incomplete through loss or damage.
  [ a:defaultValue = "false" ] attribute defective { data.xTruthValue }?
physDesc =
  
  ## (physical description) contains a full physical description of a
  ## manuscript or manuscript part, optionally subdivided using more
  ## specialised elements from the model.physDescPart class.
  element ns1:physDesc {
    (model.pLike*, model.physDescPart_sequenceOptional),
    att.global.attributes,
    empty
  }
objectDesc =
  
  ## contains a description of the physical
  ##   components making up the object which is being described.
  element ns1:objectDesc {
    (model.pLike+ | (supportDesc?, layoutDesc?)),
    att.global.attributes,
    
    ## a short  project-specific name identifying the physical form of
    ##       the carrier, for example as a codex, roll, fragment, partial leaf,
    ##       cutting etc.
    attribute form { data.enumerated }?,
    empty
  }
supportDesc =
  
  ## (support description) groups elements describing the physical support for the written part of a manuscript.
  element ns1:supportDesc {
    (model.pLike+
     | (support?, extent?, foliation*, collation?, condition?)),
    att.global.attributes,
    
    ## a short project-defined name for the material composing
    ##       the majority of the support
    ## Suggested values include: 1] paper (paper) ; 2] parch(parchment) ; 3] mixed
    attribute material {
      
      ##  (paper) 
      "paper"
      | 
        ## (parchment) 
        "parch"
      | 
        ##
        "mixed"
      | xsd:Name
    }?,
    empty
  }
support =
  
  ## contains a description of the materials
  ## etc. which make up the physical support for the written part of a manuscript.
  element ns1:support {
    macro.specialPara, att.global.attributes, empty
  }
collation =
  
  ## contains a description of how the leaves or bifolia are physically
  ## arranged.
  element ns1:collation {
    macro.specialPara, att.global.attributes, empty
  }
foliation =
  
  ## describes the numbering system or systems used to 
  ## count the leaves or pages in a codex.
  element ns1:foliation {
    macro.specialPara, att.global.attributes, empty
  }
condition =
  
  ## contains a description of the physical
  ## condition of the manuscript. 
  element ns1:condition {
    macro.specialPara, att.global.attributes, empty
  }
layoutDesc =
  
  ## (layout description) collects the set of layout descriptions applicable to a manuscript.
  element ns1:layoutDesc {
    (model.pLike+ | (summary?, layout+)),
    att.global.attributes,
    empty
  }
layout =
  
  ## describes how text is laid out on the
  ##   page, including information about any ruling, pricking, or other
  ##   evidence of page-preparation techniques.
  element ns1:layout {
    macro.specialPara,
    att.global.attributes,
    
    ## specifies the number of columns per page
    attribute columns {
      list { data.count, data.count? }
    }?,
    
    ## specifies the number of ruled lines per column
    attribute ruledLines {
      list { data.count, data.count? }
    }?,
    
    ## specifies the number of written lines per
    ##       column
    attribute writtenLines {
      list { data.count, data.count? }
    }?,
    empty
  }
handDesc =
  
  ## (description of hands) contains a description of all the different kinds of writing  used in a manuscript.
  element ns1:handDesc {
    (model.pLike+ | (summary?, handNote+)),
    att.global.attributes,
    
    ## specifies the number of distinct hands identified within the manuscript
    attribute hands { data.count }?,
    empty
  }
typeDesc =
  
  ## contains a description of the typefaces or other aspects of
  ##   the printing of an incunable or other printed source.
  element ns1:typeDesc {
    (model.pLike+ | (summary?, typeNote+)),
    att.global.attributes,
    empty
  }
scriptDesc =
  
  ## contains a description of the scripts used in a manuscript or similar source.
  element ns1:scriptDesc {
    (model.pLike+ | (summary?, scriptNote+)),
    att.global.attributes,
    empty
  }
musicNotation =
  
  ## contains description of type of musical notation.
  element ns1:musicNotation {
    macro.specialPara, att.global.attributes, empty
  }
decoDesc =
  
  ## (decoration description) contains a description of the decoration of a manuscript, either as a sequence of paragraphs, or as a sequence of topically organised decoNote elements.
  element ns1:decoDesc {
    (model.pLike+ | (summary?, decoNote+)),
    att.global.attributes,
    empty
  }
decoNote =
  
  ## (note on decoration) contains a note describing either a
  ## decorative component of a manuscript, or a fairly homogenous class of
  ## such components.
  element ns1:decoNote {
    macro.specialPara,
    att.global.attributes,
    att.typed.attributes,
    empty
  }
additions =
  
  ## contains a description of any significant additions found
  ## within a manuscript, such as marginalia or other annotations. 
  element ns1:additions {
    macro.specialPara, att.global.attributes, empty
  }
bindingDesc =
  
  ## (binding description) describes the present and former bindings of a manuscript, either
  ## as a series of paragraphs or as a series of distinct binding elements,
  ## one for each binding of the manuscript. 
  element ns1:bindingDesc {
    ((model.pLike | decoNote | condition)+ | binding+),
    att.global.attributes,
    empty
  }
binding =
  
  ## contains a description of one binding, i.e. type of covering, boards,
  ##     etc. applied to a manuscript.
  element ns1:binding {
    (model.pLike | condition | decoNote)+,
    att.global.attributes,
    att.datable.attributes,
    
    ## specifies whether or not the binding is contemporary with the majority of its
    ##         contents
    attribute contemporary { data.xTruthValue }?,
    empty
  }
sealDesc =
  
  ## (seal description) describes the seals or other external items attached to a manuscript, either
  ## as a series of paragraphs or as a series of distinct seal elements,
  ## possibly with additional decoNotes. 
  element ns1:sealDesc {
    (model.pLike+ | (decoNote | seal | condition)+),
    att.global.attributes,
    empty
  }
seal =
  
  ## contains a description of one seal or similar
  ##   attachment applied to a manuscript.
  element ns1:seal {
    (model.pLike | decoNote)+,
    att.global.attributes,
    att.typed.attributes,
    att.datable.attributes,
    
    ## specifies whether or not the seal is contemporary with the
    ##       item to which it is affixed
    attribute contemporary { data.xTruthValue }?,
    empty
  }
accMat =
  
  ## (accompanying material) contains details of any significant additional
  ## material which may be closely associated with the manuscript being
  ## described, such as non-contemporaneous documents or fragments bound in
  ## with the manuscript at some earlier historical period.
  element ns1:accMat {
    macro.specialPara,
    att.global.attributes,
    att.typed.attributes,
    empty
  }
history =
  
  ##  groups elements
  ## describing the full history of a manuscript or manuscript part.
  element ns1:history {
    (model.pLike+ | (summary?, origin?, provenance*, acquisition?)),
    att.global.attributes,
    empty
  }
origin =
  
  ## contains any descriptive or other information
  ## concerning the origin of  a manuscript or manuscript part. 
  element ns1:origin {
    macro.specialPara,
    att.global.attributes,
    att.editLike.attributes,
    att.datable.attributes,
    empty
  }
provenance =
  
  ## contains any descriptive or other information
  ## concerning a single identifiable episode during the history of a manuscript
  ## or manuscript part, after its creation but before its acquisition. 
  element ns1:provenance {
    macro.specialPara,
    att.global.attributes,
    att.datable.attributes,
    empty
  }
acquisition =
  
  ## contains any descriptive or other information
  ## concerning the process by which a manuscript or manuscript part entered the holding
  ## institution. 
  element ns1:acquisition {
    macro.specialPara,
    att.global.attributes,
    att.datable.attributes,
    empty
  }
additional =
  
  ## groups additional information, combining
  ## bibliographic information about a manuscript, or surrogate copies of
  ## it with  curatorial or administrative information. 
  element ns1:additional {
    (adminInfo?, surrogates?, listBibl?), att.global.attributes, empty
  }
adminInfo =
  
  ## (administrative information) contains information about the present
  ## custody and availability of the manuscript, and also about the record
  ## description itself. 
  element ns1:adminInfo {
    (recordHist?, availability?, custodialHist?, model.noteLike?),
    att.global.attributes,
    empty
  }
recordHist =
  
  ## (recorded history) provides information about the source and
  ## revision status of the parent manuscript description itself. 
  element ns1:recordHist {
    (model.pLike+ | (source, change*)),
    att.global.attributes,
    empty
  }
source =
  
  ## describes the original source for the information contained with a manuscript description. 
  element ns1:source { macro.specialPara, att.global.attributes, empty }
custodialHist =
  
  ## (custodial history) contains a description of a manuscript's custodial history, either
  ## as running prose or as a series of dated custodial events. 
  element ns1:custodialHist {
    (model.pLike+ | custEvent+), att.global.attributes, empty
  }
custEvent =
  
  ## (custodial event) describes a single event during the custodial history of a manuscript.
  element ns1:custEvent {
    macro.specialPara,
    att.global.attributes,
    att.datable.attributes,
    att.typed.attributes,
    empty
  }
surrogates =
  
  ## contains information about any representations of the manuscript being described which
  ## may exist in the holding institution or elsewhere. 
  element ns1:surrogates {
    macro.specialPara, att.global.attributes, empty
  }
msPart =
  
  ## (manuscript part) contains information about an originally
  ## distinct manuscript or part of a manuscript, now forming part of a composite manuscript.
  element ns1:msPart {
    (altIdentifier,
     model.headLike*,
     (model.pLike+
      | (msContents?, physDesc?, history?, additional?, msPart*))),
    att.global.attributes,
    empty
  }
graph =
  
  ## encodes a graph, which is a collection of nodes, and arcs which
  ## connect the nodes.
  element ns1:graph {
    ((label, model.global*)?,
     (((node, model.global*)+, (arc, model.global*)*)
      | ((arc, model.global*)+, (node, model.global*)+))),
    att.global.attributes,
    
    ## describes the type of graph.
    ## Suggested values include: 1] undirected; 2] directed; 3] transitionNetwork; 4] transducer
    attribute type {
      
      ## undirected graph
      "undirected"
      | 
        ## directed graph
        "directed"
      | 
        ## a directed graph with distinguished initial and final nodes
        "transitionNetwork"
      | 
        ## a transition network with up to two labels on each arc
        "transducer"
      | xsd:Name
    }?,
    
    ## states the order of the graph, i.e., the number of its nodes.
    attribute order { data.count }?,
    
    ## states the size of the graph, i.e., the number of its arcs.
    attribute size { data.count }?,
    empty
  }
node =
  
  ## encodes a node, a possibly labeled point in a graph.
  element ns1:node {
    (label, label?)?,
    att.global.attributes,
    
    ## provides the value of a node, which is a feature structure or
    ## other analytic element.
    attribute value { data.pointer }?,
    
    ## provides a type for a node.
    ## Suggested values include: 1] initial; 2] final
    attribute type {
      
      ## initial node in a transition network
      "initial"
      | 
        ## final node in a transition network
        "final"
      | xsd:Name
    }?,
    
    ## (adjacent to) gives the identifiers of the nodes which are adjacent to the current node.
    attribute adjTo {
      list { data.pointer, data.pointer* }
    }?,
    
    ## (adjacent from) gives the identifiers of the nodes which are adjacent from the current
    ## node.
    attribute adjFrom {
      list { data.pointer, data.pointer* }
    }?,
    
    ## (adjacent) gives the identifiers of the nodes which are both adjacent to and
    ## adjacent from the current node.
    attribute adj {
      list { data.pointer, data.pointer* }
    }?,
    
    ## gives the in degree of the node, the number of nodes which
    ## are adjacent from the given node.
    attribute inDegree { data.count }?,
    
    ## gives the out degree of the node, the number of nodes which
    ## are adjacent to the given node.
    attribute outDegree { data.count }?,
    
    ## gives the degree of the node, the number of arcs with which
    ## the node is incident.
    attribute degree { data.count }?,
    empty
  }
arc =
  
  ## encodes an arc, the connection from one node to another in a graph.
  element ns1:arc {
    (label, label?)?,
    
    ## provides the value of an arc, which is a feature structure or other
    ##                            analytic element.
    attribute value { data.pointer }?,
    
    ## gives the identifier of the node which is adjacent from this arc.
    attribute from { data.pointer },
    
    ## gives the identifier of the node which is adjacent to this arc.
    attribute to { data.pointer },
    att.global.attributes,
    empty
  }
tree =
  
  ## encodes a tree, which is made up of a root, internal nodes,
  ## leaves, and arcs from root to leaves.
  element ns1:tree {
    (label?,
     ((leaf | iNode)*, root, (leaf | iNode)*)),
    att.global.attributes,
    
    ## gives the maximum number of children of the root and internal
    ## nodes of the tree.
    attribute arity { data.count }?,
    
    ## (ordered) indicates whether or not the tree is ordered, or if it is
    ## partially ordered.
    [ a:defaultValue = "true" ]
    attribute ord {
      
      ## indicates that all of the branching nodes of the tree are ordered.
      "true"
      | 
        ## indicates that some of the branching nodes of the tree are ordered
        ## and some are unordered.
        "partial"
      | 
        ## indicates that all of the branching nodes of the tree are
        ## unordered.
        "false"
    },
    
    ## gives the order of the tree, i.e., the number of its nodes.
    attribute order { data.count }?,
    empty
  }
root =
  
  ## (root node) represents the root node of a tree.
  element ns1:root {
    label?,
    att.global.attributes,
    
    ## provides the value of the root, which is a feature structure or
    ## other analytic element.
    attribute value { data.pointer }?,
    
    ## provides a list of identifiers of the elements which are the children of
    ## the root node.
    attribute children {
      list { data.pointer, data.pointer* }
    },
    
    ## (ordered) indicates whether or not the root is ordered.
    attribute ord { data.xTruthValue }?,
    
    ## gives the out degree of the root, the number of its children.
    attribute outDegree { data.count }?,
    empty
  }
iNode =
  
  ## (intermediate (or internal) node) represents an intermediate (or internal) node of a tree.
  element ns1:iNode {
    label?,
    att.global.attributes,
    
    ## provides the value of an intermediate node, which is a feature
    ## structure or other analytic element.
    attribute value { data.pointer }?,
    
    ## provides a list of identifiers of the elements which are the children of
    ## the intermediate node.
    attribute children {
      list { data.pointer, data.pointer* }
    },
    
    ## provides the identifier of the element which is the parent of this node.
    attribute parent { data.pointer }?,
    
    ## (ordered) indicates whether or not the internal node is ordered.
    attribute ord { data.xTruthValue }?,
    
    ## provides an identifier of
    ## the element which this node
    ## follows.
    attribute follow { data.pointer }?,
    
    ## gives the out degree of an intermediate node, the number of its
    ## children.
    attribute outDegree { data.count }?,
    empty
  }
leaf =
  
  ## encodes the leaves (terminal nodes) of a tree.
  element ns1:leaf {
    label?,
    att.global.attributes,
    
    ## provides a pointer to a feature
    ## structure or other analytic element.
    attribute value { data.pointer }?,
    
    ## provides the identifier of parent of a leaf.
    attribute parent { data.pointer }?,
    
    ## provides an identifier of an element which this leaf follows.
    attribute follow { data.pointer }?,
    empty
  }
eTree =
  
  ## (embedding tree) provides an alternative to tree element for representing ordered rooted tree structures.
  element ns1:eTree {
    (label?, (eTree | triangle | eLeaf | model.ptrLike)*),
    att.global.attributes,
    att.typed.attributes,
    
    ## provides the value of an embedding tree, which is a feature
    ## structure or other analytic element.
    attribute value { data.pointer }?,
    empty
  }
triangle =
  
  ## (underspecified embedding tree, so called because of its
  ##   characteristic shape when drawn) Provides for an underspecified eTree, that is, an eTree with
  ##   information left out.
  element ns1:triangle {
    (label?, (eTree | triangle | eLeaf)*),
    att.global.attributes,
    
    ## provides the value of a triangle, which is the identifier of a feature
    ## structure or other analytic element.
    attribute value { data.pointer }?,
    empty
  }
eLeaf =
  
  ## (leaf or terminal node of an embedding tree) provides explicitly for a leaf of an embedding tree, which may also
  ## be encoded with the eTree element.
  element ns1:eLeaf {
    (label?, model.ptrLike?),
    att.global.attributes,
    att.typed.attributes,
    
    ## provides the value of an embedding leaf, which is a feature
    ## structure or other analytic element.
    attribute value { data.pointer }?,
    empty
  }
forest =
  
  ## provides for groups of rooted trees.
  element ns1:forest {
    (tree | eTree | triangle)+,
    att.global.attributes,
    
    ## identifies the type of the forest.
    attribute type { data.enumerated }?,
    empty
  }
forestGrp =
  
  ## (forest group) provides for groups of forests.
  element ns1:forestGrp {
    forest+,
    att.global.attributes,
    
    ## identifies the type of the forest group.
    attribute type { data.enumerated }?,
    empty
  }
table =
  
  ## contains text displayed in tabular form, in rows and columns.
  element ns1:table {
    ((model.headLike | model.global)*, (row, model.global*)+),
    
    ## indicates the number of rows in the table.
    attribute rows { data.count }?,
    
    ## (columns) indicates the number of columns in each row of the table.
    attribute cols { data.count }?,
    att.global.attributes,
    empty
  }
row =
  
  ## contains one row of a table. 
  element ns1:row {
    cell+, att.global.attributes, att.tableDecoration.attributes, empty
  }
cell =
  
  ## contains one cell of a table. 
  element ns1:cell {
    macro.paraContent,
    att.global.attributes,
    att.tableDecoration.attributes,
    empty
  }
formula =
  
  ## contains a mathematical or other formula.
  element ns1:formula {
    (text | model.graphicLike)*,
    att.global.attributes,
    
    ## supplies the name of a previously defined notation used for the content of the element.
    attribute notation { data.code }?,
    empty
  }
figure =
  
  ## groups elements representing or containing graphic information such as an illustration or
  ##     figure.
  element ns1:figure {
    (model.headLike
     | model.pLike
     | figDesc
     | model.graphicLike
     | model.egLike
     | floatingText
     | model.global)*,
    att.global.attributes,
    att.placement.attributes,
    att.typed.attributes,
    empty
  }
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.
  element ns1:figDesc {
    macro.limitedContent, att.global.attributes, empty
  }
model.rdgLike = rdg
app =
  
  ## (apparatus entry) contains one entry in a critical apparatus, with an optional
  ## lemma and at least one reading.
  element ns1:app {
    (model.global*,
     (lem, model.global*, (wit, model.global*)?)?,
     ((model.rdgLike, model.global*, (wit, model.global*)?)
      | (rdgGrp, model.global*, (wit, model.global*)?))*)
    >> sch:pattern [
         id = "app-constraint-only1lem"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:app"
           "\x{a}" ~
           "               "
           sch:assert [
             test =
               "count( descendant::tei:lem[ generate-id(       current() ) = generate-id( ancestor::tei:app[1] ) ]) <       2"
             "Only one <lem> element may appear within a single\x{a}" ~
             "      apparatus entry, whether it appears outside a <rdgGrp>\x{a}" ~
             "      element or within it."
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    att.global.attributes,
    
    ## classifies the variation contained in this element according to
    ## some convenient typology.
    attribute type { data.enumerated }?,
    
    ## identifies the beginning of the lemma in the base text, if
    ## necessary.
    attribute from { data.pointer }?,
    
    ## identifies the endpoint of the lemma in the base text, if
    ## necessary.
    attribute to { data.pointer }?,
    
    ## (location) indicates the location of the variation, when the
    ## location-referenced method of apparatus markup is used.
    attribute loc {
      list { data.word, data.word* }
    }?,
    empty
  }
lem =
  
  ## (lemma) contains the lemma, or base text, of a textual variation.
  element ns1:lem {
    (text
     | model.gLike
     | model.phrase
     | model.inter
     | model.global
     | model.rdgPart)*,
    att.global.attributes,
    att.textCritical.attributes,
    empty
  }
rdg =
  
  ## (reading) contains a single reading within a textual variation.
  element ns1:rdg {
    (text
     | model.gLike
     | model.phrase
     | model.inter
     | model.global
     | model.rdgPart)*,
    att.global.attributes,
    att.textCritical.attributes,
    empty
  }
rdgGrp =
  
  ## (reading group) within a textual variation,
  ## groups two or more readings perceived to have a genetic
  ## relationship or other affinity.
  element ns1:rdgGrp {
    ((rdgGrp, wit?)
     | ((lem, wit?)?, (model.rdgLike, wit?))*)+,
    att.global.attributes,
    att.textCritical.attributes,
    empty
  }
witDetail =
  
  ## (witness detail) gives further information about a particular witness, or
  ## witnesses, to a particular reading.
  element ns1:witDetail {
    macro.phraseSeq,
    att.global.attributes,
    att.placement.attributes,
    att.responsibility.attributes,
    att.pointing.attributes,
    
    ## (witnesses) indicates the sigil or sigla for the witnesses to which the
    ## detail refers.
    attribute wit {
      list { data.pointer, data.pointer* }
    },
    
    ## describes the type of information given about the witness.
    attribute type { data.enumerated }?,
    empty
  }
wit =
  
  ## contains a list of one or more sigla of witnesses attesting a
  ## given reading, in a textual variation.
  element ns1:wit {
    macro.phraseSeq,
    att.global.attributes,
    att.rdgPart.attributes,
    empty
  }
listWit =
  
  ## (witness list) lists definitions for all the witnesses referred to by a critical
  ##   apparatus, optionally grouped hierarchically.
  element ns1:listWit {
    (model.headLike?, (witness | listWit)+),
    att.global.attributes,
    empty
  }
witness =
  
  ## contains either a description of a single witness referred to
  ## within the critical apparatus, or a list of witnesses which is to be
  ## referred to by a single sigil.
  element ns1:witness {
    macro.limitedContent, att.global.attributes, empty
  }
witStart =
  
  ## (fragmented witness start) indicates the beginning, or resumption, of the text of a
  ## fragmentary witness.
  element ns1:witStart {
    empty, att.global.attributes, att.rdgPart.attributes, empty
  }
witEnd =
  
  ## (fragmented witness end) indicates the end, or suspension, of the text of a fragmentary
  ## witness.
  element ns1:witEnd {
    empty, att.global.attributes, att.rdgPart.attributes, empty
  }
lacunaStart =
  
  ## indicates the beginning of a lacuna in the text of a mostly
  ## complete textual witness.
  element ns1:lacunaStart {
    empty, att.global.attributes, att.rdgPart.attributes, empty
  }
lacunaEnd =
  
  ## indicates the end of a lacuna in a mostly complete textual
  ## witness.
  element ns1:lacunaEnd {
    empty, att.global.attributes, att.rdgPart.attributes, empty
  }
variantEncoding =
  
  ## declares the method used to encode text-critical variants.
  element ns1:variantEncoding {
    empty,
    att.global.attributes,
    
    ## indicates which method is used to encode the apparatus of
    ## variants.
    attribute method {
      
      ## apparatus uses line numbers or other canonical reference scheme
      ## referenced in a base text.
      "location-referenced"
      | 
        ## apparatus indicates the precise locations of the beginning and
        ## ending of each lemma relative to a base text.
        "double-end-point"
      | 
        ## alternate readings of a passage are given in parallel in the
        ## text; no notion of a base text is necessary.
        "parallel-segmentation"
    },
    
    ## indicates whether the apparatus appears within the running text
    ## or external to it.
    attribute location {
      
      ## apparatus appears within the running text.
      "internal"
      | 
        ## apparatus appears outside the base text.
        "external"
    },
    empty
  }
model.rdgPart = wit | witStart | witEnd | lacunaStart | lacunaEnd
att.rdgPart.attributes = att.rdgPart.attribute.wit
att.rdgPart.attribute.wit =
  
  ## (witness or witnesses) contains a list of one or more sigla indicating the witnesses
  ## which begin or end at this point.
  attribute wit {
    list { data.pointer, data.pointer* }
  }?
att.textCritical.attributes =
  att.responsibility.attributes,
  att.textCritical.attribute.wit,
  att.textCritical.attribute.type,
  att.textCritical.attribute.cause,
  att.textCritical.attribute.varSeq,
  att.textCritical.attribute.hand
att.textCritical.attribute.wit =
  
  ## (witness or witnesses) contains a list of one or more pointers indicating the witnesses
  ## which attest to a given reading.
  attribute wit {
    list { data.pointer, data.pointer* }
  }?
att.textCritical.attribute.type =
  
  ## classifies the reading according to some useful typology.
  ## Sample values include: 1] substantive; 2] orthographic
  attribute type { data.enumerated }?
att.textCritical.attribute.cause =
  
  ## classifies the cause for the variant reading, according to
  ## any appropriate typology of possible origins.
  ## Sample values include: 1] homeoteleuton; 2] homeoarchy; 3] paleographicConfusion; 4] haplography; 5] dittography; 6] falseEmendation
  attribute cause { data.enumerated }?
att.textCritical.attribute.varSeq =
  
  ## (variant sequence) provides a number indicating the position of this reading in a
  ## sequence, when there is reason to presume a sequence to the variants
  ## on any one lemma.
  attribute varSeq { data.count }?
att.textCritical.attribute.hand =
  
  ## signifies the hand responsible for a particular reading in the
  ## witness.
  attribute hand { data.pointer }?
facsimile =
  
  ## contains a representation of some written source in the form of
  ## a set of images rather than as transcribed or encoded text.
  element ns1:facsimile {
    (front?, (model.graphicLike | surface)+, back?),
    att.global.attributes,
    att.declaring.attributes,
    empty
  }
att.global.facs.attributes = att.global.facs.attribute.facs
att.global.facs.attribute.facs =
  
  ## (facsimile) points to all or part of an image which corresponds with the content of the element.
  attribute facs {
    list { data.pointer, data.pointer* }
  }?
surface =
  
  ## defines a written surface in terms of a rectangular
  ## coordinate space, optionally  grouping one or more graphic representations of
  ## that space, and rectangular zones of interest
  ## within it.
  element ns1:surface {
    (model.global
     | model.glossLike
     | model.graphicLike
     | zone
     | patch)*,
    att.typed.attributes,
    att.global.attributes,
    att.coordinated.attributes,
    att.declaring.attributes,
    empty
  }
att.coordinated.attributes =
  att.coordinated.attribute.start,
  att.coordinated.attribute.ulx,
  att.coordinated.attribute.uly,
  att.coordinated.attribute.lrx,
  att.coordinated.attribute.lry,
  att.coordinated.attribute.points
att.coordinated.attribute.start =
  
  ## indicates the element within a transcription of the text
  ## containing at least the start of the writing represented by this zone
  ## or surface.
  attribute start { data.pointer }?
att.coordinated.attribute.ulx =
  
  ## gives the x coordinate value for the upper left corner of a
  ## rectangular space.
  attribute ulx { data.numeric }?
att.coordinated.attribute.uly =
  
  ## gives the y coordinate value for the upper left corner of a
  ## rectangular space.
  attribute uly { data.numeric }?
att.coordinated.attribute.lrx =
  
  ## gives the x coordinate value for the lower right corner of a
  ## rectangular space.
  attribute lrx { data.numeric }?
att.coordinated.attribute.lry =
  
  ## gives the y coordinate value for the lower right corner of a
  ## rectangular space.
  attribute lry { data.numeric }?
att.coordinated.attribute.points =
  
  ## identifies a non-rectangular area within the bounding box
  ## specified by the other attributes  by specifying
  ## a series of pairs of numbers, each of which gives the x,y coordinates
  ## of a point on a line defining the non-rectangular area.
  attribute points {
    list { data.point, data.point, data.point, data.point* }
  }?
zone =
  
  ## defines a rectangular area contained within a surface
  ## element. 
  element ns1:zone {
    (text | model.zonePart | model.global)*,
    
    ## indicates the amount by which this zone has been rotated clockwise,
    ##                            with respect to the normal orientation of the parent surface
    ##                            element as implied by the dimensions given in the msDesc section
    ##                            or by the coordinates of the surface itself. The orientation is
    ##                            expressed in arc degrees.
    [ a:defaultValue = "0" ] attribute rotate { data.count }?,
    att.coordinated.attributes,
    att.global.attributes,
    empty
  }
addSpan =
  
  ## (added span of text) marks the beginning of a longer sequence of text added by an
  ##   author, scribe, annotator or corrector (see also add).
  element ns1:addSpan {
    empty
    >> sch:pattern [
         id = "addSpan-constraint-spanTo"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:addSpan"
           "\x{a}" ~
           "               "
           sch:assert [
             test = "@spanTo"
             "The spanTo= attribute of "
             sch:name [ ]
             " is required."
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ]
    >> sch:pattern [
         id = "addSpan-constraint-spanTo_fr"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:addSpan"
           "\x{a}" ~
           "               "
           sch:assert [
             test = "@spanTo"
             "L'attribut spanTo est requis."
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    att.global.attributes,
    att.transcriptional.attributes,
    att.placement.attributes,
    att.typed.attributes,
    att.spanning.attributes,
    empty
  }
damage =
  
  ## contains an area of damage to the text witness.
  element ns1:damage {
    macro.paraContent,
    att.global.attributes,
    att.typed.attributes,
    att.damaged.attributes,
    empty
  }
damageSpan =
  
  ## (damaged span of text) marks the beginning of a longer sequence of text which is
  ##   damaged in some way but still legible.
  element ns1:damageSpan {
    empty
    >> sch:pattern [
         id = "damageSpan-constraint-spanTo"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:damageSpan"
           "\x{a}" ~
           "               "
           sch:assert [
             test = "@spanTo"
             "The spanTo= attribute of\x{a}" ~
             "	"
             sch:name [ ]
             " is required."
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ]
    >> sch:pattern [
         id = "damageSpan-constraint-spanTo_fr"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:damageSpan"
           "\x{a}" ~
           "               "
           sch:assert [
             test = "@spanTo"
             "L'attribut spanTo est requis."
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    att.global.attributes,
    att.damaged.attributes,
    att.typed.attributes,
    att.spanning.attributes,
    empty
  }
delSpan =
  
  ## (deleted span of text) marks the beginning of a longer sequence of text deleted,
  ## marked as deleted, or otherwise signaled as superfluous or spurious by an
  ## author, scribe, annotator, or corrector.
  element ns1:delSpan {
    empty
    >> sch:pattern [
         id = "delSpan-constraint-spanTo"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:delSpan"
           "\x{a}" ~
           "               "
           sch:assert [
             test = "@spanTo"
             "The spanTo= attribute of "
             sch:name [ ]
             "\x{a}" ~
             "      is required."
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ]
    >> sch:pattern [
         id = "delSpan-constraint-spanTo_fr"
         "\x{a}" ~
         "            "
         sch:rule [
           context = "tei:delSpan"
           "\x{a}" ~
           "               "
           sch:assert [
             test = "@spanTo"
             "L'attribut spanTo est requis."
           ]
           "\x{a}" ~
           "            "
         ]
         "\x{a}" ~
         "         "
       ],
    att.global.attributes,
    att.transcriptional.attributes,
    att.typed.attributes,
    att.spanning.attributes,
    empty
  }
ex =
  
  ## (editorial expansion) contains a sequence of letters added by an editor or
  ##   transcriber when expanding an abbreviation.
  element ns1:ex {
    macro.xtext, att.global.attributes, att.editLike.attributes, empty
  }
fw =
  
  ## (forme work) contains a running head (e.g. a header, footer), catchword, or
  ##   similar material appearing on the current page.
  element ns1:fw {
    macro.phraseSeq,
    att.global.attributes,
    att.placement.attributes,
    
    ## classifies the material encoded according to some useful typology.
    ## Sample values include: 1] header; 2] footer; 3] pageNum(page number) ; 4] lineNum(line number) ; 5] sig(signature) ; 6] catch(catchword) 
    attribute type { data.enumerated }?,
    empty
  }
gb =
  
  ##  (gathering begins) marks the point in a transcribed codex at which a new
  ##   gathering or quire begins.
  element ns1:gb {
    empty,
    att.global.attributes,
    att.typed.attributes,
    att.spanning.attributes,
    att.breaking.attributes,
    empty
  }
handNotes =
  
  ## contains one or more handNote elements documenting the
  ## different hands identified within the source texts.
  element ns1:handNotes { handNote+, att.global.attributes, empty }
handShift =
  
  ## marks the beginning of a sequence of text written in a new
  ## hand, or the beginning of a scribal stint.
  element ns1:handShift {
    empty,
    att.global.attributes,
    att.handFeatures.attributes,
    att.responsibility.attributes,
    
    ## identifies the new hand.
    attribute new { data.pointer }?,
    empty
  }
am =
  
  ## (abbreviation marker) contains a sequence of letters or signs present in an
  ##   abbreviation which are omitted or replaced in the expanded form of
  ##   the abbreviation.
  element ns1:am {
    (text | model.gLike | model.pPart.transcriptional)*,
    att.global.attributes,
    att.editLike.attributes,
    empty
  }
restore =
  
  ## indicates restoration of text to an earlier state by
  ## cancellation of an editorial or authorial marking or instruction.
  element ns1:restore {
    macro.paraContent,
    att.global.attributes,
    att.transcriptional.attributes,
    att.typed.attributes,
    empty
  }
space =
  
  ## indicates the location of a significant space in the copy text.
  element ns1:space {
    model.glossLike*,
    att.global.attributes,
    att.dimensions.attributes,
    
    ## (dimension) indicates whether the space is horizontal or vertical.
    attribute dim {
      
      ## the space is horizontal.
      "horizontal"
      | 
        ## the space is vertical.
        "vertical"
    }?,
    
    ## (responsible party) indicates the individual responsible for identifying and measuring
    ## the space.
    attribute resp { data.pointer }?,
    empty
  }
subst =
  
  ## (substitution) groups one or more deletions with one or more additions when
  ##   the combination is to be regarded as a single intervention in the text.
  element ns1:subst {
    (model.pPart.transcriptional,
     (text | model.pPart.transcriptional)+),
    
    ## The type of substitution.
    attribute type { data.name }?,
    att.global.attributes,
    att.transcriptional.attributes,
    empty
  }
supplied =
  
  ## signifies text supplied by the transcriber or editor for any
  ##   reason, typically because the original cannot be read because of
  ##   physical damage or loss to the original.
  element ns1:supplied {
    macro.paraContent,
    att.global.attributes,
    att.editLike.attributes,
    
    ## indicates why the text has had to be supplied.
    attribute reason {
      list { data.word, data.word* }
    }?,
    empty
  }
surplus =
  
  ##  (Texte superflu) marks text present in the source which the editor believes to
  ##   be superfluous or redundant.
  element ns1:surplus {
    macro.paraContent,
    att.global.attributes,
    att.editLike.attributes,
    
    ## indicates the grounds for believing this text to be superfluous.
    attribute reason {
      list { data.word, data.word* }
    }?,
    empty
  }
g =
  
  ## (character or glyph) represents a non-standard character or glyph.
  element ns1:g {
    text,
    att.global.attributes,
    att.typed.attributes,
    
    ## points to a description of the character or glyph intended.
    attribute ref { data.pointer }?,
    empty
  }
char =
  
  ## (character) provides descriptive information about a character. 
  element ns1:char {
    (charName?,
     model.glossLike*,
     charProp*,
     mapping*,
     figure*,
     model.graphicLike*,
     model.noteLike*),
    att.global.attributes,
    empty
  }
charName =
  
  ## (character name) contains the name of a character, expressed following Unicode conventions. 
  element ns1:charName { text, att.global.attributes, empty }
charProp =
  
  ## (character property) provides a name and value for some property of the parent character or glyph. 
  element ns1:charProp {
    ((unicodeName | localName), value),
    att.global.attributes,
    att.typed.attributes,
    empty
  }
charDecl =
  
  ## (character declarations) provides information about nonstandard characters and glyphs. 
  element ns1:charDecl {
    (desc?, (char | glyph)+),
    att.global.attributes,
    empty
  }
glyph =
  
  ## (character glyph) provides descriptive information about a character glyph. 
  element ns1:glyph {
    (glyphName?,
     model.glossLike*,
     charProp*,
     mapping*,
     figure*,
     model.graphicLike*,
     model.noteLike*),
    att.global.attributes,
    empty
  }
glyphName =
  
  ## (character glyph name) contains the name of a glyph, expressed following Unicode conventions for character names. 
  element ns1:glyphName { text, att.global.attributes, empty }
localName =
  
  ## (locally-defined property name) contains a locally defined name for some property. 
  element ns1:localName { text, att.global.attributes, empty }
mapping =
  
  ## (character mapping) contains one or more
  ##	 characters which are related to the parent character or glyph
  ##	 in some respect, as specified by the type
  ##	 attribute.
  ##
  element ns1:mapping {
    macro.xtext, att.global.attributes, att.typed.attributes, empty
  }
unicodeName =
  
  ## (unicode property name) contains the name of a registered Unicode normative or informative property. 
  element ns1:unicodeName {
    text,
    att.global.attributes,
    
    ## specifies the version number of the Unicode Standard in which this property name is
    ##         defined.
    attribute version { data.version }?,
    empty
  }
value =
  
  ## (value) contains a single value for some property, attribute, or other
  ##   analysis.
  element ns1:value { macro.xtext, att.global.attributes, empty }
persName =
  
  ## (personal name) contains a proper noun or proper-noun phrase referring to a person, possibly including any
  ##     or all of the person's forenames, surnames, honorifics, added names, etc.
  element ns1:persName {
    macro.phraseSeq,
    att.global.attributes,
    att.datable.attributes,
    att.editLike.attributes,
    att.personal.attributes,
    att.typed.attributes,
    empty
  }
placeName =
  
  ## contains an absolute or relative place name. 
  element ns1:placeName {
    macro.phraseSeq,
    att.global.attributes,
    att.naming.attributes,
    att.typed.attributes,
    att.datable.attributes,
    att.editLike.attributes,
    empty
  }
country =
  
  ## (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.
  element ns1:country {
    macro.phraseSeq,
    att.global.attributes,
    att.naming.attributes,
    att.typed.attributes,
    att.datable.attributes,
    empty
  }
settlement =
  
  ## contains the name of a settlement such as a city, town, or village identified as a single geo-political or administrative unit.
  element ns1:settlement {
    macro.phraseSeq,
    att.global.attributes,
    att.naming.attributes,
    att.typed.attributes,
    att.datable.attributes,
    empty
  }
affiliation =
  
  ## (affiliation) contains an informal description of a person's present or past affiliation with some
  ##         organization, for example an employer or sponsor.
  element ns1:affiliation {
    macro.phraseSeq,
    att.global.attributes,
    att.editLike.attributes,
    att.datable.attributes,
    att.naming.attributes,
    empty
  }
climate =
  
  ## (climate) contains information about the physical climate of a place.
  element ns1:climate {
    (model.headLike*,
     (model.pLike+ | model.labelLike+),
     (model.noteLike | model.biblLike)*,
     climate*),
    att.global.attributes,
    att.datable.attributes,
    att.editLike.attributes,
    att.naming.attributes,
    att.typed.attributes,
    empty
  }
listEvent =
  
  ## (list of events) contains a list of descriptions, each of which provides information
  ##     about an identifiable event. 
  element ns1:listEvent {
    (model.headLike*, listEvent+, (relation | relationGrp)*),
    att.global.attributes,
    att.typed.attributes,
    att.declarable.attributes,
    empty
  }
relationGrp =
  
  ## (relation group) provides information about relationships identified amongst people, places, and
  ##     organizations, either informally as prose or as formally expressed relation links. 
  element ns1:relationGrp {
    (model.pLike+ | relation+),
    att.global.attributes,
    att.typed.attributes,
    empty
  }
relation =
  
  ## (relationship) describes any kind of relationship or linkage amongst a specified group of participants.
  element ns1:relation {
    (desc?)
    >> sch:pattern [
         id = "relation-constraint-activemutual"
         "\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 = "relation-constraint-activepassive"
         "\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}" ~
         "         "
       ],
    att.global.attributes,
    att.datable.attributes,
    att.editLike.attributes,
    att.naming.attributes,
    
    ## categorizes the relationship in some respect, e.g. as social, personal or other.
    ## Suggested values include: 1] social; 2] personal; 3] other
    [ a:defaultValue = "personal" ]
    attribute type {
      
      ## relationship concerned with social roles
      "social"
      | 
        ## relationship concerned with personal roles, e.g. kinship, marriage, etc.
        "personal"
      | 
        ## other kinds of relationship
        "other"
      | xsd:Name
    }?,
    
    ## supplies a name for the kind of relationship of which this is an instance.
    attribute name { data.enumerated },
    
    ## identifies the passive participants in a non-mutual relationship.
    attribute passive {
      list { data.pointer, data.pointer* }
    }?,
    (
     ## identifies the active participants in a non-mutual relationship, or all the participants in a mutual
     ##                     one.
     attribute active {
       list { data.pointer, data.pointer* }
     }?
     | 
       ## supplies a list of participants amongst all of whom the relationship holds equally.
       attribute mutual {
         list { data.pointer, data.pointer* }
       }?),
    empty
  }
listNym =
  
  ## (list of canonical names) contains a list of nyms, that is, standardized names for any thing. 
  element ns1:listNym {
    (model.headLike*, listNym+, (relationGrp | relation)*),
    att.global.attributes,
    att.typed.attributes,
    att.declarable.attributes,
    empty
  }
att.datable.iso.attributes =
  att.datable.iso.attribute.when-iso,
  att.datable.iso.attribute.notBefore-iso,
  att.datable.iso.attribute.notAfter-iso,
  att.datable.iso.attribute.from-iso,
  att.datable.iso.attribute.to-iso
att.datable.iso.attribute.when-iso =
  
  ## supplies the value of a date or time in a standard form.
  attribute when-iso { data.temporal.iso }?
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 { data.temporal.iso }?
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 { data.temporal.iso }?
att.datable.iso.attribute.from-iso =
  
  ## indicates the starting point of the period in standard form.
  attribute from-iso { data.temporal.iso }?
att.datable.iso.attribute.to-iso =
  
  ## indicates the ending point of the period in standard form.
  attribute to-iso { data.temporal.iso }?
model.zonePart =
  model.segLike
  | model.hiLike
  | model.pPart.msdesc
  | model.pPart.editorial
  | model.pPart.transcriptional
  | model.gLike
  | table
  | zone
  | line
model.linePart =
  model.segLike
  | model.hiLike
  | model.pPart.msdesc
  | model.pPart.editorial
  | model.pPart.transcriptional
  | model.gLike
att.staged.attributes = att.staged.attribute.stage
att.staged.attribute.stage =
  
  ## points to one or more stageNote elements which contain a
  ##                            description of a text-stage to which the editors think the alteration/
  ##                            text passage marked by the element bearing this attribute (and its
  ##                            children) belongs.
  attribute stage {
    list { data.pointer, data.pointer* }
  }?
att.repeatable.attributes = att.repeatable.attribute.cause
att.repeatable.attribute.cause =
  
  ## documents the presumed cause of the repeated act of writing.
  attribute cause {
    
    ## repeated for the purpose of fixation
    "fix"
    | 
      ## repeated to clarify a previously illegible or badly written text
      ##                                  or mark
      "unclear"
  }?
document =
  
  ## contains a document-centric transcription of a primary source, providing
  ##                      topographical information as well as transcription
  element ge:document {
    (surface, model.global.edit*)+, att.global.attributes, empty
  }
patch =
  
  ## contains a part of a written surface which was originally physically
  ##                      distinct but became attached to it at the time that one or more written zones
  ##                      were created.
  element ge:patch {
    (text | model.global | zone)*,
    att.coordinated.attributes,
    att.global.attributes,
    att.typed.attributes,
    
    ## Describe the method by which a patch is or was connected to the main
    ##                            surface
    ## Sample values include: 1] glued; 2] pinned; 3] sewn
    attribute binder { data.enumerated }?,
    
    ## indicates whether the patch is attached and folded in such a way as to
    ##                            provide two writing surfaces
    attribute flipping { data.truthValue }?,
    
    ## height of the patch
    attribute height { data.outputMeasurement }?,
    
    ## width of the patch
    attribute width { data.outputMeasurement }?,
    empty
  }
line =
  
  ## contains the transcription of a topographic line in the source
  ##                      document
  element ge:line {
    (text | model.global | model.linePart)*,
    att.typed.attributes,
    att.global.attributes,
    empty
  }
stageNotes =
  
  ## contains one or more descriptions of the stages which have been identified
  ##                      in the genesis of a text.
  element ge:stageNotes {
    (stageNotes | stageNote)+,
    att.global.attributes,
    att.typed.attributes,
    
    ## indicates whether or not the order in which
    ##			the children of this element are presented is significant
    [ a:defaultValue = "true" ] attribute ordered { data.truthValue }?,
    empty
  }
stageNote =
  
  ## documents a particular stage in the genesis of a text.
  element ge:stageNote {
    (macro.specialPara | stageNote)*,
    att.datable.attributes,
    att.editLike.attributes,
    att.global.attributes,
    att.typed.attributes,
    
    ## points to one or more elements that belong to this stage.
    attribute target {
      list { data.pointer, data.pointer* }
    }?,
    empty
  }
mod =
  
  ## represents any kind of modification identified within a text at a documentary level.
  element ge:mod {
    macro.paraContent,
    att.global.attributes,
    att.transcriptional.attributes,
    att.typed.attributes,
    empty
  }
modSpan =
  
  ## represents any kind of modification identified
  ##		  within a text at a documentary level, where this
  ##		  extends over other XML markup constructs in the document.
  element ge:modSpan {
    empty,
    att.spanning.attributes,
    att.global.attributes,
    att.transcriptional.attributes,
    att.typed.attributes,
    empty
  }
transposeGrp =
  
  ## supplies a list of transpositions indicated at some point in the text,
  ##                      typically by means of metamarks.
  element ge:transposeGrp { transpose+, att.global.attributes, empty }
transpose =
  
  ##  describes a single textual transposition as an ordered list of at least two
  ##                      pointers specifying the order in which the elements indicated should be
  ##                      re-combined. 
  element ge:transpose { (ptr, ptr+), att.global.attributes, empty }
undo =
  
  ## points to any marked-up intervention in a
  ##		  text which has subsequently been
  ##		  marked as to be cancelled or undone.
  element ge:undo {
    empty,
    att.global.attributes,
    att.spanning.attributes,
    att.transcriptional.attributes,
    
    ## points to the element representing the intervention to be undone.
    attribute target { data.pointer }?,
    empty
  }
redo =
  
  ## points to a marked-up intervention in a
  ##		  text which  has subsequently been
  ##		  marked for a second time in a different way. 
  element ge:redo {
    empty,
    att.global.attributes,
    att.repeatable.attributes,
    att.spanning.attributes,
    att.transcriptional.attributes,
    
    ## points to the element representing
    ##			the intervention which is to be repeated.
    attribute target { data.pointer }?,
    empty
  }
rewrite =
  
  ## contains a sequence of text which has been rewritten by the author, for
  ##                      example by over-inking, to clarify or fix it.
  element ge:rewrite {
    macro.paraContent,
    att.global.attributes,
    att.repeatable.attributes,
    att.spanning.attributes,
    att.transcriptional.attributes,
    empty
  }
metaMark =
  
  ## contains any textual or graphical mark in 
  ##		  a written text intended to signal how the text
  ##		  should be read and not forming part of the text itself.
  element ge:metaMark {
    macro.specialPara,
    att.spanning.attributes,
    att.placement.attributes,
    att.global.attributes,
    
    ## describes the function (e.g. add, delete, alternate) of the
    ##                            mark.
    attribute function { data.word }?,
    
    ## indicates the element(s) to which the function of the meta-mark
    ##                            refers. Pointers are separated by a white space
    attribute target {
      list { data.pointer, data.pointer* }
    }?,
    empty
  }
used =
  
  ## a  passage  of text which has been marked as used, usually
  ##                      meaning that it  has been transcribed to a fair copy.
  element ge:used {
    empty, att.spanning.attributes, att.global.attributes, empty
  }
geneticGrp =
  
  ## Group texts and document which are somehow related in a genetic
  ##                      process
  element ge:geneticGrp { geneticNote+, att.global.attributes, empty }
geneticNote =
  
  ## describes a particular set of documents or document fragments which are
  ##                      considered to be mutually associated in some way.
  element ge:geneticNote {
    linkGrp+,
    model.pLike+,
    att.typed.attributes,
    att.editLike.attributes,
    att.global.attributes,
    empty
  }
\include =
  
  ## The W3C XInclude element
  element include {
    fallback?,
    
    ## pointer to the resource being included
    attribute href { data.pointer }?,
    
    ##
    [ a:defaultValue = "xml" ]
    attribute parse {
      
      ##
      "xml"
      | 
        ##
        "text"
    }?,
    
    ##
    attribute xpointer { text }?,
    
    ##
    attribute encoding { text }?,
    
    ##
    attribute accept { text }?,
    
    ##
    attribute accept-charset { text }?,
    
    ##
    attribute accept-language { text }?,
    empty
  }
fallback =
  
  ## Wrapper for fallback elements if an XInclude fails
  element fallback { AnyThing }
start = TEI | teiCorpus
back to top