Здесь вы смотрите на два слегка различающихся определения.xsd: ID определяется в терминах типа NCName в Пространства имен в XML 1.0 , а тип идентификатора базового стандарта XML определяется в терминах Name тип.Оба имеют следующее определение:
NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] |
[#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] |
[#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] |
[#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] |
[#x10000-#xEFFFF]
NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 |
[#x0300-#x036F] | [#x203F-#x2040]
Name ::= NameStartChar (NameChar)*
NCName определяется как:
NCName ::= Name - (Char* ':' Char*)
, то есть Имя минус двоеточие.
В результате это в терминахсамого XML, значение чего-либо, напечатанного как ID, может содержать двоеточие.С точки зрения всего, что использует типы данных XML-схемы (такие как ваша схема RelaxNG), существует более ограниченный тип данных, который запрещает использование двоеточия.Все, что использует атрибут, совместимый с XML-схемой, будет действительным по отношению к базовому определению, но не обязательно наоборот.