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"
namespace xlink = "http://www.w3.org/1999/xlink"

# Schema generated from ODD source 2006-09-24T05:37:42+01:00.

#
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)
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*
mix.dictionaries = model.entryLike
mix.drama = model.divPart.stage
mix.spoken = model.divPart.spoken
macro.schemapattern = text
att.ascribed.attributes = att.ascribed.attribute.who, empty
att.ascribed.attribute.who =
  
  ## indicates the person, or group of
  ##	people, to whom the element content is ascribed.
  attribute who { data.pointers }?
att.authorialIntervention.attributes =
  att.authorialIntervention.attribute.hand,
  att.authorialIntervention.attribute.status,
  att.authorialIntervention.attribute.type,
  empty
att.authorialIntervention.attribute.hand =
  
  ## signifies the hand of the agent which made the addition or
  ##       performed the deletion.
  attribute hand { data.pointer }?
att.authorialIntervention.attribute.status =
  
  ## may be used to indicate faulty deletions, e.g. strikeouts
  ##       which include too much or too little text, or erroneous
  ##       additions, e.g., an insertion which duplicates some of the text
  ##       already present.
  [ a:defaultValue = "unremarkable" ]
  attribute status { data.enumerated }?
att.authorialIntervention.attribute.type =
  
  ## classifies the type of addition or deletion using any convenient typology.
  attribute type { data.enumerated }?
att.datable.attributes =
  att.datable.attribute.notBefore, att.datable.attribute.notAfter, empty
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.datePart.attributes =
  att.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  empty
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 using the initial characters.) 
      "init"
  }?
att.declarable.attributes = att.declarable.attribute.default, empty
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, empty
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,
  empty
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,
  empty
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,
  empty
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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  empty
att.global.attribute.xmlspace =
  
  ## signals an intention that white space should be 
  ##       preserved by applications
  attribute xml:space {
    
    ##
    "default"
    | 
      ##
      "preserve"
  }?
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, empty
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,
  empty
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, empty
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.code }?
att.placement.attributes = att.placement.attribute.place, empty
att.placement.attribute.place =
  
  ##
  attribute place { data.enumerated }?
att.segLike.attributes =
  att.segLike.attribute.type,
  att.segLike.attribute.function,
  att.segLike.attribute.part,
  empty
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, empty
att.spanning.attribute.spanTo =
  
  ## indicates the end of a span initiated by the element
  ##	bearing this attribute.
  attribute spanTo { data.pointer }?
att.tableDecoration.attributes =
  att.tableDecoration.attribute.role,
  att.tableDecoration.attribute.rows,
  att.tableDecoration.attribute.cols,
  empty
att.tableDecoration.attribute.role =
  
  ## indicates the kind of information held in this cell or
  ## in each cell of this row.
  [ a:defaultValue = "data" ] attribute role { data.enumerated }?
att.tableDecoration.attribute.rows =
  
  ## indicates the number of rows occupied by this cell or row.
  [ a:defaultValue = "1" ] attribute rows { data.count }?
att.tableDecoration.attribute.cols =
  
  ## indicates the number of columns occupied by this cell or
  ##	row.
  [ a:defaultValue = "1" ] attribute cols { data.count }?
att.timed.attributes =
  att.timed.attribute.start,
  att.timed.attribute.end,
  att.timed.attribute.dur,
  empty
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, empty
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 = s | cl | phr | w | m | c | seg
model.hiLike =
  foreign
  | emph
  | hi
  | distinct
  | mentioned
  | soCalled
  | gloss
  | term
  | title
model.dateLike = date | dateRange
model.timeLike = time | timeRange
model.measureLike = num | measure
model.graphicLike = graphic | binaryObject | formula | eg | egXML
model.pPart.msdesc =
  catchwords
  | dimensions
  | heraldry
  | locus
  | material
  | origDate
  | origPlace
  | secFol
  | signatures
  | watermark
  | handShift
model.pPart.edit =
  sic
  | corr
  | choice
  | reg
  | orig
  | add
  | del
  | unclear
  | abbr
  | expan
  | app
  | restore
  | supplied
  | damage
  | space
model.ptrLike = ptr | ref
model.lPart = caesura | rhyme
model.global.meta =
  index
  | span
  | spanGrp
  | interp
  | interpGrp
  | certainty
  | respons
  | fs
  | fLib
  | fvLib
  | link
  | linkGrp
  | timeline
  | join
  | joinGrp
  | alt
  | altGrp
model.milestoneLike = milestone | pb | lb | cb | fw
model.gLike = g
model.oddDecl =
  moduleSpec | specGrp | elementSpec | classSpec | macroSpec | listRef
model.oddRef = moduleRef | specGrpRef
model.oddPhr = att | code | gi | ident | tag | val | specList | specDesc
model.qLike = q | quote | cit
model.biblLike =
  bibl | biblItem | biblStruct | biblFull | msDescription | listPerson
model.listLike = \list | listBibl
model.noteLike = note | witDetail
model.stageLike = stage | move | view | camera | sound | caption | tech
model.complexVal = fs | vColl | vNot | vMerge
model.singleVal =
  binary | symbol | numeric | \string | vLabel | \default | vAlt
model.entryParts.top =
  note
  | dictScrap
  | form
  | gramGrp
  | def
  | trans
  | etym
  | dicteg
  | usg
  | xr
  | re
model.global.edit = gap | addSpan | delSpan
model.divPart =
  p | l | lg | sp | ab | graph | tree | eTree | schemaSpec | witList
model.blockLike = seg
model.pLike = p | ab
model.persTraitLike =
  faith | langKnowledge | nationality | persTrait | sex | socecStatus
model.persStateLike =
  persName
  | affiliation
  | education
  | floruit
  | occupation
  | persState
  | relation
  | residence
model.persEventLike = birth | death | persEvent
model.assertLike =
  model.persTraitLike | model.persStateLike | model.persEventLike
model.personPart = model.assertLike | note | bibl
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.divWrapper.bottom = trailer | closer | signed
model.divWrapper =
  head
  | byline
  | dateline
  | argument
  | epigraph
  | opener
  | salute
  | docAuthor
  | docDate
model.frontPart.drama =
  set | prologue | epilogue | performance | castList
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
  | figure
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 = textDesc
model.settingPart = locale | activity
model.textDescPart_sequence =
  channel,
  constitution,
  derivation,
  domain,
  factuality,
  interaction,
  preparedness
model.castItemPart = role | roleDesc | actor
model.physDescPart_sequenceOptional =
  objectDesc?,
  handDesc?,
  musicNotation?,
  decoDesc?,
  additions?,
  bindingDesc?,
  sealDesc?,
  accMat?
model.nameLike = model.nameLike.agent | rs | lang | 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
  | table
  | figure
  | eg
  | egXML
model.biblPart =
  model.respLike
  | model.imprintPart
  | note
  | series
  | edition
  | extent
  | distributor
  | idno
  | msIdentifier
model.datePart =
  offset
  | distance
  | day
  | week
  | month
  | year
  | occasion
  | second
  | minute
  | hour
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
  | castList
  | table
  | figure
model.phrase =
  model.segLike
  | model.hiLike
  | model.graphicLike
  | model.pPart.msdesc
  | model.pPart.edit
  | model.ptrLike
  | model.lPart
  | model.oddPhr
  | model.pPart.data
  | model.ptrLike.form
p =
  
  ## (paragraph) marks paragraphs in prose.
  element p { p.content, p.attributes }
p.content = macro.paraContent
p.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
mentioned =
  
  ## marks words or phrases mentioned, not used.
  element mentioned { mentioned.content, mentioned.attributes }
mentioned.content = macro.phraseSeq
mentioned.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.authorialIntervention.attribute.hand,
  att.authorialIntervention.attribute.status,
  att.authorialIntervention.attribute.type,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.placement.attribute.place,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.authorialIntervention.attribute.hand,
  att.authorialIntervention.attribute.status,
  att.authorialIntervention.attribute.type,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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 =
  (text | model.gLike | model.datePart | model.phrase | model.global)*
date.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  
  ## indicates the system or calendar to which the date belongs.
  attribute calendar { data.enumerated }?,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  
  ## 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 { data.temporal }?,
  
  ## indicates the ending point of the period in standard form.
  attribute to { data.temporal }?,
  
  ## 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 =
  (text | model.gLike | model.datePart | model.phrase | model.global)*
time.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## indicates the starting point of the time period in a standard form, usually hh:mm:ss.
  attribute from { data.temporal }?,
  
  ## indicates the ending point of the time period in standard form, usually hh:mm:ss.
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
note =
  
  ## contains a note or annotation.
  element note { note.content, note.attributes }
note.content = macro.specialPara
note.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.placement.attribute.place,
  
  ## 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 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  att.enjamb.attribute.enjamb,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## The version of the TEI scheme
  [ a:defaultValue = "5.0" ] attribute version { xsd:decimal }?,
  empty
model.headerPart = encodingDesc | profileDesc
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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
model.sourceDescPart = scriptStmt | recordingStmt
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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.declarable.attribute.default,
  empty
model.encodingPart =
  projectDesc
  | samplingDecl
  | editorialDecl
  | tagsDecl
  | refsDecl
  | classDecl
  | fsdDecl
  | metDecl
  | variantEncoding
  | charDesc
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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.declarable.attribute.default,
  empty
model.editorialDeclPart =
  correction
  | normalization
  | quotation
  | hyphenation
  | segmentation
  | stdVals
  | interpretation
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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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*, \namespace*
tagsDecl.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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
\namespace =
  
  ## supplies the formal name of the namespace to which the elements
  ## documented by its children belong.
  element namespace { namespace.content, namespace.attributes }
namespace.content = tagUsage+
namespace.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## the full formal name of the namespace concerned.
  attribute name { data.namespace },
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## indicates which method is used to encode the apparatus of
  ## variants.
  attribute method {
    
    ## (apparatus uses line numbers or other canonical reference scheme
    ## referenced in a base text.) 
    "location-referenced"
    | 
      ## (apparatus indicates the precise locations of the beginning and
      ## ending of each lemma relative to a base text.) 
      "double-end-point"
    | 
      ## (alternate readings of a passage are given in parallel in the
      ## text; no notion of a base text is necessary.) 
      "parallel-segmentation"
  },
  
  ## indicates whether the apparatus appears within the running text
  ## or external to it.
  attribute location {
    
    ## (apparatus appears within the running text.) 
    "internal"
    | 
      ## (apparatus appears outside the base text.) 
      "external"
  },
  empty
model.profileDescPart =
  langUsage
  | textClass
  | textDesc
  | particDesc
  | settingDesc
  | handShift
  | handList
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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.ascribed.attribute.who,
  
  ## supplies the date of the change in standard form,  i.e. yyyy-mm-dd.
  attribute date { data.temporal }?,
  empty
TEI =
  
  ## (TEI document) contains a single TEI-conformant document,
  ## comprising a TEI header and a text, either in isolation or as part of a
  ## teiCorpus element.
  element TEI { TEI.content, TEI.attributes }
TEI.content = teiHeader, \text
TEI.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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), model.global*)+
   | ((macro.component, model.global*)+,
      ((\div | divGen), model.global*)*)),
  ((model.divWrapper | model.divWrapper.bottom), model.global*)*
div.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  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 | model.divWrapper.bottom), model.global*)*
div0.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  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 | model.divWrapper.bottom), model.global*)*
div1.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  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 | model.divWrapper.bottom), model.global*)*
div2.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  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 | model.divWrapper.bottom), model.global*)*
div3.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  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 | model.divWrapper.bottom), model.global*)*
div4.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  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 | model.divWrapper.bottom), model.global*)*
div5.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  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 | model.divWrapper.bottom), model.global*)*
div6.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  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 | model.divWrapper.bottom), model.global*)*
div7.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.divLike.attribute.type,
  att.divLike.attribute.org,
  att.divLike.attribute.sample,
  att.divLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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, model.global*)?,
  (macro.component, model.global*)+
argument.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## gives the value of the date in a standard form, generally YYYY-MM-DD.
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.declaring.attribute.decls,
  empty
s =
  
  ## (s-unit) contains a sentence-like division of a text.
  element s { s.content, s.attributes }
s.content = macro.phraseSeq
s.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.segLike.attribute.type,
  att.segLike.attribute.function,
  att.segLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  empty
cl =
  
  ## (clause) represents a grammatical clause.
  element cl { cl.content, cl.attributes }
cl.content = macro.phraseSeq
cl.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.segLike.attribute.type,
  att.segLike.attribute.function,
  att.segLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  empty
phr =
  
  ## (phrase) represents a grammatical phrase.
  element phr { phr.content, phr.attributes }
phr.content = macro.phraseSeq
phr.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.segLike.attribute.type,
  att.segLike.attribute.function,
  att.segLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  empty
w =
  
  ## (word) represents a grammatical (not necessarily orthographic) word.
  element w { w.content, w.attributes }
w.content =
  (text | model.gLike | model.blockLike | w | m | c | model.global)*
w.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.segLike.attribute.type,
  att.segLike.attribute.function,
  att.segLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  
  ## identifies the word's lemma (dictionary entry form).
  attribute lemma { data.word }?,
  empty
m =
  
  ## (morpheme) represents a grammatical morpheme.
  element m { m.content, m.attributes }
m.content = (text | model.gLike | model.blockLike | c | model.global)*
m.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.segLike.attribute.type,
  att.segLike.attribute.function,
  att.segLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  
  ## identifies the morpheme's base form.
  attribute baseForm { data.word }?,
  empty
c =
  
  ## (character) represents a character.
  element c { c.content, c.attributes }
c.content = macro.xtext
c.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.segLike.attribute.type,
  att.segLike.attribute.function,
  att.segLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  empty
att.global.analytic.attributes =
  att.global.analytic.attribute.ana, empty
att.global.analytic.attribute.ana =
  
  ## indicates one or more elements containing interpretations of the
  ## element on which the ana attribute appears.
  attribute ana { data.pointers }?
span =
  
  ## (span) associates an interpretative annotation directly with a span
  ##   of text.
  element span { span.content, span.attributes }
span.content = macro.phraseSeq
span.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.interpLike.attribute.resp,
  att.interpLike.attribute.type,
  att.interpLike.attribute.inst,
  
  ## specifies the beginning of the passage being annotated; if
  ##       not accompanied by a to attribute, then specifies the
  ##       entire passage.
  attribute from { data.pointer },
  
  ## specifies the end of the passage being annotated.
  attribute to { data.pointer }?,
  empty
spanGrp =
  
  ## (span group) collects together span tags.
  element spanGrp { spanGrp.content, spanGrp.attributes }
spanGrp.content = span*
spanGrp.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.interpLike.attribute.resp,
  att.interpLike.attribute.type,
  att.interpLike.attribute.inst,
  empty
interp =
  
  ## (interpretation) summarizes a specific interpretative annotation which can be
  ## linked to a span of text.
  element interp { interp.content, interp.attributes }
interp.content = macro.phraseSeq
interp.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.interpLike.attribute.resp,
  att.interpLike.attribute.type,
  att.interpLike.attribute.inst,
  empty
interpGrp =
  
  ## (interpretation group) collects together a set of related interpretations which share
  ## responsibility or type.
  element interpGrp { interpGrp.content, interpGrp.attributes }
interpGrp.content = interp+
interpGrp.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.interpLike.attribute.resp,
  att.interpLike.attribute.type,
  att.interpLike.attribute.inst,
  empty
certainty =
  
  ## indicates the degree of certainty or uncertainty associated with
  ## some aspect of the text markup.
  element certainty { certainty.content, certainty.attributes }
certainty.content = macro.glossSeq
certainty.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## points at the elements whose markup is uncertain.
  attribute target { data.pointers },
  
  ## indicates the precise location of the uncertainty in the
  ## markup: applicability of the element, precise position of the
  ## start- or end-tag, value of a specific attribute, etc.
  attribute locus { data.enumerated },
  
  ## provides an alternative value for the aspect of the markup in
  ## question—an alternative generic identifier, transcription,
  ## or attribute value, or the identifier of an anchor element (to
  ## indicate an alternative starting or ending location).  If an
  ## assertedValue is given, the confidence level specified by
  ## degree applies to the alternative markup specified by
  ## assertedValue; if none is given, it applies to the markup
  ## in the text.
  attribute assertedValue { data.pointer | data.name | data.word }?,
  
  ## indicates conditions assumed in the assignment of a
  ## degree of confidence.
  attribute given { data.pointers }?,
  
  ## indicates the degree of confidence assigned to the aspect
  ## of the markup named by the locus attribute.
  attribute degree { data.probability }?,
  empty
respons =
  
  ## (responsibility) identifies the individual(s) responsible for some aspect of the
  ## markup of particular element(s).
  element respons { respons.content, respons.attributes }
respons.content = macro.glossSeq
respons.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## gives the identifier(s) of the element(s) for which some
  ## aspect of the responsibility is being
  ## assigned.
  attribute target { data.pointers },
  
  ## indicates the specific aspect of the markup for which
  ## responsibility is being assigned.
  attribute locus { data.enumerated },
  
  ## identifies the individual or agency responsible for the indicated
  ## aspect of the electronic text.
  attribute resp { data.pointer },
  empty
firstLang =
  
  ## (First language) specifies the first language of a participant.
  element firstLang { firstLang.content, firstLang.attributes }
firstLang.content = macro.phraseSeq
firstLang.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
textDesc =
  
  ## (text description) provides a description of a text in terms of its
  ## situational parameters.
  element textDesc { textDesc.content, textDesc.attributes }
textDesc.content = model.textDescPart_sequence, purpose+
textDesc.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.declarable.attribute.default,
  empty
particDesc =
  
  ## (participation description) describes the identifiable speakers, voices, or other participants
  ## in a linguistic interaction.
  element particDesc { particDesc.content, particDesc.attributes }
particDesc.content =
  model.pLike+
  | ((listPerson | personGrp)+, particLinks?)
particDesc.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.declarable.attribute.default,
  empty
settingDesc =
  
  ## (setting description) describes the setting or settings within which a language
  ## interaction takes place, either as a prose description or as a
  ## series of setting elements.
  element settingDesc { settingDesc.content, settingDesc.attributes }
settingDesc.content = model.pLike+ | setting+
settingDesc.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.declarable.attribute.default,
  empty
channel =
  
  ## (primary channel) describes the medium or channel by which a text is delivered or
  ## experienced. For a written text, this might be print, manuscript, e-mail, etc.;
  ## for a spoken one, radio, telephone, face-to-face, etc.
  element channel { channel.content, channel.attributes }
channel.content = macro.phraseSeq
channel.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## specifies the mode of this channel with respect to speech and
  ##          writing.
  [ a:defaultValue = "x" ]
  attribute mode {
    
    ## (spoken) 
    "s"
    | 
      ## (written) 
      "w"
    | 
      ## (spoken to be written (e.g. dictation)) 
      "sw"
    | 
      ## (written to be spoken (e.g. a script)) 
      "ws"
    | 
      ## (mixed modes) 
      "m"
    | 
      ## (unknown or inapplicable) 
      "x"
  }?,
  empty
constitution =
  
  ## describes the internal composition of a text or text sample,
  ## for example
  ## as fragmentary, complete, etc.
  element constitution { constitution.content, constitution.attributes }
constitution.content = macro.phraseSeq
constitution.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## specifies how the text was constituted.
  [ a:defaultValue = "single" ]
  attribute type {
    
    ## (a single complete text) 
    "single"
    | 
      ## (a text made by combining several smaller
      ##              items, each individually complete) 
      "composite"
    | 
      ## (a text made by combining several smaller, not
      ##              necessarily complete, items) 
      "frags"
    | 
      ## (composition unknown or unspecified) 
      "unknown"
  }?,
  empty
derivation =
  
  ## describes the nature and extent of originality of this text.
  element derivation { derivation.content, derivation.attributes }
derivation.content = macro.phraseSeq
derivation.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## categorizes the derivation of the text.
  attribute type { data.enumerated }?,
  empty
domain =
  
  ## (Domain of use) describes the most important social context in which the text was
  ## realized or for which it is intended, for example private vs. public,
  ## education, religion, etc.
  element domain { domain.content, domain.attributes }
domain.content = macro.phraseSeq
domain.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## categorizes the domain of use.
  attribute type { data.enumerated }?,
  empty
factuality =
  
  ## describes the extent to which the text may be regarded as
  ## imaginative or non-imaginative, that is, as describing a fictional
  ## or a non-fictional world.
  element factuality { factuality.content, factuality.attributes }
factuality.content = macro.phraseSeq
factuality.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## categorizes the factuality of the text.
  attribute type {
    
    ## (the text is to be regarded as entirely imaginative) 
    "fiction"
    | 
      ## (the text is to be regarded as entirely informative or factual) 
      "fact"
    | 
      ## (the text contains a mixture of fact and fiction) 
      "mixed"
    | 
      ## (the fiction/fact distinction is not regarded
      ##     as helpful or appropriate to this text) 
      "inapplicable"
  }?,
  empty
interaction =
  
  ## describes the extant, cardinality and nature of any interaction
  ## among those producing and experiencing the text, for example in the
  ## form of response or interjection, commentary etc.
  element interaction { interaction.content, interaction.attributes }
interaction.content = macro.phraseSeq
interaction.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## specifies the degree of interaction between
  ##   active and passive participants in the text.
  attribute type {
    
    ## (no interaction of any kind, e.g. a monologue) 
    "none"
    | 
      ## (some degree of interaction, e.g. a monologue with set responses) 
      "partial"
    | 
      ## (complete interaction, e.g. a face to face conversation) 
      "complete"
    | 
      ## (this parameter is inappropriate or inapplicable in this case) 
      "inapplicable"
  }?,
  
  ## specifies the number of active participants
  ##    (or addressors) producing parts of the text. 
  attribute active { data.enumerated }?,
  
  ## specifies the number of passive participants
  ##    (or addressees) to whom a text is directed
  ##    or in whose presence it is created or performed.
  ##    
  attribute passive { data.enumerated }?,
  empty
preparedness =
  
  ## describes the extent to which a text may be regarded as
  ## prepared or spontaneous.
  element preparedness { preparedness.content, preparedness.attributes }
preparedness.content = macro.phraseSeq
preparedness.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## a keyword characterizing the type of preparedness.
  attribute type { data.enumerated }?,
  empty
purpose =
  
  ## characterizes a single purpose or communicative function of the
  ## text.
  element purpose { purpose.content, purpose.attributes }
purpose.content = macro.phraseSeq
purpose.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## specifies a particular kind of purpose.
  attribute type { data.enumerated }?,
  
  ## specifies the extent to which this purpose predominates.
  attribute degree {
    
    ## (this purpose is predominant) 
    "high"
    | 
      ## (this purpose is intermediate) 
      "medium"
    | 
      ## (this purpose is weak) 
      "low"
    | 
      ## (extent unknown) 
      "unknown"
  }?,
  empty
setting =
  
  ## (setting) describes one particular setting in which a language
  ##   interaction takes place.
  element setting { setting.content, setting.attributes }
setting.content =
  model.pLike+
  | (model.nameLike.agent
     | model.dateLike
     | model.timeLike
     | model.settingPart)*
setting.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.ascribed.attribute.who,
  empty
locale =
  
  ## (locale) contains a brief informal description of the nature of a
  ## place for example a room, a restaurant, a park bench etc.
  element locale { locale.content, locale.attributes }
locale.content = macro.phraseSeq
locale.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
activity =
  
  ## (activity) contains a brief informal description of what a participant in a
  ## language interaction is doing other than speaking, if anything.
  element activity { activity.content, activity.attributes }
activity.content = macro.phraseSeq
activity.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
teifsd =
  
  ## (feature system declaration) contains a feature system declaration.
  element teifsd { teifsd.content, teifsd.attributes }
teifsd.content = teiHeader, fsDecl+
teifsd.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
fsDecl =
  
  ## (feature structure declaration) declares one type of feature structure.
  element fsDecl { fsDecl.content, fsDecl.attributes }
fsDecl.content = fsDescr?, fDecl+, fsConstraints?
fsDecl.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## gives a name for the type of feature structure being declared.
  attribute type { data.enumerated },
  
  ## gives the name of the feature structure type from which this
  ## type inherits features and constraints; if this type declares a feature
  ## with the same name as a feature of the base type, the definition within
  ## this fsDecl overrides the inherited definition.  The
  ## fsConstraints are inherited only if this fsDecl
  ## does not specify any; otherwise the constraints in this fsDecl
  ## override.  When no baseType is specified, no features
  ## or constraints are inherited.
  attribute baseType { data.name }?,
  empty
fsDescr =
  
  ## (feature system description (in FSD)) describes in prose what is represented by the type of feature
  ## structure declared in the enclosing fsDecl.
  element fsDescr { fsDescr.content, fsDescr.attributes }
fsDescr.content = macro.paraContent
fsDescr.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
fDecl =
  
  ## (feature declaration) declares a single feature, specifying its name, organization,
  ## range of allowed values, and optionally its default value.
  element fDecl { fDecl.content, fDecl.attributes }
fDecl.content = fDescr?, vRange, vDefault?
fDecl.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## indicates the name of the feature being declared; matches the
  ## name attribute of f elements in the text.
  attribute name { data.name },
  
  ## specifies the organizing discipline of the feature value.
  [ a:defaultValue = "unit" ]
  attribute org {
    
    ## (unitary atomic value) 
    "unit"
    | 
      ## (set value (unordered, no duplicates)) 
      "set"
    | 
      ## (bag value (unordered, may have duplicates)) 
      "bag"
    | 
      ## (list value (ordered, may have duplicates)) 
      "list"
  }?,
  empty
fDescr =
  
  ## (feature description (in FSD)) describes in prose what is represented by the feature being
  ## declared and its values.
  element fDescr { fDescr.content, fDescr.attributes }
fDescr.content = macro.paraContent
fDescr.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
vRange =
  
  ## (value range) defines the range of allowed values for a feature, in the form of
  ## an fs, vAlt, or primitive value;
  ## for the value of an f to be valid, it must be
  ## subsumed by the specified range; if the f
  ## contains multiple values (as sanctioned by the org attribute),
  ## then each value must be subsumed by the vRange.
  element vRange { vRange.content, vRange.attributes }
vRange.content = model.featureVal
vRange.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
vDefault =
  
  ## (value default) declares the default value to be supplied when a feature structure
  ## does not contain an instance of f for this name; if
  ## unconditional, it is specified as one (or, depending on the value of
  ## the org attribute of the enclosing fDecl) more
  ## fs elements or primitive values;
  ## if conditional, it is specified as
  ## one or more if elements; if no default is specified, or no
  ## condition matches, the value none is assumed.
  element vDefault { vDefault.content, vDefault.attributes }
vDefault.content = model.featureVal+ | if+
vDefault.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
if =
  
  ## defines a conditional default value for a feature; the condition
  ## is specified as a feature structure, and is met if it
  ## subsumes the feature structure in the text for which a
  ## default value is sought.
  element if { if.content, if.attributes }
if.content = (fs | f), then, model.featureVal
if.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
then =
  
  ## separates the condition from the default in an if, or
  ## the antecedent and the consequent in a cond element.
  element then { then.content, then.attributes }
then.content = empty
then.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
fsConstraints =
  
  ## (feature-structure constraints) specifies constraints on the content of well formed feature
  ## structures.
  element fsConstraints {
    fsConstraints.content, fsConstraints.attributes
  }
fsConstraints.content = (cond | bicond)*
fsConstraints.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
cond =
  
  ## (conditional feature-structure constraint) defines a conditional feature-structure constraint; the consequent
  ## and the antecedent are specified as feature structures or
  ## feature-structure groups; the constraint is satisfied if both the
  ## antecedent and the consequent subsume a given feature
  ## structure, or if the antecedent does not.
  element cond { cond.content, cond.attributes }
cond.content = (fs | f), then, (fs | f)
cond.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
bicond =
  
  ## (bi-conditional feature-structure constraint) defines a biconditional feature-structure constraint; both
  ## consequent and antecedent are specified as feature structures or groups
  ## of feature structures; the constraint is satisfied if both
  ## subsume a given feature structure, or if both do not.
  element bicond { bicond.content, bicond.attributes }
bicond.content = (fs | f), iff, (fs | f)
bicond.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
iff =
  
  ## separates the condition from the consequence in a bicond
  ## element.
  element iff { iff.content, iff.attributes }
iff.content = empty
iff.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
model.entryLike = superEntry | entry | entryFree
att.entryLike.attributes =
  att.entryLike.attribute.type, att.entryLike.attribute.sortKey, empty
att.entryLike.attribute.type =
  
  ## indicates type of entry, in dictionaries with multiple types.
  [ a:defaultValue = "main" ] attribute type { data.enumerated }?
att.entryLike.attribute.sortKey =
  
  ## contains a (sortable) character sequence reflecting the entry's alphabetical
  ##                 position in the printed dictionary.
  attribute sortKey { data.word }?
superEntry =
  
  ## groups successive entries for a set of homographs.
  element superEntry { superEntry.content, superEntry.attributes }
superEntry.content = (form?, entry+) | dictScrap
superEntry.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.entryLike.attribute.type,
  att.entryLike.attribute.sortKey,
  empty
entry =
  
  ## contains a reasonably well-structured dictionary entry.
  element entry { entry.content, entry.attributes }
entry.content = (hom | sense | model.entryParts.top | model.global)+
entry.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.entryLike.attribute.type,
  att.entryLike.attribute.sortKey,
  empty
entryFree =
  
  ## contains a dictionary entry which does not necessarily conform to the constraints imposed
  ##         by the entry element.
  element entryFree { entryFree.content, entryFree.attributes }
entryFree.content =
  (text
   | model.gLike
   | model.entryParts
   | model.phrase
   | model.inter
   | model.global)*
entryFree.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.entryLike.attribute.type,
  att.entryLike.attribute.sortKey,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
hom =
  
  ## (homograph) groups information relating to one homograph within an entry.
  element hom { hom.content, hom.attributes }
hom.content = (sense | model.entryParts.top | model.global)*
hom.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
sense =
  
  ## (sense information group) groups together all information relating to one word sense in a dictionary entry
  ##         (definitions, examples, translation equivalents, etc.)
  element sense { sense.content, sense.attributes }
sense.content =
  (text
   | model.gLike
   | sense
   | model.entryParts.top
   | model.phrase
   | model.global)*
sense.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  
  ## gives the nesting depth of this sense.
  attribute level { data.numeric }?,
  empty
dictScrap =
  
  ## encloses a part of a dictionary entry in which other phrase-level dictionary elements are
  ##         freely combined.
  element dictScrap { dictScrap.content, dictScrap.attributes }
dictScrap.content =
  (text
   | model.gLike
   | model.entryParts
   | model.phrase
   | model.inter
   | model.global)*
dictScrap.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
form =
  
  ## (form information group) groups all the information on the written and spoken forms of one headword.
  element form { form.content, form.attributes }
form.content =
  (text
   | model.gLike
   | model.phrase
   | model.inter
   | model.formPart
   | model.global)*
form.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  
  ## classifies form as simple, compound, etc.
  attribute type { data.enumerated }?,
  empty
orth =
  
  ## (orthographic form) gives the orthographic form of a dictionary headword.
  element orth { orth.content, orth.attributes }
orth.content = macro.paraContent
orth.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  
  ## gives the type of spelling.
  attribute type { data.enumerated }?,
  
  ## gives the extent of the orthographic information provided.
  [ a:defaultValue = "full" ] attribute extent { data.enumerated }?,
  empty
pron =
  
  ## (pronunciation) contains the pronunciation(s) of the word.
  element pron { pron.content, pron.attributes }
pron.content = macro.paraContent
pron.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  
  ## indicates whether the pronunciation is for whole word or part.
  [ a:defaultValue = "full" ] attribute extent { data.enumerated }?,
  
  ## indicates what notation is used for the pronunciation, if more than one occurs in
  ##                 the machine-readable dictionary.
  attribute notation { data.enumerated }?,
  empty
hyph =
  
  ## (hyphenation) contains a hyphenated form of a dictionary headword, or hyphenation information in some
  ##         other form.
  element hyph { hyph.content, hyph.attributes }
hyph.content = macro.paraContent
hyph.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
syll =
  
  ## (syllabification) contains the syllabification of the headword.
  element syll { syll.content, syll.attributes }
syll.content = macro.paraContent
syll.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
stress =
  
  ## contains the stress pattern for a dictionary headword, if given separately.
  element stress { stress.content, stress.attributes }
stress.content = macro.paraContent
stress.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
gram =
  
  ## (grammatical information) within an entry in a dictionary or a terminological data file, contains grammatical
  ##         information relating to a term, word, or form.
  element gram { gram.content, gram.attributes }
gram.content = macro.paraContent
gram.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  
  ## classifies the grammatical information given according to some convenient typology
  ##                 — in the case of terminological information, preferably the dictionary of
  ##                 data element types specified in ISO WD 12 620.
  attribute type { data.enumerated }?,
  empty
gen =
  
  ## (gender) identifies the morphological gender of a lexical item, as given in the dictionary.
  element gen { gen.content, gen.attributes }
gen.content = macro.paraContent
gen.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
number =
  
  ## indicates grammatical number associated with a form, as given in a dictionary.
  element number { number.content, number.attributes }
number.content = macro.paraContent
number.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
case =
  
  ## contains grammatical case information given by a dictionary for a given form.
  element case { case.content, case.attributes }
case.content = macro.paraContent
case.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
per =
  
  ## (person) contains an indication of the grammatical person (1st, 2nd, 3rd, etc.) associated with a
  ##         given inflected form in a dictionary.
  element per { per.content, per.attributes }
per.content = macro.paraContent
per.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
tns =
  
  ## (tense) indicates the grammatical tense associated with a given inflected form in a dictionary.
  element tns { tns.content, tns.attributes }
tns.content = macro.paraContent
tns.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
mood =
  
  ## contains information about the grammatical mood of verbs (e.g. indicative, subjunctive, imperative)
  element mood { mood.content, mood.attributes }
mood.content = macro.paraContent
mood.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
iType =
  
  ## (inflectional class) indicates the inflectional class associated with a lexical item.
  element iType { iType.content, iType.attributes }
iType.content = macro.paraContent
iType.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  
  ## indicates the type of indicator used to specify the inflection class, when it is
  ##                 necessary to distinguish between the usual abbreviated indications (e.g.
  ##                 inv) and other kinds of indicators, such as special codes
  ##                 referring to conjugation patterns, etc.
  attribute type { data.enumerated }?,
  empty
model.morphLike = gram | gen | number | case | per | tns | mood | iType
model.formPart =
  form | orth | pron | hyph | syll | model.morphLike | usg | lbl
gramGrp =
  
  ## (grammatical information group) groups morpho-syntactic information about a lexical item, e.g. pos, gen, number, case, or
  ##         iType (inflectional class).
  element gramGrp { gramGrp.content, gramGrp.attributes }
gramGrp.content =
  (text
   | model.gLike
   | model.phrase
   | model.inter
   | model.gramPart
   | model.global)*
gramGrp.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
pos =
  
  ## (part of speech) indicates the part of speech assigned to a dictionary headword (noun, verb, adjective, etc.)
  element pos { pos.content, pos.attributes }
pos.content = macro.paraContent
pos.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
subc =
  
  ## (subcategorization) contains subcategorization information (transitive/intransitive, countable/non-countable, etc.)
  element subc { subc.content, subc.attributes }
subc.content = macro.paraContent
subc.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
colloc =
  
  ## (collocate) contains a collocate of the headword.
  element colloc { colloc.content, colloc.attributes }
colloc.content = macro.paraContent
colloc.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  
  ## classifies the collocation, using any convenient typology.
  attribute type { data.word }?,
  empty
model.gramPart =
  model.morphLike | gramGrp | pos | subc | colloc | usg | lbl
def =
  
  ## (definition) contains definition text in a dictionary entry.
  element def { def.content, def.attributes }
def.content = macro.paraContent
def.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
tr =
  
  ## (translation equivalent) contains a translation of the headword or an example.
  element tr { tr.content, tr.attributes }
tr.content = macro.paraContent
tr.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
trans =
  
  ## (translation information) contains translation text and related information (within an entry in a multilingual dictionary).
  element trans { trans.content, trans.attributes }
trans.content =
  (text
   | model.gLike
   | model.phrase
   | model.inter
   | model.entryParts
   | model.global)*
trans.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
etym =
  
  ## (etymology) encloses the etymological information in a dictionary entry.
  element etym { etym.content, etym.attributes }
etym.content =
  (text
   | model.gLike
   | model.phrase
   | model.inter
   | usg
   | lbl
   | def
   | trans
   | tr
   | model.morphLike
   | dicteg
   | xr
   | model.global)*
etym.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
lang =
  
  ## (language name) name of a language mentioned in etymological or other linguistic discussion.
  element lang { lang.content, lang.attributes }
lang.content = macro.paraContent
lang.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
dicteg =
  
  ## (example (exempli gratia)) (in a dictionary) contains an example text containing at least one occurrence of the word
  ##         form, used in the sense being described; examples may be quoted from (named) authors or contrived.
  element dicteg { dicteg.content, dicteg.attributes }
dicteg.content = (q | quote | cit | model.entryParts)+
dicteg.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
usg =
  
  ## (usage) contains usage information in a dictionary entry.
  element usg { usg.content, usg.attributes }
usg.content = macro.paraContent
usg.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  
  ## classifies the usage information using any convenient typology.
  attribute type { data.enumerated }?,
  empty
lbl =
  
  ## (label) in dictionaries, contains a label for a form, example, translation, or other piece of
  ##         information, e.g. abbreviation for, contraction of, literally, approximately, synonyms:, etc.
  element lbl { lbl.content, lbl.attributes }
lbl.content = macro.paraContent
lbl.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  
  ## classifies the label using any convenient typology.
  attribute type { data.word }?,
  empty
xr =
  
  ## (cross-reference phrase) contains a phrase, sentence, or icon referring the reader to
  ## some other location in this or another text.
  element xr { xr.content, xr.attributes }
xr.content =
  (text
   | model.gLike
   | model.phrase
   | model.inter
   | usg
   | lbl
   | model.global)*
xr.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  
  ## indicates the type of cross reference, using any convenient
  ## typology.
  attribute type { data.enumerated }?,
  empty
re =
  
  ## (related entry) contains a dictionary entry for a lexical item related to the headword, such as a compound
  ##         phrase or derived form, embedded inside a larger entry.
  element re { re.content, re.attributes }
re.content =
  (text
   | model.gLike
   | sense
   | model.entryParts.top
   | model.phrase
   | model.global)*
re.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  
  ## classifies the related entry according to any convenient typology.
  attribute type { data.word }?,
  empty
model.ptrLike.form = oRef | oVar | pRef | pVar
att.ptrLike.form.attributes = att.ptrLike.form.attribute.target, empty
att.ptrLike.form.attribute.target =
  
  ## identifies the orthographic form or pronunciation referred to.
  attribute target { data.pointer }?
oRef =
  
  ## (orthographic-form reference) in a dictionary example, indicates a reference to the orthographic form(s) of the headword.
  element oRef { oRef.content, oRef.attributes }
oRef.content = empty
oRef.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.ptrLike.form.attribute.target,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  
  ## indicates the kind of typographic modification made to the headword in the reference.
  attribute type { data.enumerated }?,
  empty
oVar =
  
  ## (orthographic-variant reference) in a dictionary example, indicates a reference to variant orthographic form(s) of the headword.
  element oVar { oVar.content, oVar.attributes }
oVar.content = (text | model.gLike | oRef)*
oVar.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.ptrLike.form.attribute.target,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  
  ## indicates the kind of variant involved.
  attribute type { data.enumerated }?,
  empty
pRef =
  
  ## (pronunciation reference) in a dictionary example, indicates a reference to the pronunciation(s) of the headword.
  element pRef { pRef.content, pRef.attributes }
pRef.content = empty
pRef.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.ptrLike.form.attribute.target,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
pVar =
  
  ## (pronunciation-variant reference) in a dictionary example, indicates a reference to variant pronunciation(s) of the headword.
  element pVar { pVar.content, pVar.attributes }
pVar.content = (text | model.gLike | pRef)*
pVar.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.ptrLike.form.attribute.target,
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
att.lexicographic.attributes =
  att.lexicographic.attribute.expand,
  att.lexicographic.attribute.norm,
  att.lexicographic.attribute.split,
  att.lexicographic.attribute.value,
  att.lexicographic.attribute.orig,
  att.lexicographic.attribute.location,
  att.lexicographic.attribute.mergedin,
  att.lexicographic.attribute.opt,
  empty
att.lexicographic.attribute.expand =
  
  ## gives an expanded form of information presented more concisely in the dictionary
  attribute expand { text }?
att.lexicographic.attribute.norm =
  
  ## gives a normalized form of information given by the source text in a
  ##                 non-normalized form
  attribute norm { text }?
att.lexicographic.attribute.split =
  
  ## gives the list of split values for a merged form
  attribute split { text }?
att.lexicographic.attribute.value =
  
  ## gives a value which lacks any realization in the printed source text.
  attribute value { text }?
att.lexicographic.attribute.orig =
  
  ## gives the original string or is the empty string when the element does not appear
  ##                 in the source text.
  attribute orig { text }?
att.lexicographic.attribute.location =
  
  ## provides a reference to an anchor element elsewhere in the document
  ##                 indicating the original location of this component.
  attribute location { data.pointer }?
att.lexicographic.attribute.mergedin =
  
  ## gives a reference to another element, where the original appears as a merged form.
  attribute mergedin { data.pointer }?
att.lexicographic.attribute.opt =
  
  ## indicates whether the element is optional or not
  [ a:defaultValue = "false" ] attribute opt { xsd:boolean }?
model.entryParts =
  superEntry
  | hom
  | sense
  | form
  | orth
  | pron
  | hyph
  | syll
  | stress
  | gen
  | number
  | case
  | per
  | tns
  | mood
  | iType
  | gramGrp
  | pos
  | subc
  | colloc
  | def
  | tr
  | trans
  | etym
  | dicteg
  | usg
  | lbl
  | xr
  | re
model.divPart.stage = model.stageLike | castList
set =
  
  ## contains a description of the setting, time, locale, appearance,
  ## etc., of the action of a play, typically found in the front matter of
  ## a printed performance text (not a stage direction).
  element set { set.content, set.attributes }
set.content = model.global*, head?, (macro.component, model.global*)*
set.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
prologue =
  
  ## contains the prologue to a drama,  typically spoken by an actor out of
  ## character, possibly in association with a particular performance or venue.
  element prologue { prologue.content, prologue.attributes }
prologue.content =
  (model.divWrapper | model.global)*,
  (macro.component, model.global*)+,
  (model.divWrapper.bottom, model.global*)*
prologue.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
epilogue =
  
  ## contains the epilogue to a drama,  typically spoken by an actor
  ## out of character, possibly in association with a particular performance
  ## or venue.
  element epilogue { epilogue.content, epilogue.attributes }
epilogue.content =
  (model.divWrapper | model.global)*,
  (macro.component, model.global*)+,
  (model.divWrapper.bottom, model.global*)*
epilogue.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
performance =
  
  ## contains a section of front or back matter describing how a
  ## dramatic piece is to be performed in general or how it was performed
  ## on some specific occasion.
  element performance { performance.content, performance.attributes }
performance.content =
  (model.divWrapper | model.global)*,
  (macro.component, model.global*)+,
  (model.divWrapper.bottom, model.global*)*
performance.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
castList =
  
  ## (cast list) contains a single cast list or dramatis personae.
  element castList { castList.content, castList.attributes }
castList.content =
  (model.divWrapper | model.global)*,
  (macro.component, model.global*)*,
  ((castItem | castGroup), model.global*)+,
  (macro.component, model.global*)*
castList.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
castGroup =
  
  ## (Cast list grouping) groups one or more individual castItem
  ## elements within a cast list.
  element castGroup { castGroup.content, castGroup.attributes }
castGroup.content =
  model.global*,
  (head, model.global*)?,
  ((castItem | castGroup), model.global*)+,
  (trailer, model.global*)?
castGroup.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
castItem =
  
  ## (Cast list item) contains a single entry within a cast list, describing
  ## either a single role or a list of non-speaking roles.
  element castItem { castItem.content, castItem.attributes }
castItem.content =
  (text
   | model.gLike
   | model.castItemPart
   | model.phrase
   | model.global)*
castItem.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## characterizes the cast item.
  [ a:defaultValue = "role" ]
  attribute type {
    
    ## (the item describes a single role.) 
    "role"
    | 
      ## (the item describes a list of non-speaking roles.) 
      "list"
  }?,
  empty
role =
  
  ## the name of a dramatic role, as given in a cast list.
  element role { role.content, role.attributes }
role.content = macro.phraseSeq
role.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
roleDesc =
  
  ## (role description) describes a character's role in a drama.
  element roleDesc { roleDesc.content, roleDesc.attributes }
roleDesc.content = macro.phraseSeq
roleDesc.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
actor =
  
  ## (actor) Name of an actor appearing within a cast list.
  element actor { actor.content, actor.attributes }
actor.content = macro.phraseSeq
actor.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
move =
  
  ## (Movement) marks the actual entrance or exit of one or more characters on stage.
  element move { move.content, move.attributes }
move.content = empty
move.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.ascribed.attribute.who,
  
  ## characterizes the movement, for example as an entrance or exit.
  attribute type { data.enumerated }?,
  
  ## specifies the direction of a stage movement.
  attribute where { data.names }?,
  
  ## identifies the performance or performances in which this movement
  ##		occurred as specified.
  attribute perf { data.pointers }?,
  empty
view =
  
  ## describes the visual context of some part of a screen play in
  ## terms of what the spectator sees, generally independent of any
  ## dialogue.
  element view { view.content, view.attributes }
view.content = macro.specialPara
view.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
camera =
  
  ## describes a particular camera angle or viewpoint in a screen play.
  element camera { camera.content, camera.attributes }
camera.content = macro.paraContent
camera.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  empty
sound =
  
  ## describes a sound effect or musical sequence specified within a
  ## screen play or radio script.
  element sound { sound.content, sound.attributes }
sound.content = macro.paraContent
sound.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## categorizes the sound in some respect, e.g. as music, special
  ## effect, etc.
  attribute type { data.enumerated }?,
  
  ## indicates whether the sound overlaps the surrounding speeches
  ## or interrupts them.
  [ a:defaultValue = "unknown" ]
  attribute discrete {
    
    ## (the sound is heard between the surrounding speeches) 
    "true"
    | 
      ## (the sound overlaps the surrounding speeches) 
      "false"
    | 
      ## (unknown or inapplicable) 
      "unknown"
  }?,
  empty
caption =
  
  ## contains the text of a caption or other text displayed as part of
  ## a film script or screenplay.
  element caption { caption.content, caption.attributes }
caption.content = macro.paraContent
caption.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
tech =
  
  ## (Technical stage direction) describes a special-purpose stage direction that is not
  ## meant for the actors.
  element tech { tech.content, tech.attributes }
tech.content = macro.paraContent
tech.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## categorizes the technical stage direction.
  attribute type {
    
    ## (a lighting cue) 
    "light"
    | 
      ## (a sound cue) 
      "sound"
    | 
      ## (a prop cue) 
      "prop"
    | 
      ## (a blocking instruction) 
      "block"
  }?,
  
  ## identifies the performance or performances to which this
  ## technical direction applies.
  attribute perf { data.enumerated }?,
  empty
table =
  
  ## contains text displayed in tabular form, in
  ## rows and columns.
  element table { table.content, table.attributes }
table.content = (head | model.global)*, (row, model.global*)+
table.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## indicates the number of rows in the table.
  attribute rows { data.count }?,
  
  ## indicates the number of columns in each row of the table.
  attribute cols { data.count }?,
  empty
row =
  
  ## contains one row of a table.
  element row { row.content, row.attributes }
row.content = ((cell | table), model.global*)+
row.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.tableDecoration.attribute.role,
  att.tableDecoration.attribute.rows,
  att.tableDecoration.attribute.cols,
  empty
cell =
  
  ## contains one cell of a table.
  element cell { cell.content, cell.attributes }
cell.content = macro.paraContent
cell.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.tableDecoration.attribute.role,
  att.tableDecoration.attribute.rows,
  att.tableDecoration.attribute.cols,
  empty
formula =
  
  ## contains a mathematical or other formula.
  element formula { formula.content, formula.attributes }
formula.content = text
formula.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## supplies the name of a previously defined notation used for the
  ## content of the
  ## element.
  attribute notation { data.code }?,
  empty
figure =
  
  ## contains a block containing graphics, illustrations, or figures.
  element figure { figure.content, figure.attributes }
figure.content =
  (model.pLike
   | model.global
   | figure
   | figDesc
   | model.graphicLike
   | head)*
figure.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
figDesc =
  
  ## (Description of Figure) contains a brief prose description of the appearance or content
  ## of a graphic figure, for use when documenting an image without
  ## displaying it.
  element figDesc { figDesc.content, figDesc.attributes }
figDesc.content = macro.paraContent
figDesc.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
g =
  
  ## (character or glyph) represents a non-standard character or glyph.
  element g { g.content, g.attributes }
g.content = text
g.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  
  ## points to a description of the  character or glyph intended.
  attribute ref { data.pointer }?,
  empty
char =
  
  ## (character) provides descriptive information about a character. 
  element char { char.content, char.attributes }
char.content =
  charName,
  macro.glossSeq,
  charProp*,
  mapping*,
  model.graphicLike*,
  model.noteLike?
char.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
charName =
  
  ## (character name) contains the name of a character, expressed following Unicode conventions.
  element charName { charName.content, charName.attributes }
charName.content = text
charName.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
charProp =
  
  ## (character property) provides a name and value for some property of the parent
  ## character or glyph.
  element charProp { charProp.content, charProp.attributes }
charProp.content = (unicodeName | localName), value
charProp.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  empty
charDesc =
  
  ## (character description) provides descriptive information about characters or
  ## glyphs.
  element charDesc { charDesc.content, charDesc.attributes }
charDesc.content = desc?, (char | glyph)+
charDesc.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
glyph =
  
  ## (character glyph) provides descriptive information about a character glyph. 
  element glyph { glyph.content, glyph.attributes }
glyph.content =
  glyphName,
  macro.glossSeq,
  charProp*,
  mapping*,
  model.graphicLike*,
  model.noteLike?
glyph.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
glyphName =
  
  ## (character glyph name) contains the name of a glyph, expressed following Unicode
  ## conventions for character names.
  element glyphName { glyphName.content, glyphName.attributes }
glyphName.content = text
glyphName.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
localName =
  
  ## (Locally-defined Property Name) contains a locally defined name for some property.
  element localName { localName.content, localName.attributes }
localName.content = text
localName.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
mapping =
  
  ## (character mapping) contains one or more
  ##	 characters which are related to the parent character or glyph
  ##	 in some respect, as specified by the type
  ##	 attribute.
  ##
  element mapping { mapping.content, mapping.attributes }
mapping.content = macro.xtext
mapping.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  empty
unicodeName =
  
  ## (Unicode Property Name) contains the name of a registered Unicode normative or
  ## informative property.
  element unicodeName { unicodeName.content, unicodeName.attributes }
unicodeName.content = text
unicodeName.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## specifies the version number of the Unicode Standard in
  ##         which this property name is defined.
  attribute version { data.numeric }?,
  empty
value =
  
  ## (value) contains a single value for some property, attribute, or other
  ##   analysis.
  element value { value.content, value.attributes }
value.content = macro.xtext
value.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
fs =
  
  ## (Feature structure) represents a feature structure, that is, a
  ##   collection of feature-value pairs organized as a
  ## structural unit.
  element fs { fs.content, fs.attributes }
fs.content = f*
fs.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## specifies the type of the feature structure.
  attribute type { data.enumerated }?,
  
  ## references the feature-value specifications making up this feature structure.
  attribute feats { data.pointers }?,
  empty
f =
  
  ## (Feature) represents a feature value specification, that
  ##   is, the association of a name with a value of any of several different types.
  element f { f.content, f.attributes }
f.content = model.featureVal*
f.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## provides a name for the feature.
  attribute name { data.name },
  
  ## references any element which can be used to represent the
  ##   value of a feature.
  attribute fVal { data.pointer }?,
  empty
binary =
  
  ## (binary value) represents the value part of a feature-value specification which can contain either
  ##   of exactly two possible values.
  element binary { binary.content, binary.attributes }
binary.content = empty
binary.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## supplies a binary value.
  attribute value { data.truthValue },
  empty
symbol =
  
  ## (Symbolic value) represents the value part of a feature-value specification
  ##   which contains one of a finite list of symbols.
  element symbol { symbol.content, symbol.attributes }
symbol.content = empty
symbol.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## supplies the symbolic value for the feature, one of a finite list that
  ## may be specified in a feature declaration.
  attribute value { data.word },
  empty
numeric =
  
  ## (Numeric value) represents the value part of a feature-value specification
  ##   which contains a numeric value or range.
  element numeric { numeric.content, numeric.attributes }
numeric.content = empty
numeric.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## supplies a lower bound for the numeric value represented,
  ##       and also (if max is not supplied) its upper bound.
  attribute value { data.numeric },
  
  ## supplies an upper bound for the numeric value represented.
  attribute max { data.numeric }?,
  
  ## specifies whether the value represented should be
  ##	  truncated to give an integer value.
  attribute trunc { data.truthValue }?,
  empty
\string =
  
  ## (String value) represents the value part of a feature-value specification
  ##   which contains a string.
  element string { string.content, string.attributes }
string.content = macro.xtext
string.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
vLabel =
  
  ## (value label) represents the value part of a feature-value specification
  ##   which appears at more than one point in a feature structure
  element vLabel { vLabel.content, vLabel.attributes }
vLabel.content = model.featureVal?
vLabel.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## supplies a name for the sharing point.
  attribute name { data.word },
  empty
vColl =
  
  ## (collection of values) represents the value part of a feature-value specification
  ##   which contains multiple values organized as a set, bag, or list.
  element vColl { vColl.content, vColl.attributes }
vColl.content = (fs | model.singleVal)*
vColl.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## indicates organization of given value or values as set, bag or list.
  attribute org {
    
    ## (indicates that the given values are organized as a set.) 
    "set"
    | 
      ## (indicates that the given values are organized as a
      ## bag (multiset).) 
      "bag"
    | 
      ## (indicates that the given values are organized as a
      ## list.) 
      "list"
  }?,
  empty
\default =
  
  ## (Default feature value) represents the value part of a feature-value specification
  ##   which contains a defaulted value.
  element default { default.content, default.attributes }
default.content = empty
default.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
vAlt =
  
  ## (Value alternation) represents the value part of a feature-value specification
  ##   which contains a set of values, only one of which can be valid.
  element vAlt { vAlt.content, vAlt.attributes }
vAlt.content = model.featureVal, model.featureVal+
vAlt.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
vNot =
  
  ## (Value negation) represents a feature value which is the negation of its content.
  element vNot { vNot.content, vNot.attributes }
vNot.content = model.featureVal
vNot.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
vMerge =
  
  ## (Merged collection of values) represents a feature value which is the result of merging
  ##   together the feature values contained by its children, using the organization
  ##   specified by the org attribute.
  element vMerge { vMerge.content, vMerge.attributes }
vMerge.content = model.featureVal+
vMerge.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## indicates the organization of the resulting merged values as set, bag or list.
  attribute org {
    
    ## (indicates that the resulting values are organized as a set.) 
    "set"
    | 
      ## (indicates that the resulting values are organized as a bag (multiset).) 
      "bag"
    | 
      ## (indicates that the resulting values are organized as a list.) 
      "list"
  }?,
  empty
fLib =
  
  ## (Feature library) assembles a library of feature elements.
  element fLib { fLib.content, fLib.attributes }
fLib.content = f+
fLib.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
fvLib =
  
  ## (Feature-value library) assembles a library of reusable feature value elements
  ##   (including complete feature structures).
  element fvLib { fvLib.content, fvLib.attributes }
fvLib.content = model.featureVal*
fvLib.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.segLike.attribute.type,
  att.segLike.attribute.function,
  att.segLike.attribute.part,
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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,
  empty
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, empty
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,
  empty
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+ }
  }?
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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
dimensions =
  
  ## contains any kind of dimensional specification. 
  element dimensions { dimensions.content, dimensions.attributes }
dimensions.content = (height?, width?, depth?)+
dimensions.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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 from the model.physDescPart class.
  element physDesc { physDesc.content, physDesc.attributes }
physDesc.content = model.pLike+ | model.physDescPart_sequenceOptional
physDesc.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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
    | list { data.count, 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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
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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
model.persNamePart =
  surname | forename | genName | nameLink | addName | roleName
att.personal.attributes =
  att.personal.attribute.type,
  att.personal.attribute.full,
  att.personal.attribute.sort,
  empty
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
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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.phraseSeq
region.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.phraseSeq
country.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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
affiliation =
  
  ## (affiliation) contains an informal description of a person's present
  ## or past affiliation with some
  ## organization, for example an employer or sponsor.
  element affiliation { affiliation.content, affiliation.attributes }
affiliation.content = macro.phraseSeq
affiliation.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.naming.attribute.key,
  empty
birth =
  
  ## (Birth details) contains information about a person's birth, such as its date
  ## and place.
  element birth { birth.content, birth.attributes }
birth.content = macro.phraseSeq
birth.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.naming.attribute.key,
  
  ## specifies the date of birth in a W3C standard form (YYYY-MM-DD).
  attribute date { data.temporal }?,
  empty
death =
  
  ## contains information about a person's death, such as its date
  ## and place.
  element death { death.content, death.attributes }
death.content = macro.phraseSeq
death.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.naming.attribute.key,
  
  ## specifies the date of death in a W3C standard form (YYYY-MM-DD).
  attribute date { data.temporal }?,
  empty
education =
  
  ## contains a description of the
  ## educational experience of a person.
  element education { education.content, education.attributes }
education.content = macro.phraseSeq
education.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.naming.attribute.key,
  empty
faith =
  
  ## specifies the faith,  religion, or belief set of a person.
  element faith { faith.content, faith.attributes }
faith.content = macro.phraseSeq
faith.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  empty
floruit =
  
  ## contains information about a person's period of activity.
  element floruit { floruit.content, floruit.attributes }
floruit.content = macro.phraseSeq
floruit.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  empty
langKnowledge =
  
  ## summarizes the state of a person's linguistic knowledge, either
  ## as prose or by a list of langKnown elements.
  element langKnowledge {
    langKnowledge.content, langKnowledge.attributes
  }
langKnowledge.content = model.pLike | langKnown+
langKnowledge.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  
  ## supplies one or more valid language tags for the languages
  ## specified
  attribute tags {
    list { data.language+ }
  }?,
  empty
langKnown =
  
  ## (linguistic competence) summarizes the state of a person's knowledge of a single language.
  element langKnown { langKnown.content, langKnown.attributes }
langKnown.content = macro.phraseSeq
langKnown.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  
  ## supplies a  valid language tag for the language concerned.
  attribute tag { data.language },
  
  ## a code indicating the person's level of knowledge for this language
  attribute level { data.code }?,
  empty
listPerson =
  
  ## contains a list of descriptions, each of which provides information about an identifiable individual, for
  ## example the participants in a language interaction, or the people referred
  ## to in a historical source.
  element listPerson { listPerson.content, listPerson.attributes }
listPerson.content =
  model.pLike+
  | ((person | personGrp)+, particLinks?)
listPerson.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.declarable.attribute.default,
  empty
nationality =
  
  ## contains an informal description of a person's present
  ## or past nationality or citizenship.
  element nationality { nationality.content, nationality.attributes }
nationality.content = macro.phraseSeq
nationality.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.naming.attribute.key,
  
  ## supplies a regularized form of the country name using a
  ##	name or	code from ISO 3166
  attribute reg { data.code }?,
  empty
occupation =
  
  ## contains an informal description of a person's trade,
  ## profession or occupation.
  element occupation { occupation.content, occupation.attributes }
occupation.content = macro.phraseSeq
occupation.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## identifies the classification system or taxonomy in use by supplying
  ## the identifier of a taxonomy element elsewhere in the header.
  attribute scheme { data.pointer }?,
  
  ## identifies an occupation code defined within the
  ## classification system or taxonomy defined by the scheme
  ## attribute.
  attribute code { data.pointer }?,
  empty
particLinks =
  
  ## (participant relationships) describes the relationships or social links existing between
  ## participants in a linguistic interaction.
  element particLinks { particLinks.content, particLinks.attributes }
particLinks.content = model.pLike+ | relation+
particLinks.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
persEvent =
  
  ## contains a description of a particular event of significance in
  ## the life of  a person.
  element persEvent { persEvent.content, persEvent.attributes }
persEvent.content =
  label?,
  model.dateLike?,
  placeName?,
  model.pLike*,
  (model.noteLike | model.biblLike)*
persEvent.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  att.naming.attribute.key,
  empty
persState =
  
  ## contains a description of some ongoing status or quality
  ## attributed to a person.
  element persState { persState.content, persState.attributes }
persState.content =
  label?,
  model.dateLike?,
  model.pLike*,
  (model.noteLike | model.biblLike)*
persState.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  att.naming.attribute.key,
  empty
persTrait =
  
  ## contains a description of a personal or culturally-determined characteristic
  ## attributed to a person.
  element persTrait { persTrait.content, persTrait.attributes }
persTrait.content =
  label?,
  model.dateLike?,
  model.pLike*,
  (model.noteLike | model.biblLike)*
persTrait.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.naming.attribute.key,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  empty
person =
  
  ## provides information about an identifiable individual, for
  ## example a participant in a language interaction, or a person referred
  ## to in a historical source.
  element person { person.content, person.attributes }
person.content = model.pLike+ | model.personPart*
person.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## specifies a primary role or classification for the person.
  attribute role { data.words }?,
  
  ## specifies the sex of the person.
  attribute sex { data.sex }?,
  
  ## specifies an age group for the person.
  attribute age { data.word }?,
  empty
personGrp =
  
  ## (personal group) describes a group of individuals treated as a single person for
  ##   analytic purposes.
  element personGrp { personGrp.content, personGrp.attributes }
personGrp.content = model.pLike+ | model.personPart*
personGrp.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## specifies the role of this group of participants in the
  ##         interaction.
  attribute role { data.code }?,
  
  ## specifies the sex of the participant group.
  attribute sex { data.sex | "mixed" }?,
  
  ## specifies the age group of the participants.
  attribute age { data.word }?,
  
  ## specifies the size or approximate size of the group.
  attribute size { data.words }?,
  empty
relation =
  
  ## (relationship) describes any kind of relationship or linkage amongst a specified
  ## group of participants.
  element relation { relation.content, relation.attributes }
relation.content = empty
relation.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.naming.attribute.key,
  
  ## categorizes the relationship in some respect, e.g.
  ## as social, personal or other.
  [ a:defaultValue = "personal" ] attribute type { data.enumerated }?,
  
  ## supplies a name for the kind of  relationship of which
  ##	this is an instance.
  attribute name { data.enumerated },
  
  ## identifies the passive participants in a non-mutual
  ## relationship.
  attribute passive { data.pointers }?,
  (
   ## identifies the active participants in a non-mutual
   ## relationship, or all the participants in a mutual one.
   attribute active { data.pointers }
   | 
     ## supplies a list of participants amongst all of whom the relationship holds equally.
     attribute mutual { data.pointers })?,
  empty
residence =
  
  ## (residence) describes a person's present or past places of residence.
  element residence { residence.content, residence.attributes }
residence.content = macro.phraseSeq
residence.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.naming.attribute.key,
  empty
sex =
  
  ## specifies the sex of a person.
  element sex { sex.content, sex.attributes }
sex.content = macro.phraseSeq
sex.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  
  ##
  attribute value { data.sex }?,
  empty
socecStatus =
  
  ## (socio-economic status) contains an informal description of a person's perceived social or
  ## economic status.
  element socecStatus { socecStatus.content, socecStatus.attributes }
socecStatus.content = macro.phraseSeq
socecStatus.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.datable.attribute.notBefore,
  att.datable.attribute.notAfter,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.naming.attribute.key,
  
  ## identifies the classification system or taxonomy in use.
  attribute scheme { data.pointer }?,
  
  ## identifies a status code defined within the
  ## classification system or taxonomy defined by the source
  ## attribute.
  attribute code { data.pointer }?,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.datePart.attribute.value,
  att.datePart.attribute.type,
  att.datePart.attribute.full,
  empty
graph =
  
  ## encodes a graph, which is a collection of nodes, and arcs which
  ## connect the nodes.
  element graph { graph.content, graph.attributes }
graph.content =
  ((node, model.global*)+, (arc, model.global*)*)
  | ((arc, model.global*)+, (node, model.global*)+)
graph.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## describes the type of graph.
  attribute type { data.enumerated }?,
  
  ## gives a label for a graph.
  attribute label { text }?,
  
  ## states the order of the graph, i.e., the number of its nodes.
  attribute order { data.count }?,
  
  ## states the size of the graph, i.e., the number of its arcs.
  attribute size { data.count }?,
  empty
node =
  
  ## encodes a node, a possibly labeled point in a graph.
  element node { node.content, node.attributes }
node.content = empty
node.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## gives a label for a node.
  attribute label { text }?,
  
  ## gives a second label for a node.
  attribute label2 { text }?,
  
  ## provides the value of a node, which is a feature structure or
  ## other analytic element.
  attribute value { data.pointer }?,
  
  ## provides a type for a node.
  attribute type { data.enumerated }?,
  
  ## gives the identifiers of the nodes which are adjacent to the current node.
  attribute adjTo { data.pointers }?,
  
  ## gives the identifiers of the nodes which are adjacent from the current
  ## node.
  attribute adjFrom { data.pointers }?,
  
  ## gives the identifiers of the nodes which are both adjacent to and
  ## adjacent from the current node.
  attribute adj { data.pointers }?,
  
  ## gives the in degree of the node, the number of nodes which
  ## are adjacent from the given node.
  attribute inDegree { data.count }?,
  
  ## gives the out degree of the node, the number of nodes which
  ## are adjacent to the given node.
  attribute outDegree { data.count }?,
  
  ## gives the degree of the node, the number of arcs with which
  ## the node is incident.
  attribute degree { data.count }?,
  empty
arc =
  
  ## encodes an arc, the connection from one node to another in a graph.
  element arc { arc.content, arc.attributes }
arc.content = empty
arc.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## gives a label for an arc.
  attribute label { text }?,
  
  ## gives a second label for an arc.
  attribute label2 { text }?,
  
  ## gives the identifier of the node which is adjacent from this arc.
  attribute from { data.pointer },
  
  ## gives the identifier of the node which is adjacent to this arc.
  attribute to { data.pointer },
  empty
tree =
  
  ## encodes a tree, which is made up of a root, internal nodes,
  ## leaves, and arcs from root to leaves.
  element tree { tree.content, tree.attributes }
tree.content = (leaf | iNode)*, root, (leaf | iNode)*
tree.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## gives a label for a tree.
  attribute label { text }?,
  
  ## gives the maximum number of children of the root and internal
  ## nodes of the tree.
  attribute arity { data.count }?,
  
  ## indicates whether or not the tree is ordered, or if it is
  ## partially ordered.
  [ a:defaultValue = "true" ]
  attribute ord {
    
    ## (indicates that all of the branching nodes of the tree are ordered.) 
    "true"
    | 
      ## (indicates that some of the branching nodes of the tree are ordered
      ## and some are unordered.) 
      "partial"
    | 
      ## (indicates that all of the branching nodes of the tree are
      ## unordered.) 
      "false"
  },
  
  ## gives the order of the tree, i.e., the number of its nodes.
  attribute order { data.count }?,
  empty
root =
  
  ## (root node) represents the root node of a tree.
  element root { root.content, root.attributes }
root.content = empty
root.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## gives a label for a root node.
  attribute label { text }?,
  
  ## provides the value of the root, which is a feature structure or
  ## other analytic element.
  attribute value { data.pointer }?,
  
  ## provides a list of identifiers of the elements which are the children of
  ## the root node.
  attribute children { data.pointers },
  
  ## indicates whether or not the root is ordered.
  attribute ord {
    
    ## (indicates that the children of the root are ordered.) 
    "true"
    | 
      ## (indicates that the children of the root are unordered.) 
      "false"
  }?,
  
  ## gives the out degree of the root, the number of its children.
  attribute outDegree { data.count }?,
  empty
iNode =
  
  ## (intermediate (or internal) node) represents an intermediate (or internal) node of a tree.
  element iNode { iNode.content, iNode.attributes }
iNode.content = empty
iNode.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## gives a label for an intermediate node.
  attribute label { text }?,
  
  ## provides the value of an intermediate node, which is a feature
  ## structure or other analytic element.
  attribute value { data.pointer }?,
  
  ## provides a list of identifiers of the elements which are the children of
  ## the intermediate node.
  attribute children { data.pointers },
  
  ## provides the identifier of the element which is the parent of this node.
  attribute parent { data.pointer }?,
  
  ## indicates whether or not the internal node is ordered.
  attribute ord {
    
    ## (indicates that the children of the intermediate node are ordered.) 
    "true"
    | 
      ## (indicates that the children of the intermediate node are unordered.) 
      "false"
  }?,
  
  ## provides an identifier of
  ## the element which this node
  ## follows.
  attribute follow { data.pointer }?,
  
  ## gives the out degree of an intermediate node, the number of its
  ## children.
  attribute outDegree { data.count }?,
  empty
leaf =
  
  ## encodes the leaves (terminal nodes) of a tree.
  element leaf { leaf.content, leaf.attributes }
leaf.content = empty
leaf.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## gives a label for a leaf.
  attribute label { text }?,
  
  ## provides the value of a leaf, which is a feature
  ## structure or other analytic element.
  attribute value { data.pointer }?,
  
  ## provides the identifier of parent of a leaf.
  attribute parent { data.pointer }?,
  
  ## provides an identifier of an element which this leaf follows.
  attribute follow { data.pointer }?,
  empty
eTree =
  
  ## (embedding tree) provides an alternative to tree element for representing
  ## ordered rooted tree structures.
  element eTree { eTree.content, eTree.attributes }
eTree.content = (eTree | triangle | eLeaf)*
eTree.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## gives a label for an embedding tree.
  attribute label { text }?,
  
  ## provides the value of an embedding tree, which is a feature
  ## structure or other analytic element.
  attribute value { data.pointer }?,
  empty
triangle =
  
  ## (Underspecified embedding tree, so called because of its
  ## characteristic shape when drawn.) provides for an underspecified eTree, that is,
  ## an eTree with information left out.
  element triangle { triangle.content, triangle.attributes }
triangle.content = (eTree | triangle | eLeaf)*
triangle.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## gives a label for an underspecified embedding tree.
  attribute label { text }?,
  
  ## provides the value of a triangle, which is the identifier of a feature
  ## structure or other analytic element.
  attribute value { data.pointer }?,
  empty
eLeaf =
  
  ## (Leaf of an embedding tree.) provides explicitly for a leaf of an embedding tree, which may also
  ## be encoded with the eTree element.
  element eLeaf { eLeaf.content, eLeaf.attributes }
eLeaf.content = empty
eLeaf.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## gives a label for a leaf of an embedding tree.
  attribute label { text }?,
  
  ## provides the value of an embedding leaf, which is a feature
  ## structure or other analytic element.
  attribute value { data.pointer }?,
  empty
forest =
  
  ## provides for groups of rooted trees.
  element forest { forest.content, forest.attributes }
forest.content = (tree | eTree | triangle)+
forest.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## identifies the type of the forest.
  attribute type { data.enumerated }?,
  empty
forestGrp =
  
  ## (Forest group) provides for groups of forests.
  element forestGrp { forestGrp.content, forestGrp.attributes }
forestGrp.content = forest+
forestGrp.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## identifies the type of the forest group.
  attribute type { data.enumerated }?,
  empty
model.divPart.spoken =
  u | pause | vocal | kinesic | event | writing | shift
u =
  
  ## (utterance) a stretch of speech usually preceded and followed by
  ## silence or by a change of speaker.
  element u { u.content, u.attributes }
u.content =
  (text
   | model.gLike
   | model.phrase
   | model.divPart.spoken
   | model.global)*
u.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.timed.attribute.start,
  att.timed.attribute.end,
  att.timed.attribute.dur,
  att.declaring.attribute.decls,
  att.ascribed.attribute.who,
  
  ## indicates the nature of the transition between this utterance
  ##           and the previous one.
  [ a:defaultValue = "smooth" ]
  attribute trans {
    
    ## (this  utterance begins without unusual pause or rapidity.) 
    "smooth"
    | 
      ## (this utterance begins with a markedly shorter pause than normal.) 
      "latching"
    | 
      ## (this utterance begins before the previous one has finished.) 
      "overlap"
    | 
      ## (this utterance begins after a noticeable pause.) 
      "pause"
  }?,
  empty
pause =
  
  ## a pause either between or within utterances.
  element pause { pause.content, pause.attributes }
pause.content = empty
pause.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.timed.attribute.start,
  att.timed.attribute.end,
  att.timed.attribute.dur,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  att.ascribed.attribute.who,
  empty
vocal =
  
  ## (Vocalized semi-lexical) any vocalized but not necessarily lexical phenomenon, for example
  ## voiced pauses, non-lexical backchannels, etc.
  element vocal { vocal.content, vocal.attributes }
vocal.content = macro.glossSeq
vocal.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.timed.attribute.start,
  att.timed.attribute.end,
  att.timed.attribute.dur,
  att.ascribed.attribute.who,
  
  ## indicates whether or not the phenomenon is repeated.
  [ a:defaultValue = "false" ]
  attribute iterated {
    
    ## (the phenomenon is repeated.) 
    "true"
    | 
      ## (the phenomenon is atomic.) 
      "false"
    | 
      ## (unknown or unmarked.) 
      "unknown"
  }?,
  empty
kinesic =
  
  ## (Non-vocalized quasi-lexical) any communicative phenomenon, not necessarily vocalized, for
  ## example a gesture, frown, etc.
  element kinesic { kinesic.content, kinesic.attributes }
kinesic.content = macro.glossSeq
kinesic.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.timed.attribute.start,
  att.timed.attribute.end,
  att.timed.attribute.dur,
  att.ascribed.attribute.who,
  
  ## indicates
  ## whether or not the phenomenon is repeated.
  [ a:defaultValue = "false" ]
  attribute iterated {
    
    ## (the phenomenon is repeated.) 
    "true"
    | 
      ## (the phenomenon is atomic.) 
      "false"
    | 
      ## (unknown or unmarked.) 
      "unknown"
  }?,
  empty
event =
  
  ## (Event) any phenomenon or occurrence, not necessarily vocalized or
  ## communicative, for example incidental noises or other events affecting
  ## communication.
  element event { event.content, event.attributes }
event.content = macro.glossSeq
event.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.timed.attribute.start,
  att.timed.attribute.end,
  att.timed.attribute.dur,
  att.ascribed.attribute.who,
  
  ## indicates whether or not the phenomenon is repeated.
  [ a:defaultValue = "false" ]
  attribute iterated {
    
    ## (the phenomenon is repeated.) 
    "true"
    | 
      ## (the phenomenon is atomic.) 
      "false"
    | 
      ## (unknown or unmarked.) 
      "unknown"
  }?,
  empty
writing =
  
  ## (Writing) a passage of written text revealed to participants in the course
  ## of a spoken text.
  element writing { writing.content, writing.attributes }
writing.content = macro.paraContent
writing.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.ascribed.attribute.who,
  
  ## categorizes the kind of writing in some way, for example
  ##       as a subtitle, noticeboard etc.
  attribute type { data.enumerated }?,
  
  ## points to a bibliographic citation in the header giving
  ##       a full description of the source or script of the writing.
  attribute script { data.code }?,
  
  ## indicates whether the writing is revealed all at once or
  ##         gradually.
  attribute gradual {
    
    ## (the writing is revealed gradually.) 
    "true"
    | 
      ## (the writing is revealed all at once.) 
      "false"
    | 
      ## (unknown or unmarked.) 
      "unknown"
  }?,
  empty
shift =
  
  ## (Shift) marks the point at which some paralinguistic feature of a series of
  ## utterances by any one speaker changes.
  element shift { shift.content, shift.attributes }
shift.content = empty
shift.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## a
  ## paralinguistic feature.
  attribute feature {
    
    ## (speed of utterance.) 
    "tempo"
    | 
      ## (loudness.) 
      "loud"
    | 
      ## (pitch range.) 
      "pitch"
    | 
      ## (tension or stress pattern.) 
      "tension"
    | 
      ## (rhythmic qualities.) 
      "rhythm"
    | 
      ## (voice quality.) 
      "voice"
  }?,
  
  ## specifies the new state of the paralinguistic feature specified.
  [ a:defaultValue = "normal" ] attribute new { data.enumerated }?,
  empty
att =
  
  ## (attribute) contains the name of an attribute appearing within running text.
  element att { att.content, att.attributes }
att.content = text
att.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## supplies an identifier for  the scheme in which this name is defined.
  [ a:defaultValue = "TEI" ] attribute scheme { data.enumerated }?,
  empty
code =
  
  ## contains literal code from some formal language such as a
  ## programming language
  element code { code.content, code.attributes }
code.content = text
code.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## a name identifying the formal language in which  the
  ##	code is expressed
  attribute lang { data.word }?,
  empty
eg =
  
  ## contains any kind of illustrative example.
  element eg { eg.content, eg.attributes }
eg.content = text
eg.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
egXML =
  
  ## contains a single well-formed XML example demonstrating the use of some XML element or
  ##   attribute.
  element teix:egXML { egXML.content, egXML.attributes }
egXML.content = text
egXML.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
gi =
  
  ## (generic identifier) contains the name (generic identifier) of an element.
  element gi { gi.content, gi.attributes }
gi.content = text
gi.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## supplies the name of the scheme in which this name is defined.
  [ a:defaultValue = "TEI" ] attribute scheme { data.enumerated }?,
  empty
ident =
  
  ## contains an identifier or name for an object of some kind in a formal language
  element ident { ident.content, ident.attributes }
ident.content = text
ident.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  empty
tag =
  
  ## contains text of a complete start- or end-tag, possibly
  ## including attribute specifications, but excluding the opening and
  ## closing markup delimiter characters.
  element tag { tag.content, tag.attributes }
tag.content = text
tag.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## supplies the name of the scheme in which this name is defined.
  [ a:defaultValue = "TEI" ]
  attribute scheme {
    
    ## (this tag is part of the TEI scheme.) 
    "TEI"
    | 
      ## (this element is  part of the Docbook scheme.) 
      "DBK"
  }?,
  empty
val =
  
  ## (value) contains a single attribute value.
  element val { val.content, val.attributes }
val.content = text
val.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
specList =
  
  ## marks where a list of descriptions is to be inserted into the prose documentation.
  element specList { specList.content, specList.attributes }
specList.content = specDesc+
specList.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
specDesc =
  
  ## (Element or class description) indicates that a description of the specified element or class should
  ##           be included at this point within a document.
  element specDesc { specDesc.content, specDesc.attributes }
specDesc.content = empty
specDesc.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## (identifier) supplies the identifier of the documentary element or class for
  ##           which a description is to be obtained.
  attribute key { data.name }?,
  
  ## (attributes) supplies attribute names for which descriptions should additionally
  ##           be obtained.
  attribute atts {
    list { data.name* }
  }?,
  empty
moduleRef =
  
  ## references a module which is to be incorporated into a schema.
  element moduleRef { moduleRef.content, moduleRef.attributes }
moduleRef.content = content?
moduleRef.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  (
   ## the name of a TEI module
   attribute key { xsd:NCName }
   | 
     ## refers to a non-TEI module by external location
     attribute url { xsd:anyURI })?,
  empty
moduleSpec =
  
  ## documents the structure, content, and purpose of a single
  ## module, i.e. a named and externally visible group of declarations.
  element moduleSpec { moduleSpec.content, moduleSpec.attributes }
moduleSpec.content = macro.glossSeq, exemplum*, remarks?, listRef*
moduleSpec.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.identified.attribute.ident,
  att.identified.attribute.depend,
  att.identified.attribute.predeclare,
  att.identified.attribute.module,
  att.identified.attribute.mode,
  
  ## type of module to be generated
  attribute type { text }?,
  
  ## the name of one or more TEI modules which are suggested
  ##	for use with the current module
  attribute suggests { data.names }?,
  
  ## the name of one or more TEI modules which must be
  ##	be available for this module to function properly
  attribute depends { data.names }?,
  empty
schemaSpec =
  
  ## generates a TEI-conformant schema and documentation for it.
  element schemaSpec { schemaSpec.content, schemaSpec.attributes }
schemaSpec.content =
  macro.glossSeq, (moduleRef | specGrpRef | model.oddDecl)*
schemaSpec.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.identified.attribute.ident,
  att.identified.attribute.depend,
  att.identified.attribute.predeclare,
  att.identified.attribute.module,
  att.identified.attribute.mode,
  
  ## specifies entry points to the schema, i.e. which elements
  ##       are allowed to be used as the root of documents conforming to
  ##       it.
  [ a:defaultValue = "TEI" ] attribute start { data.names }?,
  
  ## specifies the default namespace (if any) applicable to
  ##       components of the schema.
  [ a:defaultValue = "http://www.tei-c.org/ns/1.0" ]
  attribute ns { data.namespace }?,
  
  ## specifies a prefix which will be appended to all patterns
  ##       relating to TEI elements. This allows for external schemas to be mixed in
  ##       which have elements of the same names as the TEI.
  attribute prefix { data.name }?,
  
  ## Where names for element or attribute
  ##       are available
  ##       in more than one language, specifies which language to
  ##       use when creating the objects in a schema.
  attribute targetLang { data.language }?,
  
  ## Where the descrition for an element, attribute, class or macro
  ##       is available in more than one language, specifies which languages to
  ##       use when creating documentation.
  attribute docLang {
    list { data.language }
  }?,
  empty
specGrp =
  
  ## (specification group) contains any convenient grouping of specifications for use within
  ##   the current module.
  element specGrp { specGrp.content, specGrp.attributes }
specGrp.content = (model.oddDecl | model.oddRef | model.divPart)*
specGrp.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
specGrpRef =
  
  ## (reference to a specification group) indicates that the  declarations contained by the
  ##   specGrp referenced should be inserted at this point.
  element specGrpRef { specGrpRef.content, specGrpRef.attributes }
specGrpRef.content = empty
specGrpRef.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## points at the specification group  which logically belongs here.
  attribute target { data.pointer },
  empty
stringVal =
  
  ## contains the intended expansion for the entity documented
  ## by an patternSpec element, enclosed by quotation marks.
  element stringVal { stringVal.content, stringVal.attributes }
stringVal.content = text
stringVal.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
elementSpec =
  
  ## documents the structure, content, and purpose of a single
  ## element type.
  element elementSpec { elementSpec.content, elementSpec.attributes }
elementSpec.content =
  macro.glossSeq,
  classes?,
  content?,
  attList?,
  exemplum*,
  remarks*,
  listRef*
elementSpec.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.identified.attribute.ident,
  att.identified.attribute.depend,
  att.identified.attribute.predeclare,
  att.identified.attribute.module,
  att.identified.attribute.mode,
  
  ## (namespace) specifies the namespace to which this element belongs
  [ a:defaultValue = "http://www.tei-c.org/ns/1.0" ]
  attribute ns { data.namespace }?,
  
  ## specifies the optionality of an attribute or element.
  [ a:defaultValue = "opt" ]
  attribute usage {
    
    ## (required) 
    "req"
    | 
      ## (mandatory when applicable) 
      "mwa"
    | 
      ## (recommended) 
      "rec"
    | 
      ## (recommended when applicable) 
      "rwa"
    | 
      ## (optional) 
      "opt"
  }?,
  empty
classSpec =
  
  ## contains reference information for a TEI element class; 
  ## that is a group of 
  ##   elements which appear together in  content models, or 
  ##   which share some common attribute, or both.
  element classSpec { classSpec.content, classSpec.attributes }
classSpec.content =
  macro.glossSeq, classes?, attList?, exemplum*, remarks*, listRef*
classSpec.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.identified.attribute.ident,
  att.identified.attribute.depend,
  att.identified.attribute.predeclare,
  att.identified.attribute.module,
  att.identified.attribute.mode,
  
  ## indicates whether this is a model class or an attribute class
  attribute type {
    
    ## (members of this class appear in the same  content models) 
    "model"
    | 
      ## (members of this class share common attributes) 
      "atts"
  },
  
  ## indicates whether a model class should be instantiated 
  ##	as a list of alternates or a sequence
  [ a:defaultValue = "alternation" ] attribute generate { data.names }?,
  empty
macroSpec =
  
  ## documents the function and implementation of a pattern.
  element macroSpec { macroSpec.content, macroSpec.attributes }
macroSpec.content =
  macro.glossSeq, (stringVal | content)+, exemplum*, remarks*, listRef*
macroSpec.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.identified.attribute.ident,
  att.identified.attribute.depend,
  att.identified.attribute.predeclare,
  att.identified.attribute.module,
  att.identified.attribute.mode,
  
  ## indicates which type of entity should be generated, when an ODD
  ##	processor is generating a module using SGML syntax.
  attribute type {
    
    ## (parameter entity) 
    "pe"
    | 
      ## (element parameter entity) 
      "epe"
    | 
      ## (general entity) 
      "ge"
    | 
      ## (datatype entity) 
      "dt"
  }?,
  empty
remarks =
  
  ## contains any commentary or discussion about the usage of an
  ## element, attribute, class, or entity not otherwise documented within the
  ## containing element.
  element remarks { remarks.content, remarks.attributes }
remarks.content = macro.componentSeq
remarks.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
listRef =
  
  ## (list of references) supplies a list of significant references to places where this
  ##   element is discussed, in the current document or elsewhere.
  element listRef { listRef.content, listRef.attributes }
listRef.content = ptr+
listRef.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
exemplum =
  
  ## contains a single example demonstrating the use of an element,
  ##   together with optional paragraphs of commentary.
  element exemplum { exemplum.content, exemplum.attributes }
exemplum.content = model.pLike*, (egXML | eg), model.pLike*
exemplum.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
classes =
  
  ## specifies all the classes of which the documented element or
  ## class is a member or subclass.
  element classes { classes.content, classes.attributes }
classes.content = memberOf*
classes.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
memberOf =
  
  ## specifies  class membership of the parent element or class.
  element memberOf { memberOf.content, memberOf.attributes }
memberOf.content = macro.xtext
memberOf.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## (a name) specifies the identifier for a class of which the documented
  ##  element or class is a member or subclass
  attribute key { data.name }?,
  empty
content =
  
  ## (schema declaration) contains the text of a declaration for the schema
  ## documented.
  element content { content.content, content.attributes }
content.content = (macro.schemapattern | valList)*
content.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
attList =
  
  ## contains documentation for all the attributes associated with this
  ## element, as a series of attDef elements.
  element attList { attList.content, attList.attributes }
attList.content = (attRef | attDef | attList)+
attList.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## specifies whether all the attributes in the list are
  ##   available (org="group") or only  one of them (org="choice")
  [ a:defaultValue = "group" ]
  attribute org {
    
    ## (grouped) 
    "group"
    | 
      ## (alternated) 
      "choice"
  }?,
  empty
attDef =
  
  ## (attribute definition) contains the definition of a single attribute.
  element attDef { attDef.content, attDef.attributes }
attDef.content =
  macro.glossSeq,
  datatype?,
  defaultVal?,
  (valList | valDesc)?,
  exemplum*,
  remarks*
attDef.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.identified.attribute.ident,
  att.identified.attribute.depend,
  att.identified.attribute.predeclare,
  att.identified.attribute.module,
  att.identified.attribute.mode,
  
  ## specifies the optionality of an attribute or element.
  [ a:defaultValue = "opt" ]
  attribute usage {
    
    ## (required) 
    "req"
    | 
      ## (mandatory when applicable) 
      "mwa"
    | 
      ## (recommended) 
      "rec"
    | 
      ## (recommended when applicable) 
      "rwa"
    | 
      ## (optional) 
      "opt"
  }?,
  
  ## (namespace) specifies the namespace to which this attribute belongs
  [ a:defaultValue = "http://www.tei-c.org/ns/1.0" ]
  attribute ns { data.namespace }?,
  empty
attRef =
  
  ## (attribute pointer) points to the definition of an attribute or group of attributes.
  element attRef { attRef.content, attRef.attributes }
attRef.content = empty
attRef.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## the name of the pattern defining the attribute(s)
  attribute name { data.word },
  empty
datatype =
  
  ## specifies the declared value for an attribute, by referring to
  ##   any datatype defined by the chosen schema language.
  element datatype { datatype.content, datatype.attributes }
datatype.content = macro.schemapattern*
datatype.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
defaultVal =
  
  ## specifies the default declared value for an attribute.
  element defaultVal { defaultVal.content, defaultVal.attributes }
defaultVal.content = text
defaultVal.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
valDesc =
  
  ## (value description) specifies any semantic or syntactic constraint on the value that
  ## an attribute may take, additional to the information carried by the
  ## datatype element.
  element valDesc { valDesc.content, valDesc.attributes }
valDesc.content = macro.phraseSeq
valDesc.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## specifies the effect of this declaration on its parent module.
  [ a:defaultValue = "add" ]
  attribute mode {
    
    ## (this declaration is added to the current definitions) 
    "add"
    | 
      ## (this declaration and all of its children are removed from the current setup) 
      "delete"
    | 
      ## (this declaration changes the declaration of the same
      ##	 name in the current definition) 
      "change"
    | 
      ## (this declaration replaces the declaration of the same
      ##	name in the current definition) 
      "replace"
  }?,
  empty
valItem =
  
  ## (value definition) contains a single value and gloss  pair for an attribute.
  element valItem { valItem.content, valItem.attributes }
valItem.content = macro.glossSeq
valItem.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.identified.attribute.ident,
  att.identified.attribute.depend,
  att.identified.attribute.predeclare,
  att.identified.attribute.module,
  att.identified.attribute.mode,
  empty
valList =
  
  ## (value list) contains one or more valItem elements defining possible
  ##   values for an attribute.
  element valList { valList.content, valList.attributes }
valList.content = valItem+
valList.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## specifies the effect of this declaration on its parent
  ##     module.
  [ a:defaultValue = "add" ]
  attribute mode {
    
    ## (this declaration is added to the current definitions) 
    "add"
    | 
      ## (this declaration and all of its children are removed from the current setup) 
      "delete"
    | 
      ## (this declaration changes the declaration of the same
      ##	 name in the current definition) 
      "change"
    | 
      ## (this declaration replaces the declaration of the same
      ##	name in the current definition) 
      "replace"
  }?,
  
  ## specifies the extensibility of the list of attribute values
  ##       specified.
  [ a:defaultValue = "open" ]
  attribute type {
    
    ## (only the values specified are permitted.) 
    "closed"
    | 
      ## (all the values specified should be supported, but
      ##	  other values are legal and software should have appropriate
      ##	  fallback processing for them.) 
      "semi"
    | 
      ## (the values specified are sample values only.) 
      "open"
  }?,
  empty
att.identified.attributes =
  att.identified.attribute.ident,
  att.identified.attribute.depend,
  att.identified.attribute.predeclare,
  att.identified.attribute.module,
  att.identified.attribute.mode,
  empty
att.identified.attribute.ident =
  
  ## Supplies the identifier by which this element is referenced.
  attribute ident { data.name }
att.identified.attribute.depend =
  
  ## The name of a module on which this object depends.
  attribute depend { xsd:NCName }?
att.identified.attribute.predeclare =
  
  ## Says whether the class should be treated as global, and so
  ##       needs predefining in the core.
  [ a:defaultValue = "false" ] attribute predeclare { xsd:boolean }?
att.identified.attribute.module =
  
  ## Supplies the name of the module in which this object is to
  ##       be defined.
  attribute module { xsd:NCName }?
att.identified.attribute.mode =
  
  ## specifies the effect of this declaration on its parent
  ##     module.
  [ a:defaultValue = "add" ]
  attribute mode {
    
    ## (this declaration is added to the current definitions) 
    "add"
    | 
      ## (this declaration and all of its children are removed from the current setup) 
      "delete"
    | 
      ## (this declaration changes the declaration of the same
      ##     name in the current definition) 
      "change"
    | 
      ## (this declaration replaces the declaration of the same
      ##     name in the current definition) 
      "replace"
  }?
model.rdgPart = wit | witStart | witEnd | lacunaStart | lacunaEnd
att.rdgPart.attributes = att.rdgPart.attribute.wit, empty
att.rdgPart.attribute.wit =
  
  ## contains a list of one or more sigla indicating the witnesses
  ## which begin or end at this point.
  attribute wit { data.pointers }?
att.textCritical.attributes =
  att.textCritical.attribute.wit,
  att.textCritical.attribute.type,
  att.textCritical.attribute.cause,
  att.textCritical.attribute.varSeq,
  att.textCritical.attribute.resp,
  att.textCritical.attribute.hand,
  empty
att.textCritical.attribute.wit =
  
  ## contains a list of one or more pointers indicating the witnesses
  ## which attest to a given reading.
  attribute wit { data.pointers }?
att.textCritical.attribute.type =
  
  ## classifies the reading according to some useful typology.
  attribute type { data.enumerated }?
att.textCritical.attribute.cause =
  
  ## classifies the cause for the variant reading, according to
  ## any appropriate typology of possible origins.
  attribute cause { data.enumerated }?
att.textCritical.attribute.varSeq =
  
  ## provides a number indicating the position of this reading in a
  ## sequence, when there is reason to presume a sequence to the variants
  ## on any one lemma.
  attribute varSeq { xsd:nonNegativeInteger }?
att.textCritical.attribute.resp =
  
  ## identifies the editor responsible for asserting a
  ##	particular reading in the witness.
  attribute resp { data.pointer }?
att.textCritical.attribute.hand =
  
  ## signifies the hand responsible for a particular reading in the
  ## witness.
  attribute hand { data.pointer }?
app =
  
  ## (apparatus entry) contains one entry in a critical apparatus, with an optional
  ## lemma and at least one reading.
  element app { app.content, app.attributes }
app.content =
  model.global*,
  (lem, model.global*, (wit, model.global*)?)?,
  ((rdg, model.global*, (wit, model.global*)?)
   | (rdgGrp, model.global*, (wit, model.global*)?))+
app.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## classifies the variation contained in this element according to
  ## some convenient typology.
  attribute type { data.enumerated }?,
  
  ## identifies the beginning of the lemma in the base text, if
  ## necessary.
  attribute from { data.pointer }?,
  
  ## identifies the endpoint of the lemma in the base text, if
  ## necessary.
  attribute to { data.pointer }?,
  
  ## indicates the location of the variation, when the
  ## location-referenced method of apparatus markup is used.
  attribute loc { data.words }?,
  empty
lem =
  
  ## (lemma) contains the lemma, or base text, of a textual variation.
  element lem { lem.content, lem.attributes }
lem.content =
  (text
   | model.gLike
   | model.phrase
   | model.inter
   | model.global
   | model.rdgPart)*
lem.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.textCritical.attribute.wit,
  att.textCritical.attribute.type,
  att.textCritical.attribute.cause,
  att.textCritical.attribute.varSeq,
  att.textCritical.attribute.resp,
  att.textCritical.attribute.hand,
  empty
rdg =
  
  ## (reading) contains a single reading within a textual variation.
  element rdg { rdg.content, rdg.attributes }
rdg.content =
  (text
   | model.gLike
   | model.phrase
   | model.inter
   | model.global
   | model.rdgPart)*
rdg.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.textCritical.attribute.wit,
  att.textCritical.attribute.type,
  att.textCritical.attribute.cause,
  att.textCritical.attribute.varSeq,
  att.textCritical.attribute.resp,
  att.textCritical.attribute.hand,
  empty
rdgGrp =
  
  ## (reading group) within a textual variation,
  ## groups two or more readings perceived to have a genetic
  ## relationship or other affinity.
  element rdgGrp { rdgGrp.content, rdgGrp.attributes }
rdgGrp.content =
  ((rdgGrp, wit?)
   | ((lem, wit?)?, (rdg, wit?))*)+
rdgGrp.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.textCritical.attribute.wit,
  att.textCritical.attribute.type,
  att.textCritical.attribute.cause,
  att.textCritical.attribute.varSeq,
  att.textCritical.attribute.resp,
  att.textCritical.attribute.hand,
  empty
witDetail =
  
  ## gives further information about a particular witness, or
  ## witnesses, to a particular reading.
  element witDetail { witDetail.content, witDetail.attributes }
witDetail.content = macro.phraseSeq
witDetail.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.placement.attribute.place,
  
  ## indicates the identifier for the reading, or readings, to which
  ## the witness detail refers.
  attribute target { data.pointers },
  
  ## identifies the individual responsible for  identifying the
  ## witness
  attribute resp { data.pointer }?,
  
  ## indicates the sigil or sigla for the witnesses to which the
  ## detail refers.
  attribute wit { data.code },
  
  ## describes the type of information given about the witness.
  attribute type { data.pointers }?,
  empty
wit =
  
  ## contains a list of one or more sigla of witnesses attesting a
  ## given reading, in a textual variation.
  element wit { wit.content, wit.attributes }
wit.content = macro.phraseSeq
wit.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.rdgPart.attribute.wit,
  empty
witList =
  
  ## (witness list) contains a list of all the witnesses referred to in
  ## wit elements or wit attributes
  ## within the critical apparatus.
  element witList { witList.content, witList.attributes }
witList.content = model.global*, (witness, model.global*)+
witList.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
witness =
  
  ## contains either a description of a single witness referred to
  ## within the critical apparatus, or a list of witnesses which is to be
  ## referred to by a single sigil.
  element witness { witness.content, witness.attributes }
witness.content = macro.paraContent
witness.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## indicates which other witnesses are included in a witness group.
  attribute included { data.pointers }?,
  empty
witStart =
  
  ## indicates the beginning, or resumption, of the text of a
  ## fragmentary witness.
  element witStart { witStart.content, witStart.attributes }
witStart.content = empty
witStart.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.rdgPart.attribute.wit,
  empty
witEnd =
  
  ## indicates the end, or suspension, of the text of a fragmentary
  ## witness.
  element witEnd { witEnd.content, witEnd.attributes }
witEnd.content = empty
witEnd.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.rdgPart.attribute.wit,
  empty
lacunaStart =
  
  ## indicates the beginning of a lacuna in the text of a mostly
  ## complete textual witness.
  element lacunaStart { lacunaStart.content, lacunaStart.attributes }
lacunaStart.content = empty
lacunaStart.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.rdgPart.attribute.wit,
  empty
lacunaEnd =
  
  ## indicates the end of a lacuna in a mostly complete textual
  ## witness.
  element lacunaEnd { lacunaEnd.content, lacunaEnd.attributes }
lacunaEnd.content = empty
lacunaEnd.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.rdgPart.attribute.wit,
  empty
addSpan =
  
  ## (added span of text) marks the beginning of a longer sequence of text added by an
  ##   author, scribe, annotator or corrector (see also add).
  element addSpan { addSpan.content, addSpan.attributes }
addSpan.content = empty
addSpan.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.authorialIntervention.attribute.hand,
  att.authorialIntervention.attribute.status,
  att.authorialIntervention.attribute.type,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.placement.attribute.place,
  att.spanning.attribute.spanTo,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.editLike.attribute.cert,
  att.editLike.attribute.resp,
  att.editLike.attribute.evidence,
  att.authorialIntervention.attribute.hand,
  att.authorialIntervention.attribute.status,
  att.authorialIntervention.attribute.type,
  att.spanning.attribute.spanTo,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  
  ## 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.words }?,
  
  ## 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.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.placement.attribute.place,
  
  ## classifies the material encoded according to some useful typology.
  attribute type { data.enumerated }?,
  empty
model.divPart.verse = notAllowed
att.metrical.attributes =
  att.metrical.attribute.met,
  att.metrical.attribute.real,
  att.metrical.attribute.rhyme,
  empty
att.metrical.attribute.met =
  
  ## contains a user-specified encoding for the conventional
  ## metrical structure of the element.
  attribute met { xsd:string }?
att.metrical.attribute.real =
  
  ## contains a user-specified encoding for the actual realization
  ## of the conventional metrical structure applicable to the element.
  attribute real { xsd:string }?
att.metrical.attribute.rhyme =
  
  ## specifies the rhyme scheme applicable to a group of verse lines.
  attribute rhyme { xsd:string }?
att.enjamb.attributes = att.enjamb.attribute.enjamb, empty
att.enjamb.attribute.enjamb =
  
  ## indicates that the end of a verse line is marked by enjambement.
  attribute enjamb { data.enumerated }?
caesura =
  
  ## marks the point at which a metrical line may be divided.
  element caesura { caesura.content, caesura.attributes }
caesura.content = empty
caesura.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  empty
rhyme =
  
  ## marks the rhyming part of  a metrical line.
  element rhyme { rhyme.content, rhyme.attributes }
rhyme.content = macro.paraContent
rhyme.attributes =
  att.global.attribute.xmlspace,
  att.global.attribute.xmlid,
  att.global.attribute.n,
  att.global.attribute.xmllang,
  att.global.attribute.rend,
  att.global.attribute.xmlbase,
  att.global.linking.attribute.corresp,
  att.global.linking.attribute.synch,
  att.global.linking.attribute.sameAs,
  att.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.analytic.attribute.ana,
  att.typed.attribute.type,
  att.typed.attribute.subtype,
  
  ## provides a label to identify which part of a rhyme
  ##	scheme this rhyming string instantiates.
  attribute label { xsd:string }?,
  empty
start = TEI | teiCorpus
