[tei-council] content model of body etc

Sebastian Rahtz sebastian.rahtz at oucs.ox.ac.uk
Sat Jan 27 08:09:21 EST 2007


If you don't have a headache yet today, read on. I can help you get one...

I have rewritten the body content model as below, to explicitly
model the sequence of

  1. global stuff
  2. divWrapper; if one occurs, it can be followed by more of itself 
interspersed with globals
  3. divGen; if one occurs, it can be followed by more of itself 
interspersed with globals
  4. div*Like things; if one occurs, it can be followed by more of 
itself interspersed with globals and divGens
       (but you have to choose between divLike, divN1Like and divN0Like 
routes and there is no
        going back)
     4a. or maybe some paragraph-like things.
  5. divWrapper; if one occurs, it can be followed by more of itself 
interspersed with globals

Which I _believe_ is what we intend. The crucial thing here is that any 
stage can end in globals, but not
start with them.  This, with the starting globals, allows the beasts to 
appear anywhere, so
far as I can tell.


<content  xmlns:rng="http://relaxng.org/ns/structure/1.0">
  <rng:group>
    <!-- globals as usual -->
    <rng:zeroOrMore>
      <rng:ref name="model.global"/>
    </rng:zeroOrMore>

    <!--possibly some divWrappers, interspersed with globals -->
    <rng:optional>
      <rng:group>
    <rng:group>
      <rng:ref name="model.divWrapper"/>
    </rng:group>
    <rng:zeroOrMore>
      <rng:choice>
        <rng:ref name="model.global"/>
        <rng:ref name="model.divWrapper"/>
      </rng:choice>
    </rng:zeroOrMore>
      </rng:group>
    </rng:optional>
   
    <!-- possibly some generated divs, interspersed with globals -->
    <rng:optional>
      <rng:group>
    <rng:group>
      <rng:ref name="model.divGenLike"/>
    </rng:group>
    <rng:zeroOrMore>
      <rng:choice>
        <rng:ref name="model.global"/>
        <rng:ref name="model.divGenLike"/>
      </rng:choice>
    </rng:zeroOrMore>
      </rng:group>
    </rng:optional>
   
    <rng:group>
      <!--
       now a choice between
      
       a) some divLike things, with globals and generated divs
         after them if needed
       b) some divN0Like things, with globals
         and generated divs after them if needed
       c) some divN1Like things, with globals and generated
              divs after them if needed
      -->
      <rng:choice>
    <!-- a -->
      <rng:oneOrMore>
        <rng:group>
          <rng:group>
        <rng:ref name="model.divLike"/>
          </rng:group>
          <rng:zeroOrMore>
        <rng:choice>
          <rng:ref name="model.global"/>
          <rng:ref name="model.divGenLike"/>
        </rng:choice>
          </rng:zeroOrMore>
        </rng:group>
      </rng:oneOrMore>
     
      <!-- b -->     
      <rng:oneOrMore>
        <rng:group>
          <rng:group>
        <rng:ref name="model.divN0Like"/>
          </rng:group>
          <rng:zeroOrMore>
        <rng:choice>
          <rng:ref name="model.global"/>
          <rng:ref name="model.divGenLike"/>
        </rng:choice>
          </rng:zeroOrMore>
        </rng:group>
      </rng:oneOrMore>

      <!-- c -->     
      <rng:oneOrMore>
        <rng:group>
          <rng:group>
        <rng:ref name="model.divN1Like"/>
          </rng:group>
          <rng:zeroOrMore>
        <rng:choice>
          <rng:ref name="model.global"/>
          <rng:ref name="model.divGenLike"/>
        </rng:choice>
          </rng:zeroOrMore>
        </rng:group>
      </rng:oneOrMore>

      <!-- d -->   
      <rng:group>
        <rng:oneOrMore>
          <rng:group>
        <rng:ref name="macro.component"/>
          </rng:group>
          <rng:zeroOrMore>
        <rng:ref name="model.global"/>
          </rng:zeroOrMore>
        </rng:oneOrMore>
        <rng:optional>
          <rng:choice>
        <!-- a -->
        <rng:oneOrMore>
          <rng:group>
            <rng:group>
              <rng:ref name="model.divLike"/>
            </rng:group>
            <rng:zeroOrMore>
              <rng:choice>
            <rng:ref name="model.global"/>
            <rng:ref name="model.divGenLike"/>
              </rng:choice>
            </rng:zeroOrMore>
          </rng:group>
        </rng:oneOrMore>
       
        <!-- b -->     
        <rng:oneOrMore>
          <rng:group>
            <rng:group>
              <rng:ref name="model.divN0Like"/>
            </rng:group>
            <rng:zeroOrMore>
              <rng:choice>
            <rng:ref name="model.global"/>
            <rng:ref name="model.divGenLike"/>
              </rng:choice>
            </rng:zeroOrMore>
          </rng:group>
        </rng:oneOrMore>
       
        <!-- c -->     
        <rng:oneOrMore>
          <rng:group>
            <rng:group>
              <rng:ref name="model.divN1Like"/>
            </rng:group>
            <rng:zeroOrMore>
              <rng:choice>
            <rng:ref name="model.global"/>
            <rng:ref name="model.divGenLike"/>
              </rng:choice>
            </rng:zeroOrMore>
          </rng:group>
        </rng:oneOrMore>
          </rng:choice>
        </rng:optional>
      </rng:group>       

    </rng:choice>
    <!-- end of choice -->
    </rng:group>   
    <!-- finally, some divWrappers interspersed with globals  -->
    <rng:zeroOrMore>
      <rng:group>
    <rng:group>
      <rng:ref name="model.divWrapper.bottom"/>
    </rng:group>
    <rng:zeroOrMore>
      <rng:ref name="model.global"/>
    </rng:zeroOrMore>
      </rng:group>
    </rng:zeroOrMore>

  </rng:group>
 
</content>


-- 
Sebastian Rahtz      

Information Manager, Oxford University Computing Services
13 Banbury Road, Oxford OX2 6NN. Phone +44 1865 283431

OSS Watch: JISC Open Source Advisory Service
http://www.oss-watch.ac.uk





More information about the tei-council mailing list