by Eric van der Vlist is published by O'Reilly & Associates (ISBN: 0596004214)
pattern&pattern — interleave pattern
pattern ("&" pattern)+ |
(pattern), attribute, datatypeName param exceptPattern, element, list, mixed, pattern&pattern, pattern*, pattern+, pattern,pattern, pattern?, pattern|pattern
The interleave pattern "interleaves" subpatterns; it allows their leaves to be mixed in any relative order.
interleave is about more than defining unordered groups, as can be seen in the following example. Consider element a and the ordered group of element b1 and b2. An unordered group of these two patterns allows only element a followed by elements b1 and b2 or elements b1 and b2 followed by element a. An interleave of these two patterns does allow these two combinations but also element b1 followed by a followed by b2: a combination in which element a has been interleaved between elements b1 and b2.
The interleave behavior is the behavior applied to attribute patterns even when they are embedded in (ordered) group patterns. The reason for this is that XML 1.0 specifies that the relative order of attributes isn't significant.
Another case where interleave patterns are often needed is to describe mixed-content models: content models where text is interleaved between elements. A shortcut (the mixed pattern) has been defined for this case.
Any number of patterns may be combined using the & operator when using this construct; however, different operators (,| &) can't be mixed at the same level.
This text is released under the Free Software Foundation GFDL.