Тильда не распознается в открытом XML-идентификаторе - PullRequest
1 голос
/ 14 мая 2010

Я нашел интересную ошибку и хотел знать, что вы думаете. Краткая справка: я написал собственный DTD и пример XML-файла (оба UTF-8). Теперь я реализовал парсер SAX в Java, который я хочу протестировать. Я получил SAXException с жалобой «В открытом идентификаторе был обнаружен недопустимый символ XML (Unicode: 0x7e)». Теперь URL моего DTD содержит символ тильды (юникод 0x7e). Если я переместу файл DTD на другой URL, который не содержит тильду, то мой пример XML-файла анализируется без возникновения SAXException.

Итак, у меня есть обходной путь для этой проблемы, но мне интересно знать: почему это происходит? Это ошибка? Если да, то с UTF-8, Java (1.6.0_18 x86), Windows (Server 2008 R2 x86_64) или как? Или это один из тех маленьких неясных нюансов спецификации XML 1.0?

Ответы [ 2 ]

3 голосов
/ 14 мая 2010

Обычно вы не ставите URI (содержащий ~ или нет) в открытый идентификатор. Системный идентификатор - это обычно URI.

Я подозреваю, что вы говорите:

<!DOCTYPE PUBLIC "http://www.example.com/~foo/x.dtd">

когда вы имеете в виду:

<!DOCTYPE SYSTEM "http://www.example.com/~foo/x.dtd">
1 голос
/ 14 мая 2010

Это неясный нюанс спецификации XML 1.0. Мне нравится фраза!

Я считаю, что "производство 13" в Расширяемый язык разметки (XML) 1.0 (пятое издание)

[13] PubidChar :: = # x20 | #xD | #xA | [a-zA-Z0-9] | [- '() +, /:.?! = *; # @ $ _%]

определяет разрешенный здесь набор символов.

Теперь, когда я видел Т.Дж. Комментарий Краудера, я не уверен, что этот ответ правильный. В приведенном им разделе, похоже, нет ссылки на это правило.

Эту спецификацию действительно сложно распутать.

...