[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