Revision 70be33ceb72f3b33ca91a1f5484e3687d952c88c authored by raffazizzi on 21 March 2023, 18:35:47 UTC, committed by raffazizzi on 21 March 2023, 18:35:47 UTC
1 parent 5c1bdce
Raw File
p5odds.odd
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright TEI Consortium. 
Dual-licensed under CC-by and BSD2 licences 
See the file COPYING.txt for details
$Date$
$Id$
-->
<?xml-model href="http://jenkins.tei-c.org/job/TEIP5-dev/lastSuccessfulBuild/artifact/P5/release/xml/tei/odd/p5odds.rnc" type="application/relax-ng-compact-syntax"?>
<?xml-model href="http://jenkins.tei-c.org/job/TEIP5-dev/lastSuccessfulBuild/artifact/P5/release/xml/tei/odd/p5odds.isosch" type="application/xml" schematypens="http://purl.oclc.org/dsdl/schematron"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0"
     xmlns:rng="http://relaxng.org/ns/structure/1.0"
     xmlns:sqf="http://www.schematron-quickfix.com/validator/process"
     xmlns:sch="http://purl.oclc.org/dsdl/schematron" >
  <teiHeader>
    <fileDesc>
      <titleStmt>
        <title>TEI for the TEI Guidelines</title>
        <author>Sebastian Rahtz</author>
      </titleStmt>
      <publicationStmt>
        <publisher>TEI Consortium</publisher>
      </publicationStmt>
      <sourceDesc>
        <p>authored from scratch</p>
      </sourceDesc>
    </fileDesc>
  </teiHeader>
  <text>
    <body>
      <schemaSpec ident="p5odds" prefix="TEI_"
                  start="TEI schemaSpec elementSpec classSpec macroSpec dataSpec div">
        <moduleRef key="header"/>
        <moduleRef key="core"/>
        <moduleRef key="tei"/>
        <moduleRef key="gaiji"/>
        <moduleRef key="namesdates"/>
        <moduleRef key="textstructure" except="div1 div2 div3 div4 div5 div6 div7"/>
        <moduleRef key="tagdocs"/>
        <moduleRef key="dictionaries"/>
        <moduleRef key="linking"/>
        <moduleRef key="figures"/>
        <moduleRef url="Exemplars/svg11.rng">
          <content>
            <define xmlns="http://relaxng.org/ns/structure/1.0" combine="choice" name="tei_model.graphicLike">
              <ref name="svg"/>
            </define>
          </content>
        </moduleRef>
        <moduleRef url="Exemplars/mathml2-main.rng"/>
        <moduleRef url="Exemplars/relaxng.rng"/>

        <constraintSpec scheme="schematron" ident="when_glosses_English_required">
          <desc>Per <ref
          target="https://github.com/TEIC/TEI/issues/2037">ticket
          237</ref>, Council has decided that every specification
          element that has any <gi>gloss</gi> child must have a
          <gi>gloss</gi> child in English. This is in order to make
          figuring out which glosses need translation easier (or
          possible).</desc>
          <constraint>
            <!-- We attempted to enforce this with an abstract
                 pattern, but found that oNVDL does not support
                 abstract patterns. Thus, at least for now, just use
                 a bulky, straightfoward, ineligant, but easier to
                 process pattern. -->
            <sch:pattern id="en-gloss-if-any">
              <sch:rule context="  tei:elementSpec[tei:gloss]
                                 | tei:valItem[tei:gloss]
                                 | tei:attDef[tei:gloss]
                                 | tei:macroSpec[tei:gloss]
                                 | tei:classSpec[tei:gloss]
                                 | tei:dataSpec[tei:gloss]
                                 ">
                <sch:assert test="tei:gloss[ lang('en') ]">If there is any gloss inside <sch:value-of select="name(.)"/>, there must be an English gloss.</sch:assert>
              </sch:rule>
            </sch:pattern>
          </constraint>
        </constraintSpec>

        <!-- The abstract pattern version of the same constraint as above: -->
        <!-- <constraintSpec scheme="schematron" ident="when_glosses_English_required"> -->
        <!--   <desc>Per <ref -->
        <!--   target="https://github.com/TEIC/TEI/issues/2037">ticket -->
        <!--   237</ref>, Council has decided that every specification -->
        <!--   element that has any <gi>gloss</gi> child must have a -->
        <!--   <gi>gloss</gi> child in English. This is in order to make -->
        <!--   figuring out which glosses need translation easier (or -->
        <!--   possible).</desc> -->
        <!--   <constraint> -->
        <!--     <sch:pattern abstract="true" id="en-gloss-if-any"> -->
        <!--       <!\-\- parameter 'gse' is for "glossed specification element (type)" \-\-> -->
        <!--       <sch:rule context="$gse[tei:gloss]"> -->
        <!--    <sch:assert test="tei:gloss[ lang('en') ]">If there is any gloss inside <sch:value-of select="name(.)"/>, there must be an English gloss.</sch:assert> -->
        <!--       </sch:rule> -->
        <!--     </sch:pattern> -->
        <!--   </constraint> -->
        <!-- </constraintSpec> -->

        <!-- <elementSpec ident="elementSpec" mode="change" module="tagdocs"> -->
        <!--   <constraintSpec scheme="schematron" ident="EGIA_elementSpec"> -->
        <!--     <constraint> -->
        <!--       <sch:pattern id="egia-elementSpec" is-a="en-gloss-if-any"> -->
        <!--    <sch:param name="gse" value="tei:elementSpec"/> -->
        <!--       </sch:pattern> -->
        <!--     </constraint> -->
        <!--   </constraintSpec> -->
        <!-- </elementSpec> -->
        
        <!-- <elementSpec ident="valItem" mode="change" module="tagdocs"> -->
        <!--   <constraintSpec scheme="schematron" ident="EGIA_valItem"> -->
        <!--     <constraint> -->
        <!--       <sch:pattern id="egia-valItem" is-a="en-gloss-if-any"> -->
        <!--    <sch:param name="gse" value="tei:valItem"/> -->
        <!--       </sch:pattern> -->
        <!--     </constraint> -->
        <!--   </constraintSpec> -->
        <!-- </elementSpec> -->
        
        <!-- <elementSpec ident="attDef" mode="change" module="tagdocs"> -->
        <!--   <constraintSpec scheme="schematron" ident="EGIA_attDef"> -->
        <!--     <constraint> -->
        <!--       <sch:pattern id="egia-attDef" is-a="en-gloss-if-any"> -->
        <!--    <sch:param name="gse" value="tei:attDef"/> -->
        <!--       </sch:pattern> -->
        <!--     </constraint> -->
        <!--   </constraintSpec> -->
        <!-- </elementSpec> -->
        
        <!-- <elementSpec ident="macroSpec" mode="change" module="tagdocs"> -->
        <!--   <constraintSpec scheme="schematron" ident="EGIA_macroSpec"> -->
        <!--     <constraint> -->
        <!--       <sch:pattern id="egia-macroSpec" is-a="en-gloss-if-any"> -->
        <!--    <sch:param name="gse" value="tei:macroSpec"/> -->
        <!--       </sch:pattern> -->
        <!--     </constraint> -->
        <!--   </constraintSpec> -->
        <!-- </elementSpec> -->
        
        <!-- <elementSpec ident="classSpec" mode="change" module="tagdocs"> -->
        <!--   <constraintSpec scheme="schematron" ident="EGIA_classSpec"> -->
        <!--     <constraint> -->
        <!--       <sch:pattern id="egia-classSpec" is-a="en-gloss-if-any"> -->
        <!--    <sch:param name="gse" value="tei:classSpec"/> -->
        <!--       </sch:pattern> -->
        <!--     </constraint> -->
        <!--   </constraintSpec> -->
        <!-- </elementSpec> -->
        
        <!-- <elementSpec ident="dataSpec" mode="change" module="tagdocs"> -->
        <!--   <constraintSpec scheme="schematron" ident="EGIA_dataSpec"> -->
        <!--     <constraint> -->
        <!--       <sch:pattern id="egia-dataSpec" is-a="en-gloss-if-any"> -->
        <!--    <sch:param name="gse" value="tei:dataSpec"/> -->
        <!--       </sch:pattern> -->
        <!--     </constraint> -->
        <!--   </constraintSpec> -->
        <!-- </elementSpec> -->
        
        <elementSpec ident="egXML" mode="change" module="tagdocs"
                     ns="http://www.tei-c.org/ns/Examples">
          <!-- 
               This definition of <teix:egXML> overrides that of P5 which, for
               some reason I don't grok, does not allow a <teix:egXML> descendant.
               —Syd, 2018-06-13
          -->
          <content>
            <alternate minOccurs="1" maxOccurs="unbounded">
              <textNode/>
              <elementRef key="egXML"/>
              <anyElement/>
            </alternate>
          </content>
        </elementSpec>
        <elementSpec ident="eg" mode="change" module="tagdocs">
          <constraintSpec ident="no_leading_nor_trailing_new_newlines" scheme="schematron">
            <desc xml:lang="en" versionDate="2020-12-18">
              In order to prevent inconsistent <soCalled>sizes</soCalled> of the box
              that holds the example in the HTML output, and even moreso to avoid
              getting the <quote>bibliography Show all ⚓</quote> looking ugly at the
              bottom, there should be no leading nor trailing newlines. If you really
              want a newline at the beginning, precede it with U+00A0 (NO-BREAK SPACE);
              if you really want a newline at the end, follow it with U+00A0.
            </desc>
            <constraint>
              <sch:report test="matches( .//text()[last()], '&#x0A;\s*$')">trailing newline not allowed</sch:report>
              <sch:report test="matches( .//text()[1],      '^\s*&#x0A;')">leading newline not allowed</sch:report>
            </constraint>
          </constraintSpec>
        </elementSpec>
        <macroSpec ident="anyISOSchematron" mode="add">
          <content>
            <element xmlns="http://relaxng.org/ns/structure/1.0">
              <nsName ns="http://purl.oclc.org/dsdl/schematron"/>
              <zeroOrMore>
                <choice>
                  <attribute>
                    <anyName/>
                  </attribute>
                  <ref name="anyISOSchematron"/>
                  <ref name="anySchematronQuickFix"/>
                  <text/>
                </choice>
              </zeroOrMore>
            </element>
          </content>
        </macroSpec>

        <macroSpec ident="anySchematronQuickFix" mode="add">
          <content>
            <element xmlns="http://relaxng.org/ns/structure/1.0">
              <nsName ns="http://www.schematron-quickfix.com/validator/process"/>
              <zeroOrMore>
                <choice>
                  <attribute>
                    <anyName/>
                  </attribute>
                  <ref name="anySchematronQuickFix"/>
                  <ref name="anyISOSchematron"/>
                  <text/>
                </choice>
              </zeroOrMore>
            </element>
          </content>
        </macroSpec>

        <!-- in examples we'd like to be able to show use of <xi:include>; of course, -->
        <!-- we can't put in an <xi:include> element, or it will be processed! Thus, -->
        <!-- here we use a bogus namespace -->
        <elementSpec ident="include" ns="http://www.example.org/cannot/really/use/XInclude" mode="add">
          <!-- the content and attributes were devised based on my reading of the spec at
               http://www.w3.org/TR/2006/REC-xinclude-20061115/, also having looked at
               Norm Walsh's implementation for DocBook. -sb -->
          <content>
            <optional xmlns="http://relaxng.org/ns/structure/1.0">
              <ref name="fallback"/>
            </optional>
          </content>
          <attList>
            <attDef ident="href">
              <datatype>
                <data xmlns="http://relaxng.org/ns/structure/1.0" type="anyURI">
                  <param name="pattern">[^#]+</param>
                </data>
              </datatype>
            </attDef>
            <attDef ident="parse">
              <defaultVal>xml</defaultVal>
              <valList type="closed">
                <valItem ident="xml"/>
                <valItem ident="text"/>
              </valList>
            </attDef>
            <attDef ident="xpointer">
              <datatype>
                <data xmlns="http://relaxng.org/ns/structure/1.0" type="string"/>
              </datatype>
            </attDef>
            <attDef ident="encoding">
              <datatype>
                <data xmlns="http://relaxng.org/ns/structure/1.0" type="string"/>
              </datatype>
            </attDef>
            <attDef ident="accept">
              <datatype>
                <data xmlns="http://relaxng.org/ns/structure/1.0" type="string"/>
              </datatype>
            </attDef>
            <attDef ident="accept-language">
              <datatype>
                <data xmlns="http://relaxng.org/ns/structure/1.0" type="string"/>
              </datatype>
            </attDef>
          </attList>
        </elementSpec>

        <!-- of course <xi:include> refers to <xi:fallback>, so we need to declare-->
        <!-- that, too, just in case. -->
        <elementSpec ident="fallback" ns="http://www.example.org/cannot/really/use/XInclude" mode="add">
          <content>
            <oneOrMore xmlns="http://relaxng.org/ns/structure/1.0">
              <choice>
                <text/>
                <?NameList?>
              </choice>
            </oneOrMore>
          </content>
        </elementSpec>

        <elementSpec module="tagdocs" ident="gi" mode="change">
          <attList>
            <attDef mode="replace" ident="scheme">
              <valList type="closed">
                <valItem ident="imaginary"/>
                <valItem ident="extreme">
                  <gloss versionDate="2013-10-30" xml:lang="en">Extreme conference
                  proceedings markup</gloss>
                </valItem>
                <valItem ident="DBK">
                  <gloss versionDate="2013-10-30" xml:lang="en">Docbook</gloss>
                </valItem>
                <valItem ident="SMIL"/>
                <valItem ident="Schematron"/>
                <valItem ident="HTML"/>
                <valItem ident="SVG"/>
                <valItem ident="XHTML"/>
              </valList>
            </attDef>
          </attList>
        </elementSpec>

        <elementSpec ident="biblScope" mode="change">
          <attList>
            <attDef mode="replace" ident="type">
              <valList type="closed">
                <valItem ident="chap">
                  <gloss versionDate="2013-10-30" xml:lang="en">Chapter</gloss>
                </valItem>
                <valItem ident="issue">
                  <gloss versionDate="2013-10-30" xml:lang="en">Issue</gloss>
                </valItem>
                <valItem ident="note">
                  <gloss versionDate="2013-10-30" xml:lang="en">Note</gloss>
                </valItem>
                <valItem ident="part">
                  <gloss versionDate="2013-10-30" xml:lang="en">Part</gloss>
                </valItem>
                <valItem ident="pp">
                  <gloss versionDate="2013-10-30" xml:lang="en">Pages</gloss>
                </valItem>
                <valItem ident="vol">
                  <gloss versionDate="2013-10-30" xml:lang="en">Volume</gloss>
                </valItem>
              </valList>
            </attDef>
          </attList>
        </elementSpec>

        <elementSpec ident="divGen" mode="change">
          <attList>
            <attDef mode="replace" ident="type">
              <valList type="closed">
                <valItem ident="attcat">
                  <gloss versionDate="2013-10-30" xml:lang="en">Catalogue of Attributes</gloss>
                </valItem>
                <valItem ident="attclasscat">
                  <gloss versionDate="2013-10-30" xml:lang="en">Catalogue of Attribute Classes</gloss>
                </valItem>
                <valItem ident="elementcat">
                  <gloss versionDate="2013-10-30" xml:lang="en"> Catalogue of Elements</gloss>
                </valItem>
                <valItem ident="index">
                  <gloss versionDate="2013-10-30" xml:lang="en"> Index</gloss>
                </valItem>
                <valItem ident="macrocat">
                  <gloss versionDate="2013-10-30" xml:lang="en"> Catalogue of Macros</gloss>
                </valItem>
                <valItem ident="modelclasscat">
                  <gloss versionDate="2013-10-30" xml:lang="en">Catalogue of Model Classes</gloss>
                </valItem>
                <valItem ident="deprecationcat">
                  <gloss versionDate="2018-09-10" xml:lang="en">Catalogue of Deprecations</gloss>
                </valItem>
                <valItem ident="toc">
                  <gloss versionDate="2013-10-30" xml:lang="en">Table of Contents</gloss>
                </valItem>
              </valList>
            </attDef>
          </attList>
        </elementSpec>

        <elementSpec ident="div" mode="change">
          <attList>
            <attDef mode="replace" ident="type">
              <valList type="closed">
                <valItem ident="div1"/>
                <valItem ident="div2"/>
                <valItem ident="div3"/>
                <valItem ident="div4"/>
                <valItem ident="titlePageVerso"/>
                <valItem ident="Dedication"/>
                <valItem ident="section"/>
                <valItem ident="subsection"/>
                <valItem ident="subsubsection"/>
              </valList>
            </attDef>
          </attList>
        </elementSpec>

        <elementSpec ident="list" mode="change">          
          <!-- MDH 2014-07-29: per https://sourceforge.net/p/tei/bugs/460, 
               changes made to specs should be reflected in Guidelines usage, so 
               the values for @type and @rend below should be reviewed. -->
          <attList>
            <attDef mode="replace" ident="type">
              <valList type="closed">
                <valItem ident="ordered">
                  <gloss versionDate="2013-10-30" xml:lang="en">Numbered list</gloss>
                </valItem>
                <valItem ident="simple">
                  <gloss versionDate="2013-10-30" xml:lang="en">Plain list</gloss>
                </valItem>
                <valItem ident="gloss">
                  <gloss versionDate="2013-10-30" xml:lang="en">Glossary list</gloss>
                </valItem>
                <valItem ident="inline">
                  <gloss versionDate="2013-10-30" xml:lang="en">Inline list</gloss>
                </valItem>
              </valList>
            </attDef>
            <attDef mode="replace" ident="rend">
              <valList type="closed">
                <valItem ident="specList">
                  <gloss versionDate="2013-10-30" xml:lang="en">Specification list</gloss>
                </valItem>
                <valItem ident="numbered">
                  <gloss versionDate="2013-10-30" xml:lang="en">Numbered list</gloss>
                </valItem>
                <valItem ident="ordered">
                  <gloss versionDate="2013-10-30" xml:lang="en">Numbered list</gloss>
                </valItem>
                <valItem ident="simple">
                  <gloss versionDate="2013-10-30" xml:lang="en">Plain list</gloss>
                </valItem>
                <valItem ident="gloss">
                  <gloss versionDate="2013-10-30" xml:lang="en">Glossary list</gloss>
                </valItem>
                <valItem ident="inline">
                  <gloss versionDate="2013-10-30" xml:lang="en">Inline list</gloss>
                </valItem>
                <!-- MDH 2014-07-29: added this value to make changes to 
                     Guidelines source valid per https://sourceforge.net/p/tei/bugs/460.
                -->
                <valItem ident="bulleted">
                  <gloss versionDate="2013-10-30" xml:lang="en">Bulleted list</gloss>
                </valItem>
              </valList>
            </attDef>
          </attList>
        </elementSpec>

        <elementSpec module="tagdocs" ident="ident" mode="change">
          <attList>
            <attDef mode="replace" ident="type">
              <valList type="closed">
                <valItem ident="field">
                  <gloss versionDate="2013-10-30" xml:lang="en">field used in a metadata standard</gloss>
                </valItem>
                <valItem ident="ge">
                  <gloss versionDate="2013-10-30" xml:lang="en">general entity name</gloss>
                </valItem>
                <valItem ident="rng">
                  <gloss versionDate="2013-10-30" xml:lang="en">RELAX NG identifier</gloss>
                </valItem>
                <valItem ident="frag">
                  <gloss versionDate="2013-10-30" xml:lang="en">DTD fragment identifier</gloss>
                </valItem>
                <valItem ident="macro"/>
                <valItem ident="ns">
                  <gloss versionDate="2013-10-30" xml:lang="en">namespace</gloss>
                </valItem>
                <valItem ident="schema"/>
                <valItem ident="pe">
                  <gloss versionDate="2013-10-30" xml:lang="en">parameter entity name</gloss>
                </valItem>
                <valItem ident="datatype"/>
                <valItem ident="file"/>
                <valItem ident="module"/>
                <valItem ident="class"/>
              </valList>
            </attDef>
          </attList>
        </elementSpec>

        <classSpec ident="att.translatable" mode="change" type="atts">
          <constraintSpec mode="add"
                          ident="require-translatability"
                          scheme="schematron">
            <constraint>
              <sch:rule context="tei:elementSpec/tei:desc
                                 | tei:elementSpec/tei:gloss
                                 | tei:elementSpec/tei:remarks
                                 | tei:classSpec/tei:desc
                                 | tei:classSpec/tei:gloss
                                 | tei:classSpec/tei:remarks
                                 | tei:macroSpec/tei:desc
                                 | tei:macroSpec/tei:gloss
                                 | tei:macroSpec/tei:remarks
                                 | tei:attDef/tei:desc
                                 | tei:attDef/tei:gloss
                                 | tei:attDef/tei:remarks
                                 | tei:valItem/tei:desc
                                 | tei:valItem/tei:gloss
                                 | tei:valItem/tei:remarks
                                 | tei:moduleSpec/tei:desc
                                 | tei:moduleSpec/tei:gloss
                                 | tei:moduleSpec/tei:remarks
                                 ">
                <sch:report test="not( @xml:lang and @versionDate )">
                  Error: both the versionDate and xml:lang attributes on "<sch:name/>" are required when it is a child of "<sch:value-of select="local-name(..)"/>".
                </sch:report>
              </sch:rule>
            </constraint>
          </constraintSpec>
          <constraintSpec ident="all-sibling-parent-desc" scheme="schematron">
            <constraint>
              <sch:rule context="*[tei:desc[@versionDate]]">
                <sch:report role="nonfatal" test="
                                                  count( tei:desc )
                                                  ne
                                                  count( tei:desc[@versionDate] )
                                                  ">
                  Error: sibling 'desc' elements with and without @versionDate.
                </sch:report>
              </sch:rule>
            </constraint>
          </constraintSpec>
          <constraintSpec ident="all-sibling-parent-gloss" scheme="schematron">
            <constraint>
              <sch:rule context="*[tei:gloss[@versionDate]]">
                <sch:report role="nonfatal" test="
                                                  count( tei:gloss )
                                                  ne
                                                  count( tei:gloss[@versionDate] )
                                                  ">
                  Error: sibling 'gloss' elements with and without @versionDate.
                </sch:report>
              </sch:rule>
            </constraint>
          </constraintSpec>
          <constraintSpec ident="all-sibling-parent-remarks" scheme="schematron">
            <constraint>
              <sch:rule context="*[tei:remarks[@versionDate]]">
                <sch:report role="nonfatal" test="
                                                  count( tei:remarks )
                                                  ne
                                                  count( tei:remarks[@versionDate] )
                                                  ">
                  Error: sibling 'remarks' elements with and without @versionDate.
                </sch:report>
              </sch:rule>
            </constraint>
          </constraintSpec>
          <constraintSpec ident="all-sibling-parent-valDesc" scheme="schematron">
            <constraint>
              <sch:rule context="*[tei:valDesc[@versionDate]]">
                <sch:report role="nonfatal" test="
                                                  count( tei:valDesc )
                                                  ne
                                                  count( tei:valDesc[@versionDate] )
                                                  ">
                  Error: sibling 'valDesc' elements with and without @versionDate.
                </sch:report>
              </sch:rule>
            </constraint>
          </constraintSpec>
        </classSpec>
        
        <classSpec ident="att.identified" mode="change" type="atts">
          <attList>
            <attDef ident="module" mode="replace">
              <valList type="closed" mode="add">
                <valItem ident="tei"/>
                <valItem ident="core"/>
                <valItem ident="analysis"/>
                <valItem ident="certainty"/>
                <valItem ident="corpus"/>
                <valItem ident="dictionaries"/>
                <valItem ident="drama"/>
                <valItem ident="figures"/>
                <valItem ident="gaiji"/>
                <valItem ident="header"/>
                <valItem ident="iso-fs"/>
                <valItem ident="linking"/>
                <valItem ident="msdescription"/>
                <valItem ident="namesdates"/>
                <valItem ident="nets"/>
                <valItem ident="spoken"/>
                <valItem ident="textcrit"/>
                <valItem ident="textstructure"/>
                <valItem ident="transcr"/>
                <valItem ident="verse"/>
                <valItem ident="tagdocs"/>
              </valList>
            </attDef>
          </attList>
        </classSpec>

        <elementSpec ident="exemplum" mode="change">
          <attList>
            <attDef mode="change" ident="xml:lang" usage="req"/>
          </attList>
        </elementSpec>

        <elementSpec ident="idno" mode="change">
          <attList>
            <attDef mode="replace" ident="type">
              <valList type="closed">
                <valItem ident="DOI">
                  <gloss versionDate="2013-10-30" xml:lang="en">Digital Object Identifier</gloss>
                </valItem>
                <valItem ident="FPI">
                  <gloss versionDate="2021-10-10" xml:lang="en">Formal Public Identifier</gloss>
                </valItem>
                <valItem ident="ISBN">
                  <gloss versionDate="2013-10-30" xml:lang="en">International Standard Book Number</gloss>
                </valItem>
                <valItem ident="url">
                  <gloss versionDate="2013-10-30" xml:lang="en">any form of web address</gloss>
                </valItem>
              </valList>
            </attDef>
          </attList>
        </elementSpec>

        <elementSpec ident="content" mode="change" module="tagdocs">
          <content>
            <choice xmlns="http://relaxng.org/ns/structure/1.0">
              <group>
                <ref name="valList"/>
              </group>
              <oneOrMore>
                <ref name="anyRelax"/>
              </oneOrMore>
              <zeroOrMore>
                <ref name="model.contentPart"/>
              </zeroOrMore>
            </choice>
          </content>
        </elementSpec>

        <macroSpec ident="anyRelax" mode="add">
          <content>
            <element xmlns="http://relaxng.org/ns/structure/1.0">
              <nsName ns="http://relaxng.org/ns/structure/1.0"/>
              <zeroOrMore>
                <choice>
                  <attribute>
                    <anyName/>
                  </attribute>
                  <ref name="anyRelax"/>
                  <text/>
                </choice>
              </zeroOrMore>
            </element>
          </content>
        </macroSpec>

        <elementSpec mode="change" ident="TEI">
          <constraintSpec ident="must-have-attglobal" scheme="schematron" mode="add">
            <constraint>
              <rule context="tei:elementSpec[not(@mode)]" xmlns="http://purl.oclc.org/dsdl/schematron">
                <assert test="tei:classes/tei:memberOf[@key='att.global']">Error: TEI element <value-of select="@ident"/> must be member of att.global class</assert>
              </rule>
            </constraint>
          </constraintSpec>
        </elementSpec>

        <elementSpec ident="remarks" mode="change">          
          <constraintSpec ident="only-one-remark-per-lang" scheme="schematron" mode="add">
            <constraint>
              <rule context="tei:remarks[@xml:lang]" xmlns="http://purl.oclc.org/dsdl/schematron">
                <let name="langVal" value="@xml:lang"/>
                <assert test="not(following-sibling::tei:remarks[@xml:lang=$langVal])">
                  Error: There should only be one <value-of select="@ident"/> element per 
                  language. Merge the contents of multiple <value-of select="@ident"/> elements
                  using separate p elements.
                </assert>
              </rule>
            </constraint>
          </constraintSpec>
        </elementSpec>
        
        <dataSpec ident="teidata.temporal.working" mode="change">
          <constraintSpec ident="not_in_future" scheme="schematron">
            <desc>When a <att>versionDate</att> is specified, its value
            should not be in the future.</desc>
            <!-- Note that this constraint is fired on the specific *attributes* that
            are members of teidata.temporal.working. So if the membership of the datatype
            changes, we should change the context, below, to match. -->
            <constraint>
              <sch:rule context="*[@versionDate]">
                <sch:let name="tomorrow" value="current-date() + 'P1D' cast as xs:dayTimeDuration"/>
                <sch:assert test="@versionDate cast as xs:date le $tomorrow">The date of a translation should not be in the future.</sch:assert>
              </sch:rule>
            </constraint>
          </constraintSpec>
        </dataSpec>
        
      </schemaSpec>
    </body>
  </text>
</TEI>
back to top