webentwicklung-frage-antwort-db.com.de

Was ist ein "kanonischer Weg"?

Das ist eine theoretische Frage. Ich habe über das Internet ohne befriedigendes Glück gesucht, ich möchte nur verstehen, was dieser Jargon ist. Ich habe Beispiele für Java, JSON usw. gesehen, aber ich konnte weder in Google noch hier in StackOverflow eine einfache Erklärung finden, kein Code erforderlich = P

Ein absoluter Pfad ist also eine Möglichkeit, zu einer bestimmten Datei oder einem bestimmten Speicherort zu gelangen, die bzw. der den vollständigen Pfad, den vollständigen Pfad und die vom Betriebssystem abhängigen Pfade beschreibt (die absoluten Pfade für Windows und Linux sind beispielsweise unterschiedlich). Ein relativer Pfad Route zu einer Datei oder einem Speicherort, die bzw. der vom aktuellen Speicherort aus beschrieben wird (zwei Punkte), die eine übergeordnete Ebene im Verzeichnisbaum angeben. Das ist mir schon seit einigen Jahren klar.

Bei der Suche habe ich sogar gesehen, dass es auch kanonisierte Dateien gibt! Alles, was ich weiß, dass es kanonisch ist, bedeutet so etwas wie "nach den Regeln" oder so.

Kann mich bitte jemand in theoretischen Fragen zu kanonischen Themen aufklären? =) DANKE !!

PD (Es war also nicht nur ein zufälliger Ubuntu-Name) XD

PD2 Leider kann ich nicht jedem die Antwort geben, ich habe sie demjenigen gegeben, der mir am meisten geholfen hat, das Konzept zu verstehen, aber vielen Dank an alle =)

66
Metafaniel

Der Sinn von irgendetwas "kanonisch" zu machen ist, dass man zwei Dinge vergleichen kann. Zum Beispiel können sowohl ../../here/bar/x und ./test/../../bar/x verweist möglicherweise auf denselben Speicherort, Sie können jedoch keinen Textvergleich für die beiden Pfade durchführen. Wenn Sie sie jedoch in ihre kanonische Darstellung umwandeln, werden beide zu ../bar/x, und wir sehen, dass sie sich tatsächlich auf dasselbe beziehen.

Kurz gesagt, es gibt oft viele Möglichkeiten, sich auf eine Sache zu beziehen, und in diesem Fall können Sie möglicherweise eine kanonische Darstellung definieren . Das ist einzigartig und ermöglicht es Ihnen, Sammlungen solcher Dinge in den Griff zu bekommen.

(Wenn Sie nach weiteren Beispielen suchen, ist die gesamte Mathematik voll von "kanonischen" Konstruktionen für alle Arten von Objekten, und zwar aus dem gleichen Grund. Vielleicht kann dies Wikipedia-Artikel einige liefern zusätzliche Anweisungen.)

82
Kerrek SB

Ein guter Weg, um einen kanonischen Pfad zu definieren, ist: the shortest absolute path (kurz, im Sinne von String-Länge).

Dies ist ein Beispiel für den Unterschied zwischen einem absoluten und einem kanonischen Pfad:

absoluter Pfad: C:\abc\..\abc\file.txt
kanonischer Pfad: C:\abc\file.txt

17
alfasin

Was ein kanonischer Pfad ist (oder sein Unterschied zu einem absoluten Pfad), ist systemabhängig.
Wenn ein (vollständiger) Pfad Aliase, Verknüpfungen oder symbolische Verknüpfungen enthält, werden diese durch den kanonischen Pfad in die tatsächlichen Verzeichnisse aufgelöst, auf die sie verweisen.
Beispiel: if /bin/a ist ein Sym-Link. Sie können ihn überall dort finden, wo Sie nach einem absoluten Pfad fragen, z. from Java.io.File # getAbsolutePath während die reale Datei (d. h. das tatsächliche Ziel der Verknüpfung) d. h. usr/local/bin/a würde als kanonischer Pfad zurückgegeben werden, z. from Java.io.File # getCanonicalPath

6
Cratylus

Die meisten Probleme mit kanonischen Pfaden treten auf, wenn Sie den Namen eines Verzeichnisses und nicht einer Datei übergeben. Wenn wir für file den absoluten Pfad angeben, ist dies auch der kanonische Pfad. Aber für dir bedeutet es, das letzte "/" wegzulassen. Beispielsweise ist "/ var/tmp/foo" ein kanonischer Pfad, "/ var/tmp/foo /" nicht.

2