Введение
Процесс преобразования данных в "стандартную", "нормальную" или каноническую форму
В информатике канонизация (иногда стандартизация или нормализация) — это процесс приведения данных, имеющих более одного возможного представления, к "стандартной", "нормальной" или канонической форме. Это может быть выполнено для сравнения различных представлений на предмет эквивалентности, для подсчета количества различных структур данных, для повышения эффективности различных алгоритмов за счет исключения повторяющихся вычислений или для обеспечения возможности наложения осмысленного порядка сортировки.
Имена файлов
В большинстве случаев доступ к файлам в файловых системах осуществляется через несколько имен файлов. Например, в Unix-подобных системах строка "/./" может быть заменена на "/". В стандартной библиотеке C эта задача выполняется функцией `realpath`. Другие операции, выполняемые этой функцией для канонизации имен файлов, включают обработку компонентов "/", ссылающихся на родительские каталоги, упрощение последовательностей из нескольких слешей, удаление завершающих слешей и разрешение символических ссылок. Канонизация имен файлов важна для компьютерной безопасности. Например, веб-сервер может иметь ограничение, что исполняться могут только файлы, находящиеся в каталоге `cgi` C:\inetpub\wwwroot\cgi bin. Это правило обеспечивается путем проверки, что путь начинается с `C:\inetpub\wwwroot\cgi bin\` и только после этого файл исполняется. Хотя файл `C:\inetpub\wwwroot\cgi bin\ \ \ \Windows\System32\cmd. exe` изначально кажется находящимся в каталоге `cgi`, он использует спецификатор пути для перемещения вверх по иерархии каталогов в попытке выполнить файл за пределами каталога `cgi bin`. Разрешение выполнения `cmd. exe` было бы ошибкой, вызванной неудачной канонизацией имени файла до его простейшего представления, `C:\Windows\System32\cmd. exe`, и называется уязвимостью обхода каталогов. После канонизации пути становится очевидно, что файл не должен быть выполнен.
Юникод
В Юникоде многие буквы с диакритическими знаками могут быть представлены несколькими способами. Например, é может быть представлен в Юникоде как Unicode-символ U+0065 (LATIN SMALL LETTER E), за которым следует символ U+0301 (COMBINING ACUTE ACCENT), но также может быть представлен как предварительно составленный символ U+00E9 (LATIN SMALL LETTER E WITH ACUTE). Это усложняет сравнение строк, поскольку необходимо учитывать все возможные представления строк, содержащих такие символы. Для решения этой проблемы Юникод предоставляет механизм канонической эквивалентности. В этом контексте канонизация – это нормализация Юникода. Кодировки переменной ширины в стандарте Юникод, в частности UTF-8, могут потребовать дополнительной канонизации в некоторых ситуациях. А именно, согласно стандарту, в UTF-8 существует только одна допустимая последовательность байтов для любого символа Юникода, но некоторые последовательности байтов являются недопустимыми, то есть их нельзя получить при кодировании любой строки символов Юникода в UTF-8. Некоторые некачественные реализации декодеров могут принимать недопустимые последовательности байтов на вход и генерировать допустимый символ Юникода на выходе для такой последовательности. Если использовать такой декодер, некоторые символы Юникода фактически будут иметь более одной соответствующей последовательности байтов: допустимую и некоторые недопустимые. Это может привести к проблемам безопасности, аналогичным описанным в предыдущем разделе. Поэтому, если требуется применить какой-либо фильтр (например, регулярное выражение, записанное в UTF-8) к строкам UTF-8, которые впоследствии будут переданы в декодер, допускающий недопустимые последовательности байтов, следует канонизировать строки перед передачей их в фильтр. В этом контексте канонизация – это процесс преобразования каждого символа строки в его единственную допустимую последовательность байтов. Альтернативой канонизации является отбрасывание любых строк, содержащих недопустимые последовательности байтов.
URL-адрес
Канонический URL — это URL, указывающий предпочтительную версию страницы при наличии дублирующегося контента.
Использование Google
Канонический URL — это URL страницы, которую Google считает наиболее авторитетной из набора дублирующихся страниц на вашем сайте. Например, если у вас есть URL-адреса для одной и той же страницы (например, https://example.com/?dress=1234 и https://example.com/dresses/1234), Google выбирает один из них как канонический. Обратите внимание, что страницы не обязательно должны быть абсолютно идентичными; незначительные изменения в сортировке или фильтрации страниц списков не делают страницу уникальной (например, сортировка по цене или фильтрация по цвету товара). Канонический URL может находиться на другом домене, чем дублирующая страница.
Интернет
С помощью канонических URL поисковая система определяет, какую ссылку следует показывать в результатах поиска. Для указания канонического URL можно использовать каноническую ссылку.
Интранет
В интрасетях преобладает ручной поиск информации. В этом случае канонические URL-адреса могут быть определены и в нечитаемом для машин формате, например, в методических рекомендациях.
Различные
Канонические URL обычно используются при публикации ссылок для расшаривания. Поскольку канонический URL отображается в результатах поиска поисковых систем, как правило, это целевая страница.
Вычислительная лингвистика
В морфологии и лексикографии лемма — это каноническая форма набора слов. В английском языке, например, run, runs, ran и running являются формами одной и той же лексемы, поэтому можно выбрать одну из них, например, run, для представления всех форм. Лексические базы данных, такие как Unitex, используют подобный вид представления. Лемматизация — это процесс приведения слова к его канонической форме.