The revised form of the content model does recognize the described language.
But your XML might be a little more idiomatic and would almost certainly be easier to handle if you thought of XML in terms of the abstract syntax tree you want, and not in terms of literal transcription of surface syntax intended for sequences of tokens, not trees.
Instead of using an empty And element between terms, wrap the terminology in the And element.
<Search> <And> <Term>...</Term> <Term>...</Term> <Term>...</Term> </And> </Search>
It is now trivially easy to execute arbitrary Boolean combinations without worrying about what order of priorities is assigned to the operators:
<Search> <Or> <And> <Term>...</Term> <Or> <Term>...</Term> <Term>...</Term> </Or> </And> <And> <Term>...</Term> <not><Term>...</Term></not> </And> </Or> </Search>
source share