2012-08-23 19 views
48

To jest pytanie teoretyczne. Szukałem w Internecie bez satysfakcjonującego szczęścia, chcę tylko zrozumieć, co to za żargon. Widziałem przykłady Java, JSON, itp., Ale nie mogłem znaleźć w Google ani tutaj w StackOverflow prostego wyjaśnienia, bez kodu = PCo to jest "ścieżka kanoniczna"?

Tak więc, absolutna ścieżka to sposób na dotarcie do określonego pliku lub lokalizacja opisująca pełną trasę do niej, pełną ścieżkę i jej system operacyjny (ścieżki bezwzględne, na przykład, dla systemów Windows i Linux, są różne) Ścieżka względna to trasa do pliku lub lokalizacji, którą opisuje z bieżącej lokalizacji. (dwie kropki) wskazujące wyższy poziom w drzewie katalogów. To było dla mnie jasne od kilku lat.

Podczas wyszukiwania widziałem nawet pliki kanoniczne! Wszystko, co wiem, że to CANONICAL oznacza coś w stylu "zgodnie z zasadami" lub coś takiego.

Czy ktoś może mnie oświecić w teoriach teorii na temat kanonicznych rzeczy? =) DZIĘKI !!

PD (tak więc jej nie było tylko Ubuntu losowa nazwa po wszystkich) XD

PD2 Niestety nie mogę dać odpowiedź każdemu, dałem go do tego, który pomógł mi najbardziej zrozumieć pojęcie, ale wielkie podziękowania dla wszystkich =)

+5

Przez "SO" masz na myśli "OS"? Jesteś Francuzem? –

+0

"Système d'exploitation" Tak, znam francuski, ale miałem na myśli OS (przepraszam, przepraszam hehe) System operacyjny ... Jestem meksykańskim w rzeczywistości xD – Metafaniel

+4

Ahh, "Sistema de la operación, ¡olé!" (A tak przy okazji, to jest "System operacyjny"). –

Odpowiedz

62

Cały sens tworzenia niczego "" canonical "jest tak, że można porównać dwie rzeczy. Na przykład zarówno ../../here/bar/x, jak i ./test/../../bar/x mogą odnosić się do tej samej lokalizacji, ale nie można przeprowadzić porównania tekstowego na dwóch ścieżkach. Jeśli jednak przekształcisz je w ich kanoniczną reprezentację, obie stają się ../bar/x i widzimy, że faktycznie odnoszą się do tej samej rzeczy.

W skrócie, jest to często zdarza się, że masz wiele sposobów odnoszenia się do jednej rzeczy, w tym przypadku może być w stanie zdefiniować kanoniczną reprezentację który jest wyjątkowy i która pozwala uzyskać uchwyt na col ­ takich rzeczy.

(Jeśli szukasz więcej przykładów, wszystkie matematyki jest pełen „kanonicznych” konstrukcji dla wszystkich rodzajów obiektów, a bardzo dużo z tego samego celu w umyśle. Może to Wikipedia article można podać kilka reklam ­ Dodatkowy kierunki .)

+1

Oooh Widzę teraz ... Krótko mówiąc, kanoniczny musi być unikalny, więc jest to pełna ścieżka bez względnego użycia dwie kropki. Ohhh! Twoja odpowiedź była pomocna;) Dzięki – Metafaniel

+0

@ Mathafaniel: Tak, kluczową częścią jest wyjątkowość. Sądzę, że możesz mieć zarówno kanonicznego krewnego, jak i absolutną ścieżkę kanoniczną, ale to niezależne rozróżnienie. –

+0

Wszystko było dobre i słuszne, aż ten komentarz xD OK Zrozumiałem, ale ... kanoniczna ścieżka względna? Jak już rozumiem do tej pory (dzięki wszystkim) ścieżki kanoniczne są z natury absolutne. Co możesz mi powiedzieć o kanonicznych ścieżkach względnych? = S THANKS =) – Metafaniel

9

Dobrym sposobem zdefiniowania ścieżki kanonicznej będzie: the shortest absolute path (krótki, w znaczeniu długości napisu).

Jest to przykład różnicy między bezwzględną ścieżki i kanonicznej ścieżce:

absolutnym Ścieżka: C:\abc\..\abc\file.txt
kanoniczną ścieżkę: C:\abc\file.txt

+0

Według @KerrekSB ścieżka musi być unikatowa, aby była kanoniczna, więc w twoim przykładzie mogę ją zobaczyć: nie ma innego sposobu przedstawienia C: \ abc \ plik.txt Dzięki za przykład =) – Metafaniel

+0

Tak, możesz zdefiniować 'ścieżka kanoniczna' jako najkrótsza ścieżka bezwzględna (krótka, w znaczeniu długości łańcucha). Dodam to do mojej odpowiedzi. – alfasin

+0

Ach OK OK, dzięki, teraz jest jaśniej;) – Metafaniel

6

Co kanoniczna ścieżka (lub różnica w absolutnym ścieżka) jest zależna od systemu.
Zazwyczaj, jeśli ścieżka (pełna) zawiera aliasy, skróty lub dowiązania symboliczne, ścieżka kanoniczna rozstrzyga wszystkie te wartości w rzeczywistych katalogach, do których się odnoszą.
Przykład: jeśli /bin/a jest linkiem sym, możesz go znaleźć wszędzie tam, gdzie chcesz bezwzględnej ścieżki, np. od java.io.File#getAbsolutePath, podczas gdy rzeczywisty plik (to jest faktyczny cel łącza), tj. usr/local/bin/a, byłby zwracany jako ścieżka kanoniczna np.od java.io.File#getCanonicalPath

+0

Bardzo przydatny komentarz dla mnie, aby zrozumieć też! Nie myślałem nawet o linkach sym teraz! Więc link sym jest absolutny, ALE nie kanoniczny ... Bardzo wszechstronny. JEDNAK, mam nowe wątpliwości ... A co z twardymi linkami? Czy nie są one absolutnie wystarczające? DZIĘKI – Metafaniel

+0

Depends.For przykład java.io.File # getCanonicalPath nie rozwiązuje twardych linków – Cratylus

+0

Nie rozwinąłem zbyt wiele w Javie, jestem głównie facetem PHP;) Dzięki za wyjaśnienie =) – Metafaniel

1

Największe problemy ze ścieżkami kanonicznymi występują, gdy podajesz nazwę katalogu, a nie pliku. W przypadku pliku, jeśli zapewniamy absolutną ścieżkę, która jest również kanoniczną ścieżką. Ale dla dir oznacza to pominięcie ostatniego "/". Na przykład "/ var/tmp/foo" jest ścieżką kanoniczną, podczas gdy "/ var/tmp/foo /" nie jest.