I believe this is by design to support Chameleon Namespace and to Avoid Name Collisions of Chameleon Components. In that I mean that by not providing a namsepace we default to a Chameleon design. However, when you do not provide the targetNamspace as the default namspace you will end up with a problem and error.
Note: Some Content Excerpted from XFront.com
A collectively Developed Set of Schema Design Guidelines
Here are your rules in general:
Except for no-namespace schemas, every XML Schema uses at least two namespaces - the targetNamespace and the XMLSchema namespace. There are three ways to design your schemas, with regards to dealing with these two namespaces:
Make XMLSchema the default namespace, and explicitly qualify all references to components in the targetNamespace.
Vice versa - make the targetNamespace the default namespace, and explicitly qualify all components from the XMLSchema namespace.
Do not use a default namespace - explicitly qualify references to components in the targetNamespace and explicitly qualify all components from the XMLSchema namespace.
There really isn't a best practice with regards to which approach is correct. Primarily, it is all up to the designer.
Though, in my research I have found:
- Qualifying the components that are used to construct a schema (schema, element, complexType, sequence, etc) are typically not a source of confusion since the qualifier is always the same. That is, people get used to seeing xsd:schema, xsd:element, etc.
- On the other hand, the targetNamespaces may vary widely among schemas. Consequently, the namespace prefixes that one might generate can vary widely. For example, lib:Book, boston:subway. This variability is often times a source of confusion.
I hope this answers your question.