Qu'est ce qu'un "canonique chemin"?

C'est une question théorique. J'ai cherché sur internet sans succès satisfaisant, je veux juste comprendre quel est ce jargon. J'ai vu des exemples de Java, JSON, etc mais je n'ai pas trouvé dans Google ni ici dans StackOverflow une explication simple, pas de code nécessaire =P

Donc, un chemin absolu c'est un moyen d'accéder à un certain fichier ou emplacement décrivant l'itinéraire complet, le chemin complet, et il dépend du système D'exploitation (les chemins absolus pour Windows et Linux par exemple, sont différents) un chemin relatif c'est une route vers un fichier ou un emplacement qu'il est décrit à partir de l'emplacement actuel .. (deux points), indiquant un niveau supérieur dans l'arborescence de répertoires. Qui a été clair pour moi depuis plusieurs années maintenant.

Lors de la recherche, j'ai même vu qu'il y a aussi des fichiers canonisés! Tout ce que je sais, C'est canonique signifie quelque chose comme "selon les règles" ou quelque chose.

Quelqu'un peut-il m'éclairer sur les thérmes de la théorie sur les choses canoniques s'il vous plait? = ) Merci!!

PD (Donc Ce n'était pas seulement un nom aléatoire Ubuntu après tout) XD

PD2 malheureusement, je ne peux pas donner la réponse à tout le monde, je l'ai donnée à celle qui m'a le plus aidé à comprendre le concept, mais merci beaucoup à tout le monde=)

53
demandé sur antonio 2012-08-24 01:32:50

4 réponses

Tout le but de faire n'importe quoi "canonique" est de pouvoir comparer deux choses. Par exemple, ../../here/bar/x et ./test/../../bar/x peuvent se référer au même emplacement, mais vous ne pouvez pas faire de comparaison textuelle sur les deux chemins. Cependant, si vous les transformez en leur représentation canonique, ils deviennent tous les deux ../bar/x, et nous voyons qu'ils se réfèrent réellement à la même chose.

En bref, il est souvent le cas que vous avez plusieurs façons de se référer à une chose, et dans ce cas, vous pouvez être en mesure de définir un représentation canonique, qui est unique et qui vous permet d'obtenir une poignée sur les collections de telles choses.

(Si vous cherchez plus d'exemples, toutes les mathématiques sont pleines de constructions" canoniques " pour toutes sortes d'objets, et avec le même but à l'esprit. Peut-être que cet article Wikipedia peut fournir des instructions supplémentaires.)

69
répondu Kerrek SB 2012-08-23 21:47:08

Un bon moyen de définir un chemin canonique sera: the shortest absolute path (court, au sens de longueur de chaîne).

Ceci est un exemple de la différence entre un chemin absolu et un chemin canonique:

Chemin absolu: C:\abc\..\abc\file.txt
chemin canonique: C:\abc\file.txt

10
répondu alfasin 2015-10-21 00:51:08

Ce qu'est un chemin canonique (ou sa différence d'un chemin absolu) dépend du système.
Typiquement, si un chemin (complet) contient des alias, des raccourcis ou des liens symboliques, le chemin canonique résout tous ces éléments dans les répertoires réels auxquels ils se réfèrent.
Exemple: si /bin/a est un lien sym, vous pouvez le trouver n'importe où vous demandez un chemin absolu, par exemple à partir de java. Io. File#getAbsolutePath alors que le fichier réel (c'est-à-dire la cible réelle du lien), c'est-à-dire usr/local/bin/a serait renvoyé en tant que canonique par exemple, à partir de java. Io. File#getCanonicalPath

6
répondu Cratylus 2012-08-23 21:44:51

La plupart des problèmes avec les chemins canoniques se produisent lorsque vous passez le nom d'un répertoire et non d'un fichier. Pour le fichier, si nous fournissons un chemin absolu qui est aussi le chemin canonique. Mais pour dir cela signifie omettre le dernier"/". Par exemple, "/var/tmp/foo" est un canoniques chemin "/var/tmp/foo/" ne l'est pas.

2
répondu Achintya Guchhait 2018-01-31 09:11:41