I don’t know what validator you are using. It seems Saxon accepts <Test3/> as a valid instance of your Test3 declaration, but I’m inclined to think that it is wrong to do so. XSD 1.0 part 1 section 3.8.4 clause 2 says
<quote>If the {compositor} is choice, then there must be a particle among the {particles} such that the sequence is ·valid· with respect to that particle</quote>
In this case {particles} is empty, so there is no particle for which the sequence is valid, and therefore the sequence is invalid. <xs:choice/> should have no valid instances.
XSD 1.1 says the same thing in much more formal language, which I don’t claim to have fully understood. But it stands to reason: when you have a choice, your content must satisfy at least one branch of the choice, and if there are zero branches, then it cannot possibly do so.
Incidentally, the paper you cite (which, along with Brzozowski’s work, I really must try to understand one day…) seems to use the words “string” and “sequence” interchangeably. Usually in the XML world we use string to mean a string of characters, but in the world of formal grammars, a string is a sequence of symbols from some alphabet,
and in the world of schema languages, that alphabet is typically the set of permitted element names.
Michael Kay
Saxonica