En informática , la canonización (a veces denominada estandarización o normalización ) es un proceso para convertir datos que tienen más de una representación posible en una forma "estándar", "normal" o canónica . Esto se puede hacer para comparar diferentes representaciones y determinar su equivalencia, para contar el número de estructuras de datos distintas, para mejorar la eficiencia de diversos algoritmos eliminando cálculos repetidos o para imponer un orden de clasificación significativo .
Casos de uso
nombres de archivo
En la mayoría de los casos, se puede acceder a los archivos en los sistemas de archivos mediante múltiples nombres de archivo . Por ejemplo, en sistemas tipo Unix , la cadena " /./" puede reemplazarse por " /". En la biblioteca estándar de C , la función realpath()realiza esta tarea. Otras operaciones que realiza esta función para canonizar los nombres de archivo son el manejo de /..componentes que hacen referencia a directorios padres, la simplificación de secuencias de múltiples barras diagonales, la eliminación de barras diagonales finales y la resolución de enlaces simbólicos .
La canonicalización de los nombres de archivo es importante para la seguridad informática. Por ejemplo, un servidor web puede tener una restricción que C:\inetpub\wwwroot\cgi-binimpida la ejecución de archivos dentro del directorio `cgi`. Esta regla se aplica comprobando que la ruta comience con `cgi` C:\inetpub\wwwroot\cgi-bin\y solo entonces ejecutándola. Si bien el archivo C:\inetpub\wwwroot\cgi-bin\..\..\..\Windows\System32\cmd.exeinicialmente parece estar en el directorio `cgi`, aprovecha el ..especificador de ruta para recorrer la jerarquía de directorios hacia arriba en un intento de ejecutar un archivo fuera de `cgi` cgi-bin. Permitir cmd.exela ejecución sería un error causado por no canonizar el nombre de archivo a su representación más simple, `cgi` C:\Windows\System32\cmd.exe, y se denomina vulnerabilidad de recorrido de directorios . Con la ruta canonizada, es evidente que el archivo no debe ejecutarse.
Unicode
En Unicode , muchas letras acentuadas pueden representarse de más de una manera. Por ejemplo, la é puede representarse en Unicode como el carácter Unicode U+0065 (LETRA MINÚSCULA LATINA E) seguido del carácter U+0301 (ACENTO AGUDO COMBINADO), pero también puede representarse como el carácter precompuesto U+00E9 (LETRA MINÚSCULA LATINA E CON ACENTO AGUDO). Esto complica la comparación de cadenas, ya que debe considerarse cada posible representación de una cadena que contenga dichos glifos. Para solucionar esto, Unicode proporciona el mecanismo de equivalencia canónica . En este contexto, la canonización es la normalización de Unicode .
Las codificaciones de ancho variable en el estándar Unicode, en particular UTF-8 , pueden generar una necesidad adicional de canonización en algunas situaciones. Concretamente, según el estándar, en UTF-8 solo existe una secuencia de bytes válida para cualquier carácter Unicode, [ 1 ] pero algunas secuencias de bytes son inválidas, es decir, no se pueden obtener codificando ninguna cadena de caracteres Unicode en UTF-8. Algunas implementaciones de decodificadores poco rigurosas pueden aceptar secuencias de bytes inválidas como entrada y producir un carácter Unicode válido como salida para dicha secuencia. Si se utiliza un decodificador de este tipo, algunos caracteres Unicode tienen, en la práctica, más de una secuencia de bytes correspondiente: la válida y algunas inválidas. Esto podría generar problemas de seguridad similares a los descritos en la sección anterior. Por lo tanto, si se desea aplicar algún filtro (por ejemplo, una expresión regular escrita en UTF-8) a cadenas UTF-8 que posteriormente se pasarán a un decodificador que admita secuencias de bytes inválidas, se deben canonizar las cadenas antes de pasarlas al filtro. En este contexto, la canonización es el proceso de traducir cada carácter de una cadena a su secuencia de bytes válida. Una alternativa a la canonización es rechazar cualquier cadena que contenga secuencias de bytes no válidas.
URL
Una URL canónica es una URL que define la única fuente de verdad para el contenido duplicado .
Uso por parte de Google
Una URL canónica es la URL de la página que Google considera más representativa de un conjunto de páginas duplicadas en tu sitio. Por ejemplo, si tienes URL para la misma página, como https://example.com/?dress=1234y https://example.com/dresses/1234, Google elige una como canónica. Ten en cuenta que las páginas no tienen por qué ser idénticas; pequeños cambios en la clasificación o el filtrado de las páginas de lista no hacen que la página sea única (por ejemplo, ordenar por precio o filtrar por color del artículo).
El canónico puede estar en un dominio diferente al de un duplicado. [ 2 ]
Internet
Con la ayuda de las URL canónicas, un motor de búsqueda sabe qué enlace debe proporcionarse en el resultado de una consulta.
Un elemento de enlace canónico se puede utilizar para definir una URL canónica.
Intranet
En las intranets , la búsqueda manual de información es predominante. En este caso, las URL canónicas también pueden definirse en un formato no legible por máquina. Por ejemplo, en una directriz .
Varios
Las URL canónicas suelen ser las URL que se utilizan para la acción de compartir .
Dado que la URL canónica se utiliza en los resultados de búsqueda de los motores de búsqueda, en la mayoría de los casos se trata de una página de destino .
Motores de búsqueda y SEO
En la búsqueda web y la optimización para motores de búsqueda (SEO), la canonicalización de URL se ocupa del contenido web que tiene más de una URL posible. Tener varias URL para el mismo contenido web puede causar problemas a los motores de búsqueda, específicamente al determinar qué URL debe mostrarse en los resultados de búsqueda. [ 3 ] La mayoría de los motores de búsqueda admiten el elemento de enlace canónico como una pista sobre qué URL debe tratarse como la versión verdadera. Como indicó John Mueller de Google, tener otras directivas en una página, como el elemento robots.noindex, puede dar a los motores de búsqueda señales contradictorias sobre cómo manejar la canonicalización. [ 4 ]
Ejemplo:
http://wikipedia.comhttp://www.wikipedia.comhttp://www.wikipedia.com/http://www.wikipedia.com/?source=asdf
Todas estas URL apuntan a la página principal de Wikipedia, pero un motor de búsqueda solo considerará una de ellas como la forma canónica de la URL.
XML
Un documento XML canónico es, por definición, un documento XML en formato XML canónico, definido por la especificación XML canónica . En resumen, la canonicalización elimina los espacios en blanco dentro de las etiquetas, utiliza codificaciones de caracteres específicas, ordena las referencias a espacios de nombres y elimina las redundantes, elimina las declaraciones XML y DOCTYPE, y transforma las URI relativas en URI absolutas.
Un ejemplo sencillo serían los dos siguientes fragmentos de XML:
<node1 x='1' a="1" a="2">Data</node1 > <node2>Data</node2><node1 a="2" x="1">Data</node1> <node2>Data</node2>
El primer ejemplo contiene espacios adicionales en la etiqueta de cierre del primer nodo. En el segundo ejemplo, que ha sido canonizado, se han eliminado estos espacios. Cabe destacar que, según la canonización del W3C, solo se eliminan los espacios dentro de las etiquetas, no los que se encuentran entre ellas.
A continuación se presenta un resumen completo de los cambios en la canonización:
- El documento está codificado en UTF-8.
- Los saltos de línea se normalizan a #xA en la entrada, antes del análisis.
- Los valores de los atributos se normalizan, como si lo hiciera un procesador de validación.
- Se reemplazan las referencias a caracteres y entidades analizadas.
- Las secciones CDATA se reemplazan con su contenido de caracteres.
- Se eliminan la declaración XML y la declaración de tipo de documento.
- Los elementos vacíos se convierten en pares de etiquetas de inicio y fin.
- Los espacios en blanco fuera del elemento del documento y dentro de las etiquetas de inicio y fin se normalizan.
- Se conservan todos los espacios en blanco del contenido de los caracteres (excepto los caracteres eliminados durante la normalización del salto de línea).
- Los delimitadores de valores de atributos se establecen entre comillas dobles.
- Los caracteres especiales en los valores de los atributos y el contenido de los caracteres se reemplazan por referencias a caracteres.
- Las declaraciones de espacio de nombres superfluas se eliminan de cada elemento.
- Se añaden atributos predeterminados a cada elemento.
xml:baseSe realiza la corrección de atributos- El orden lexicográfico se impone en las declaraciones de espacio de nombres y atributos de cada elemento.
Lingüística computacional
En morfología y lexicografía , un lema es la forma canónica de un conjunto de palabras . En inglés , por ejemplo, run , runs , ran y running son formas del mismo lexema , por lo que podemos seleccionar una de ellas; por ejemplo, run , para representar todas las formas. Las bases de datos léxicas como Unitex utilizan este tipo de representación.
La lematización es el proceso de convertir una palabra a su forma canónica .
Véase también
- Forma canónica : representación estándar de un objeto matemático.
- Canonización de grafos : una tarea en la teoría computacional de grafos.
- Lematización – Canonización del procesamiento del lenguaje natural Páginas que muestran descripciones breves de destinos de redireccionamiento
- Normalización de texto : proceso de transformación de un texto en una única forma canónica.
- Especie tipo : término utilizado en la nomenclatura biológica.
Referencias
- ↑ RFC 2279: UTF-8, un formato de transformación de ISO 10646
- ↑ "Consolidar URL duplicadas con etiquetas canónicas | Google Search Central" .
- ↑ Cutts, Matt (4 de enero de 2006). "Consejos de SEO: canonicalización de URL" . Matt Cutts: Gadgets, Google y SEO . Recuperado el 3 de septiembre de 2013 .
- ↑ "La URL canonizada es noindex, nofollow" . Consultado el 20 de abril de 2020 .
Enlaces externos
- Versión XML canónica 1.0, recomendación del W3C
- Referencia de seguridad de OWASP para la canonización
- Terminología informática