Simboli SVG portabili

Comporre e condividere simboli SVG statici con collegamenti Ganter sicuri e morsetti di collegamento tipizzati.

Visualizza come Markdown

I simboli Ganter tengono separati il disegno e i dati vivi. Il disegno è normale SVG statico. Ganter Lab possiede ogni corrispondenza di valore e ogni animazione, quindi un file importato non può eseguire script, gestori di evento, codice di animazione incorporato o richieste di rete. Questa pagina è il riferimento completo del modello di composizione: che cosa dichiara un simbolo, che cosa l'importazione accetta e rifiuta, e come i simboli viaggiano tra le stazioni.

Un simbolo dichiara tre cose oltre al suo disegno:

  • Zone attive, ingressi con nome (riempimento, contorno, movimento, testo, visibilità) che un'istanza posata su una dashboard alimenta poi da un indirizzo di Logic o da un valore fisso.
  • Morsetti, punti di collegamento tipizzati sul perimetro, così la dashboard può instradare tubi, condotte, cavi e alberi tra i simboli.
  • Suggerimenti, composizioni con altri simboli, facoltative e con la posa dichiarata.

Simboli di sistema e I miei simboli

Il catalogo ha due origini, filtrabili ovunque i simboli siano elencati:

Origine Riferimento Che cos'è
Sistema system:<stable-key> Le librerie incluse che arrivano con l'applicazione. Ispezionabili ed esportabili, mai modificabili sul posto.
Miei user:<guid> I simboli che hai creato, importato o duplicato. Modificabili ed eliminabili.

Ogni simbolo di sistema offre Duplica in I miei simboli: la copia è una risorsa utente congelata e di tua proprietà (disegno, riquadro di visualizzazione, adattamento, ingombro, zone attive, configurazioni di tipo, morsetti e suggerimenti copiati insieme), così continua a comportarsi come l'hai scelta anche quando un aggiornamento successivo cambia l'originale. Eliminare un simbolo utente chiede conferma; le dashboard che lo referenziano ancora mostrano un segnaposto invece di rompersi.

Modi per creare un simbolo

  • Importare un file. Logic > Risorse > Simboli > Importa simbolo accetta un .svg semplice o un pacchetto .ganter-symbol.json completo. Ogni importazione crea una risorsa nuova con una sua identità; non sovrascrive mai un simbolo esistente, e una collisione di nomi si risolve con un suffisso (« 2 », « 3 »…) invece di fallire. Il selettore rifiuta i file oltre 1 MB prima di leggerne i byte. Dopo l'importazione di un SVG semplice l'applicazione riferisce quanti elementi non sicuri ha rimosso, se ce n'erano.
  • Comporre nell'applicazione. Nuovo simbolo utente apre un editor per il nome, il markup SVG, l'impaginazione sulla dashboard (adattamento e ingombro iniziale) e le zone attive; una volta che il simbolo esiste, le modifiche valide si salvano da sole. La geometria dei morsetti deliberatamente non si modifica nell'applicazione: i morsetti tipizzati possono arrivare solo da un pacchetto, e i morsetti scritti nel pacchetto restano conservati in sola lettura attraverso le modifiche successive.
  • Chiedere a un'IA. Due strade condividono esattamente lo stesso contratto. Tramite l'endpoint MCP integrato, lo strumento symbol_validate esegue l'importazione a vuoto e symbol_import salva una nuova risorsa; entrambi portano il contratto completo nelle loro descrizioni. Da una chat esterna che non ha accesso all'applicazione, Copia l'istruzione per la chat nel pannello Simboli copia una richiesta autosufficiente; salva l'SVG o il pacchetto restituito come file e importalo qui.

Vedi Logic per lo spazio di lavoro delle risorse che sta attorno.

Preparare un SVG semplice

Dai un id SVG stabile a ogni parte che vuoi collegare. Dopo l'importazione, quegli id compaiono nei selettori di destinazione delle zone attive. Gli id e i nomi delle zone attive condividono una sola grammatica: cominciano con una lettera o _, proseguono con lettere, cifre, _, ., : o -, e sono lunghi al massimo 128 caratteri.

Gli attributi facoltativi data-ganter-* sono l'unico markup specifico di Ganter che un simbolo può portare:

Attributo Su Che cosa dichiara
data-ganter-pivot="x y" qualunque elemento collegabile Il punto di rotazione esatto (coordinate del riquadro di visualizzazione) per le zone attive di rotazione, scala e rotazione continua. Obbligatorio sull'elemento di destinazione di quelle tre nature.
data-ganter-spin-ratio un figlio di un elemento che ruota La velocità relativa di un rotore figlio visibile. Finita, diversa da zero, di modulo al massimo 100; se negativa ruota nel senso opposto. Rimosso se l'elemento non dichiara anche il proprio punto di rotazione.
data-ganter-role qualunque elemento Un ruolo semantico stabile per gli strumenti di composizione. Solo informativo.
data-ganter-fit-width <text> / <tspan> Lettura contenuta, da attivare, per una zona attiva Text: quando il testo collegato misura più di questo numero di unità del riquadro di visualizzazione, il carattere si rimpicciolisce per stare dentro.
data-ganter-fit-min-font-size <text> / <tspan> La dimensione di carattere più piccola a cui l'adattamento può scendere. Sotto quella, l'elemento mostra il ripiego mentre il valore intero resta nel nome accessibile e nel suggerimento.
data-ganter-fit-fallback <text> / <tspan> Il testo mostrato quando nemmeno la dimensione di carattere minima riesce a contenere il valore.

I morsetti di collegamento non vivono nell'SVG e non puntano a id di elementi SVG. Gli attributi chiamati data-ganter-port o data-ganter-port-* non fanno parte del formato: l'importazione di un SVG semplice li rimuove; un pacchetto severo che li contiene viene respinto.

L'importazione di un SVG semplice dà sempre un simbolo valido solo visivo: zero morsetti, zero zone attive. L'ispettore riferisce che non esiste alcun morsetto collegabile perché ruolo, tipo, direzione esterna e percorso interno non erano dichiarati. Ganter non deduce quei campi dal nome del file, dalla categoria o dal disegno, e non apre alcun editor interno di morsetti o di percorsi.

Che cosa accetta il depuratore

La stessa politica SVG vale per ogni strada (importazione di file, editor nell'applicazione, MCP, pacchetto). È deliberatamente più stretta dell'SVG:

  • Conservato: geometria e struttura inerti: svg, g, defs, symbol, use, path, rect, circle, ellipse, line, polyline, polygon, text, tspan, title, desc, clipPath, mask, linearGradient, radialGradient, stop, pattern, marker, con gli attributi di presentazione (riempimento, contorno, opacità, trasformazione, stile) e le etichette ARIA.
  • Rimosso o rifiutato: <script>, <style>, <foreignObject>, i gestori di evento, l'animazione incorporata e qualunque URL esterno o data:/file:/http(s). Sopravvivono solo i riferimenti interni url(#id) e href="#id".
  • Limiti: il markup può essere al massimo di 512 KB e 4096 elementi.

I colori sicuri sono i valori esadecimali, i colori CSS con nome, rgb()/rgba()/hsl()/hsla() e i token di tema dell'applicazione var(--color-<name>) (per esempio var(--color-success), var(--color-symbol-off)). I token di tema sono il modo in cui un solo disegno si adatta al chiaro e allo scuro: fornisci un disegno solo, che referenzia i token, mai due varianti di tema.

Come vengono trattate le violazioni dipende dalla strada: un SVG semplice viene corretto (gli elementi non sicuri sono rimossi e ogni rimozione è segnalata come avviso); un pacchetto è severo e viene respinto nominando le prime violazioni, invece di essere corretto in silenzio.

Pacchetto portabile v2

Esportare un simbolo crea un file .ganter-symbol.json. Ogni campo dell'involucro è obbligatorio; i tre elenchi del contratto possono essere vuoti ma devono esserci:

Campo Requisito
$schema Esattamente https://ganterlab.com/schemas/ganter-symbol-v2.schema.json.
format Esattamente ganter-symbol.
version Esattamente 2. I pacchetti in versione 1 vengono respinti, non passati a un lettore di formato vecchio.
name Il nome visualizzato. Un'importazione può sovrascriverlo, e una collisione riceve un suffisso automatico.
svg SVG statico depurato la cui radice porta un viewBox uguale al campo viewBox.
viewBox minX minY width height: quattro numeri finiti con larghezza e altezza positive.
fit contain, stretch, stretch-x o stretch-y.
footprint { "width": 1..24, "height": 1..12 }, le celle di dashboard consigliate.
slots Elenco di dichiarazioni di zona attiva (qui sotto).
typeConfigurations Elenco di scelte di tipo condivise tra morsetti (qui sotto).
terminals Elenco di massimo 16 morsetti completi (qui sotto).
suggestions Elenco ordinato di composizioni dichiarate (qui sotto).

Il JSON Schema pubblico di Ganter symbol v2 convalida l'involucro di trasporto. L'importatore esegue poi i controlli semantici che il JSON Schema non può esprimere: l'esistenza delle destinazioni nell'SVG, la geometria del percorso interno, la compatibilità dei suggerimenti. Un pacchetto è severo su ogni fronte: markup non sicuro, campi sconosciuti, voci nulle negli elenchi e i vecchi contratti ports[], anchors[], profile e connectionStyle vengono respinti invece che corretti.

Il pacchetto non contiene mai un indirizzo di stazione, un collegamento di dashboard, una scelta di tipo di una singola istanza, un GUID di database o l'identità di un utente. Una zona attiva che porta un indirizzo di Logic non si può nemmeno esportare: l'indirizzo appartiene all'istanza posata, non al simbolo riutilizzabile.

Dimensione, riquadro di visualizzazione e adattamento

Il riquadro di visualizzazione è lo spazio di coordinate naturale del simbolo. Morsetti e percorsi interni sono dichiarati al suo interno, e deve corrispondere esattamente al viewBox della radice SVG; un pacchetto i cui due riquadri non concordano viene respinto. I riquadri non quadrati sono pienamente supportati, così un nastro trasportatore lungo non deve vivere dentro un quadrato.

Il modo di adattamento dice come il disegno usa il rettangolo di dashboard che l'operatore traccia:

Adattamento Comportamento
contain Mantiene le proporzioni; il disegno lascia bande vuote dentro il rettangolo di celle. È il predefinito.
stretch Riempie il rettangolo nei due assi, deformando se serve.
stretch-x Estende in orizzontale, mantiene la proporzione verticale naturale.
stretch-y Estende in verticale, mantiene la proporzione orizzontale naturale.

L'ingombro è la dimensione iniziale in celle della griglia di dashboard quando il simbolo viene posato la prima volta: larghezza da 1 a 24, altezza da 1 a 12 (l'editor parte da 4 × 4). È un suggerimento, non un vincolo; l'operatore poi ridimensiona liberamente.

Due controlli distinti limitano la dimensione di un'importazione: il selettore di file rifiuta qualunque cosa superi 1 MB prima di leggerla, e il depuratore rifiuta un markup oltre 512 KB o 4096 elementi.

Zone attive: la superficie di collegamento

Una zona attiva dichiara un ingresso: quale elemento comanda, che cosa gli fa e come i valori di ingresso si trasformano in uscita. L'istanza posata sulla dashboard sceglie poi la sorgente di ogni zona attiva (un indirizzo di Logic o un valore fisso); il simbolo in sé non conserva mai una sorgente.

Ogni zona attiva porta:

Campo Significato
name Il nome del parametro mostrato a chi compone la dashboard. Grammatica di identificatore descritta sopra; univoco tra le zone attive del simbolo.
elementId L'id di un elemento SVG esistente. Un elemento accetta al massimo una zona attiva per canale, così due zone attive non possono contendersi il riempimento dello stesso elemento.
kind Una delle tredici nature qui sotto.
inMin, inMax L'intervallo di ingresso: i due valori che corrispondono a outMin/outMax. Numeri finiti; usati dalle nature continue e come punto di commutazione da fill/stroke.
outMin, outMax L'intervallo di uscita nell'unità della natura (gradi, unità del riquadro di visualizzazione, 0..1, gradi al secondo). Numeri finiti.
outMinSecondary, outMaxSecondary Secondo asse di uscita facoltativo, solo per translate e scale: l'uscita primaria è X e quella secondaria è Y. O entrambi o nessuno.
onColor, offColor Colori sicuri per fill/stroke (i due stati di commutazione). Per fillColor/strokeColor, onColor è il colore di anteprima dell'ispettore.

Le tredici nature di zona attiva:

Natura Che cosa comanda Note
rotate Ruota l'elemento; l'ingresso si trasforma linearmente in gradi. La destinazione deve dichiarare data-ganter-pivot.
opacity L'opacità dell'elemento; l'ingresso si trasforma in 0..1.
fill Dipinge il riempimento con offColor sotto la metà dell'intervallo di ingresso e con onColor a partire da essa. Un ingresso Bool commuta direttamente. Punta alle forme riempibili (non a <line>).
visible Mostra o nasconde l'elemento secondo la verità del valore.
text Sostituisce il contenuto testuale dell'elemento con il valore formattato. Punta solo a <text>/<tspan>; da combinare con gli attributi data-ganter-fit-* per una lettura contenuta.
translate Sposta l'elemento in unità del riquadro di visualizzazione; l'uscita primaria è X, quella secondaria facoltativa è Y.
scale Scala l'elemento; l'uscita primaria è X, la secondaria è Y (se omessa, la scala è uniforme). La destinazione deve dichiarare data-ganter-pivot.
stroke Dipinge il contorno con la stessa regola di soglia di fill.
spin Rotazione continua nel tempo; l'ingresso si trasforma in velocità angolare in gradi al secondo. I figli con data-ganter-spin-ratio ruotano insieme al rapporto dichiarato. La destinazione deve dichiarare data-ganter-pivot. Il movimento è temporizzato dall'applicazione e indipendente dalle preferenze di animazione del sistema operativo.
spinEnabled Mette in pausa o riprende la zona attiva spin sullo stesso elemento senza nasconderlo. Richiede una zona attiva spin che punti allo stesso elemento.
fillColor Imposta il riempimento direttamente dal valore di colore collegato (una risorsa Colore, una variabile Colore o un colore CSS sicuro).
strokeColor Imposta il contorno direttamente dal valore di colore collegato.
strokeWidth Imposta direttamente la larghezza del contorno, in unità utente SVG da 0.5 a 32; nessun suffisso di unità e nessun CSS accettati. Un ingresso non valido, non risolto o di cattiva qualità ripristina lo stroke-width dichiarato; lo stesso fanno l'azzeramento, il rimontaggio e la dismissione.

Queste zone attive danno stile al disegno; non danno mai stile ai tratti di collegamento delle dashboard, il cui colore e la cui larghezza sono globali per tipo di tratto.

A chi appartiene il collegamento

Il simbolo dichiara i parametri e le scelte di tipo permesse, non le sorgenti vive né la selezione di un'istanza. Dopo aver posato un componente Simbolo, l'operatore associa ogni zona attiva a un indirizzo di Logic o a un valore fisso e sceglie ogni tipo di tratto configurabile su quell'istanza. Quelle scelte restano dentro la stazione e non vengono mai esportate con il simbolo riutilizzabile. Le zone attive non associate restano neutre: l'elemento conserva l'aspetto con cui è stato disegnato.

Posizioni globali e tipi di tratto

Ogni morsetto fa riferimento a una posizione del catalogo fisso di sedici ancoraggi sul perimetro. Un pacchetto salva solo anchorId; non ripete né sovrascrive mai delle coordinate. Le posizioni, come frazioni normalizzate del riquadro di visualizzazione:

  • in alto: top-left (0, 0), top-25 (0.25, 0), top-50 (0.5, 0), top-75 (0.75, 0), top-right (1, 0);
  • a destra: right-25 (1, 0.25), right-50 (1, 0.5), right-75 (1, 0.75);
  • in basso, in senso orario: bottom-right (1, 1), bottom-75 (0.75, 1), bottom-50 (0.5, 1), bottom-25 (0.25, 1), bottom-left (0, 1);
  • a sinistra, proseguendo in senso orario: left-75 (0, 0.75), left-50 (0, 0.5), left-25 (0, 0.25).

Queste sono posizioni sul perimetro, non una griglia 5×5. Un simbolo non può aggiungere un'altra posizione né salvare coordinate di ancoraggio proprie.

Gli otto tipi di tratto globali sono liquid, gas, air-duct, electrical, signal, network, material e mechanical-shaft. Usa Logic > Risorse > Tipi di tratto per configurare il colore e la larghezza visiva del contorno associati a ogni tipo. Simboli e tratti conservano l'id stabile del tipo, quindi un cambiamento globale ridisegna ogni percorso che lo usa. Un pacchetto non copia mai il colore o la larghezza e non ha varianti di percorso piccole, normali o grandi.

Due estremità formano un tratto definito quando si risolvono nello stesso tipo. Il ruolo del morsetto aiuta la composizione e la revisione, ma da solo non vieta una disposizione di rete.

Scelte di tipo condivise

Un simbolo che può lavorare con più di un fluido dichiara una configurazione di tipo condivisa invece di duplicare il proprio disegno:

{
  "id": "process-type",
  "name": "Process type",
  "allowedTypes": ["liquid", "gas"],
  "defaultType": "liquid"
}

L'id è una chiave stabile: lettere minuscole e cifre con trattini singoli, che comincia e finisce con un carattere alfanumerico (le maiuscole vengono rifiutate). allowedTypes non è vuoto e contiene id di tipo globale univoci; defaultType deve appartenergli; name è obbligatorio. Ogni morsetto che fa riferimento a process-type segue l'unica scelta fatta sull'istanza posata sulla dashboard. Una definizione può portare più configurazioni indipendenti, per esempio il fluido di processo e quello di sfiato, mentre altri morsetti restano fissi.

Morsetti completi

Ogni morsetto collegabile dichiara una posizione globale, un ruolo, esattamente un tipo fisso oppure una configurazione condivisa, una direzione verso l'esterno nell'orientamento originale e un percorso interno di arrivo:

{
  "anchorId": "left-50",
  "role": "input",
  "typeConfiguration": "process-type",
  "direction": "west",
  "internalPath": [
    { "x": 18, "y": 50 },
    { "x": 36, "y": 50 },
    { "x": 48, "y": 62 }
  ]
}

Le regole, tutte applicate all'importazione:

  • Al massimo 16 morsetti, e ogni id di ancoraggio usato al massimo una volta.
  • role è input, output o bidirectional; direction è north, east, south o west.
  • Esattamente uno tra type (un tipo di tratto globale) e typeConfiguration (l'id di una configurazione dichiarata), mai entrambi, mai nessuno dei due.
  • L'ancoraggio globale convertito nel riquadro di visualizzazione naturale dell'SVG è l'inizio implicito di internalPath; non ripeterlo come primo punto. Le coordinate sono valori assoluti del riquadro, non frazioni normalizzate, e il percorso ha almeno un punto.
  • Ogni segmento resta dentro il riquadro di visualizzazione, ha lunghezza diversa da zero ed è orizzontale, verticale o esattamente a 45°; due segmenti consecutivi girano al massimo di 90°.
  • I morsetti richiedono che l'SVG porti un riquadro di visualizzazione.

La dashboard disegna il percorso interno sotto il disegno dell'apparecchiatura, lo trasforma con il ridimensionamento, la rotazione di un quarto di giro e i ribaltamenti, e mantiene la larghezza visiva del tipo di tratto globale invece di scalarla con il simbolo, così un solo tratto continuo corre dall'interno di un corpo all'interno dell'altro.

Un morsetto è tutto o niente. Un pacchetto severo con un morsetto parziale non è valido; un pacchetto solo visivo usa invece un elenco terminals vuoto. Nulla viene mai dedotto per riempire un vuoto.

Suggerimenti ordinati

Un suggerimento registra una composizione voluta, compresa la posa esatta della destinazione:

{
  "sourceAnchorId": "right-75",
  "targetSymbol": "system:capping-station",
  "targetAnchorId": "left-75",
  "targetRotationDegrees": 0,
  "targetFlipHorizontal": false,
  "targetFlipVertical": false,
  "connectionType": "material"
}

Convalida: sourceAnchorId deve essere uno dei morsetti di questo simbolo; targetSymbol deve essere un riferimento qualificato dall'origine, e in un pacchetto portabile può essere solo system:<stable-key> (un GUID utente ha senso solo dentro la stazione che lo possiede) e deve nominare un simbolo che esiste nel catalogo di sistema con un morsetto in targetAnchorId; la rotazione è 0, 90, 180 o 270 e i due contrassegni di ribaltamento sono obbligatori; ogni suggerimento deve essere univoco. connectionType si può omettere solo quando i tipi fissi uguali alle due estremità risolvono la situazione senza ambiguità; è obbligatorio quando una delle due estremità è configurabile, e allora deve essere ammesso da entrambe.

I suggerimenti hanno un verso e l'ordine dell'elenco stabilisce la priorità, ma non sono mai un elenco di permessi per i tratti ordinari della dashboard. Con un elenco suggestions vuoto l'ispettore riferisce che non esiste alcuna composizione suggerita, invece di inventarsi un partner di catalogo.

Che cosa rifiuta l'importazione

Un elenco rapido dei rifiuti, così un'importazione fallita si legge invece di doverla indovinare. Per un SVG semplice vale solo il primo gruppo, e al suo interno rifiutano l'importazione solo i limiti di dimensione, l'XML malformato e la mancanza della radice <svg>: il markup non ammesso viene invece corretto con un avviso. Per un pacchetto, tutto quello che segue è un rifiuto netto.

Disegno

  • Un file oltre 1 MB, un markup oltre 512 KB, o più di 4096 elementi.
  • XML malformato, o una radice che non è un <svg> depurato.
  • In un pacchetto: qualunque markup che l'elenco delle cose ammesse avrebbe dovuto rimuovere (script, gestori di evento, riferimenti esterni, elementi o attributi non ammessi).
  • Un viewBox che non sia quattro numeri finiti con larghezza e altezza positive, o che differisca da quello della radice SVG; un pacchetto senza alcun riquadro di visualizzazione alla radice.

Involucro

  • Uno schema, un formato o una versione diversi dal contratto v2; campi sconosciuti in qualunque punto; un name, un fit, un footprint o uno dei tre elenchi mancante; una voce nulla dentro un elenco.
  • Un fit fuori dai quattro modi; un ingombro fuori da 1..24 × 1..12.

Zone attive

  • Un nome o un id di elemento fuori dalla grammatica degli identificatori; un nome di zona attiva duplicato; un id di destinazione che l'SVG non contiene; una natura che l'elemento di destinazione non può accettare (testo su un elemento non testuale, riempimento su una <line>).
  • Una zona attiva rotate, spin o scale la cui destinazione non ha un data-ganter-pivot finito; una zona attiva spinEnabled senza una zona attiva spin sullo stesso elemento.
  • Due zone attive sullo stesso canale di un elemento. Ogni natura è un canale a sé, salvo che fill e fillColor condividono il canale del riempimento e stroke e strokeColor quello del contorno, quindi un elemento non può prendere due rotazioni più di quanto possa prendere due riempimenti.
  • Numeri di intervallo non finiti; un'uscita secondaria con una sola estremità, o su una natura diversa da translate/scale; un colore non sicuro; una zona attiva che porta un indirizzo di Logic.

Collegamenti

  • Più di 16 morsetti; un id di ancoraggio ripetuto o sconosciuto; un morsetto con entrambi o con nessuno tra type e typeConfiguration; un id di tipo o di configurazione sconosciuto; un percorso interno non valido (fuori dal riquadro di visualizzazione, segmenti di lunghezza zero o con angoli non ammessi, una svolta oltre 90°).
  • Una configurazione di tipo con un id non valido, senza nome, con tipi ammessi duplicati o sconosciuti, oppure con un valore predefinito fuori dal proprio elenco.
  • Un suggerimento il cui morsetto di partenza non esiste, la cui destinazione non è un simbolo di sistema con il morsetto nominato, la cui posa non è un quarto di giro, o il cui tipo di tratto non è accettato da entrambe le estremità.

symbol_validate sull'endpoint MCP esegue esattamente questa importazione a vuoto e riferisce ogni errore, avviso e nota senza salvare nulla.

Impacchettare e condividere

Esporta pacchetto (disponibile allo stesso modo per i simboli di sistema e per i tuoi) scarica <name>.ganter-symbol.json con il disegno depurato e il contratto completo: $schema, format, version, name, svg, viewBox, fit, footprint, slots[], typeConfigurations[], terminals[] e suggestions[], con i tre elenchi di collegamento presenti anche quando sono vuoti. Che cosa non viaggia mai: gli indirizzi di stazione, le scelte di tipo delle singole istanze, l'identità nel database, l'identità dell'utente, e i colori e le larghezze dei tipi di tratto della stazione.

Sulla stazione che riceve, lo stesso file passa da Importa simbolo (o da symbol_import via MCP) e arriva come nuovo simbolo utente, morsetti compresi. Poiché l'identità del tipo è un id stabile e l'aspetto è globale, i percorsi di un simbolo importato seguono subito lo stile dei tipi di tratto della stazione che lo riceve.