2012-08-23 14 views
48

Questa è una domanda di teoria. Ho cercato su internet senza fortuna soddisfacente, voglio solo capire cos'è questo gergo. Ho visto esempi di Java, JSON, ecc. Ma non ho trovato in Google né qui in StackOverflow una spiegazione semplice, nessun codice necessario = PCos'è un "percorso canonico"?

Quindi, un percorso assoluto è un modo per arrivare a un determinato file o posizione che descrive il percorso completo, il percorso completo e il suo OS dipendente (i percorsi assoluti per Windows e Linux, ad esempio, sono diversi) Un percorso relativo è una rotta verso un file o una posizione che è descritta dalla posizione corrente. . (due punti) che indica un livello superiore nell'albero delle directory. Questo è stato chiaro per me da diversi anni.

Durante la ricerca ho persino visto che ci sono anche file canonizzati! Tutto quello che so è CANONICAL significa qualcosa come "secondo le regole" o qualcosa del genere.

Qualcuno può per favore illuminarmi in termini teorici sulle cose canoniche, per favore? =) GRAZIE !!

PD (per cui il suo non era solo un nome casuale Ubuntu dopo tutto) XD

PD2 Purtroppo non posso dare una risposta a tutti, ho dato a quello che mi ha aiutato la maggior parte capire il concetto, ma grazie mille a tutti =)

+5

Con "SO" intendi "OS"? Sei francese? –

+0

"Système d'exploitation" sì, lo so francese, ma intendevo OS (ho sbagliato a scusare hehe) Sistema Operativo ... Sono messicano infatti xD ​​ – Metafaniel

+4

Ahh, "Sistema de la operación, ¡olé!" (Ed è "Sistema operativo", a proposito.) –

risposta

62

Il punto intero di rendere qualcosa di "" canonico "è così che è possibile confrontare due cose. Ad esempio, sia ../../here/bar/x che ./test/../../bar/x possono fare riferimento alla stessa posizione, ma non è possibile eseguire un confronto testuale sui due percorsi. Tuttavia, se li trasformi nella loro rappresentazione canonica, diventano entrambi ../bar/x e vediamo che in realtà si riferiscono alla stessa cosa.

In breve, è spesso il caso che si hanno molti modi di fare riferimento a una cosa, e in questo caso si può essere in grado di definire una rappresentazione canonica che è unico e che permette di ottenere un maneggiare su col ­ lezioni di tali cose.

(Se siete alla ricerca di altri esempi, tutta la matematica è piena di costruzioni "canonici" per tutti i tipi di oggetti, e molto con lo stesso scopo in mente. Forse questo Wikipedia article grado di fornire alcune pubblicitarie ­ direzioni zionali .)

+1

Oooh vedo ora ... Quindi in breve il canonico deve essere unico quindi è il percorso molto completo senza uso relativo di i due punti. Ohhh! La tua risposta è stata utile;) Grazie – Metafaniel

+0

@Metafaniel: Sì, la parte cruciale è l'unicità. Immagino che tu possa avere sia un parente canonico che un percorso assoluto canonico, ma questa è una distinzione indipendente. –

+0

Tutto andava bene e giusto fino a quel commento xD OK ho capito, ma ... un percorso relativo canonico? Come ho capito fino ad ora (grazie a tutti) i percorsi canonici sono assoluti per natura. Cosa puoi dirmi sui percorsi relativi canonici? = S THANKS =) – Metafaniel

9

Un buon modo per definire un percorso canonico sarà: the shortest absolute path (breve, nel senso di lunghezza della stringa).

Questo è un esempio della differenza tra un percorso assoluto e un percorso canonico:

percorso assoluto: C:\abc\..\abc\file.txt
percorso canonico: C:\abc\file.txt

+0

Secondo @KerrekSB il percorso deve essere univoco per essere canonico, quindi nel tuo esempio posso vederlo: non c'è altro modo di rappresentare C: \ abc \ file.txt Grazie per l'esempio =) – Metafaniel

+0

Sì, puoi definire un 'percorso canonico 'come il percorso assoluto più breve (breve, nel senso della lunghezza della stringa). Lo aggiungerò alla mia risposta. – alfasin

+0

Ah OK OK, grazie, ora è più chiaro;) – Metafaniel

6

Che percorso canonico è (o la sua differenza da un assoluto percorso) dipende dal sistema.
In genere se un percorso (completo) contiene alias, collegamenti o collegamenti simbolici, il percorso canonico risolve tutti questi nelle directory effettive a cui si riferiscono.
Esempio: se /bin/a è un collegamento simbolico, è possibile trovarlo ovunque si richieda un percorso assoluto, ad es. da java.io.File#getAbsolutePath mentre il file reale (ovvero il target effettivo del collegamento), ovvero usr/local/bin/a, verrà restituito come percorso canonico, ad es.da java.io.File#getCanonicalPath

+0

Abbastanza utile per il tuo commento anche per me! Non ho nemmeno pensato ai collegamenti simbolici adesso! Quindi un link simbolico è assoluto MA non canonico ... Molto completo. TUTTAVIA ho un nuovo dubbio ... per quanto riguarda gli hard link? Non sono abbastanza assoluti? GRAZIE – Metafaniel

+0

Depend.Per esempio java.io.File # getCanonicalPath non risolve i collegamenti fisici – Cratylus

+0

Non ho sviluppato molto in Java, sono principalmente un ragazzo PHP;) Grazie per chiarire =) – Metafaniel

1

La maggior parte dei problemi con i percorsi canonici si verificano quando si passa il nome di una directory e non di un file. Per file, se stiamo fornendo un percorso assoluto che è anche il percorso canonico. Ma per dir significa omettere l'ultimo "/". Ad esempio, "/ var/tmp/foo" è un percorso canonico mentre "/ var/tmp/foo /" non lo è.