isValidQName function
Checks whether s is a valid lexical QName (either NCName or NCName:NCName).
Implementation
bool isValidQName(String s) {
final colonIndex = s.indexOf(':');
if (colonIndex == -1) return isValidNCName(s);
if (s.indexOf(':', colonIndex + 1) != -1) return false;
return isValidNCName(s.substring(0, colonIndex)) &&
isValidNCName(s.substring(colonIndex + 1));
}