Tipworld -> XML
Parentheses in Element Definitions
When building DTDs for anything but simple examples, you quickly find
that it can be an exercise in futility to try modeling all of the
possible combinations and nesting of elements for "real" business
data. You can, however, use parentheses in element definitions to make
life a little simpler (or at least make your DTDs easier to follow).

Consider this example:

<!ELEMENT data (d1, (d2 | d3), (d4 | (d5,d6,d7))) >


This may look a bit confusing at first, but as you start to dissect
it, things get a little clearer. The <data> element must contain a
<d1> element, followed by <d2> OR <d3>, followed by <d4> OR the
combination of <d5>, <d6>, <d7> (in that order).