2012-08-23 9 views
48

Esa es una pregunta teórica. He buscado en Internet sin suerte satisfactoria, solo quiero entender qué es esta jerga. He visto ejemplos de Java, JSON, etc. pero no pude encontrar en Google ni aquí en StackOverflow una explicación simple, no se necesita código = P¿Qué es un "camino canónico"?

Entonces, una ruta absoluta es una manera de llegar a un determinado archivo o ubicación describiendo la ruta completa a ella, la ruta completa y depende del sistema operativo (las rutas absolutas para Windows y Linux, por ejemplo, son diferentes). Una ruta relativa es una ruta a un archivo o ubicación que se describe desde la ubicación actual. . (dos puntos) que indica un nivel superior en el árbol de directorios. Eso ha sido claro para mí desde hace varios años.

Al buscar, incluso he visto que hay archivos canonicalizados también. Todo lo que sé es CANONICAL significa algo así como "según las reglas" o algo así.

¿Alguien puede por favor aclararme en términos de teoría sobre cosas canónicas por favor? =) GRACIAS!

PD (así que no era más que un nombre aleatorio Ubuntu después de todo) XD

PD2 Por desgracia no puede dar la respuesta a todo el mundo, lo di a la que más me ayudó a entender el concepto, pero muchas gracias a todos =)

+5

Por "SO" ¿quiere decir "OS"? ¿Es usted francés? –

+0

"Système d'exploitation" sí, sé francés, pero me refería a OS (lo deleturé, lo siento, jeje) Sistema operativo ... Soy mexicano de hecho xD – Metafaniel

+4

Ahh, "Sistema de la operación, ¡olé!" (Y es "Sistema operativo", por cierto.) –

Respuesta

62

El objetivo de hacer cualquier cosa "canonical" es para que pueda comparar dos cosas. Por ejemplo, tanto ../../here/bar/x como ./test/../../bar/x pueden referirse a la misma ubicación, pero no puede hacer una comparación textual en las dos rutas. Sin embargo, si los convierte en su representación canónica, ambos se convierten en ../bar/x, y vemos que en realidad se refieren a lo mismo.

En resumen, es a menudo el caso de que usted tiene muchas formas de referirse a una cosa, y en ese caso usted puede ser capaz de definir una representación canónica que es única y que le permite obtener una manejar en col ­ lecciones de tales cosas.

(Si usted está buscando más ejemplos, todas las matemáticas está lleno de construcciones "canónicos" para todo tipo de objetos, y mucho con el mismo propósito en mente. Tal vez esto Wikipedia article puede proporcionar algunas de anuncios ­ direcciones dicional .)

+1

Oooh ahora veo ... Así que en resumen, el canónico debe ser único, por lo que es el camino completo sin uso relativo de los dos puntos Ohhh! Su respuesta fue útil;) Gracias – Metafaniel

+0

@Metafaniel: Sí, la parte crucial es la singularidad. Supongo que puedes tener tanto un pariente canónico como un camino absoluto canónico, pero esa es una distinción independiente. –

+0

Todo fue bueno y correcto hasta ese comentario xD Bien, lo he entendido, pero ... ¿un camino relativo canónico? Como he entendido hasta ahora (gracias a todos) los caminos canónicos son absolutos por naturaleza. ¿Qué puedes decirme sobre los caminos relativos canónicos? = S GRACIAS =) – Metafaniel

9

Una buena forma de definir una ruta canónica será: the shortest absolute path (abreviatura, en el sentido de longitud de cadena).

Este es un ejemplo de la diferencia entre una ruta absoluta y una ruta canónica:

ruta absoluta: C:\abc\..\abc\file.txt
ruta canónica: C:\abc\file.txt

+0

Según @KerrekSB, la ruta debe ser única para ser canónica, por lo que en su ejemplo puedo verla: no hay otra manera de representar C: \ abc \ file.txt Gracias por el ejemplo =) – Metafaniel

+0

Sí, puede definir un 'canonical path' como el camino absoluto más corto (short, en el sentido de string-length). Lo agregaré a mi respuesta. – alfasin

+0

Ah bien, bien, gracias, está más claro ahora;) – Metafaniel

6

Qué ruta canónica es (o su diferencia con un absoluto ruta) depende del sistema.
Normalmente, si una ruta (completa) contiene alias, accesos directos o enlaces simbólicos, la ruta canónica resuelve todos estos en los directorios reales a los que se refieren.
Ejemplo: si /bin/a es un enlace simbólico, puede encontrarlo en cualquier lugar que solicite una ruta absoluta, p. Ej. desde java.io.File#getAbsolutePath mientras que el archivo real (es decir, el objetivo real del enlace), es decir, usr/local/bin/a, se devolverá como una ruta canónica, p.desde java.io.File#getCanonicalPath

+0

¡Muy útil tu comentario para que lo entienda también! ¡Ni siquiera he pensado en los enlaces sym ahora mismo! Entonces, un enlace simbólico es absoluto PERO no canónico ... Muy completo. SIN EMBARGO, tengo una nueva duda ... ¿Qué pasa con los enlaces duros? ¿No son lo suficientemente absolutos? GRACIAS – Metafaniel

+0

Depende.Por ejemplo, java.io.File # getCanonicalPath no resuelve los enlaces duros – Cratylus

+0

No he desarrollado tanto en Java, soy principalmente un tipo PHP;) Gracias por aclarar =) – Metafaniel

1

La mayoría de los problemas con las rutas canónicas se producen cuando se pasa el nombre de un directorio y no de un archivo. Para el archivo, si proporcionamos una ruta absoluta que también es la ruta canónica. Pero para dir, significa omitir el último "/". Por ejemplo, "/ var/tmp/foo" es una ruta canónica mientras que "/ var/tmp/foo /" no lo es.

Cuestiones relacionadas