Спецификации XML и Unicode: каков юридический характер? - PullRequest
2 голосов
/ 02 марта 2012

Мой менеджер попросил меня объяснить, почему я позвонил в jdom checkCharacterData, прежде чем передать мою строку в XMLStreamWriter, поэтому я сослался на спецификацию XML, а затем запутался.

XML 1.0 и XML 1.1 говорят, что допустимым символом XML является «табуляция, возврат каретки, перевод строки и допустимые символы Unicode и ISO / IEC 10646.» звучит глупо: табуляция, возврат каретки и перевод строки являются допустимыми символами Unicode. Затем есть комментарий «любой символ Unicode, за исключением суррогатных блоков, FFFE и FFFF», который был изменен в XML 1.1 для обозначения U + 0000 - U + 10FFFF, исключая U + 0000, U + D800 - U + DFFF, и U + FFFE - U + FFFF; обратите внимание, что NUL исключен. Кроме того, есть примечание, в котором говорится, что авторам «не рекомендуется» использовать символы совместимости, включая некоторые символы, которые уже исключены BNF.

Вопрос: Что является / было допустимым символом Юникода? Является ли NUL допустимым символом Unicode? (Я нашел PDF-файл ISO 10646 (2-е издание, 2010 г.), который, по-видимому, не исключает U + 0000.) Изменился ли ISO 10646 или Unicode между выпуском 2000 г. и выпуском 2010 г. для включения управляющих символов, которые ранее были исключены? А что касается XML, есть ли причина, по которой текст такой мягкий / неряшливый, а BNF строгий?

Ответы [ 4 ]

3 голосов
/ 02 марта 2012

Вопрос: Что является / было допустимым символом Юникода?

Глоссарий Unicode определяет его следующим образом:

Характер. (1) Наименьший компонент письменного языка, который имеет семантическую ценность; относится к абстрактному значению и / или форме, а не к конкретной форме (см. также глиф), хотя в кодовых таблицах некоторая форма визуального представления важна для понимания читателем. (2) Синоним абстрактного символа. (3) Базовая единица кодирования для кодировки символов Unicode. (4) Английское название для идеографических письменных элементов китайского происхождения. [См. Идеограф (2).]


Является ли NUL допустимым символом Unicode? (Я нашел PDF-файл ISO 10646 (2-е издание, 2010 г.), который, по-видимому, не исключает U + 0000.)

NUL - это кодовая точка, и она подпадает под определение «абстрактный символ», так что это символ в смысле 2 выше.


Изменился ли ISO 10646 или Unicode между выпуском 2000 года и выпуском 2010 года, чтобы включить управляющие символы, которые ранее были исключены?

NUL был управляющим персонажем из ранних версий. Приложение D содержит список изменений.

В таблице D.2 сказано, что с Версии 1 до Версии 3 было 65 контрольных символов без изменений.

В таблице D-2 указано количество символов, назначенных в различных версиях стандарта Unicode.

         V1.0 V1.1 V2.0 V2.1 V3.0
...
Controls   65   65   65   65   65

А что касается XML, есть ли причина, по которой текст такой мягкий / неряшливый, а BNF строгий?

Трудно составить как полные, так и краткие спецификации. Когда текст не согласен с БНФ, доверьтесь БНФ.

1 голос
/ 02 марта 2012

Я бы проигнорировал пустяки и просто сосредоточился на определениях:

XML 1.0:

Char :: = # x9 | #xA | #xD | [# x20- # xD7FF] | [# xE000- # xFFFD] | [# X10000- # x10FFFF]

Авторам документов рекомендуется избегать "символов совместимости", как определено в разделе 2.3 [Unicode]. Символы, определенные в следующих диапазонах, также не приветствуются. Это либо управляющие символы, либо постоянно неопределенные символы Юникода:

[# x7F- # x84], [# x86- # x9F], [# xFDD0- # xFDEF], [# x1FFFE- # x1FFFF], [# x2FFFE- # x2FFFF], [# x3FFFE- # x3FFFF], [# x4FFFE- # x4FFFF], [# x5FFFE- # x5FFFF], [# x6FFFE- # x6FFFF], [# x7FFFE- # x7FFFF], [# x8FFFE- # x8FFFF], [# x9FFFE- # x9FFFF], [# xAFFFE- # xAFFFF], [# xBFFFE- # xBFFFF], [# xCFFFE- # xCFFFF], [# xDFFFE- # xDFFFF], [# xEFFFE- # xEFFFF], [# xFFFFE- # xFFFFF], [# X10FFFE- # x10FFFF].

XML 1.1:

Char :: = [# x1- # xD7FF] | [# xE000- # xFFFD] | [# X10000- # x10FFFF]

RestrictedChar :: = [# x1- # x8] | [# xB- # xC] | [# xE- # x1F] | [# x7F- # x84] | [# X86- # x9F]

Авторам документов рекомендуется избегать «символов совместимости», как это определено в Unicode [Unicode]. Символы, определенные в следующих диапазонах, также не приветствуются. Это либо управляющие символы, либо постоянно неопределенные символы Юникода:

[# x1- # x8], [# xB- # xC], [# xE- # x1F], [# x7F- # x84], [# x86- # x9F], [# xFDD0- # xFDDF] , [# x1FFFE- # x1FFFF], [# x2FFFE- # x2FFFF], [# x3FFFE- # x3FFFF], [# x4FFFE- # x4FFFF], [# x5FFFE- # x5FFFF], [# x6FFFE- # x6FFFF], [# x7FFFE- # x7FFFF], [# x8FFFE- # x8FFFF], [# x9FFFE- # x9FFFF], [# xAFFFE- # xAFFFF], [# xBFFFE- # xBFFFF], [# xCFFFE- # xCFFFF], [# xDFFFE- # xDFFFF], [# xEFFFE- # xEFFFF], [# xFFFFE- # xFFFFF], [# X10FFFE- # x10FFFF].

1 голос
/ 02 марта 2012

Использование слова «символ» намеренно нечетко в стандарте Unicode, но в основном оно используется в техническом смысле: кодовая точка, обозначенная как назначенная кодовая точка символа. Это не полностью совпадает с интуитивным понятием характера. Например, интуитивный символ, состоящий из буквы i с макроном и серьезным акцентом, не существует как кодовая точка; в Юникоде он может быть представлен только как последовательность из двух или трех кодовых точек. В качестве другого примера, так называемые управляющие символы не являются символами в интуитивном смысле.

Когда другие стандарты и спецификации относятся к «символам Unicode», они относятся к кодовым точкам, обозначенным как назначенные кодовые точки символов. Набор символов Unicode зависит от стандартной версии Unicode, поскольку назначаются новые кодовые точки. Технически, файл UnicodeData.txt (по адресу ftp: //ftp.unicode.org/Public/UNIDATA/) указывает, какие кодовые точки являются символами.

U + 0000, условно обозначаемое NUL, является символом Unicode с самого начала.

Как вы заметили, спецификации XML во многих отношениях неточны в отношении символов. Но основным определением является создание BNF для «Char» и утверждение «процессоры XML ДОЛЖНЫ принимать любой символ в диапазоне, указанном для Char». Это означает, что в спецификациях XML концепция символа шире, чем символ Unicode. Диапазоны в производстве содержат неназначенные кодовые точки, на самом деле их огромное количество.

Комментарий к продукции «Char» в спецификациях XML лучше всего игнорировать. Это очень запутанно и даже неправильно. Производство «Char» просто относится к набору кодовых точек Unicode (разные наборы в разных версиях XML). Набор включает кодовые точки, которые вы никогда не должны использовать в символьных данных, а также кодовые точки, которых следует избегать по разным причинам. Но такие правила находятся на уровне, отличном от формальных правил XML и требований к реализациям XML.

При выборе или написании подпрограммы для проверки символьных данных зависит от приложения и цели, что следует принимать и что следует делать с кодовыми точками, которые не проходят тест. Даже суррогатные кодовые точки могут обрабатываться каким-то образом, а не просто отбрасываться; они вполне могут появиться из-за путаницы с кодировками (или, например, когда строка Java была наивно воспринята как строка символов Unicode - это просто последовательность 16-битных кодовых единиц).

0 голосов
/ 11 апреля 2014

Звучит глупо, потому что это глупо. Первое издание XML (1998) гласило «юридические графические символы Unicode». По какой-то причине слово «графика» было удалено из второго издания 2000 года, возможно, потому, что оно неточно: XML допускает множество символов, которые не являются графическими символами.

Определение в производстве Чарса - действительно правильное место.

...