First, let's simplify your SGML DTD, which has too many brackets in
it:
<!ELEMENT LE - - (a , b , c+ , d , e) +(f , g , h) >
<!ELEMENT m - - (o | #PCDATA)+ >
<!ELEMENT c - - (l , (m | n)+) >
...
<!ELEMENT e - - (i , (j , k)+) -(h)>
Putting the PCDATA in the right place for XML, and removing the
minimization tokens, we get:
<!ELEMENT LE (a , b , c+ , d , e) +(f , g , h) >
<!ELEMENT m ( #PCDATA|o)+ >
<!ELEMENT c (l , (m | n)+) >
...
<!ELEMENT e (i , (j , k)+) -(h)>
So you want f, g and h to be accessible in a, b, c, d and e, but also
in l, m and n, but only f and g in i, j and k. Of course, you may not
want any of these directly in LE, c and/or e, though inclusions
automatically allow this. Only you can decide. Assuming that you do want them...
<!ELEMENT LE ((f|g|h)*, a ,(f|g|h)*, b ,(f|g|h)*, (c|f|g|h)+
,(f|g|h)*, d ,(f|g|h)*, e(f|g|h)*)>
<!ELEMENT m ( #PCDATA|o|f|g|h)+ >
<!ELEMENT c ((f|g|h)*,l , (f|g|h)*, (m |n|f|g|h)+) >
...
<!ELEMENT e ((f|g)*,i , (f|g)*, (j, (f|g)* , k (f|g)*)+)>
In one sense you are lucky in this example, because you do not have
the same element having different content depending on its context.
Suppose the following:
<!ELEMENT chapter - - (para*, section*) >
<!ELEMENT para - - (#PCDATA)>
<!ELEMENT section (para+) +(xref)>
Here, the para element may have an xref, but only if it apepars
inside a section element. To do this in XML requires the definition
of a new element, perhaps called sect_para
<!ELEMENT para - - (#PCDATA|xref)*>
Neil.
-----------------------------------------------
Neil Bradley - Author of The Concise SGML Companion.
neil@bradley.co.uk
www.bradley.co.uk