В информатике канонизация (иногда стандартизация или нормализация ) — это процесс преобразования данных , имеющих более одного возможного представления, в «стандартную», «нормальную» или каноническую форму . Это может быть сделано для сравнения различных представлений на предмет эквивалентности, для подсчета количества различных структур данных, для повышения эффективности различных алгоритмов путем устранения повторяющихся вычислений или для обеспечения возможности наложения осмысленного порядка сортировки .
Файлы в файловых системах в большинстве случаев могут быть доступны через несколько имен файлов . Например, в Unix -подобных системах строка " /./
" может быть заменена на " /
". В стандартной библиотеке C эта задача выполняется функцией realpath()
. Другие операции, выполняемые этой функцией для канонизации имен файлов, включают обработку /..
компонентов, ссылающихся на родительские каталоги, упрощение последовательностей из нескольких слешей, удаление конечных слешей и разрешение символических ссылок .
Канонизация имен файлов важна для безопасности компьютера. Например, веб-сервер может иметь ограничение, согласно которому C:\inetpub\wwwroot\cgi-bin
могут быть выполнены только файлы в каталоге cgi. Это правило обеспечивается путем проверки того, что путь начинается с 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 многие буквы с ударением могут быть представлены более чем одним способом. Например, é может быть представлена в Unicode как символ Unicode U+0065 (ЛАТИНСКАЯ СТРОЧНАЯ БУКВА E), за которым следует символ U+0301 (КОМБИНИРОВАНИЕ ОСТРЫМ УДАРЕНИЕМ), но его также можно представить как предсоставной символ U+00E9 (ЛАТИНСКАЯ СТРОЧНАЯ БУКВА E С ОСТРЫМ УДАРЕНИЕМ). Это усложняет сравнение строк, поскольку необходимо рассмотреть все возможные представления строки, содержащей такие глифы. Для решения этой проблемы Unicode предоставляет механизм канонической эквивалентности . В этом контексте канонизация — это нормализация Unicode .
Кодировки переменной ширины в стандарте Unicode, в частности UTF-8 , могут вызывать дополнительную необходимость канонизации в некоторых ситуациях. А именно, по стандарту в UTF-8 существует только одна допустимая последовательность байтов для любого символа Unicode, [1] но некоторые последовательности байтов являются недопустимыми, т. е. их нельзя получить путем кодирования любой строки символов Unicode в UTF-8. Некоторые неряшливые реализации декодеров могут принимать недопустимые последовательности байтов в качестве входных данных и выдавать допустимый символ Unicode в качестве выходных данных для такой последовательности. Если использовать такой декодер, некоторые символы Unicode фактически имеют более одной соответствующей последовательности байтов: допустимую и некоторые недопустимые. Это может привести к проблемам безопасности, аналогичным описанным в предыдущем разделе. Поэтому, если требуется применить некоторый фильтр (например, регулярное выражение, написанное в UTF-8) к строкам UTF-8, которые позже будут переданы декодеру, который допускает недопустимые последовательности байтов, следует канонизировать строки перед передачей их фильтру. В этом контексте канонизация — это процесс перевода каждого символа строки в его единственную допустимую последовательность байтов. Альтернативой канонизации является отклонение любых строк, содержащих недопустимые последовательности байтов.
Канонический URL-адрес — это URL-адрес , определяющий единый источник истины для дублированного контента .
Канонический URL — это URL страницы, которую Google считает наиболее репрезентативной из набора дубликатов страниц на вашем сайте. Например, если у вас есть URL для одной и той же страницы, такие как https://example.com/?dress=1234
и https://example.com/dresses/1234
, Google выбирает один из них как канонический. Обратите внимание, что страницы не обязательно должны быть абсолютно идентичными; незначительные изменения в сортировке или фильтрации страниц списков не делают страницу уникальной (например, сортировка по цене или фильтрация по цвету элемента).
Канонический домен может находиться в другом домене, чем дубликат. [2]
С помощью канонических URL-адресов поисковая система знает, какую ссылку следует предоставить в результате запроса.
Элемент канонической ссылки может использоваться для определения канонического URL.
В интрасетях ручной поиск информации является преобладающим. В этом случае канонические URL-адреса могут быть определены и в немашиночитаемой форме. Например, в руководстве .
Канонические URL-адреса — это обычно URL-адреса, которые используются для действия «Поделиться».
Поскольку канонический URL-адрес используется в результатах поиска поисковых систем, в большинстве случаев он представляет собой целевую страницу .
В веб-поиске и поисковой оптимизации (SEO) канонизация URL-адресов касается веб-контента, который имеет более одного возможного URL-адреса. Наличие нескольких URL-адресов для одного и того же веб-контента может вызвать проблемы для поисковых систем, в частности, при определении того, какой URL-адрес должен отображаться в результатах поиска. [3] Большинство поисковых систем поддерживают элемент ссылки Canonical в качестве подсказки к тому, какой URL-адрес следует рассматривать как истинную версию. Как указал Джон Мюллер из Google, наличие других директив на странице, таких как элемент robots noindex, может давать поисковым системам противоречивые сигналы о том, как обрабатывать канонизацию [4]
Пример:
http://wikipedia.com
http://www.wikipedia.com
http://www.wikipedia.com/
http://www.wikipedia.com/?source=asdf
Все эти URL-адреса указывают на домашнюю страницу Википедии, но поисковая система будет считать канонической формой URL-адреса только один из них.
Канонический XML- документ по определению является XML-документом в форме XML Canonical, определенной спецификацией The Canonical XML. Вкратце, канонизация удаляет пробелы внутри тегов, использует определенные кодировки символов, сортирует ссылки на пространства имен и устраняет избыточные, удаляет объявления XML и DOCTYPE и преобразует относительные URI в абсолютные URI.
Простым примером могут служить следующие два фрагмента XML:
<node1 x='1' a="1" a="2">Data</node1 > <node2>Data</node2>
<node1 a="2" x="1">Data</node1> <node2>Data</node2>
Первый пример содержит лишние пробелы в закрывающем теге первого узла. Во втором примере, который был канонизирован, эти пробелы были удалены. Обратите внимание, что при канонизации W3C удаляются только пробелы внутри тегов, а не между тегами.
Полный перечень изменений канонизации приведен ниже:
xml:base
Выполняется исправление атрибутовВ морфологии и лексикографии лемма — это каноническая форма набора слов . Например, в английском языке run , running , ran и running являются формами одной и той же лексемы , поэтому мы можем выбрать одну из них; напр. run , чтобы представить все формы. Лексические базы данных, такие как Unitex, используют этот тип представления.
Лемматизация — это процесс преобразования слова в его каноническую форму .