package com.thaiopensource.datatype.xsd;
import com.thaiopensource.xml.util.Name;
import com.thaiopensource.xml.util.Naming;
import org.relaxng.datatype.DatatypeException;
import org.relaxng.datatype.ValidationContext;
class QNameDatatype extends DatatypeBase {
public boolean lexicallyAllows(String str) {
return Naming.isQname(str);
}
String getLexicalSpaceKey() {
return "qname";
}
Object getValue(String str, ValidationContext vc) throws DatatypeException {
int i = str.indexOf(':');
if (i < 0) {
String ns = vc.resolveNamespacePrefix("");
if (ns == null)
ns = "";
return new Name(ns, str);
}
else {
String prefix = str.substring(0, i);
String ns = vc.resolveNamespacePrefix(prefix);
if (ns == null)
throw new DatatypeException(localizer().message("undeclared_prefix", prefix));
return new Name(ns, str.substring(i + 1));
}
}
boolean allowsValue(String str, ValidationContext vc) {
int i = str.indexOf(':');
return i < 0 || vc.resolveNamespacePrefix(str.substring(0, i)) != null;
}
public boolean isContextDependent() {
return true;
}
}