web-dev-qa-db-fra.com

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

C'est une question théorique. J'ai cherché sur Internet sans chance satisfaisante, je veux juste comprendre ce qu'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

Ainsi, un chemin absolu est un moyen d'accéder à un certain fichier ou emplacement décrivant l'itinéraire complet vers celui-ci, 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 un route vers un fichier ou un emplacement qui est décrit à partir de l'emplacement actuel .. (deux points) indiquant un niveau supérieur dans l'arborescence des répertoires. Cela est clair pour moi depuis plusieurs années maintenant.

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

Quelqu'un peut-il m'éclairer dans les thermes de la théorie sur les trucs canoniques, s'il vous plaît? =) MERCI !!

PD (donc ce n'était pas juste 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 =)

66
Metafaniel

L'intérêt de faire n'importe quoi "canonique" est de comparer deux choses. Par exemple, les deux ../../here/bar/x et ./test/../../bar/x peut faire référence 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 en fait à la même chose.

En bref, il arrive souvent que vous ayez plusieurs façons de vous référer à une chose, et dans ce cas, vous pourrez définir une représentation canonique qui est unique et qui vous permet d'avoir une idée des collections de ces choses.

(Si vous cherchez plus d'exemples, toutes les mathématiques sont pleines de constructions "canoniques" pour toutes sortes d'objets, et tout à fait dans le même but. Peut-être que cela article Wikipedia peut en fournir directions supplémentaires.)

82
Kerrek SB

Un bon moyen de définir un chemin canonique sera: the shortest absolute path (court, au sens de string-length).

Voici 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

17
alfasin

Ce qu'est un chemin canonique (ou sa différence par rapport à un chemin absolu) dépend du système.
Généralement, 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 font référence.
Exemple: si /bin/a est un lien sym, vous pouvez le trouver partout où vous demandez un chemin absolu, par exemple from Java.io.File # getAbsolutePath tandis que le fichier réel (c'est-à-dire la cible réelle du lien) c'est-à-dire usr/local/bin/a serait renvoyé comme chemin canonique, par exemple de Java.io.File # getCanonicalPath

6
Cratylus

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, c'est également le chemin canonique. Mais pour dir, cela signifie omettre le dernier "/". Par exemple, "/ var/tmp/foo" est un chemin canonique tandis que "/ var/tmp/foo /" ne l'est pas.

2
Achintya Guchhait