Да, на базовом уровне XML, двоеточие (:
) разрешено в качестве символа начала имени. Правила BNF, которые вы цитируете, четко указывают на это.
Однако W3C XML Recommendation is clear, что колоны не следует использовать для пространств имен целей, за исключением:
Примечание:
В Пространства имен в XML Рекомендации [XML Names] присваивает значение для имен, содержащих символы двоеточия. Поэтому авторы не должны использовать двоеточие в именах XML, кроме целей пространства имен, , но XML-процессоры должны принимать двоеточие в качестве символа имени.
И XML Namespace BNF правила для тегов основаны на QName, которые допускают двоеточия в имени только как разделение между Prefix
и LocalPart
:
QName ::= PrefixedName | UnprefixedName
PrefixedName ::= Prefix ':' LocalPart
UnprefixedName ::= LocalPart
Prefix ::= NCName
LocalPart ::= NCName
NCName ::= Name - (Char* ':' Char*) /* An XML Name, minus the ":" */
Можно было бы спросить, почему толстой кишки не был отменен в NameStartChar
с самого начала. Если нам повезет, то C. M. Sperberg-McQueen может предложить авторитетное объяснение. Тем не менее, я подозреваю, что это вопрос эволюционного представления о том, как предполагается, что пространства имен будут разработаны.
first published working draft in 1996 в W3C XML Рекомендации было определение STag
который did not allow colon:
STag ::= '<' Name (S Attribute)* S? '>'
Name ::= (Letter | '-') (Letter | Digit | '-' | '.')*
К 1998 году колоны были разрешены в Name
,
Name ::= (Letter | '_' | ':') (NameChar)*
и earlier form из предостережения об использовании толстой кишки следующим образом:
Примечание: Двоеточия в именах XML зарезервирован для экспериментирования с пространствами имен. Ожидается, что его значение будет , стандартизованное в какой-то будущей точке, после чего эти документы с использованием двоеточия для экспериментальных целей, возможно, потребуется обновить. (Нет гарантии, что какой-либо механизм пространства имен, принятый для XML , фактически будет использовать двоеточие в качестве разделителя пространства имен.) На практике означает, что авторы не должны использовать двоеточие в именах XML, кроме , как часть экспериментов с именами, но что процессоры XML должны принять двоеточие как символ имени.
Потребность была ожидаема, но точная форма, возможно, еще не была известна, когда двоеточие было впервые введено в имена тегов.