Почему Цзин не допускает двоеточие (":") в атрибуте id? - PullRequest
2 голосов
/ 25 июля 2011

Я бился головой о xsd: ID, не допускающий двоеточие (":") в атрибуте id.Впервые я заметил это при использовании nxml-режима Джеймса Кларка в Emacs, поскольку он проверял файл XHTML, с которым я работал.Затем я запустил файл XHTML для RNG (предоставляется с nxml-mode-20041004) с использованием Jing и получил следующие ошибки:

error: value of attribute "id" is invalid; must be an XML name without colons

Большинство страниц W3, которые я видел, указывают надвоеточие действительно.Затем я нашел это, http://www.w3.org/XML/xml-19980210-errata#E98,, которое я понимаю как «вы не должны использовать двоеточие в атрибуте id, но вам следует разрешить».Учитывая это толкование, я озадачен, почему Цзин говорит, что не могу.

Спасибо,
Захари

1 Ответ

4 голосов
/ 25 июля 2011

Здесь вы смотрите на два слегка различающихся определения.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-схемой, будет действительным по отношению к базовому определению, но не обязательно наоборот.

...