We currently directly subclass AbstractQName to implement two unresolved QName classes: QualifiedQName and UnqualifiedQName. This design is a bit lacking, as it presents these two as direct alternatives to QName, without having a way to express a general unresolved QName.
Introduce UnresolvedQName and specialize it through these two classes. Since they are rather tightly bound, also rename QualifiedQName to UnresolvedQName.Qualified and UnresolvedQName.Unqualified.
This allows users to make a clear distinction in their APIs between QName (i.e. resolved) and UnresolvedQName (qualified or not).