Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот раздел описывает синтаксис LDML, который распознает MySQL. Это - подмножество синтаксиса, описанного в
спецификации LDML, доступной в <rules>
и </rules>
теги) в MySQL Index.xml
файл.
Правила, описанные здесь, все поддерживаются за исключением того, что символьная сортировка происходит только на
основном уровне. Правила, которые определяют различия на вторичных или более высоких уровнях вида, распознаются
(и таким образом может быть включен в определения сопоставления), но обрабатываются как равенство на основном
уровне.
Сервер MySQL генерирует диагностику, когда это находит проблемы, анализируя Index.xml
файл. См. Раздел
10.4.4.3, "Диагностика Во время Index.xml
Парсинг".
Символьное Представление
Символы, названные в правилах LDML, могут быть записаны буквально или в \u
формат, где nnnn
nnnn
шестнадцатеричное значение кодовой точки Unicode. Например, A
и á
может быть записан буквально или как \u0041
и
\u00E1
. В пределах шестнадцатеричных значений, цифр A
через F
не являются чувствительными к регистру; \u00E1
и \u00e1
эквивалентны. Для UCA 4.0.0 сопоставления шестнадцатеричная нотация может
использоваться только для символов в Основной Многоязычной Плоскости, не для символов вне диапазона BMP 0000
к FFFF
. Для UCA 5.2.0 сопоставления
шестнадцатеричная нотация может использоваться для любого символа.
Index.xml
сам файл должен быть записан, используя кодирование UTF-8.
Правила синтаксиса
LDML сбросил правила и правила сдвига определить символьное упорядочивание. Упорядочивания даются как ряд правил, которые начинаются с правила сброса, которое устанавливает точку привязки, сопровождаемую правилами сдвига, которые указывают как вид символов относительно точки привязки.
A <reset>
правило не определяет упорядочивания в
и себя. Вместо этого это "сбрасывает"
упорядочивание для последующих правил сдвига заставить их быть взятыми относительно данного символа.
Любое из следующих правил сбрасывает последующие правила сдвига, которые будут взяты относительно буквы
'A'
:
<reset>A</reset><reset>\u0041</reset>
<p>
, <s>
, и
<t>
правила сдвига определяют основные, вторичные, и третичные
различия символа от другого символа:
Используйте первичные различия, чтобы отличить отдельные буквы.
Используйте вторичные различия, чтобы отличить изменения диакритического знака.
Используйте третичные различия, чтобы отличить lettercase изменения.
Любое из этих правил определяет основное правило сдвига для 'G'
символ:
<p>G</p><p>\u0047</p>
<i>
правило сдвига указывает что символьные виды
тождественно другому. Следующая причина правил 'b'
сортировать то же самое
как 'a'
:
<reset>a</reset><i>b</i>
Сокращенный синтаксис сдвига определяет многократные правила сдвига, используя единственную пару тегов. Следующая таблица показывает корреспонденцию между сокращенными правилами синтаксиса и эквивалентными несокращенными правилами.
Таблица 10.2. Сокращенный Синтаксис Сдвига
Сокращенный Синтаксис | Несокращенный Синтаксис |
---|---|
<pc>xyz</pc> |
<p>x</p><p>y</p><p>z</p> |
<sc>xyz</sc> |
<s>x</s><s>y</s><s>z</s> |
<tc>xyz</tc> |
<t>x</t><t>y</t><t>z</t> |
<ic>xyz</ic> |
<i>x</i><i>y</i><i>z</i> |
Расширение является правилом сброса, которое устанавливает точку привязки для
многократно-символьной последовательности. MySQL поддерживает расширения 2 - 6 символов долго. Следующие
правила помещаются 'z'
больше в основном уровне чем последовательность трех
символов 'abc'
:
<reset>abc</reset><p>z</p>
Сокращение является правилом сдвига что виды многократно-символьная
последовательность. MySQL поддерживает сокращения 2 - 6 символов долго. Следующие правила, помещенные
последовательность трех символов 'xyz'
больше в основном уровне чем 'a'
:
<reset>a</reset><p>xyz</p>
Долгие расширения и долгие сокращения могут использоваться вместе. Эти правила,
помещенные последовательность трех символов 'xyz'
больше в основном уровне
чем последовательность трех символов 'abc'
:
<reset>abc</reset><p>xyz</p>
Нормальное использование синтаксиса расширения
<x>
плюс <extend>
элементы, чтобы определить расширение.
Следующие правила, помещенные символ 'k'
больше во вторичном уровне чем
последовательность 'ch'
. Таким образом, 'k'
ведет себя, как будто это расширяется до символа после 'c'
сопровождаемый
'h'
:
<reset>c</reset><x><s>k</s><extend>h</extend></x>
Этот синтаксис разрешает длинные последовательности. Эти правила сортируют последовательность 'ccs'
больше в третичном уровне чем последовательность 'cscs'
:
<reset>cs</reset><x><t>ccs</t><extend>cs</extend></x>
Спецификация LDML описывает нормальный синтаксис расширения как "хитрый". См. ту спецификацию для деталей.
Предыдущее использование синтаксиса контекста
<x>
плюс <context>
элементы, чтобы определить, что
контекст перед символом влияет, как он сортирует. Следующие правила помещаются '-'
больше во вторичном уровне чем 'a'
, но
только когда '-'
происходит после 'b'
:
<reset>a</reset><x><context>b</context><s>-</s></x>
Предыдущий синтаксис контекста может включать
<extend>
элемент. Эти правила помещаются 'def'
больше в
основном уровне чем 'aghi'
, но только когда 'def'
прибывает после 'abc'
:
<reset>a</reset><x><context>abc</context><p>def</p><extend>ghi</extend></x>
Правила сброса разрешают a before
атрибут. Обычно,
правила сдвига после правила сброса указывают на символы что вид после символа сброса. Правила сдвига
после правила сброса, которое имеет before
атрибут указывает на символы что
вид перед символом сброса. Следующие правила, помещенные символ 'b'
сразу
прежде 'a'
на основном уровне:
<reset before="primary">a</reset><p>b</p>
Допустимый before
значения атрибута определяют уровень вида по имени
или эквивалентное числовое значение:
<reset before="primary"><reset before="1"><reset before="secondary"><reset before="2"><reset before="tertiary"><reset before="3">
Правило сброса может назвать логическую позицию сброса, а не литеральный символ:
<first_tertiary_ignorable/><last_tertiary_ignorable/><first_secondary_ignorable/><last_secondary_ignorable/><first_primary_ignorable/><last_primary_ignorable/><first_variable/><last_variable/><first_non_ignorable/><last_non_ignorable/><first_trailing/><last_trailing/>
Эти правила помещаются 'z'
больше в основном уровне чем неигнорируемые
символы, у которых есть Таблица Элемента сопоставления Unicode Значения по умолчанию (DUCET) запись
и которые не являются CJK:
<reset><last_non_ignorable/></reset><p>z</p>
Логическим позициям показали кодовые точки в следующей таблице.
Таблица 10.3. Логические Кодовые точки Позиции Сброса
Логическая Позиция | Unicode 4.0.0 Кодовых точки | Unicode 5.2.0 Кодовых точки |
---|---|---|
<first_non_ignorable/> |
U+02D0 | U+02D0 |
<last_non_ignorable/> |
U+A48C | U+1342E |
<first_primary_ignorable/> |
U+0332 | U+0332 |
<last_primary_ignorable/> |
U+20EA | U+101FD |
<first_secondary_ignorable/> |
U+0000 | U+0000 |
<last_secondary_ignorable/> |
U+FE73 | U+FE73 |
<first_tertiary_ignorable/> |
U+0000 | U+0000 |
<last_tertiary_ignorable/> |
U+FE73 | U+FE73 |
<first_trailing/> |
U+0000 | U+0000 |
<last_trailing/> |
U+0000 | U+0000 |
<first_variable/> |
U+0009 | U+0009 |
<last_variable/> |
U+2183 | U+1D371 |
<collation>
элемент разрешает a shift-after-method
атрибут, который влияет на символьное вычисление веса для
правил сдвига. У атрибута есть эти разрешенные значения:
simple
: Вычислите символьные веса что
касается правил сброса, у которых нет a before
атрибут. Это -
значение по умолчанию, если атрибут не дается.
expand
: Используйте расширения для сдвигов
после правил сброса.
Предположите это '0'
и '1'
имейте веса
0E29
и 0E2A
и мы хотим поместить все
основные латинские буквы между '0'
и '1'
:
<reset>0</reset><pc>abcdefghijklmnopqrstuvwxyz</pc>
Для простого режима сдвига веса вычисляются следующим образом:
'a' has weight 0E29+1'b' has weight 0E29+2'c' has weight 0E29+3...
Однако, есть недостаточно многие свободные позиции, чтобы поместить 26 символов между '0'
и '1'
. Результат состоит в том, что
цифры и буквы смешиваются.
Чтобы решить это, использовать shift-after-method="expand"
.
Затем веса вычисляются как это:
'a' has weight [0E29][233D+1]'b' has weight [0E29][233D+2]'c' has weight [0E29][233D+3]...
233D
UCA 4.0.0 веса для символа 0xA48C
,
который является последним неигнорируемым символом (своего рода самый большой символ в
сопоставлении, исключая CJK). UCA 5.2.0 подобен, но использование 3ACA
,
для символа 0x1342E
.
Специфичные для MySQL Расширения LDML
В MySQL 5.7 расширение правил LDML разрешает <collation>
элемент, чтобы
включать дополнительное version
атрибут в
<collation>
теги, чтобы указать на версию UCA, на которой базируется сопоставление. Если version
атрибут опускается, его значение по умолчанию 4.0.0
. Например, эта спецификация указывает на сопоставление, которое основано на
UCA 5.2.0:
<collation id="nnn
" name="utf8_xxx
_ci" version="5.2.0">...</collation>