Канонизация
В информатике канонизация , (иногда стандартизация или нормализация ) — это процесс преобразования данных имеющих более одного возможного представления, в «стандартную», «нормальную» или каноническую форму . Это можно сделать для сравнения различных представлений на предмет эквивалентности, для подсчета количества различных структур данных, для повышения эффективности различных алгоритмов за счет исключения повторных вычислений или для обеспечения возможности установить значимый порядок сортировки .
Варианты использования [ править ]
Имена файлов [ править ]
Доступ к файлам в файловых системах в большинстве случаев возможен через несколько имен файлов . Например, в 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
и называется уязвимостью обхода каталога . Поскольку путь канонизирован, становится ясно, что файл не должен выполняться.
Юникод [ править ]
В Юникоде многие буквы с диакритическими знаками могут быть представлены более чем одним способом. Например, é может быть представлен в Юникоде как символ Юникода U+0065 (ЛАТИНСКАЯ СТРОЧНАЯ БУКВА E), за которым следует символ U+0301 (КОМБИНИРОВАНИЕ ОСТРОГО АКЦЕНТА), но он также может быть представлен как заранее составленный символ U+00E9 (ЛАТИНСКАЯ СТРОЧНАЯ БУКВА E). СТРОЧНАЯ БУКВА Е С ОСТРЫМ). Это усложняет сравнение строк, поскольку необходимо учитывать все возможные представления строки, содержащей такие глифы. Чтобы справиться с этим, в Unicode предусмотрен механизм канонической эквивалентности . В этом контексте канонизация — это нормализация Unicode .
Кодировки переменной ширины в стандарте Unicode, в частности UTF-8 , в некоторых ситуациях могут вызвать дополнительную необходимость канонизации. А именно, по стандарту в UTF-8 существует только одна допустимая последовательность байтов для любого символа Юникода, [1] но некоторые последовательности байтов недействительны, т. е. их нельзя получить путем кодирования какой-либо строки символов Юникода в 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 выбирает один из них как канонический. Обратите внимание, что страницы не обязательно должны быть абсолютно идентичными; незначительные изменения в сортировке или фильтрации страниц списка не делают страницу уникальной (например, сортировка по цене или фильтрация по цвету товара).
Канонический может находиться в другом домене, чем дубликат. [2]
Интернет [ править ]
С помощью канонических URL-адресов поисковая система знает, какая ссылка должна быть указана в результате запроса.
Элемент канонической ссылки можно использовать для определения канонического URL-адреса.
Интранет [ править ]
В интрасетях преобладает ручной поиск информации. В этом случае канонические URL-адреса также могут быть определены в немашиночитаемой форме. Например, в руководстве .
Разное [ править ]
Канонические URL-адреса обычно используются для действия «Поделиться» .
Поскольку канонический URL-адрес используется в результатах поиска поисковых систем, в большинстве случаев это целевая страница .
Поисковые системы и SEO [ править ]
В веб-поиске и поисковой оптимизации (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-документом в канонической форме XML, определенной спецификацией 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 удаляются только пробелы внутри тегов, а не между тегами.
Полный обзор изменений канонизации приведен ниже:
- Документ имеет кодировку UTF-8.
- Разрывы строк нормализуются до #xA на входе перед синтаксическим анализом.
- Значения атрибутов нормализуются, как будто проверяющим процессором.
- Ссылки на символы и анализируемые сущности заменяются.
- Разделы CDATA заменяются их символьным содержимым.
- Декларация XML и декларация типа документа удалены.
- Пустые элементы преобразуются в пары тегов начала и конца.
- Пробелы за пределами элемента документа, а также внутри начальных и конечных тегов нормализуются.
- Все пробелы в содержимом символов сохраняются (за исключением символов, удаленных во время нормализации перевода строки).
- Разделители значений атрибутов заключаются в кавычки (двойные кавычки).
- Специальные символы в значениях атрибутов и содержимом символов заменяются ссылками на символы.
- Из каждого элемента удалены лишние объявления пространства имен.
- Атрибуты по умолчанию добавляются к каждому элементу.
- Исправление
xml:base
атрибуты выполняются - Лексикографический порядок налагается на объявления пространства имен и атрибуты каждого элемента.
Компьютерная лингвистика [ править ]
В морфологии и лексикографии лемма — каноническая форма набора слов . В английском языке , например, run , Runs , Run и Running — это формы одной и той же лексемы , поэтому мы можем выбрать одну из них; бывший. run , чтобы представить все формы. Лексические базы данных, такие как Unitex, используют этот тип представления.
Лемматизация — это процесс приведения слова к его канонической форме .
См. также [ править ]
Ссылки [ править ]
- ^ RFC 2279: UTF-8, формат преобразования ISO 10646.
- ^ «Объединить повторяющиеся URL-адреса с Canonicals | Центр поиска Google» .
- ^ Каттс, Мэтт (4 января 2006 г.). «Совет по SEO: канонизация URL» . Мэтт Каттс: Гаджеты, Google и SEO . Проверено 3 сентября 2013 г.
- ^ «Канонизированный URL-адрес — noindex, nofollow» . Проверено 20 апреля 2020 г.