<app>

<app> (apparatus entry) contains one entry in a critical apparatus, with an optional lemma and at least one reading. [12.1.1 The Apparatus Entry]
Moduletextcrit — 12 Critical Apparatus
Attributesatt.global (@xml:id, @n, @xml:lang, @rend, @rendition, @xml:base, @xml:space) (att.global.linking (@corresp, @synch, @sameAs, @copyOf, @next, @prev, @exclude, @select)) (att.global.analytic (@ana)) (att.global.facs (@facs)) (att.global.change (@change))
typeclassifies the variation contained in this element according to some convenient typology.
Status Optional
Datatype

<rng:ref name="data.enumerated"/>
data.enumerated
Values Any convenient descriptive word or phrase, describing the extent of the variation (e.g. word, phrase, punctuation, etc.) its text-critical significance (e.g. significant, accidental, unclear), or the nature of the variation or the principles required to understand it (e.g. lectio difficilior, usus auctoris, etc.)
fromidentifies the beginning of the lemma in the base text, if necessary.
Status Optional
Datatype

<rng:ref name="data.pointer"/>
data.pointer
Values any valid identifier
Note
This attribute is only used when the double-end point method of apparatus markup is used.
toidentifies the endpoint of the lemma in the base text, if necessary.
Status Optional
Datatype

<rng:ref name="data.pointer"/>
data.pointer
Values any valid identifier
Note
This attribute is only used when the double-end point method of apparatus markup is used, with the encoded apparatus held in a separate file rather than being embedded in-line in the base-text file.
loc(location) indicates the location of the variation, when the location-referenced method of apparatus markup is used.
Status Optional
Datatype 1–∞ occurrences of 

<rng:ref name="data.word"/>
data.word
separated by whitespace
Values A string containing a canonical reference for the passage to which the variation applies.
Note
This attribute is used only when the location-referenced encoding method is used.
Used by
Contained by
May contain
Declaration

<rng:element name="app">
 <rng:ref name="att.global.attributes"/>
 <rng:ref name="att.global.linking.attributes"/>
 <rng:ref name="att.global.analytic.attributes"/>
 <rng:ref name="att.global.facs.attributes"/>
 <rng:ref name="att.global.change.attributes"/>
 <rng:optional>
  <rng:attribute name="type">
   <rng:ref name="data.enumerated"/>
  </rng:attribute>
 </rng:optional>
 <rng:optional>
  <rng:attribute name="from">
   <rng:ref name="data.pointer"/>
  </rng:attribute>
 </rng:optional>
 <rng:optional>
  <rng:attribute name="to">
   <rng:ref name="data.pointer"/>
  </rng:attribute>
 </rng:optional>
 <rng:optional>
  <rng:attribute name="loc">
   <rng:list>
    <rng:ref name="data.word"/>
    <rng:zeroOrMore>
     <rng:ref name="data.word"/>
    </rng:zeroOrMore>
   </rng:list>
  </rng:attribute>
 </rng:optional>
 <rng:group>
  <rng:zeroOrMore>
   <rng:ref name="model.global"/>
  </rng:zeroOrMore>
  <rng:optional>
   <rng:ref name="lem"/>
   <rng:zeroOrMore>
    <rng:ref name="model.global"/>
   </rng:zeroOrMore>
   <rng:optional>
    <rng:ref name="wit"/>
    <rng:zeroOrMore>
     <rng:ref name="model.global"/>
    </rng:zeroOrMore>
   </rng:optional>
  </rng:optional>
  <rng:zeroOrMore>
   <rng:choice>
    <rng:group>
     <rng:ref name="model.rdgLike"/>
     <rng:zeroOrMore>
      <rng:ref name="model.global"/>
     </rng:zeroOrMore>
     <rng:optional>
      <rng:ref name="wit"/>
      <rng:zeroOrMore>
       <rng:ref name="model.global"/>
      </rng:zeroOrMore>
     </rng:optional>
    </rng:group>
    <rng:group>
     <rng:ref name="rdgGrp"/>
     <rng:zeroOrMore>
      <rng:ref name="model.global"/>
     </rng:zeroOrMore>
     <rng:optional>
      <rng:ref name="wit"/>
      <rng:zeroOrMore>
       <rng:ref name="model.global"/>
      </rng:zeroOrMore>
     </rng:optional>
    </rng:group>
   </rng:choice>
  </rng:zeroOrMore>
 </rng:group>
</rng:element>
element app
{
   att.global.attributes,
   att.global.linking.attributes,
   att.global.analytic.attributes,
   att.global.facs.attributes,
   att.global.change.attributes,
   attribute type { data.enumerated }?,
   attribute from { data.pointer }?,
   attribute to { data.pointer }?,
   attribute loc { list { data.word, data.word* } }?,
   (
      model.global*,
      ( lem, model.global*, ( wit, model.global* )? )?,
      (
         ( model.rdgLike, model.global*, ( wit, model.global* )? )
       | ( rdgGrp, model.global*, ( wit, model.global* )? )
      )*
   )
}
Schematron

<sch:assert
 test="count( descendant::tei:lem[ generate-id( current() ) = generate-id( ancestor::tei:app[1] ) ]) < 2">
Only one <lem> element may appear within a single
apparatus entry, whether it appears outside a <rdgGrp>
element or within it.</sch:assert>
Schematron

<sch:assert
 test="count(descendant::tei:rdg[generate-id(current() ) = generate-id(ancestor::tei:app[1])]) > 0">
An <app>
must contain at least one <rdg> element.</sch:assert>
Example
<app>
 <lem wit="#El #Hg">Experience</lem>
 <rdg wit="#La" type="substantive">Experiment</rdg>
 <rdg wit="#Ra2" type="substantive">Eryment</rdg>
</app>
Example
<app type="substantive">
 <rdgGrp type="subvariants">
  <lem wit="#El #Hg">Experience</lem>
  <rdg wit="#Ha4">Experiens</rdg>
 </rdgGrp>
 <rdgGrp type="subvariants">
  <lem wit="#Cp #Ld1">Experiment</lem>
  <rdg wit="#La">Ex<g ref="#per"/>iment</rdg>
 </rdgGrp>
 <rdgGrp type="subvariants">
  <lem>Eriment<wit>[unattested]</wit>
  </lem>
  <rdg wit="#Ra2">Eryment</rdg>
 </rdgGrp>
</app>