default namespace = "http://www.tei-c.org/ns/1.0"
namespace a = "http://relaxng.org/ns/compatibility/annotations/1.0"
namespace rng = "http://relaxng.org/ns/structure/1.0"
namespace teix = "http://www.tei-c.org/ns/Examples"

# Schema generated 2006-01-30T20:27:07Z

# 
# This template file is freely available and you are
#           hereby authorised to copy, modify, and redistribute it in
#           any way without further reference or permissions.
# When making such modifications, you are strongly
#           recommended to change the present text to include an
#           accurate statement of the licencing conditions applicable
#           to your modified text.

# Set predeclared macros
data.certainty = "high" | "medium" | "low" | "unknown"
data.probability = xsd:double { minInclusive = "0" maxInclusive = "1" }
data.numeric = xsd:double | xsd:decimal
data.count = xsd:nonNegativeInteger
data.temporal =
  xsd:date
  | xsd:gYear
  | xsd:gMonth
  | xsd:gDay
  | xsd:gYearMonth
  | xsd:gMonthDay
  | xsd:time
  | xsd:dateTime
  | xsd:token {
      pattern =
        "(-?[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T)?([01][0-9]|2[0-3])(:[0-5][0-9])?(Z|[+\-]((0[0-9]|1[0-3]):[0-5][0-9]|14:00))?"
    }
data.duration = xsd:duration
data.truthValue = xsd:boolean
data.xTruthValue = xsd:boolean | "unknown" | "inapplicable"
data.language = xsd:language
data.sex = "0" | "1" | "2" | "9"
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.pointer = xsd:anyURI
data.pointers = list { data.pointer+ }
data.code = xsd:anyURI
data.enumerated = xsd:token
data.key = xsd:string
data.word = xsd:token { pattern = "(\p{L}|\p{N}|\p{P}|\p{S})+" }
data.names = list { data.name+ }
data.words = list { data.word+ }
data.name = xsd:Name
macro.bodyPart.div = \div, (\div | divGen | model.global)*
macro.bodyPart.div0 = div0, (div0 | divGen | model.global)*
macro.bodyPart.div1 = div1, (div1 | divGen | model.global)*
macro.bodyPart.pre = (divGen, model.global*)*
macro.bodyPart.main =
  macro.bodyPart.pre,
  (macro.bodyPart.div | macro.bodyPart.div0 | macro.bodyPart.div1)
mix.drama = notAllowed
mix.spoken = notAllowed
mix.dictionaries = notAllowed
macro.component =
  model.common | mix.drama | mix.spoken | mix.dictionaries
macro.componentSeq = (macro.component | model.global)*
macro.paraContent =
  (text | model.gLike | model.phrase | model.inter | model.global)*
macro.phraseSeq = (text | model.gLike | model.phrase | model.global)*
macro.specialPara =
  (text
   | model.gLike
   | model.phrase
   | model.inter
   | model.divPart
   | model.global)*
macro.xtext = (text | model.gLike)*
macro.fileDescPart =
  titleStmt,
  editionStmt?,
  extent?,
  publicationStmt,
  seriesStmt?,
  notesStmt?
macro.glossSeq = altIdent?, equiv*, gloss*, desc*
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 { data.pointers }?
att.datable.attributes =
  att.datable.attribute.notBefore, att.datable.attribute.notAfter
att.datable.attribute.notBefore =
  
  ## specifies the earliest possible date for the event in
  ##	standard form, e.g. yyyy-mm-dd.
  attribute notBefore { data.temporal }?
att.datable.attribute.notAfter =
  
  ## specifies the latest possible date for the event in
  ##	standard form, e.g. yyyy-mm-dd.
  attribute notAfter { data.temporal }?
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 { data.pointers }?
att.divLike.attributes =
  att.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part
att.divLike.attribute.type =
  
  ## specifies a name conventionally used for this level of
  ##		subdivision, e.g. act, volume, book,
  ##		section, canto, etc.
  attribute type { data.enumerated }?
att.divLike.attribute.org =
  
  ## 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 {
    
    ## (the division is incomplete in some respect) 
    "Y"
    | 
      ## (either the division is complete, or no claim is made as to its completeness.) 
      "N"
    | 
      ## (the initial part of an incomplete division) 
      "I"
    | 
      ## (a medial part of an incomplete division) 
      "M"
    | 
      ## (the final part of an incomplete division) 
      "F"
  }?
att.interpLike.attributes =
  att.interpLike.attribute.resp,
  att.interpLike.attribute.type,
  att.interpLike.attribute.inst
att.interpLike.attribute.resp =
  
  ## indicates who is responsible for the interpretation.
  attribute resp { data.pointer }?
att.interpLike.attribute.type =
  
  ## indicates what kind of phenomenon is being noted in the passage.
  attribute type { data.enumerated }?
att.interpLike.attribute.inst =
  
  ## points to instances of the analysis or interpretation represented
  ## by the current element.
  attribute inst { data.pointers }?
att.editLike.attributes =
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence
att.editLike.attribute.cert =
  
  ## signifies the degree of certainty associated with the
  ##	intervention or interpretation.
  attribute cert { data.enumerated }?
att.editLike.attribute.resp =
  
  ## indicates the agency responsible for the
  ##	intervention or interpretation, for example an editor or transcriber.
  attribute resp { data.pointer }?
att.editLike.attribute.evidence =
  
  ## indicates the nature of the evidence supporting the reliability or
  ##   accuracy of the intervention or interpretation.
  attribute evidence { data.enumerated }?
att.global.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase
att.global.attribute.xmlid =
  
  ## provides a unique identifier for the element bearing the
  ##       attribute.
  attribute xml:id { xsd:ID }?
att.global.attribute.n =
  
  ## gives a number (or other label) for an element, which is
  ##       not necessarily unique within the document.
  attribute n { data.words }?
att.global.attribute.xmllang =
  
  ## indicates the language of the element content using the
  ##       codes from RFC
  ##       3066
  attribute xml:lang { data.language }?
att.global.attribute.rend =
  
  ## indicates how the element in question was rendered or
  ##	presented in the source text.
  attribute rend { data.words }?
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.measured.attributes =
  att.measured.attribute.unit, att.measured.attribute.scope
att.measured.attribute.unit =
  
  ## names the units used for the measurement.
  attribute unit { data.enumerated }?
att.measured.attribute.scope =
  
  ## specifies the applicability of this measurement, where
  ##    more than one object is being measured.
  attribute scope { data.enumerated }?
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.
  attribute unit { data.enumerated }?
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 { data.words }?
att.naming.attributes = att.naming.attribute.key
att.naming.attribute.key =
  
  ## provides a means of locating a full definition for the entity being named
  ## such as a database record key or URI.
  attribute key { data.key }?
att.segLike.attributes =
  att.segLike.attribute.type,
  att.segLike.attribute.function,
  att.segLike.attribute.part
att.segLike.attribute.type =
  
  ## characterizes the type of segment.
  attribute type { data.enumerated }?
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 {
    
    ## (the segment is incomplete in some respect) 
    "Y"
    | 
      ## (either the segment is complete, or no claim is made as to
      ## its completeness) 
      "N"
    | 
      ## (the initial part of an incomplete segment) 
      "I"
    | 
      ## (a medial part of an incomplete segment) 
      "M"
    | 
      ## (the final part of an incomplete segment) 
      "F"
  }?
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.timed.attributes =
  att.timed.attribute.start,
  att.timed.attribute.end,
  att.timed.attribute.dur
att.timed.attribute.start =
  
  ## indicates the location within a temporal alignment
  ##       at which this element begins.
  attribute start { data.pointer }?
att.timed.attribute.end =
  
  ## indicates the location within a temporal alignment at which
  ##    this element ends.
  attribute end { data.pointer }?
att.timed.attribute.dur =
  
  ## indicates the length of this element in time, using either
  ##          specific units or the units specified on the associated temporal
  ##          alignment.
  ##    
  attribute dur { xsd:duration }?
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.word }?
att.typed.attribute.subtype =
  
  ## provides a sub-categorization of the element, if needed
  attribute subtype { data.word }?
model.nameLike.agent = name | persName | orgName
model.segLike = seg
model.hiLike =
  foreign
  | emph
  | hi
  | distinct
  | mentioned
  | soCalled
  | gloss
  | term
  | title
model.dateLike = date | dateRange | dateStruct
model.timeLike = time | timeRange | timeStruct
model.measureLike = num | measure
model.graphicLike = graphic | binaryObject
model.pPart.msdesc =
  handShift
  | catchwords
  | dimensions
  | heraldry
  | locus
  | material
  | origDate
  | origPlace
  | secFol
  | signatures
  | watermark
model.pPart.edit =
  sic
  | corr
  | choice
  | reg
  | orig
  | add
  | del
  | unclear
  | abbr
  | expan
  | restore
  | supplied
  | damage
  | space
model.ptrLike = ptr | ref
model.lPart = notAllowed
model.global.meta =
  index | link | linkGrp | timeline | join | joinGrp | alt | altGrp
model.milestoneLike = milestone | pb | lb | cb | fw
model.gLike = notAllowed
model.oddDecl = notAllowed
model.oddRef = notAllowed
model.oddPhr = notAllowed
model.qLike = q | quote | cit
model.biblLike = bibl | biblItem | biblStruct | biblFull | msDescription
model.listLike = \list | listBibl
model.noteLike = note
model.stageLike = stage
model.complexVal = notAllowed
model.singleVal = notAllowed
model.entryParts.top = note
model.global.edit = gap | addSpan | delSpan
model.divPart = p | l | lg | sp | ab
model.blockLike = seg
model.pLike = p | ab
model.publicationStmtPart =
  address
  | date
  | publisher
  | pubPlace
  | distributor
  | authority
  | idno
  | availability
model.glossLike = altIdent | desc | equiv | gloss
model.quoteLike = quote
model.respLike = author | editor | respStmt
model.personPart = note | bibl | persName
model.divWrapper.bottom = trailer | closer | signed
model.divWrapper =
  head
  | byline
  | dateline
  | argument
  | epigraph
  | opener
  | salute
  | docAuthor
  | docDate
model.frontPart.drama = notAllowed
model.pLike.front =
  head
  | byline
  | argument
  | epigraph
  | docTitle
  | titlePart
  | docAuthor
  | docEdition
  | docImprint
  | docDate
model.titlepagePart =
  graphic
  | binaryObject
  | byline
  | epigraph
  | docTitle
  | titlePart
  | docAuthor
  | imprimatur
  | docEdition
  | docImprint
  | docDate
model.msItemPart =
  model.respLike
  | q
  | note
  | bibl
  | listBibl
  | title
  | colophon
  | explicit
  | filiation
  | finalRubric
  | incipit
  | msItem
  | msItemStruct
  | rubric
  | textLang
  | decoNote
model.choicePart =
  sic | corr | reg | orig | unclear | abbr | expan | seg
model.lLike = l
model.recordingPart = model.dateLike | respStmt | equipment | broadcast
model.imprintPart = publisher | biblScope | pubPlace
model.catDescPart = notAllowed
model.nameLike = model.nameLike.agent | rs | placeName | geogName
model.global =
  model.global.meta | model.milestoneLike | model.global.edit | anchor
model.featureVal = model.complexVal | model.singleVal
model.common =
  model.oddDecl
  | model.oddRef
  | model.qLike
  | model.biblLike
  | model.listLike
  | model.noteLike
  | model.divPart
  | label
model.biblPart =
  model.respLike
  | model.imprintPart
  | note
  | series
  | edition
  | extent
  | distributor
  | idno
  | msIdentifier
model.frontPart = model.frontPart.drama | divGen | titlePage
model.addrPart = model.nameLike | addrLine | street | postCode | postBox
model.pPart.data =
  model.dateLike
  | model.timeLike
  | model.measureLike
  | model.nameLike
  | address
model.inter =
  model.oddDecl
  | model.oddRef
  | model.qLike
  | model.biblLike
  | model.listLike
  | model.noteLike
  | model.stageLike
  | label
  | \text
model.phrase =
  model.segLike
  | model.hiLike
  | model.graphicLike
  | model.pPart.msdesc
  | model.pPart.edit
  | model.ptrLike
  | model.lPart
  | model.oddPhr
  | model.pPart.data
p =
  
  ## (paragraph) marks paragraphs in prose.
  element p { p.content, p.attributes }
p.content = macro.paraContent
p.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
foreign =
  
  ## (foreign) identifies a word or phrase as belonging to some language other
  ## than that of the surrounding text. 
  element foreign { foreign.content, foreign.attributes }
foreign.content = macro.phraseSeq
foreign.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
emph =
  
  ## (emphasized) marks words or phrases which are stressed or emphasized for
  ## linguistic or rhetorical effect.
  element emph { emph.content, emph.attributes }
emph.content = macro.paraContent
emph.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
hi =
  
  ## (highlighted) marks a word or phrase as graphically distinct from the
  ## surrounding text, for reasons concerning which no claim is
  ## made. 
  element hi { hi.content, hi.attributes }
hi.content = macro.paraContent
hi.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
distinct =
  
  ## (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 distinct { distinct.content, distinct.attributes }
distinct.content = macro.phraseSeq
distinct.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## 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
q =
  
  ## (quoted speech, thought, or writing) contains material which is
  ## marked as (ostensibly) quoted from elsewhere; in narrative, this element is used to mark direct or
  ## indirect speech; in dictionaries, it ay be used to mark
  ## real or contrived examples of usage; in manuscript descriptions or
  ## other metadata, to mark extracts quoted from the source being documented.
  element q { q.content, q.attributes }
q.content = macro.specialPara
q.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.ascribed.attribute.who,
  
  ## may be used to indicate whether the quoted matter is spoken
  ## or thought, or to characterize it more finely.
  attribute type { data.enumerated }?,
  
  ## may be used to indicate whether the quoted matter is regarded
  ## as direct or indirect speech.
  [ a:defaultValue = "unknown" ]
  attribute direct {
    
    ## (speech or thought is represented directly.) 
    "true"
    | 
      ## (speech or thought is represented indirectly,
      ## e.g. by use of a marked verbal aspect.) 
      "false"
    | 
      ## (no claim is made.) 
      "unknown"
  }?,
  empty
quote =
  
  ## (quotation) contains a phrase or passage attributed by the narrator or
  ## author to some agency external to the text. 
  element quote { quote.content, quote.attributes }
quote.content = macro.specialPara
quote.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
cit =
  
  ## A quotation from some other document, together with a
  ##   bibliographic reference to its source.
  element cit { cit.content, cit.attributes }
cit.content =
  (model.quoteLike | model.biblLike | model.ptrLike | model.global)+
cit.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
mentioned =
  
  ## marks words or phrases mentioned, not used.
  element mentioned { mentioned.content, mentioned.attributes }
mentioned.content = macro.phraseSeq
mentioned.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
soCalled =
  
  ## (so called) contains a word or phrase for which the author or narrator
  ## indicates a disclaiming of responsibility, for example by the use
  ## of scare quotes or italics.
  element soCalled { soCalled.content, soCalled.attributes }
soCalled.content = macro.phraseSeq
soCalled.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
altIdent =
  
  ## supplies the recommended XML name for an element, class,
  ##   attribute, etc. in some language.
  element altIdent { altIdent.content, altIdent.attributes }
altIdent.content = macro.xtext
altIdent.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.typed.attribute.type,
  att.typed.attribute.subtype,
  empty
desc =
  
  ## (description) contains a brief description of the purpose and application for
  ## an element, attribute, or attribute value.
  element desc { desc.content, desc.attributes }
desc.content = macro.paraContent
desc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
equiv =
  
  ## specifies a component which is considered equivalent to the
  ##   parent element, either by co-reference, or by external link.
  element equiv { equiv.content, equiv.attributes }
equiv.content = empty
equiv.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## names the underlying concept of which the parent is a
  ##   representation
  attribute name { data.name }?,
  
  ## references the underlying concept of which the parent is a
  ##   representation by means of some external identifier
  attribute uri { data.pointer }?,
  
  ## references an external script which contains a method to
  ## transform instances of this element to canonical TEI
  ##	
  attribute filter { xsd:anyURI }?,
  
  ## MIME type of external filter script
  attribute mimeType { data.word }?,
  empty
gloss =
  
  ## identifies a phrase or word used to provide a gloss or
  ##   definition for some other word or phrase.
  element gloss { gloss.content, gloss.attributes }
gloss.content = macro.phraseSeq
gloss.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declaring.attribute.decls,
  (
   ## identifies the associated term element by an
   ##       absolute or relative URI reference
   attribute target { data.pointer }
   | 
     ## 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 term { term.content, term.attributes }
term.content = macro.phraseSeq
term.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declaring.attribute.decls,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  
  ## supplies the sort key for this term in an index.
  attribute sortKey { data.word }?,
  (
   ## identifies the associated gloss element by an
   ##	absolute or relative URI reference
   attribute target { data.pointer }
   | 
     ## 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 })?,
  empty
sic =
  
  ## contains text reproduced although apparently incorrect or inaccurate.
  element sic { sic.content, sic.attributes }
sic.content = macro.paraContent
sic.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
corr =
  
  ## (correction) contains the correct form of a passage apparently erroneous in the copy text.
  element corr { corr.content, corr.attributes }
corr.content = macro.paraContent
corr.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  empty
choice =
  
  ## groups a number of alternative encodings for the same point in
  ##   a text.
  element choice { choice.content, choice.attributes }
choice.content = (model.choicePart | choice)*
choice.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
reg =
  
  ## (regularization) contains a reading which has been regularized or normalized
  ## in some sense.
  element reg { reg.content, reg.attributes }
reg.content = macro.paraContent
reg.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  empty
orig =
  
  ## (original form) contains  a reading which is marked as following  the original,
  ## rather than being normalized or corrected.
  element orig { orig.content, orig.attributes }
orig.content = macro.paraContent
orig.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
gap =
  
  ## (omitted material) 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 or inaudible.
  element gap { gap.content, gap.attributes }
gap.content = macro.glossSeq?
gap.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  
  ## gives the reason for omission.  Sample values include
  ## sampling, illegible, inaudible,
  ## irrelevant, cancelled, cancelled and illegible.
  attribute reason { data.words }?,
  
  ## 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.
  attribute agent { data.enumerated }?,
  
  ## indicates approximately how much text has been omitted from the
  ## transcription, in letters, minims, inches, or any appropriate unit,
  ## either because of editorial policy or because a deletion, damage, or
  ## other cause has rendered transcription impossible.
  attribute extent { data.words }?,
  empty
add =
  
  ## (addition) contains letters, words, or phrases inserted in the text by an
  ## author, scribe, annotator, or corrector.
  element add { add.content, add.attributes }
add.content = macro.paraContent
add.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  
  ## if the the addition is written into the copy text, indicates
  ## where the additional text is written.
  attribute place { data.words }?,
  
  ## signifies the hand of the agent which made the addition.
  attribute hand { data.pointer }?,
  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 del { del.content, del.attributes }
del.content = macro.paraContent
del.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  
  ## classifies the type of deletion using any convenient typology.
  attribute type { data.enumerated }?,
  
  ## may be used to indicate faulty deletions, e.g.
  ## strikeouts which include too much or too little text.
  [ a:defaultValue = "unremarkable" ]
  attribute status { data.enumerated }?,
  
  ## signifies the hand of the agent which made the deletion.
  attribute hand { data.pointer }?,
  empty
unclear =
  
  ## contains a word, phrase, or passage which cannot be transcribed
  ## with certainty because it is illegible or inaudible in the source.
  element unclear { unclear.content, unclear.attributes }
unclear.content = macro.paraContent
unclear.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  
  ## indicates why the material is hard to transcribe.
  attribute reason { data.words }?,
  
  ## 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.
  attribute agent { data.enumerated }?,
  empty
name =
  
  ## (name, proper noun) contains a proper noun or noun phrase.
  element name { name.content, name.attributes }
name.content = macro.phraseSeq
name.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.naming.attribute.key,
  
  ## indicates the type of the object which is being named by the
  ##       phrase.
  attribute type { data.enumerated }?,
  empty
rs =
  
  ## (referencing string) contains a general purpose name or referring string.
  element rs { rs.content, rs.attributes }
rs.content = macro.phraseSeq
rs.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.naming.attribute.key,
  
  ## indicates more specifically the object referred to by the
  ##       referencing string. Values might include person,
  ##       place, ship, element etc.
  attribute type { data.enumerated }?,
  empty
address =
  
  ## contains a postal or other address, for example of a
  ## publisher, an organization, or an individual.
  element address { address.content, address.attributes }
address.content = model.global*, (model.addrPart, model.global*)+
address.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
addrLine =
  
  ## contains one line of a postal or other address.
  element addrLine { addrLine.content, addrLine.attributes }
addrLine.content = macro.phraseSeq
addrLine.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
street =
  
  ## (street) a full street address including any name or number identifying a
  ## building as well as the name of the street or route on which it is
  ## located.
  element street { street.content, street.attributes }
street.content = macro.phraseSeq
street.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
postCode =
  
  ## (postCode) contains a numerical or alphanumeric code used as part of a
  ## postal address to simplify sorting or delivery of mail. 
  element postCode { postCode.content, postCode.attributes }
postCode.content = text
postCode.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
postBox =
  
  ## (postBox) contains a number or other identifier for some postal delivery
  ## point other than a street address. 
  element postBox { postBox.content, postBox.attributes }
postBox.content = text
postBox.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
num =
  
  ## (number) contains a number, written in any form.
  element num { num.content, num.attributes }
num.content = macro.phraseSeq
num.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## indicates the type of numeric value.
  attribute type { data.enumerated }?,
  
  ## 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 measure { measure.content, measure.attributes }
measure.content = macro.phraseSeq
measure.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.measurement.attribute.unit,
  att.measurement.attribute.quantity,
  att.measurement.attribute.commodity,
  
  ## specifies the type of measurement in any convenient typology.
  attribute type { data.enumerated }?,
  empty
date =
  
  ## contains a date in any format.
  element date { date.content, date.attributes }
date.content = macro.phraseSeq
date.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  
  ## indicates the system or calendar to which the date belongs.
  attribute calendar { data.enumerated }?,
  
  ## gives the value of the date in standard form, i.e. yyyy-mm-dd.
  attribute value { data.temporal }?,
  
  ## indicates the degree of precision associated with the date.
  attribute precision { data.certainty }?,
  empty
dateRange =
  
  ## (date range) contains two dates or another phrase delimiting a time period.
  element dateRange { dateRange.content, dateRange.attributes }
dateRange.content = macro.phraseSeq
dateRange.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## indicates the system or calendar to which the date belongs.
  attribute calendar { data.enumerated }?,
  
  ## indicates the starting point of the period in standard form.
  attribute from {
    xsd:date
    | xsd:gYear
    | xsd:gMonth
    | xsd:gDay
    | xsd:gYearMonth
    | xsd:gMonthDay
    | xsd:time
    | xsd:dateTime
  }?,
  
  ## indicates the ending point of the period in standard form.
  attribute to {
    xsd:date
    | xsd:gYear
    | xsd:gMonth
    | xsd:gDay
    | xsd:gYearMonth
    | xsd:gMonthDay
    | xsd:time
    | xsd:dateTime
  }?,
  
  ## indicates the precision to be attached to either or both dates
  ## specified.
  attribute exact {
    
    ## (the to date is exact) 
    "to"
    | 
      ## (the from date is exact) 
      "from"
    | 
      ## (both dates are exact) 
      "both"
    | 
      ## (both dates are approximate or unspecified) 
      "none"
  }?,
  empty
time =
  
  ## contains a phrase defining a time of day in any format.
  element time { time.content, time.attributes }
time.content = macro.phraseSeq
time.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## gives the value of the time in standard form, e.g. as hh:mm.
  attribute value { data.temporal }?,
  empty
timeRange =
  
  ## (time range) contains two times or another phrase indicating a time period.
  element timeRange { timeRange.content, timeRange.attributes }
timeRange.content = macro.phraseSeq
timeRange.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## indicates the starting point of the time period in a standard form, usually hh:mm.
  attribute from { data.temporal }?,
  
  ## indicates the ending point of the time period in standard form, usually hh:mm.
  attribute to { data.temporal }?,
  
  ## indicates the precision to be attached to either or both times
  ##		specified.
  attribute exact {
    
    ## (the to time is exact) 
    "to"
    | 
      ## (the from time is exact) 
      "from"
    | 
      ## (both times are exact) 
      "both"
    | 
      ## (both times are approximate or unspecified) 
      "none"
  }?,
  empty
abbr =
  
  ## (abbreviation) contains an abbreviation of any sort.
  element abbr { abbr.content, abbr.attributes }
abbr.content = macro.phraseSeq
abbr.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## allows the encoder to classify the abbreviation according to
  ## some convenient typology.
  attribute type { data.enumerated }?,
  empty
expan =
  
  ## (expansion) contains the expansion of an abbreviation.
  element expan { expan.content, expan.attributes }
expan.content = macro.phraseSeq
expan.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  empty
ptr =
  
  ## defines a pointer to another location.
  element ptr { ptr.content, ptr.attributes }
ptr.content = empty
ptr.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.pointing.attribute.type,
  att.pointing.attribute.evaluate,
  att.declaring.attribute.decls,
  (
   ## specifies the destination of the pointer by supplying one or
   ##       more URI References
   attribute target { data.pointers }
   | 
     ## 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 { data.pointers })?,
  empty
ref =
  
  ## defines a reference to another location, possibly
  ##   modified by additional text or comment.
  element ref { ref.content, ref.attributes }
ref.content = macro.paraContent
ref.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.pointing.attribute.type,
  att.pointing.attribute.evaluate,
  att.declaring.attribute.decls,
  (
   ## specifies the destination of the reference by supplying one
   ##     or more URI References
   attribute target { data.pointers }
   | 
     ## 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 { data.pointers })?,
  empty
\list =
  
  ## contains any sequence of items organized as a list.
  element list { list.content, list.attributes }
list.content =
  (model.divWrapper | model.global)*,
  ((item, model.global*)+
   | (headLabel?,
      headItem?,
      (label, model.global*, item, model.global*)+)),
  (model.divWrapper.bottom, model.global*)*
list.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## describes the form of the list.
  [ a:defaultValue = "simple" ] attribute type { data.enumerated }?,
  empty
item =
  
  ## contains one
  ## component of a list.
  element item { item.content, item.attributes }
item.content = macro.specialPara
item.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
label =
  
  ## contains the label associated with an item in a list; in
  ## glossaries, marks the term being defined.
  element label { label.content, label.attributes }
label.content = macro.phraseSeq
label.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  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 head { head.content, head.attributes }
head.content = macro.paraContent
head.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## categorizes the heading in any way meaningful 
  ##          to the encoder. 
  attribute type { data.enumerated }?,
  empty
headLabel =
  
  ## (heading for list labels) contains the heading for the label or term column in a
  ## glossary list or similar structured list.
  element headLabel { headLabel.content, headLabel.attributes }
headLabel.content = macro.phraseSeq
headLabel.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
headItem =
  
  ## (heading for list items) contains the heading for the item or gloss column in a
  ## glossary list or similar structured list.
  element headItem { headItem.content, headItem.attributes }
headItem.content = macro.phraseSeq
headItem.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
note =
  
  ## contains a note or
  ## annotation.
  element note { note.content, note.attributes }
note.content = macro.specialPara
note.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## describes the type of note.
  attribute type { data.enumerated }?,
  
  ## indicates who is responsible for the annotation: author,
  ##	editor, translator, etc.
  attribute resp { data.pointer }?,
  
  ## indicates where the note appears in the source text.
  [ a:defaultValue = "unspecified" ] attribute place { data.code }?,
  
  ## indicates whether the copy text shows the exact place of reference
  ## for the note.
  [ a:defaultValue = "true" ]
  attribute anchored {
    
    ## (copy text indicates the place of attachment for the note.
    ##     ) 
    "true"
    | 
      ## (copy text indicates no place of attachment for the note.) 
      "false"
  }?,
  
  ## indicates the point (or points) of attachment for a note, or the beginning of
  ## the span to which the note is attached.
  attribute target { data.pointers }?,
  
  ## 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 { data.pointers }?,
  empty
index =
  
  ## (index entry) marks a location to be indexed for whatever purpose.
  element index { index.content, index.attributes }
index.content = (term, index?)*
index.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.spanning.attribute.spanTo,
  
  ## supplies a name to specify which index (of several) the index entry belongs to.
  attribute indexName { data.name }?,
  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 divGen { divGen.content, divGen.attributes }
divGen.content = model.divWrapper*
divGen.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## specifies what type of generated text division (e.g. index,
  ## table of contents, etc.) is to appear.
  attribute type { data.enumerated }?,
  empty
graphic =
  
  ## indicates the location of an inline graphic, illustration, or figure.
  element graphic { graphic.content, graphic.attributes }
graphic.content = empty
graphic.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## 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.probability }?,
  
  ## The target URL
  attribute url { data.pointer }?,
  
  ## The MIME type
  attribute mimeType { data.word }?,
  empty
binaryObject =
  
  ## provides encoded binary data representing an inline graphic or other object.
  element binaryObject { binaryObject.content, binaryObject.attributes }
binaryObject.content = text
binaryObject.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## The display width of the object
  attribute width { data.outputMeasurement }?,
  
  ## The display height of the object
  attribute height { data.outputMeasurement }?,
  
  ## A scale factor to be applied to the object to make it the desired display size
  attribute scale { data.numeric }?,
  
  ## The MIME type
  attribute mimeType { data.word }?,
  
  ## The encoding used to encode the binary data. If not
  ##       specified, this is assumed to be Base64
  attribute encoding { data.words }?,
  empty
milestone =
  
  ## marks a boundary point separating  any kind of section of a text, as indicated by
  ## changes in a standard reference system, where the section is not
  ## represented by a structural element.
  element milestone { milestone.content, milestone.attributes }
milestone.content = empty
milestone.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## indicates the edition or version to which the milestone applies.
  attribute ed { data.code }?,
  
  ## provides a conventional name for the kind of section changing at this milestone.
  attribute unit { data.enumerated },
  empty
pb =
  
  ## (page break) marks the boundary between one page of a text and the next
  ## in a standard reference system.
  element pb { pb.content, pb.attributes }
pb.content = empty
pb.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## indicates the edition or version in which the page break is located
  ## at this point
  attribute ed { data.code }?,
  empty
lb =
  
  ## (line break) marks the start of a new (typographic) line in some
  ## edition or version of a text.
  element lb { lb.content, lb.attributes }
lb.content = empty
lb.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## indicates the edition or version in which the line break is located
  ## at this point
  attribute ed { data.code }?,
  empty
cb =
  
  ## (column break) marks the boundary between one column of a text and the next
  ## in a standard reference system.
  element cb { cb.content, cb.attributes }
cb.content = empty
cb.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## indicates the edition or version in which the column break is located
  ## at this point
  attribute ed { data.code }?,
  empty
bibl =
  
  ## (bibliographic citation) contains a loosely-structured bibliographic citation of which
  ## the sub-components may or may not be explicitly tagged. 
  element bibl { bibl.content, bibl.attributes }
bibl.content =
  (text
   | model.gLike
   | model.hiLike
   | model.pPart.data
   | model.pPart.edit
   | model.segLike
   | model.ptrLike
   | model.biblPart
   | model.global)*
bibl.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  empty
biblItem =
  
  ## (bibliographic citation) contains a bibliographic citation in which only bibliographic
  ##   subelements appear.
  element biblItem { biblItem.content, biblItem.attributes }
biblItem.content =
  (title
   | biblItem
   | imprint
   | model.nameLike
   | model.biblPart
   | model.dateLike)+
biblItem.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  
  ## indicates the physical form of the object of this bibliographic entry.
  attribute form { xsd:token }?,
  
  ## indicates the publication status of the object of this bibliographic entry.
  attribute status { text }?,
  
  ## indicates the relationship of this bibliographic entry to
  ##       that of its parent bibl or biblItem.
  attribute role { text }?,
  empty
biblStruct =
  
  ## (structured bibliographic citation) contains a structured bibliographic citation, in which only
  ## bibliographic subelements appear and in a specified order. 
  element biblStruct { biblStruct.content, biblStruct.attributes }
biblStruct.content =
  analytic*, (monogr, series*)+, (model.noteLike | idno)*
biblStruct.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  empty
biblFull =
  
  ## contains a fully-structured bibliographic citation, in which all
  ## components of the TEI file description
  ## are present.
  element biblFull { biblFull.content, biblFull.attributes }
biblFull.content = macro.fileDescPart, sourceDesc*
biblFull.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  empty
listBibl =
  
  ## (citation list) contains a list of bibliographic citations of any kind. 
  element listBibl { listBibl.content, listBibl.attributes }
listBibl.content =
  (model.divWrapper | model.global)*,
  (model.biblLike, model.global*)+,
  (model.divWrapper.bottom, model.global*)*
listBibl.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  empty
analytic =
  
  ## (analytic level) contains bibliographic elements describing an item (e.g. an
  ## article or poem) published within a monograph or journal and not as an
  ## independent publication.
  element analytic { analytic.content, analytic.attributes }
analytic.content = (author | editor | respStmt | title)*
analytic.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
monogr =
  
  ## (monographic level) contains bibliographic elements describing an item (e.g. a book
  ## or journal) published as an independent item (i.e. as a separate
  ## physical object).
  element monogr { monogr.content, monogr.attributes }
monogr.content =
  (((author | editor | respStmt),
    (author | editor | respStmt)*,
    title+,
    (editor | respStmt)*)
   | (title+, (author | editor | respStmt)*))?,
  (model.noteLike | meeting)*,
  (edition, (editor | respStmt)*)*,
  imprint,
  (imprint | extent | biblScope)*
monogr.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
series =
  
  ## (series information) contains information about the series in which a book or other
  ## bibliographic item has appeared.
  element series { series.content, series.attributes }
series.content =
  (text
   | model.gLike
   | title
   | editor
   | respStmt
   | biblScope
   | model.global)*
series.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
author =
  
  ## in a bibliographic reference, contains the name of the author(s),
  ## personal or corporate,
  ## of a work; the primary statement of responsibility for any
  ## bibliographic item. 
  element author { author.content, author.attributes }
author.content = macro.phraseSeq
author.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
editor =
  
  ## (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 editor { editor.content, editor.attributes }
editor.content = macro.phraseSeq
editor.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## specifies the nature of the intellectual responsibility
  [ a:defaultValue = "editor" ] attribute role { data.enumerated }?,
  empty
respStmt =
  
  ## (statement of responsibility) supplies a statement of responsibility for someone responsible
  ##   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 respStmt { respStmt.content, respStmt.attributes }
respStmt.content =
  (resp, resp*, model.nameLike.agent+)
  | (model.nameLike.agent, model.nameLike.agent*, resp+)
respStmt.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
resp =
  
  ## contains a phrase describing the nature of a person's
  ##   intellectual responsibility.
  element resp { resp.content, resp.attributes }
resp.content = macro.phraseSeq
resp.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
title =
  
  ## contains the full title of a work of any kind.
  element title { title.content, title.attributes }
title.content = macro.paraContent
title.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## indicates the bibliographic level for a title, that is,
  ##	whether it identifies  an article, book, journal,
  ## series, or unpublished material.
  attribute level {
    
    ## (analytic title (article, poem, or other item published as
    ##           part of a larger item)
    ##     ) 
    "a"
    | 
      ## (monographic title (book, collection, or other item published
      ##           as a distinct item, including single volumes of multi-volume
      ##           works)
      ##     ) 
      "m"
    | 
      ## (journal title
      ##     ) 
      "j"
    | 
      ## (series title
      ##     ) 
      "s"
    | 
      ## (title of unpublished material (including theses and
      ##           dissertations unless published by a commercial press)) 
      "u"
  }?,
  
  ## classifies the title according to some convenient typology.
  attribute type { data.enumerated }?,
  empty
meeting =
  
  ## in bibliographic references,
  ## contains a description of the meeting or conference from which
  ## the bibliographic item derives.
  element meeting { meeting.content, meeting.attributes }
meeting.content = macro.paraContent
meeting.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
imprint =
  
  ## groups information relating to the publication or distribution
  ##   of a bibliographic item.
  element imprint { imprint.content, imprint.attributes }
imprint.content = ((model.imprintPart | model.dateLike), model.global*)+
imprint.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
publisher =
  
  ## provides the name of the organization responsible for
  ## the publication or distribution of a bibliographic item.
  element publisher { publisher.content, publisher.attributes }
publisher.content = macro.phraseSeq
publisher.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
biblScope =
  
  ## (scope of citation) defines the scope of a bibliographic reference, for example as a
  ## list of pagenumbers, or a named subdivision of a larger work.
  element biblScope { biblScope.content, biblScope.attributes }
biblScope.content = macro.phraseSeq
biblScope.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## identifies the type of information conveyed by the element, e.g.
  ## pages, volume.
  attribute type { data.enumerated }?,
  empty
pubPlace =
  
  ## contains the name of the place where a bibliographic item was
  ## published.
  element pubPlace { pubPlace.content, pubPlace.attributes }
pubPlace.content = macro.phraseSeq
pubPlace.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.naming.attribute.key,
  empty
l =
  
  ## (verse line) contains a single, possibly incomplete, line of verse.
  element l { l.content, l.attributes }
l.content = macro.paraContent
l.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## specifies whether or not the line is metrically complete. 
  [ a:defaultValue = "N" ]
  attribute part {
    
    ## (the line is metrically incomplete) 
    "Y"
    | 
      ## (either the line is complete, or no claim is made as to its
      ## completeness) 
      "N"
    | 
      ## (the initial part of an incomplete line) 
      "I"
    | 
      ## (a medial part of an incomplete line) 
      "M"
    | 
      ## (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 lg { lg.content, lg.attributes }
lg.content =
  (model.divWrapper | model.global)*,
  (model.lLike | lg),
  (model.lLike | lg | model.global)*,
  (model.divWrapper.bottom, model.global*)*
lg.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  empty
sp =
  
  ## (speech) An individual speech in a performance text, or a passage
  ##	  presented as such in a prose or verse text.
  element sp { sp.content, sp.attributes }
sp.content =
  model.global*,
  (speaker, model.global*)?,
  ((model.lLike | lg | model.pLike | model.blockLike | model.stageLike),
   model.global*)+
sp.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.ascribed.attribute.who,
  empty
speaker =
  
  ## A specialized form of heading or label, giving the name of
  ## one or more speakers in a dramatic text or fragment.
  element speaker { speaker.content, speaker.attributes }
speaker.content = macro.phraseSeq
speaker.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
stage =
  
  ## (stage direction) contains any kind of stage direction within a dramatic text or
  ## fragment.
  element stage { stage.content, stage.attributes }
stage.content = macro.specialPara
stage.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## indicates the kind of stage direction.
  attribute type { data.enumerated }?,
  empty
teiCorpus =
  
  ## (TEI corpus) 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 teiCorpus { teiCorpus.content, teiCorpus.attributes }
teiCorpus.content = teiHeader, (TEI | teiCorpus)+
teiCorpus.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## The version of the TEI scheme
  [ a:defaultValue = "5.0" ] attribute version { xsd:decimal }?,
  empty
teiHeader =
  
  ## (TEI Header) supplies the descriptive and declarative information making
  ##	up an electronic title page prefixed to every TEI-conformant
  ##	text.
  element teiHeader { teiHeader.content, teiHeader.attributes }
teiHeader.content = fileDesc, model.headerPart*, revisionDesc?
teiHeader.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## specifies the kind of document to which the header is attached.
  [ a:defaultValue = "text" ] attribute type { data.enumerated }?,
  empty
fileDesc =
  
  ## (File Description) contains a full bibliographic description of an electronic
  ## file.
  element fileDesc { fileDesc.content, fileDesc.attributes }
fileDesc.content = macro.fileDescPart, sourceDesc+
fileDesc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
titleStmt =
  
  ## (title statement) groups information about the title of a work and those
  ## responsible for its intellectual content.
  element titleStmt { titleStmt.content, titleStmt.attributes }
titleStmt.content =
  title+, (author | editor | sponsor | funder | principal | respStmt)*
titleStmt.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
sponsor =
  
  ## specifies the name of a sponsoring organization or
  ## institution.
  element sponsor { sponsor.content, sponsor.attributes }
sponsor.content = macro.phraseSeq
sponsor.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
funder =
  
  ## (Funding body) specifies the name of an individual, institution, or organization
  ## responsible for the funding of a project or text.
  element funder { funder.content, funder.attributes }
funder.content = macro.phraseSeq
funder.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
principal =
  
  ## (principal researcher) supplies the name of the principal researcher responsible for the
  ## creation of an electronic text.
  element principal { principal.content, principal.attributes }
principal.content = macro.phraseSeq
principal.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
editionStmt =
  
  ## (edition statement) groups information relating to one edition of a text.
  element editionStmt { editionStmt.content, editionStmt.attributes }
editionStmt.content = model.pLike+ | (edition, respStmt*)
editionStmt.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
edition =
  
  ## (Edition) describes the particularities of one edition of a text.
  element edition { edition.content, edition.attributes }
edition.content = macro.phraseSeq
edition.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
extent =
  
  ## describes the approximate size of the electronic text as stored on
  ## some carrier medium, specified in any convenient units.
  element extent { extent.content, extent.attributes }
extent.content = macro.phraseSeq
extent.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
publicationStmt =
  
  ## (publication statement) groups information concerning the publication or distribution
  ## of an electronic or other text. 
  element publicationStmt {
    publicationStmt.content, publicationStmt.attributes
  }
publicationStmt.content =
  model.pLike+
  | (publisher
     | distributor
     | authority
     | pubPlace
     | address
     | idno
     | availability
     | date)+
publicationStmt.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
distributor =
  
  ## supplies the name of a person or other agency responsible for the
  ## distribution of a text.
  element distributor { distributor.content, distributor.attributes }
distributor.content = macro.phraseSeq
distributor.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  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 authority { authority.content, authority.attributes }
authority.content = macro.phraseSeq
authority.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
idno =
  
  ## (identifying number) supplies any standard or non-standard number used to identify a
  ## bibliographic item.
  element idno { idno.content, idno.attributes }
idno.content = text
idno.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## categorizes the number, for example as an ISBN or other
  ##          standard series.
  ##    
  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 availability { availability.content, availability.attributes }
availability.content = model.pLike+
availability.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## 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 seriesStmt { seriesStmt.content, seriesStmt.attributes }
seriesStmt.content =
  model.pLike+
  | (title+, (idno | respStmt)*)
seriesStmt.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  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 notesStmt { notesStmt.content, notesStmt.attributes }
notesStmt.content = model.noteLike+
notesStmt.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
sourceDesc =
  
  ## supplies a description of the source text(s) from
  ## which an electronic text was derived or generated.
  element sourceDesc { sourceDesc.content, sourceDesc.attributes }
sourceDesc.content =
  model.pLike+ | listBibl | (model.biblLike | model.sourceDescPart)+
sourceDesc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  empty
scriptStmt =
  
  ## (script statement) contains a citation giving details of the script used for
  ## a spoken text.
  element scriptStmt { scriptStmt.content, scriptStmt.attributes }
scriptStmt.content = model.pLike+ | model.biblLike
scriptStmt.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  empty
recordingStmt =
  
  ## (recording statement) describes a set of recordings used in transcription of a
  ## spoken text.
  element recordingStmt {
    recordingStmt.content, recordingStmt.attributes
  }
recordingStmt.content = model.pLike+ | recording+
recordingStmt.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
recording =
  
  ## (recording event) details of an audio or video recording event
  ## used as the source of a spoken text, either directly or from
  ## a public broadcast. 
  element recording { recording.content, recording.attributes }
recording.content = model.pLike+ | model.recordingPart*
recording.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  
  ## the kind of recording.
  [ a:defaultValue = "audio" ]
  attribute type {
    
    ## (audio recording) 
    "audio"
    | 
      ## (audio and video recording) 
      "video"
  }?,
  
  ## the original duration of the recording. 
  attribute dur { data.duration }?,
  empty
equipment =
  
  ## (equipment) provides technical details of the equipment and media used for
  ## an audio or video recording used as the source for a spoken text.
  element equipment { equipment.content, equipment.attributes }
equipment.content = model.pLike+
equipment.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  empty
broadcast =
  
  ## (broadcast) describes a broadcast used as the source of a spoken text.
  element broadcast { broadcast.content, broadcast.attributes }
broadcast.content = model.pLike+ | model.biblLike | recording
broadcast.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  empty
encodingDesc =
  
  ## (Encoding description) documents the relationship between an electronic text and the
  ## source or sources from which it was derived.
  element encodingDesc { encodingDesc.content, encodingDesc.attributes }
encodingDesc.content = (model.encodingPart | model.pLike)+
encodingDesc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  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 projectDesc { projectDesc.content, projectDesc.attributes }
projectDesc.content = model.pLike+
projectDesc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  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 samplingDecl { samplingDecl.content, samplingDecl.attributes }
samplingDecl.content = model.pLike+
samplingDecl.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  empty
editorialDecl =
  
  ## (editorial practice declaration) provides details of editorial principles and practices applied
  ## during the encoding of a text.
  element editorialDecl {
    editorialDecl.content, editorialDecl.attributes
  }
editorialDecl.content = model.pLike+ | model.editorialDeclPart+
editorialDecl.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  empty
correction =
  
  ## (correction principles) states how and under what circumstances corrections have been
  ## made in the text.
  element correction { correction.content, correction.attributes }
correction.content = model.pLike+
correction.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  
  ## 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 editorial tags
      ##    ) 
      "tags"
  }?,
  empty
normalization =
  
  ## indicates the extent of normalization or regularization of the
  ## original source carried out in converting it to electronic form.
  element normalization {
    normalization.content, normalization.attributes
  }
normalization.content = model.pLike+
normalization.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  
  ## 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 editorial tags
      ##    ) 
      "tags"
  }?,
  empty
quotation =
  
  ## specifies editorial practice adopted with respect to quotation
  ##   marks in the original. 
  element quotation { quotation.content, quotation.attributes }
quotation.content = model.pLike+
quotation.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  
  ## 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 {
    
    ## (quotation marks are retained as data.) 
    "data"
    | 
      ## (the rendition attribute is consistently used to
      ##           indicate the form of quotation marks.) 
      "rend"
    | 
      ## (use of quotation marks has been standardized.) 
      "std"
    | 
      ## (quotation marks are represented inconsistently.) 
      "nonstd"
    | 
      ## (use of quotation marks is unknown.) 
      "unknown"
  }?,
  empty
hyphenation =
  
  ## (Hyphenation) summarizes the way in which hyphenation in a source text has been
  ## treated in an encoded version of it.
  element hyphenation { hyphenation.content, hyphenation.attributes }
hyphenation.content = model.pLike+
hyphenation.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  
  ## 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 segmentation { segmentation.content, segmentation.attributes }
segmentation.content = model.pLike+
segmentation.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  empty
stdVals =
  
  ## (Standard values) specifies the format used when standardized date or number
  ## values are supplied.
  element stdVals { stdVals.content, stdVals.attributes }
stdVals.content = model.pLike+
stdVals.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  empty
interpretation =
  
  ## describes the scope of any analytic or interpretive information
  ## added to the text in addition to the transcription. 
  element interpretation {
    interpretation.content, interpretation.attributes
  }
interpretation.content = model.pLike+
interpretation.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  empty
tagsDecl =
  
  ## (tagging declaration) provides detailed information about the tagging applied to an SGML or XML document.
  element tagsDecl { tagsDecl.content, tagsDecl.attributes }
tagsDecl.content = rendition*, tagUsage*
tagsDecl.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
tagUsage =
  
  ## (tagUsage) supplies information about the usage of a specific element
  ## within a text. 
  element tagUsage { tagUsage.content, tagUsage.attributes }
tagUsage.content = macro.paraContent
tagUsage.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## 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 }?,
  
  ## 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
rendition =
  
  ## (rendition) supplies information about the intended rendition of one or more
  ## elements.
  element rendition { rendition.content, rendition.attributes }
rendition.content = macro.paraContent
rendition.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
refsDecl =
  
  ## (references declaration) specifies how canonical references are constructed for this
  ##   text.
  element refsDecl { refsDecl.content, refsDecl.attributes }
refsDecl.content = model.pLike+ | cRefPattern+ | state+
refsDecl.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  
  ## identifies the document type within which
  ##       this reference declaration is used.
  [ a:defaultValue = "TEI" ] attribute doctype { data.name }?,
  empty
cRefPattern =
  
  ## (defines how to convert a canonical reference into a URI) specifies an expression and replacement pattern for
  ##   tranforming a canonical reference into a URI
  element cRefPattern { cRefPattern.content, cRefPattern.attributes }
cRefPattern.content = model.pLike*
cRefPattern.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## 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
state =
  
  ## specifies one component of a canonical reference defined by
  ## the milestone method.
  element state { state.content, state.attributes }
state.content = empty
state.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## indicates which edition or version the milestone applies to.
  attribute ed { data.code }?,
  
  ## indicates what kind of state is changing at this milestone.
  attribute unit { data.enumerated },
  
  ## specifies the fixed length of the reference component.
  attribute length { data.count }?,
  
  ## 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 classDecl { classDecl.content, classDecl.attributes }
classDecl.content = taxonomy+
classDecl.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
taxonomy =
  
  ## (taxonomy) defines a typology used to classify texts either implicitly, by
  ## means of a bibliographic citation, or explicitly by a structured
  ## taxonomy.
  element taxonomy { taxonomy.content, taxonomy.attributes }
taxonomy.content = category+ | (model.biblLike, category*)
taxonomy.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
category =
  
  ## (category) contains an individual descriptive category, possibly nested
  ## within a superordinate category, within a user-defined taxonomy.
  element category { category.content, category.attributes }
category.content = catDesc, category*
category.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  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 catDesc { catDesc.content, catDesc.attributes }
catDesc.content = (text | model.phrase | model.catDescPart)*
catDesc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
fsdDecl =
  
  ## (FSD (feature-system declaration) declaration) identifies the feature system declaration which contains
  ## definitions for a particular type of feature structure.
  element fsdDecl { fsdDecl.content, fsdDecl.attributes }
fsdDecl.content = empty
fsdDecl.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## identifies the type of feature structure documented by the FSD;
  ## this will be the value of the type attribute on at least one
  ## feature structure.
  attribute type { data.enumerated },
  
  ## supplies a link to the entity containing the feature system
  ## declaration. 
  attribute url { data.pointer },
  empty
metDecl =
  
  ## documents the notation employed to represent a metrical
  ##   pattern when this is specified as the value of a met,
  ##   real, or rhyme attribute on any structural
  ##   element of a metrical text (e.g. lg, l, or
  ##   seg).
  element metDecl { metDecl.content, metDecl.attributes }
metDecl.content = macro.componentSeq | metSym+
metDecl.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  
  ## indicates whether the notation conveys the abstract
  ##       metrical form, its actual prosodic realization, or the rhyme
  ##       scheme, or some combination thereof.
  [ a:defaultValue = "met real" ]
  attribute type {
    list { ("met" | "real" | "rhyme")+ }
  }?,
  
  ## specifies a regular expression defining any value that
  ##	is legal for this notation.
  attribute pattern { data.enumerated }?,
  empty
metSym =
  
  ## documents the intended significance of a particular character or
  ## character sequence within a metrical notation, either explicitly or in
  ## terms of other symbol elements in the same metDecl.
  element metSym { metSym.content, metSym.attributes }
metSym.content = macro.phraseSeq
metSym.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## specifies the character or character sequence being documented.
  attribute value { data.words },
  
  ## specifies whether the symbol is defined in terms of other
  ## symbols (terminal is set to false) or in prose
  ## (terminal is set to true).
  [ a:defaultValue = "true" ]
  attribute terminal {
    
    ## (the element contains a prose definition of its meaning.) 
    "true"
    | 
      ## (the element contains a definition of its meaning given using
      ## symbols defined elsewhere in the same metDecl element.) 
      "false"
  }?,
  empty
variantEncoding =
  
  ## declares the method used to encode text-critical variants.
  element variantEncoding {
    variantEncoding.content, variantEncoding.attributes
  }
variantEncoding.content = empty
variantEncoding.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## 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
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 profileDesc { profileDesc.content, profileDesc.attributes }
profileDesc.content = creation?, model.profileDescPart*
profileDesc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
creation =
  
  ## contains information about the creation of a text.
  element creation { creation.content, creation.attributes }
creation.content = macro.phraseSeq
creation.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
langUsage =
  
  ## (language usage) describes the languages, sublanguages, registers, dialects etc.
  ## represented within a text.
  element langUsage { langUsage.content, langUsage.attributes }
langUsage.content = (language)+
langUsage.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  empty
language =
  
  ## characterizes a single language or sublanguage used within a
  ##   text.
  element language { language.content, language.attributes }
language.content = macro.phraseSeq
language.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## Supplies a language code constructed as defined in RFC 3066 (or
  ##       its successor) 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 textClass { textClass.content, textClass.attributes }
textClass.content = (classCode | catRef | keywords)*
textClass.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declarable.attribute.default,
  empty
keywords =
  
  ## (Keywords) contains a list of keywords or phrases identifying the topic or
  ## nature of a text.
  element keywords { keywords.content, keywords.attributes }
keywords.content = term+ | \list
keywords.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## identifies the controlled vocabulary within which the set of
  ##   keywords concerned is defined.
  ##    
  attribute scheme { data.pointer },
  empty
classCode =
  
  ## (classCode) contains the classification code used for this text in some
  ## standard classification system.
  element classCode { classCode.content, classCode.attributes }
classCode.content = macro.phraseSeq
classCode.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## 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 catRef { catRef.content, catRef.attributes }
catRef.content = empty
catRef.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## identifies the categories concerned
  ##    
  attribute target { data.pointers },
  
  ## 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 revisionDesc { revisionDesc.content, revisionDesc.attributes }
revisionDesc.content = \list | change+
revisionDesc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
change =
  
  ## summarizes a particular change or correction made
  ## to a particular version of an electronic text which is
  ## shared between several researchers.
  element change { change.content, change.attributes }
change.content = macro.specialPara
change.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.ascribed.attribute.who,
  
  ## supplies the date of the change in standard form,  i.e. yyyy-mm-dd.
  attribute date { data.temporal }?,
  empty
model.headerPart = encodingDesc | profileDesc
model.sourceDescPart = scriptStmt | recordingStmt
model.encodingPart =
  projectDesc
  | samplingDecl
  | editorialDecl
  | tagsDecl
  | refsDecl
  | classDecl
  | fsdDecl
  | metDecl
  | variantEncoding
model.editorialDeclPart =
  correction
  | normalization
  | quotation
  | hyphenation
  | segmentation
  | stdVals
  | interpretation
model.profileDescPart = langUsage | textClass | handShift | handList
link =
  
  ## defines an association or hypertextual link
  ## among elements or passages, of some type
  ## not more precisely specifiable by other elements.
  element link { link.content, link.attributes }
link.content = empty
link.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.pointing.attribute.type,
  att.pointing.attribute.evaluate,
  
  ## specifies the identifiers of the elements or passages
  ##     to be linked or associated.
  ##  
  attribute targets { data.pointers },
  empty
linkGrp =
  
  ## defines a collection of associations or hypertextual links.
  element linkGrp { linkGrp.content, linkGrp.attributes }
linkGrp.content = (link | ptr)+
linkGrp.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.pointing.group.attribute.domains,
  att.pointing.group.attribute.targFunc,
  att.pointing.attribute.type,
  att.pointing.attribute.evaluate,
  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 ab { ab.content, ab.attributes }
ab.content = macro.paraContent
ab.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.typed.attribute.type,
  att.typed.attribute.subtype,
  
  ## specifies whether or not the block is complete. 
  [ a:defaultValue = "N" ]
  attribute part {
    
    ## (the block is incomplete) 
    "Y"
    | 
      ## (either the block is complete, or no claim is made as to its
      ## completeness) 
      "N"
    | 
      ## (the initial part of an incomplete block) 
      "I"
    | 
      ## (a medial part of an incomplete block) 
      "M"
    | 
      ## (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 anchor { anchor.content, anchor.attributes }
anchor.content = empty
anchor.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.typed.attribute.type,
  att.typed.attribute.subtype,
  empty
seg =
  
  ## (arbitrary segment) contains any arbitrary phrase-level unit of text (including
  ## other seg elements).
  element seg { seg.content, seg.attributes }
seg.content = macro.paraContent
seg.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.segLike.attribute.type,
  att.segLike.attribute.function,
  att.segLike.attribute.part,
  
  ## provides a sub-categorization of the segment marked.
  attribute subtype { data.word }?,
  empty
when =
  
  ## (when) indicates a point in time either relative to other elements in the
  ## same timeline tag, or absolutely.
  element when { when.content, when.attributes }
when.content = empty
when.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## supplies an absolute value for the time.
  attribute absolute { data.temporal }?,
  
  ## specifies the unit of time in which the  interval
  ## value is expressed, if this is not inherited from the parent timeLine.
  attribute unit { data.enumerated }?,
  
  ## 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 timeline { timeline.content, timeline.attributes }
timeline.content = when+
timeline.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## 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.
  attribute unit { data.enumerated }?,
  
  ## 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 join { join.content, join.attributes }
join.content = macro.glossSeq
join.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.pointing.attribute.type,
  att.pointing.attribute.evaluate,
  
  ## specifies the identifiers of the elements or passages
  ##        to be joined into a virtual
  ##        element.
  attribute targets { data.pointers },
  
  ## 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 joinGrp { joinGrp.content, joinGrp.attributes }
joinGrp.content = macro.glossSeq?, (join | ptr)+
joinGrp.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.pointing.group.attribute.domains,
  att.pointing.group.attribute.targFunc,
  att.pointing.attribute.type,
  att.pointing.attribute.evaluate,
  
  ## 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 alt { alt.content, alt.attributes }
alt.content = empty
alt.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.pointing.attribute.type,
  att.pointing.attribute.evaluate,
  
  ## specifies the identifiers of the alternative elements or passages.
  attribute targets { data.pointers },
  
  ## states whether the alternations gathered in this collection are exclusive or inclusive.
  attribute mode {
    
    ## (indicates that the alternation is exclusive, i.e. that
    ##		  at most one of the alternatives occurs.) 
    "excl"
    | 
      ## (indicates that the alternation is not exclusive, i.e. that
      ##		  one or more of the alternatives occur.) 
      "incl"
  }?,
  
  ## If mode is excl, each weight states the
  ##		probability that the corresponding alternative occurs.  If
  ##		modeincl 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+ }
  }?,
  empty
altGrp =
  
  ## (alternation group) groups a collection of alt elements and possibly
  ## pointers.
  element altGrp { altGrp.content, altGrp.attributes }
altGrp.content = (alt | ptr)*
altGrp.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.pointing.group.attribute.domains,
  att.pointing.group.attribute.targFunc,
  att.pointing.attribute.type,
  att.pointing.attribute.evaluate,
  
  ## states whether the alternations gathered in this collection are
  ## exclusive or inclusive.
  [ a:defaultValue = "excl" ]
  attribute mode {
    
    ## (indicates that the alternation is exclusive, i.e. that at
    ## most one of the alternatives occurs.) 
    "excl"
    | 
      ## (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 =
  
  ## points to elements that correspond to the current
  ##       element in some way.
  attribute corresp { data.pointers }?
att.global.linking.attribute.synch =
  
  ## points to elements that are synchronous with the current
  ##       element.
  attribute synch { data.pointers }?
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 =
  
  ## 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 { data.pointers }?
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 { data.pointers }?
att.pointing.attributes =
  att.pointing.attribute.type, att.pointing.attribute.evaluate
att.pointing.attribute.type =
  
  ## categorizes the pointer in some respect, using any
  ##       convenient set of categories.
  attribute type { data.word }?
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.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.name, data.name+ }
  }?
att.pointing.group.attribute.targFunc =
  
  ## 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+ }
  }?
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 TEI { TEI.content, TEI.attributes }
TEI.content = teiHeader, \text
TEI.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## The version of the TEI scheme
  [ a:defaultValue = "5.0" ] attribute version { xsd:decimal }?,
  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 text { text.content, text.attributes }
text.content =
  model.global*,
  (front, model.global*)?,
  (body | group),
  model.global*,
  (back, model.global*)?
text.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declaring.attribute.decls,
  empty
body =
  
  ## (text body) contains the whole body of a single unitary text, excluding any front or back matter.
  element body { body.content, body.attributes }
body.content =
  (model.divWrapper | model.global)*,
  (((macro.component, model.global*)+,
    ((divGen, model.global*)*,
     ((\div, (\div | divGen | model.global)*)
      | (div0, (div0 | divGen | model.global)*)
      | (div1, (div1 | divGen | model.global)*))?))
   | ((divGen, model.global*)*,
      ((\div, (\div | divGen | model.global)*)
       | (div0, (div0 | divGen | model.global)*)
       | (div1, (div1 | divGen | model.global)*)))),
  model.divWrapper.bottom*
body.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declaring.attribute.decls,
  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 group { group.content, group.attributes }
group.content =
  (model.divWrapper | model.global)*,
  ((\text | group), (\text | group | model.global)*),
  model.divWrapper.bottom*
group.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declaring.attribute.decls,
  empty
\div =
  
  ## (text division) contains a subdivision of the front, body, or back of a
  ## text.
  element div { div.content, div.attributes }
div.content =
  (model.divWrapper | model.global)*,
  ((\div | divGen)+
   | ((macro.component, model.global?)+, (\div | divGen)*)),
  (model.divWrapper | model.divWrapper.bottom)*
div.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.declaring.attribute.decls,
  empty
div0 =
  
  ## (level-0 text division) contains the largest possible subdivision of the body
  ## of a text.
  element div0 { div0.content, div0.attributes }
div0.content =
  (model.divWrapper | model.global)*,
  (((div1 | divGen), model.global*)+
   | ((macro.component, model.global*)+,
      ((div1 | divGen), model.global*)*)),
  (model.divWrapper.bottom, model.global*)*
div0.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.declaring.attribute.decls,
  empty
div1 =
  
  ## (level-1 text division) contains a first-level subdivision of the front, body, or back
  ## of a text (the largest, if
  ## div0 is not used, the second largest if it is).
  element div1 { div1.content, div1.attributes }
div1.content =
  (model.divWrapper | model.global)*,
  (((div2 | divGen), model.global*)+
   | ((macro.component, model.global*)+,
      ((div2 | divGen), model.global*)*)),
  (model.divWrapper.bottom, model.global*)*
div1.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.declaring.attribute.decls,
  empty
div2 =
  
  ## (level-2 text division) contains a second-level subdivision of the front, body, or back of a
  ##  text.
  element div2 { div2.content, div2.attributes }
div2.content =
  (model.divWrapper | model.global)*,
  (((div3 | divGen), model.global*)+
   | ((macro.component, model.global*)+,
      ((div3 | divGen), model.global*)*)),
  (model.divWrapper.bottom, model.global*)*
div2.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.declaring.attribute.decls,
  empty
div3 =
  
  ## (level-3 text division) contains a third-level subdivision of the front, body, or back of a
  ##  text.
  element div3 { div3.content, div3.attributes }
div3.content =
  (model.divWrapper | model.global)*,
  (((div4 | divGen), model.global*)+
   | ((macro.component, model.global*)+,
      ((div4 | divGen), model.global*)*)),
  (model.divWrapper.bottom, model.global*)*
div3.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.declaring.attribute.decls,
  empty
div4 =
  
  ## (level-4 text division) contains a fourth-level subdivision of the front, body, or back of a
  ##  text.
  element div4 { div4.content, div4.attributes }
div4.content =
  (model.divWrapper | model.global)*,
  (((div5 | divGen), model.global*)+
   | ((macro.component, model.global*)+,
      ((div5 | divGen), model.global*)*)),
  (model.divWrapper.bottom, model.global*)*
div4.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.declaring.attribute.decls,
  empty
div5 =
  
  ## (level-5 text division) contains a fifth-level subdivision of the front, body, or back of a
  ##  text.
  element div5 { div5.content, div5.attributes }
div5.content =
  (model.divWrapper | model.global)*,
  (((div6 | divGen), model.global*)+
   | ((macro.component, model.global*)+,
      ((div6 | divGen), model.global*)*)),
  (model.divWrapper.bottom, model.global*)*
div5.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.declaring.attribute.decls,
  empty
div6 =
  
  ## (level-6 text division) contains a sixth-level subdivision of the front, body, or back of a
  ##  text.
  element div6 { div6.content, div6.attributes }
div6.content =
  (model.divWrapper | model.global)*,
  (((div7 | divGen), model.global*)+
   | ((macro.component, model.global*)+,
      ((div7 | divGen), model.global*)*)),
  (model.divWrapper.bottom, model.global*)*
div6.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.declaring.attribute.decls,
  empty
div7 =
  
  ## (level-7 text division) contains the smallest possible subdivision of the front, body or
  ## back of a text, larger than a paragraph.
  element div7 { div7.content, div7.attributes }
div7.content =
  (model.divWrapper | model.global)*,
  (macro.component, model.global*)+,
  (model.divWrapper.bottom, model.global*)*
div7.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.declaring.attribute.decls,
  empty
trailer =
  
  ## (trailer) contains a closing title or footer appearing at the end of
  ## a division of a text. 
  element trailer { trailer.content, trailer.attributes }
trailer.content = macro.phraseSeq
trailer.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  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 byline { byline.content, byline.attributes }
byline.content =
  (text | model.gLike | model.phrase | docAuthor | model.global)*
byline.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  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 dateline { dateline.content, dateline.attributes }
dateline.content = macro.phraseSeq
dateline.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
argument =
  
  ## A formal list or prose description of the topics addressed by
  ##	a subdivision of a text.
  element argument { argument.content, argument.attributes }
argument.content =
  (model.global*, head)?, (macro.component, model.global*)*
argument.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
epigraph =
  
  ## (epigraph) contains a quotation, anonymous or attributed, appearing at
  ## the start of a section or chapter, or on a title page. 
  element epigraph { epigraph.content, epigraph.attributes }
epigraph.content = macro.componentSeq
epigraph.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  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 opener { opener.content, opener.attributes }
opener.content =
  (text
   | model.gLike
   | model.phrase
   | argument
   | byline
   | dateline
   | epigraph
   | salute
   | signed
   | model.global)*
opener.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
closer =
  
  ## groups together dateline, byline, salutation, and similar
  ## phrases appearing as a final group at the end of a
  ## division, especially of a letter.
  element closer { closer.content, closer.attributes }
closer.content =
  (text
   | model.gLike
   | signed
   | dateline
   | salute
   | model.phrase
   | model.global)*
closer.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  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 salute { salute.content, salute.attributes }
salute.content = macro.phraseSeq
salute.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
signed =
  
  ## (signature) contains the closing salutation, etc., appended to a foreword,
  ## dedicatory epistle, or other division of a text. 
  element signed { signed.content, signed.attributes }
signed.content = macro.phraseSeq
signed.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
titlePage =
  
  ## (title page) contains the title page of a text, appearing within the front
  ## or back matter. 
  element titlePage { titlePage.content, titlePage.attributes }
titlePage.content =
  model.global*,
  model.titlepagePart,
  (model.titlepagePart | model.global)*
titlePage.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## 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 docTitle { docTitle.content, docTitle.attributes }
docTitle.content = model.global*, (titlePart, model.global*)+
docTitle.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
titlePart =
  
  ## (title part) contains a subsection or division of the title of a work, as
  ## indicated on a title page.
  element titlePart { titlePart.content, titlePart.attributes }
titlePart.content = macro.paraContent
titlePart.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## specifies the role of this subdivision of the title.
  [ a:defaultValue = "main" ] attribute type { data.enumerated }?,
  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 docAuthor { docAuthor.content, docAuthor.attributes }
docAuthor.content = macro.phraseSeq
docAuthor.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
imprimatur =
  
  ## contains a formal statement authorizing the publication of
  ## a work, sometimes required to appear on a title page or its verso.
  element imprimatur { imprimatur.content, imprimatur.attributes }
imprimatur.content = macro.paraContent
imprimatur.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
docEdition =
  
  ## (document edition) contains an edition statement as presented on a title page of a
  ## document.
  element docEdition { docEdition.content, docEdition.attributes }
docEdition.content = macro.paraContent
docEdition.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  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 docImprint { docImprint.content, docImprint.attributes }
docImprint.content =
  (text
   | model.gLike
   | model.phrase
   | pubPlace
   | docDate
   | publisher
   | model.global)*
docImprint.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
docDate =
  
  ## (document date) contains the date of a document, as given
  ## (usually) on a title page.
  element docDate { docDate.content, docDate.attributes }
docDate.content = macro.phraseSeq
docDate.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## gives the value of the date in a standard form.
  attribute value { data.temporal }?,
  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 front { front.content, front.attributes }
front.content =
  (model.frontPart | model.global)*,
  ((model.pLike.front, (model.pLike.front | titlePage | model.global)*)
   | (\div, (\div | model.frontPart | model.global)*)
   | (div1, (div1 | model.frontPart | model.global)*))?
front.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declaring.attribute.decls,
  empty
back =
  
  ## (back matter) contains any appendixes, etc. following the main part of a
  ## text.
  element back { back.content, back.attributes }
back.content =
  (model.frontPart | model.global | model.divWrapper)*,
  ((\div, (\div | model.frontPart | model.global)*)
   | (div1, (div1 | model.frontPart | model.global)*))?,
  model.divWrapper.bottom*
back.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.declaring.attribute.decls,
  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 persName { persName.content, persName.attributes }
persName.content =
  (text
   | model.gLike
   | model.persNamePart
   | model.phrase
   | model.global)*
persName.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.naming.attribute.key,
  
  ## describes the personal name more fully using an open-ended
  ##       list of words or phrases which help to indicate the function,
  ##       e.g. married name, maiden name, pen name,
  ##       religious name, etc.
  attribute type { data.enumerated }?,
  empty
surname =
  
  ## (surname) contains a family (inherited) name, as opposed to a given,
  ## baptismal, or nick name.
  element surname { surname.content, surname.attributes }
surname.content = macro.phraseSeq
surname.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.personal.attribute.type,
  att.personal.attribute.full,
  att.personal.attribute.sort,
  empty
forename =
  
  ## (forename) contains a forename, given or baptismal name.
  element forename { forename.content, forename.attributes }
forename.content = macro.phraseSeq
forename.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.personal.attribute.type,
  att.personal.attribute.full,
  att.personal.attribute.sort,
  empty
genName =
  
  ## contains a name component used to distinguish otherwise similar
  ## names on the basis of the relative ages or generations of the persons named.
  element genName { genName.content, genName.attributes }
genName.content = macro.phraseSeq
genName.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.personal.attribute.type,
  att.personal.attribute.full,
  att.personal.attribute.sort,
  empty
nameLink =
  
  ## (name link) contains a connecting phrase or link used within a name but not
  ## regarded as part of it, such as  van der or of.
  element nameLink { nameLink.content, nameLink.attributes }
nameLink.content = macro.phraseSeq
nameLink.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.personal.attribute.type,
  att.personal.attribute.full,
  att.personal.attribute.sort,
  empty
addName =
  
  ## (additional name) contains an additional name component, such as a nickname, 
  ## epithet, or alias, or any other descriptive phrase used within a
  ## personal name.
  element addName { addName.content, addName.attributes }
addName.content = macro.phraseSeq
addName.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.personal.attribute.type,
  att.personal.attribute.full,
  att.personal.attribute.sort,
  empty
roleName =
  
  ## (roleName) contains a name component which indicates that the referent has a
  ## particular role or position in society, such as an official title or
  ## rank.
  element roleName { roleName.content, roleName.attributes }
roleName.content = macro.phraseSeq
roleName.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.personal.attribute.type,
  att.personal.attribute.full,
  att.personal.attribute.sort,
  empty
placeName =
  
  ## (place name) contains an absolute or relative place name. 
  element placeName { placeName.content, placeName.attributes }
placeName.content =
  (text
   | model.gLike
   | model.placeNamePart
   | model.phrase
   | model.global)*
placeName.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.naming.attribute.key,
  empty
district =
  
  ## contains the name of any kind of subdivision of a
  ## settlement,  such as a parish, ward, or other
  ## administrative or geographic unit.
  element district { district.content, district.attributes }
district.content = macro.phraseSeq
district.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.naming.attribute.key,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  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 settlement { settlement.content, settlement.attributes }
settlement.content = macro.phraseSeq
settlement.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.naming.attribute.key,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  empty
region =
  
  ## (region) contains the name of an administrative unit such as a state,
  ## province, or county, larger than a settlement, but smaller than a country.
  element region { region.content, region.attributes }
region.content = macro.paraContent
region.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.naming.attribute.key,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  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 country { country.content, country.attributes }
country.content = macro.paraContent
country.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.naming.attribute.key,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  
  ## supplies a regularized form of the country name using a
  ##	name or	code from ISO 3166
  attribute reg { data.code }?,
  empty
bloc =
  
  ## (bloc) contains the name of a geo-political unit consisting of  one or
  ## more nation states or countries.
  element bloc { bloc.content, bloc.attributes }
bloc.content = macro.phraseSeq
bloc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.naming.attribute.key,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  empty
offset =
  
  ## (offset) that  part of a relative temporal or spatial expression
  ## which indicates the direction of the offset between the two place
  ## names, dates, or times involved in the expression. 
  element offset { offset.content, offset.attributes }
offset.content = (text | model.gLike | model.global)*
offset.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  empty
distance =
  
  ## (distance) that part of a relative temporal or spatial expression which indicates
  ## the distance between the place or time denoted by it and the place or
  ## time referred to within it.
  element distance { distance.content, distance.attributes }
distance.content = macro.phraseSeq
distance.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  
  ## indicates the degree
  ## of accuracy associated with the
  ## distance.
  [ a:defaultValue = "unknown" ]
  attribute exact {
    
    ## (The distance is exact.) 
    "true"
    | 
      ## (The distance is approximate.) 
      "false"
    | 
      ## (Accuracy unavailable or unknown.) 
      "unknown"
  }?,
  empty
geogName =
  
  ## (geographical name) a name associated with some geographical feature such as
  ##   Windrush Valley or Mount Sinai.
  element geogName { geogName.content, geogName.attributes }
geogName.content =
  (text | model.gLike | geog | model.nameLike | model.global)*
geogName.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.naming.attribute.key,
  
  ## provides more culture- linguistic- or application-
  ##       specific information used to categorize this name
  ##       component.
  attribute type { data.enumerated }?,
  empty
geog =
  
  ## (geographical feature name) contains a common noun identifying some geographical feature 
  ## contained within a geographic name, such as valley,
  ## mount etc.
  element geog { geog.content, geog.attributes }
geog.content = macro.xtext
geog.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.naming.attribute.key,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  empty
orgName =
  
  ## (organization name) contains an organizational name. 
  element orgName { orgName.content, orgName.attributes }
orgName.content =
  (text
   | model.gLike
   | orgTitle
   | orgType
   | orgDivn
   | model.phrase
   | model.global)*
orgName.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## more fully describes the organization indicated in the
  ##       organizational name. Possible values include voluntary,
  ##       political, governmental, industrial,
  ##       commercial, etc.
  attribute type { data.enumerated }?,
  
  ## provides an alternative identifier for the organization
  ##       being named, such as a database record key.
  attribute key { data.key }?,
  
  ## gives a normalized or regularized form of the organization name
  attribute reg { text }?,
  empty
orgTitle =
  
  ## (organization title) contains the proper name component of an organizational
  ## name. 
  element orgTitle { orgTitle.content, orgTitle.attributes }
orgTitle.content = macro.phraseSeq
orgTitle.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## more fully describes the organization title. Possible values
  ## include formal,
  ## colloquial, acronym, etc.
  attribute type { data.enumerated }?,
  
  ## gives a normalized or regularized form of the organization title.
  attribute reg { text }?,
  empty
orgType =
  
  ## (organization type) indicates a part of the organization name which contains
  ## information about the organization's structure or function.
  element orgType { orgType.content, orgType.attributes }
orgType.content = macro.phraseSeq
orgType.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## more fully describes the organization type specified in the name
  ## component.  Possible values include function, structure,
  ## etc.
  attribute type { data.enumerated }?,
  
  ## gives a normalized or regularized form of the organization type
  attribute reg { text }?,
  empty
orgDivn =
  
  ## (organizational division) indicates a division, branch or department specified
  ## in an organizational name.
  element orgDivn { orgDivn.content, orgDivn.attributes }
orgDivn.content = macro.phraseSeq
orgDivn.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## more fully describes the organization division specified in the
  ## name component.
  ## Possible values include branch, department,
  ## section,
  ## division, etc.
  attribute type { data.enumerated }?,
  
  ## gives a normalized or regularized form of the organizational
  ## division.
  attribute reg { text }?,
  empty
dateStruct =
  
  ## contains an internally structured representation of a date.
  element dateStruct { dateStruct.content, dateStruct.attributes }
dateStruct.content =
  (text | model.gLike | model.datePart | model.global)*
dateStruct.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  
  ## indicates the system or calendar to which the date belongs.
  attribute calendar { data.enumerated }?,
  
  ## indicates the degree of precision to be attributed to the date.
  attribute exact { data.certainty }?,
  empty
day =
  
  ## (day) the day component of a structured date.
  element day { day.content, day.attributes }
day.content = macro.xtext
day.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  empty
week =
  
  ## (week) the week component of a structured date.
  element week { week.content, week.attributes }
week.content = macro.xtext
week.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  empty
month =
  
  ## (month) the month component of a structured date.
  element month { month.content, month.attributes }
month.content = macro.xtext
month.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  empty
year =
  
  ## (year) the year component of a date.
  element year { year.content, year.attributes }
year.content = macro.xtext
year.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  empty
occasion =
  
  ## a temporal expression (either a date or a time)
  ## given in terms of a named occasion such as a holiday,
  ## a named time of day, or some notable event.
  element occasion { occasion.content, occasion.attributes }
occasion.content = macro.phraseSeq
occasion.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  empty
timeStruct =
  
  ## contains an internally structured representation for a time of day.
  element timeStruct { timeStruct.content, timeStruct.attributes }
timeStruct.content =
  (text | model.gLike | model.datePart | model.global)*
timeStruct.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  
  ## indicates time zone or place name wherever this is necessary to
  ##		evaluate a temporal expression.
  attribute zone { data.enumerated }?,
  empty
second =
  
  ## (second) the second component of a structured time-expression.
  element second { second.content, second.attributes }
second.content = macro.xtext
second.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  empty
minute =
  
  ## (minute) the minute component of a structured time-expression.
  element minute { minute.content, minute.attributes }
minute.content = macro.xtext
minute.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  empty
hour =
  
  ## (hour) the hour component of a temporal expression
  element hour { hour.content, hour.attributes }
hour.content = macro.xtext
hour.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  empty
model.persNamePart =
  surname | forename | genName | nameLink | addName | roleName
att.personal.attributes =
  att.personal.attribute.type,
  att.personal.attribute.full,
  att.personal.attribute.sort
att.personal.attribute.type =
  
  ## provides more culture- linguistic- or application- specific
  ## information used to categorize this name component.
  attribute type { data.enumerated }?
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"
    | 
      ## (the name component is given in an
      ## abbreviated form.) 
      "abb"
    | 
      ## (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 { xsd:nonNegativeInteger }?
model.placeNamePart =
  district
  | settlement
  | region
  | country
  | bloc
  | offset
  | distance
  | geog
model.datePart =
  offset
  | distance
  | dateStruct
  | day
  | week
  | month
  | year
  | occasion
  | timeStruct
  | second
  | minute
  | hour
att.datePart.attributes =
  att.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full
att.datePart.attribute.value =
  
  ## supplies the value of a date or time in a standard form.
  attribute value { data.temporal | data.duration }?
att.datePart.attribute.type =
  
  ## characterizes the element in some sense, using any convenient
  ##  classification scheme or typology.
  attribute type { data.word }?
att.datePart.attribute.full =
  
  ## indicates whether the date element is given in full, as
  ##		an abbreviation or simply as an initial
  [ a:defaultValue = "yes" ]
  attribute full {
    
    ## (the temporal expression is spelled out in full.) 
    "yes"
    | 
      ## (the temporal expression is given in an abbreviated form.) 
      "abb"
    | 
      ## (the temporal expression is abbreviated.) 
      "init"
  }?
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 addSpan { addSpan.content, addSpan.attributes }
addSpan.content = empty
addSpan.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  
  ## indicates where the addition is made.
  attribute place { data.words }?,
  
  ## signifies the hand of the agent which made the addition.
  attribute hand { data.pointer }?,
  
  ## indicates the endpoint
  ## of the added passage, by supplying the value of the xml:id
  ## attribute of an anchor or other empty element placed there.
  attribute to { data.pointer },
  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 delSpan { delSpan.content, delSpan.attributes }
delSpan.content = empty
delSpan.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  
  ## classifies the deletion, using any convenient typology.
  attribute type { data.enumerated }?,
  
  ## signifies the hand of the agent which made the deletion.
  attribute hand { data.pointer }?,
  
  ## identifies the endpoint of the deleted passage,
  ## by supplying the value of the xml:id
  ## attribute of an anchor or other empty element placed there.
  attribute to { data.pointer },
  
  ## indicates whether the deletion is faulty, e.g. by including too
  ## much or too little text.
  [ a:defaultValue = "unremarkable" ]
  attribute status { data.enumerated }?,
  empty
restore =
  
  ## indicates restoration of text to an earlier state by
  ## cancellation of an editorial or authorial marking or instruction.
  element restore { restore.content, restore.attributes }
restore.content = macro.paraContent
restore.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  
  ## characterizes  the means of restoration.
  attribute means { data.code }?,
  
  ## indicates the action cancelled by the restoration.
  attribute type { data.name }?,
  
  ## signifies the hand of the agent which made the restoration.
  attribute hand { data.pointer }?,
  empty
supplied =
  
  ## signifies text supplied by the transcriber or editor in place
  ## of text which cannot be read, either because of physical damage or
  ## loss in the original or because it is illegible for any
  ## reason.
  element supplied { supplied.content, supplied.attributes }
supplied.content = macro.paraContent
supplied.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  
  ## indicates why the text has had to be supplied.
  attribute reason { data.words }?,
  
  ## where the presumed loss of text leading to the supplying of
  ## text arises from action (partial deletion, etc.) assignable to an
  ## identifiable hand, signifies the hand responsible for the action.
  attribute hand { data.pointer }?,
  
  ## In the case of text which has been supplied  because of damage, categorizes the cause of the damage, if it can be identified.
  attribute agent { data.enumerated }?,
  
  ## states the source of the supplied text.
  attribute source { data.names }?,
  empty
hand =
  
  ## used in the header to define each distinct scribe or
  ## handwriting style.
  element hand { hand.content, hand.attributes }
hand.content = empty
hand.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## gives the name of,or other identifier for, the scribe.
  attribute scribe { data.code }?,
  
  ## indicates recognized writing styles.
  attribute style { data.enumerated }?,
  
  ## indicates dominant language of hand.
  attribute mainLang { data.language }?,
  
  ## describes tint or type
  ## of ink, e.g. brown.  May also be used to indicate the writing medium, e.g. pencil,
  attribute ink { data.code }?,
  
  ## describes other characteristics of the hand,
  ## particularly those related to the quality of the writing.
  attribute writing { data.enumerated }?,
  
  ## indicates whether or
  ## not this is the first or main scribe of the document.
  attribute first { data.truthValue }?,
  
  ## indicates the editor or transcriber responsible for identifying
  ## the hand.
  attribute resp { data.code }?,
  empty
handShift =
  
  ## marks the beginning of a sequence of text written in a new
  ## hand, or of a change in the scribe, writing style, ink or character
  ## of the document hand.
  element handShift { handShift.content, handShift.attributes }
handShift.content = empty
handShift.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## identifies the new hand.
  attribute new { data.code },
  
  ## identifies the old hand.
  attribute old { data.code },
  
  ## indicates recognized
  ## writing styles.
  attribute style { data.enumerated }?,
  
  ## describes tint or type
  ## of ink, e.g. brown.  May also be used to indicate the writing medium, e.g. pencil,
  attribute ink { data.code }?,
  
  ## describes other characteristics of the hand,
  ## particularly those related to the quality of the writing.
  attribute writing { data.enumerated }?,
  
  ## signifies the editor or transcriber responsible for identifying
  ## the change of hand.
  attribute resp { data.code }?,
  empty
handList =
  
  ## contains a series of hand elements listing the
  ## different hands of the source.
  element handList { handList.content, handList.attributes }
handList.content = hand*
handList.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
damage =
  
  ## contains an area of damage to the text witness.
  element damage { damage.content, damage.attributes }
damage.content = macro.paraContent
damage.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  
  ## classifies the damage according to any convenient typology.
  attribute type { data.enumerated }?,
  
  ## indicates approximately how much text is in the damaged area,
  ## in letters, minims, inches, or any appropriate unit, where this
  ## cannot be deduced from the contents of the tag.  For example, the
  ## damage may span structural divisions in the text so that the tag must
  ## then be empty of content.
  attribute extent { data.words }?,
  
  ## In the case of damage (deliberate defacement, etc.) assignable
  ## to an identifiable hand, signifies the hand responsible for the
  ## damage.
  attribute hand { data.pointer }?,
  
  ## categorizes the cause of the damage, if it can be identified.
  attribute agent { data.enumerated }?,
  
  ## 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 }?,
  empty
space =
  
  ## indicates the location of a significant space in the copy text.
  element space { space.content, space.attributes }
space.content = empty
space.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## indicates whether the space is horizontal or vertical.
  attribute dim {
    
    ## (the space is horizontal.) 
    "horizontal"
    | 
      ## (the space is vertical.) 
      "vertical"
  }?,
  
  ## indicates approximately how large the space is, in letters,
  ## minims, inches, or other appropriate unit.
  attribute extent { data.enumerated }?,
  
  ## indicates the individual responsible for identifying and measuring
  ## the space.
  attribute resp { data.pointer }?,
  empty
fw =
  
  ## (forme work) contains a running head (e.g. a header,
  ## footer), catchword, or similar material
  ## appearing on the current page.
  element fw { fw.content, fw.attributes }
fw.content = macro.phraseSeq
fw.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## classifies the material encoded according to some useful typology.
  attribute type { data.enumerated }?,
  
  ## indicates where on the page this material appears.
  attribute place { data.enumerated }?,
  empty
msDescription =
  
  ## contains a description of a single identifiable
  ## manuscript.
  element msDescription {
    msDescription.content, msDescription.attributes
  }
msDescription.content =
  msIdentifier,
  head*,
  (model.pLike+
   | (msContents?, physDesc?, history?, additional?, msPart*))
msDescription.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  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 catchwords { catchwords.content, catchwords.attributes }
catchwords.content = macro.phraseSeq
catchwords.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
dimensions =
  
  ## contains any kind of dimensional specification. 
  element dimensions { dimensions.content, dimensions.attributes }
dimensions.content = (height?, width?, depth?)+
dimensions.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.measured.attribute.unit,
  att.measured.attribute.scope,
  
  ## indicates which aspect of the object is being measured. 
  attribute type { data.enumerated }?,
  empty
height =
  
  ## contains a measurement measured along the axis parallel to the spine. 
  element height { height.content, height.attributes }
height.content = macro.xtext
height.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.measured.attribute.unit,
  att.measured.attribute.scope,
  empty
depth =
  
  ## contains a measurement measured across the spine. 
  element depth { depth.content, depth.attributes }
depth.content = macro.xtext
depth.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.measured.attribute.unit,
  att.measured.attribute.scope,
  empty
width =
  
  ## contains a measurement measured along the axis perpendicular to the spine. 
  element width { width.content, width.attributes }
width.content = macro.xtext
width.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.measured.attribute.unit,
  att.measured.attribute.scope,
  empty
heraldry =
  
  ## contains a heraldic formula
  ## or phrase, typically found as part of a blazon, coat of arms, etc. 
  ##
  element heraldry { heraldry.content, heraldry.attributes }
heraldry.content = macro.phraseSeq
heraldry.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
locus =
  
  ## defines a location  within a manuscript or manuscript part, usually as a (possibly discontinuous) sequence of folio references. 
  element locus { locus.content, locus.attributes }
locus.content = macro.xtext
locus.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## identifies the foliation scheme in terms of which the location is being specified.
  attribute scheme { data.enumerated }?,
  
  ## 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 }?,
  
  ## supplies a link to one or more page images or
  ##	transcriptions of the specified range of folios.
  attribute targets { data.pointers }?,
  empty
material =
  
  ## contains a word or phrase describing the
  ##   material of which  a manuscript (or part of a manuscript) is composed.
  ##   
  element material { material.content, material.attributes }
material.content = macro.phraseSeq
material.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
origDate =
  
  ## contains any form of date, used to
  ##   identify the date of origin for a manuscript or manuscript part.
  ##   
  element origDate { origDate.content, origDate.attributes }
origDate.content = text
origDate.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  empty
origPlace =
  
  ## contains any form of place name, used to identify the
  ## place of origin for a manuscript or manuscript part. 
  element origPlace { origPlace.content, origPlace.attributes }
origPlace.content = macro.xtext
origPlace.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  empty
secFol =
  
  ## 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 secFol { secFol.content, secFol.attributes }
secFol.content = macro.phraseSeq
secFol.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
signatures =
  
  ## contains discussion of the leaf or quire signatures found within a codex.
  element signatures { signatures.content, signatures.attributes }
signatures.content = macro.phraseSeq
signatures.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
watermark =
  
  ## contains a word or phrase describing a
  ## watermark or similar device.
  element watermark { watermark.content, watermark.attributes }
watermark.content = macro.phraseSeq
watermark.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
msIdentifier =
  
  ## contains the information required to identify
  ## the  manuscript being described. 
  element msIdentifier { msIdentifier.content, msIdentifier.attributes }
msIdentifier.content =
  ((country?,
    region?,
    settlement,
    institution?,
    repository,
    collection?,
    idno?)
   | msName),
  (altIdentifier | msName)*
msIdentifier.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
institution =
  
  ## contains the name of an
  ## organization, such as a university or library, within which a
  ## manuscript repository is located.
  element institution { institution.content, institution.attributes }
institution.content = macro.xtext
institution.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.naming.attribute.key,
  empty
repository =
  
  ## contains the name of a repository within which manuscripts are stored, possibly forming part of an institution.
  element repository { repository.content, repository.attributes }
repository.content = macro.xtext
repository.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.naming.attribute.key,
  empty
collection =
  
  ## contains the name of a collection of
  ## manuscripts, not necessarily located within a single repository. 
  element collection { collection.content, collection.attributes }
collection.content = macro.xtext
collection.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.naming.attribute.key,
  empty
altIdentifier =
  
  ## (alternative identifier) contains an alternative or former structured identifier used for
  ## a manuscript, such as a former catalogue number.
  element altIdentifier {
    altIdentifier.content, altIdentifier.attributes
  }
altIdentifier.content =
  country?,
  region?,
  settlement?,
  institution?,
  repository?,
  collection?,
  idno,
  note?
altIdentifier.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.typed.attribute.type,
  att.typed.attribute.subtype,
  empty
msName =
  
  ## (alternative name) contains any form of unstructured alternative
  ## name used for a manuscript, such as an  ocellus
  ## nominum, or nickname. 
  element msName { msName.content, msName.attributes }
msName.content = macro.xtext
msName.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.typed.attribute.type,
  att.typed.attribute.subtype,
  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 colophon { colophon.content, colophon.attributes }
colophon.content = macro.phraseSeq
colophon.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  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 explicit { explicit.content, explicit.attributes }
explicit.content = macro.phraseSeq
explicit.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.typed.attribute.type,
  att.typed.attribute.subtype,
  
  ## indicates whether the explicit as given is defective, i.e. the final words of the text as preserved, as opposed to what the closing words would have been had the text of the work been whole.
  attribute defective { data.xTruthValue }?,
  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 filiation { filiation.content, filiation.attributes }
filiation.content = macro.specialPara
filiation.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.typed.attribute.type,
  att.typed.attribute.subtype,
  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 finalRubric { finalRubric.content, finalRubric.attributes }
finalRubric.content = macro.phraseSeq
finalRubric.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.typed.attribute.type,
  att.typed.attribute.subtype,
  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 incipit { incipit.content, incipit.attributes }
incipit.content = macro.phraseSeq
incipit.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.typed.attribute.type,
  att.typed.attribute.subtype,
  
  ## indicates whether the incipit as given is defective, i.e. the first words of the text as preserved, as opposed to the first words of the work itself.
  attribute defective { data.xTruthValue }?,
  empty
msContents =
  
  ## 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 msContents { msContents.content, msContents.attributes }
msContents.content =
  model.pLike+
  | (summary?, textLang?, (msItem | msItemStruct)+)
msContents.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## identifies the text types or classifications applicable
  ##	to this object.
  attribute class { data.code }?,
  
  ## indicates whether the object described is defective,
  ##	i.e. incomplete through loss or damage.
  attribute defective { data.xTruthValue }?,
  empty
msItem =
  
  ## describes an individual work or item within the intellectual 
  ## content of a manuscript or manuscript part. 
  element msItem { msItem.content, msItem.attributes }
msItem.content = locus?, (model.pLike+ | model.msItemPart+)
msItem.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## identifies the text types or classifications applicable to this
  ## item
  attribute class { data.code }?,
  
  ## indicates whether the item being described 
  ## is defective, i.e. incomplete through loss or damage.
  [ a:defaultValue = "false" ]
  attribute defective { data.xTruthValue }?,
  empty
msItemStruct =
  
  ## contains a structured description for an individual work or item within the intellectual content of a manuscript or manuscript part. 
  element msItemStruct { msItemStruct.content, msItemStruct.attributes }
msItemStruct.content =
  locus?,
  (model.pLike+
   | (author*,
      respStmt*,
      title*,
      rubric?,
      incipit?,
      msItemStruct*,
      explicit?,
      finalRubric?,
      colophon*,
      decoNote*,
      listBibl*,
      bibl*,
      filiation*,
      model.noteLike*,
      textLang?))
msItemStruct.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## identifies the text types or classifications applicable to this
  ## item
  attribute class { data.code }?,
  
  ## indicates whether the item being described 
  ## is defective, i.e. incomplete through loss or damage.
  [ a:defaultValue = "false" ]
  attribute defective { data.xTruthValue }?,
  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 rubric { rubric.content, rubric.attributes }
rubric.content = macro.phraseSeq
rubric.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.typed.attribute.type,
  att.typed.attribute.subtype,
  empty
summary =
  
  ## contains a brief summary of the
  ## intellectual content of an item, provided by the cataloguer 
  element summary { summary.content, summary.attributes }
summary.content = macro.phraseSeq
summary.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
textLang =
  
  ## describes the languages and writing systems used by a
  ## manuscript (as opposed to its description, which is described in the langUsage element)
  element textLang { textLang.content, textLang.attributes }
textLang.content = macro.phraseSeq
textLang.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## supplies a code which identifies the chief language used in the manuscript.
  attribute mainLang { data.language }?,
  
  ## one or more codes identifying any other languages used in the manuscript.
  attribute otherLangs {
    list { data.language* }
  }?,
  empty
physDesc =
  
  ## contains a full physical description of a
  ## manuscript or manuscript part, optionally subdivided using more
  ## specialised elements.
  element physDesc { physDesc.content, physDesc.attributes }
physDesc.content =
  model.pLike+
  | (objectDesc?,
     handDesc?,
     musicNotation?,
     decoDesc?,
     additions?,
     bindingDesc?,
     sealDesc?,
     accMat?)
physDesc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
objectDesc =
  
  ## contains a description of the physical
  ##   components making up the object which is being described.
  element objectDesc { objectDesc.content, objectDesc.attributes }
objectDesc.content = model.pLike+ | (supportDesc?, layoutDesc?)
objectDesc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## 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 =
  
  ## groups elements describing the physical support for the written part of a manuscript.
  element supportDesc { supportDesc.content, supportDesc.attributes }
supportDesc.content =
  model.pLike+ | (support?, extent?, foliation?, collation?, condition?)
supportDesc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## a short project-defined name for the material composing
  ##       the majority of the support
  attribute material { data.enumerated }?,
  empty
support =
  
  ## contains a description of the materials
  ## etc. which make up the physical support for the written part of a manuscript.
  element support { support.content, support.attributes }
support.content = macro.specialPara
support.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
collation =
  
  ## contains a description of how the leaves or bifolia are physically
  ## arranged.
  element collation { collation.content, collation.attributes }
collation.content = macro.specialPara
collation.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
foliation =
  
  ## describes the numbering system or systems used to 
  ## count the leaves or pages in a codex.
  element foliation { foliation.content, foliation.attributes }
foliation.content = macro.specialPara
foliation.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
condition =
  
  ## contains a description of the physical
  ## condition of the manuscript. 
  element condition { condition.content, condition.attributes }
condition.content = macro.specialPara
condition.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
layoutDesc =
  
  ## collects the set of layout descriptions applicable to a manuscript.
  element layoutDesc { layoutDesc.content, layoutDesc.attributes }
layoutDesc.content = model.pLike+ | layout+
layoutDesc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  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 layout { layout.content, layout.attributes }
layout.content = macro.specialPara
layout.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## specifies the number of columns per page
  attribute columns { data.count }?,
  
  ## specifies the number of ruled lines per column
  attribute ruledLines {
    data.count
    | list { data.count, data.count }
  }?,
  
  ## specifies the number of written lines per colum
  attribute writtenLines { data.count }?,
  empty
handDesc =
  
  ## contains a description of all the different kinds of writing  used in a manuscript.
  element handDesc { handDesc.content, handDesc.attributes }
handDesc.content = (handNote | model.pLike)+
handDesc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## specifies the number of distinct hands identified within the manuscript
  attribute hands { data.count }?,
  empty
handNote =
  
  ## (note on hand) describes a particular style
  ## or hand distinguished within a manuscript.
  element handNote { handNote.content, handNote.attributes }
handNote.content = macro.specialPara
handNote.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  
  ## gives a standard name or other identifier for the scribe
  ## believed to be responsible for this hand.
  attribute scribe { data.name }?,
  
  ## characterizes the particular script or writing style used by
  ## this hand, for example secretary, copperplate, Chancery, Italian, etc..
  attribute script { data.names }?,
  
  ## describes the tint or type of ink, e.g. brown, or other
  ## writing medium, e.g. pencil,
  attribute medium { data.words }?,
  
  ## 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"
  }?,
  empty
musicNotation =
  
  ## contains description of type of musical notation.
  element musicNotation {
    musicNotation.content, musicNotation.attributes
  }
musicNotation.content = macro.specialPara
musicNotation.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
decoDesc =
  
  ## 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 decoDesc { decoDesc.content, decoDesc.attributes }
decoDesc.content = model.pLike+ | decoNote+
decoDesc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
decoNote =
  
  ## contains a note describing either a
  ## decorative component of a manuscript, or a fairly homogenous class of
  ## such components.
  element decoNote { decoNote.content, decoNote.attributes }
decoNote.content = macro.specialPara
decoNote.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.typed.attribute.type,
  att.typed.attribute.subtype,
  empty
bindingDesc =
  
  ## 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 bindingDesc { bindingDesc.content, bindingDesc.attributes }
bindingDesc.content = (model.pLike | decoNote)+ | binding+
bindingDesc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
binding =
  
  ## contains a description of one binding, i.e. type of covering, boards, etc. applied to a manuscript
  element binding { binding.content, binding.attributes }
binding.content = (model.pLike | decoNote)+
binding.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  
  ## specifies whether or not the binding is contemporary with the majority of its contents
  attribute contemporary { data.xTruthValue }?,
  empty
sealDesc =
  
  ## 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 sealDesc { sealDesc.content, sealDesc.attributes }
sealDesc.content = model.pLike+ | (decoNote | seal)+
sealDesc.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
seal =
  
  ## contains a description of one seal or similar
  ##   attachment applied to a manuscript
  element seal { seal.content, seal.attributes }
seal.content = (model.pLike | decoNote)+
seal.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.typed.attribute.type,
  att.typed.attribute.subtype,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  
  ## specifies whether or not the seal is contemporary with the
  ##       item to which it is affixed
  attribute contemporary { data.xTruthValue }?,
  empty
additions =
  
  ## contains a description of any significant additions found
  ## within a manuscript, such as marginalia or other annotations. 
  element additions { additions.content, additions.attributes }
additions.content = macro.specialPara
additions.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  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 accMat { accMat.content, accMat.attributes }
accMat.content = macro.specialPara
accMat.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.typed.attribute.type,
  att.typed.attribute.subtype,
  empty
history =
  
  ##  groups elements
  ## describing the full history of a manuscript or manuscript part.
  element history { history.content, history.attributes }
history.content = model.pLike+ | (origin?, provenance*, acquisition?)
history.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
origin =
  
  ## contains any descriptive or other information
  ## concerning the origin of  a manuscript or manuscript part. 
  element origin { origin.content, origin.attributes }
origin.content = macro.specialPara
origin.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  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 provenance { provenance.content, provenance.attributes }
provenance.content = macro.specialPara
provenance.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  empty
acquisition =
  
  ## contains any descriptive or other information
  ## concerning the process by which a manuscript or manuscript part entered the holding
  ## institution. 
  element acquisition { acquisition.content, acquisition.attributes }
acquisition.content = macro.specialPara
acquisition.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  empty
additional =
  
  ## groups additional information, comprising
  ## bibliographic information about a manuscript, its current curatorial status, and
  ## any other associated materials. 
  element additional { additional.content, additional.attributes }
additional.content = adminInfo?, surrogates?, listBibl?
additional.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
adminInfo =
  
  ## (administrative information) contains information about the present
  ## custody and availability of the manuscript, and also about the record
  ## description itself. 
  element adminInfo { adminInfo.content, adminInfo.attributes }
adminInfo.content =
  recordHist?, availability?, custodialHist?, model.noteLike?
adminInfo.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
recordHist =
  
  ## provides information about the source and
  ## revision status of the parent manuscript description itself. 
  element recordHist { recordHist.content, recordHist.attributes }
recordHist.content = model.pLike+ | (source, change*)
recordHist.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
source =
  
  ## describes the original source for the information contained with a manuscript description. 
  element source { source.content, source.attributes }
source.content = macro.specialPara
source.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
custodialHist =
  
  ## contains a description of a manuscript's custodial history, either
  ## as running prose or as a series of dated custodial events. 
  element custodialHist {
    custodialHist.content, custodialHist.attributes
  }
custodialHist.content = model.pLike+ | custEvent+
custodialHist.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
custEvent =
  
  ## describes a single event during the custodial history of a manuscript.
  element custEvent { custEvent.content, custEvent.attributes }
custEvent.content = macro.specialPara
custEvent.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  empty
surrogates =
  
  ## contains information about any digital or
  ## photographic representations of the manuscript being described which
  ## may exist in the holding institution or elsewhere. 
  element surrogates { surrogates.content, surrogates.attributes }
surrogates.content = macro.specialPara
surrogates.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
msPart =
  
  ## contains information about an originally
  ## distinct manuscript or part of a manuscript, now forming part of a composite manuscript.
  element msPart { msPart.content, msPart.attributes }
msPart.content =
  altIdentifier,
  head*,
  (model.pLike+
   | (msContents?, physDesc?, history?, additional?, msPart*))
msPart.attributes =
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  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,
  empty
start = TEI
