Portable SVG-Symbole

Statische SVG-Symbole mit sicheren Ganter-Verknüpfungen und typisierten Anschlusspunkten bauen und weitergeben.

Als Markdown ansehen

Ganter-Symbole halten Grafik und Live-Daten getrennt. Die Grafik ist gewöhnliches, statisches SVG. Jede Zuordnung von Werten und jede Bewegung gehört Ganter Lab, eine importierte Datei kann also keine Skripte, Ereignisbehandlungen, eingebetteten Bewegungscode oder Netzwerkanfragen ausführen. Diese Seite ist die vollständige Referenz des Autorenmodells: was ein Symbol erklärt, was der Import annimmt und ablehnt und wie Symbole zwischen Stationen reisen.

Ein Symbol erklärt über seine Grafik hinaus drei Dinge:

  • Slots: benannte Eingaben (Füllung, Linie, Bewegung, Text, Sichtbarkeit), die eine platzierte Instanz im Dashboard später aus einer Adresse in Logic oder aus einem festen Wert speist.
  • Anschlusspunkte: typisierte Verbindungspunkte am Rand, damit das Dashboard Rohre, Kanäle, Leitungen und Wellen zwischen Symbolen führen kann.
  • Vorschläge: wahlweise hinterlegte Kompositionen mit anderen Symbolen, in genau gesetzter Lage.

Systemsymbole und Meine Symbole

Der Katalog hat zwei Herkünfte, überall filterbar, wo Symbole aufgelistet werden:

Herkunft Verweis Was es ist
System system:<stable-key> Die eingebauten Bibliotheken, die mit der Anwendung kommen. Untersuchbar und exportierbar, nie an Ort und Stelle änderbar.
Eigene user:<guid> Symbole, die Sie erzeugt, importiert oder dupliziert haben. Änderbar und löschbar.

Jedes Systemsymbol bietet In Meine Symbole duplizieren: Die Kopie ist ein eingefrorenes, eigenes Asset (Grafik, View-Box, Einpassung, Grundfläche, Slots, Typkonfigurationen, Anschlusspunkte und Vorschläge werden zusammen kopiert), sie verhält sich also weiter wie ausgewählt, auch wenn eine spätere Aktualisierung der Anwendung das Original ändert. Das Löschen eines eigenen Symbols wird bestätigt; Dashboards, die es noch verwenden, zeigen einen Platzhalter, statt kaputtzugehen.

Wege, ein Symbol anzulegen

  • Eine Datei importieren: Logic > Assets > Symbole > Symbol importieren nimmt ein einfaches .svg oder ein vollständiges Paket .ganter-symbol.json an. Jeder Import erzeugt ein neues Asset mit eigener Identität; er überschreibt nie ein vorhandenes Symbol, und ein Namenskonflikt wird durch einen Zusatz gelöst (" 2", " 3", …), statt fehlzuschlagen. Die Dateiauswahl lehnt Dateien über 1 MB ab, bevor ein Byte gelesen wird. Nach dem Import eines einfachen SVG meldet die Anwendung, wie viele unsichere Bestandteile sie entfernt hat, wenn es welche gab.
  • In der Anwendung schreiben: Neues eigenes Symbol öffnet einen Editor für den Namen, das SVG-Markup, das Layout im Dashboard (Einpassung und anfängliche Grundfläche) und die Slots; sobald das Symbol existiert, werden gültige Änderungen automatisch gespeichert. Die Geometrie der Anschlusspunkte ist in der Anwendung bewusst nicht änderbar: Typisierte Anschlusspunkte kann nur ein Paket mitbringen, und im Paket hinterlegte Anschlusspunkte bleiben über spätere Änderungen hinweg schreibgeschützt erhalten.
  • Eine KI fragen: Zwei Wege teilen sich genau denselben Vertrag. Über den eingebetteten MCP-Endpunkt führt das Werkzeug symbol_validate den Import als Trockenlauf aus, und symbol_import speichert ein neues Asset; beide tragen den vollständigen Vertrag in ihrer Beschreibung. Aus einem externen Chat ohne Zugriff auf die Anwendung kopiert Chat-Anweisung kopieren im Bereich Symbole eine in sich geschlossene Aufforderung; speichern Sie das zurückgegebene SVG oder Paket als Datei und importieren Sie es hier.

Der Arbeitsbereich rings um die Assets steht unter Logic.

Ein einfaches SVG vorbereiten

Geben Sie jedem Teil, das Sie verknüpfen wollen, eine feste SVG-id. Nach dem Import erscheinen diese IDs in der Auswahl des Slot-Ziels. IDs und Slot-Namen teilen eine Grammatik: Sie beginnen mit einem Buchstaben oder _, fahren mit Buchstaben, Ziffern, _, ., : oder - fort und sind höchstens 128 Zeichen lang.

Die wahlweisen Attribute data-ganter-* sind das einzige Ganter-eigene Markup, das ein Symbol tragen darf:

Attribut An Was es erklärt
data-ganter-pivot="x y" jedem verknüpfbaren Element Der genaue Drehpunkt (Koordinaten der View-Box) für Slots der Arten rotate, scale und spin. An deren Zielelement erforderlich.
data-ganter-spin-ratio einem Kind eines sich drehenden Elements Die relative Geschwindigkeit eines sichtbaren Rotors darunter. Endlich, ungleich null, Betrag höchstens 100; negativ dreht in die andere Richtung. Wird entfernt, wenn das Element nicht auch einen eigenen Drehpunkt erklärt.
data-ganter-role jedem Element Eine feste inhaltliche Rolle für Autorenwerkzeuge. Nur zur Information.
data-ganter-fit-width <text> / <tspan> Freiwillig begrenzte Anzeige für einen Text-Slot: Ist der verknüpfte Text breiter als diese Anzahl Einheiten der View-Box, verkleinert sich die Schrift, bis er passt.
data-ganter-fit-min-font-size <text> / <tspan> Die kleinste Schriftgröße, bis zu der verkleinert werden darf. Darunter zeigt das Element den Ersatztext, während der vollständige Wert im zugänglichen Namen und im Tooltip bleibt.
data-ganter-fit-fallback <text> / <tspan> Der Text, der gezeigt wird, wenn selbst die kleinste Schriftgröße den Wert nicht fassen kann.

Anschlusspunkte für Verbindungen leben nicht im SVG und zielen nicht auf IDs von SVG-Elementen. Attribute namens data-ganter-port oder data-ganter-port-* gehören nicht zum Format: Der Import eines einfachen SVG entfernt sie; ein strenges Paket, das sie enthält, wird abgelehnt.

Der Import eines einfachen SVG ergibt immer ein gültiges, nur visuelles Symbol: null Anschlusspunkte, null Slots. Der Inspektor meldet, dass es keinen verbindbaren Anschlusspunkt gibt, weil Rolle, Typ, äußere Richtung und innerer Pfad nicht erklärt wurden. Ganter leitet diese Felder nicht aus Dateiname, Kategorie oder Grafik ab und öffnet keinen Editor für innere Anschlusspunkte oder Pfade.

Was die Bereinigung annimmt

Dieselbe SVG-Regel gilt für jeden Weg (Dateiimport, Editor in der Anwendung, MCP, Paket). Sie ist bewusst kleiner als SVG:

  • Behalten: unbewegte Geometrie und Struktur: svg, g, defs, symbol, use, path, rect, circle, ellipse, line, polyline, polygon, text, tspan, title, desc, clipPath, mask, linearGradient, radialGradient, stop, pattern, marker, mit den Attributen der Darstellung (Füllung, Linie, Deckkraft, Transformation, Gestaltung) und ARIA-Beschriftungen.
  • Entfernt oder abgelehnt: <script>, <style>, <foreignObject>, Ereignisbehandlungen, eingebettete Bewegung und jede externe URL sowie data:/file:/http(s). Nur interne Verweise url(#id) und href="#id" überleben.
  • Grenzen: Das Markup darf höchstens 512 KB und 4096 Elemente groß sein.

Sichere Farbangaben sind Hexwerte, die benannten CSS-Farben, rgb()/rgba()/hsl()/hsla() und die Design-Tokens der Anwendung var(--color-<name>) (zum Beispiel var(--color-success), var(--color-symbol-off)). Design-Tokens sind der Weg, auf dem eine Grafik sich an hell und dunkel anpasst: Liefern Sie eine Zeichnung, die Tokens verwendet, nie zwei Varianten je Design.

Wie ein Verstoß behandelt wird, hängt vom Weg ab: Ein einfaches SVG wird repariert (unsichere Bestandteile werden entfernt, und jede Entfernung wird als Warnung gemeldet); ein Paket ist streng und wird abgelehnt, wobei die ersten Verstöße benannt werden, statt stillschweigend repariert zu werden.

Portables Paket v2

Der Export eines Symbols erzeugt eine Datei .ganter-symbol.json. Jedes Feld des Umschlags ist erforderlich; die drei Vertragslisten dürfen leer sein, müssen aber vorhanden sein:

Feld Anforderung
$schema Genau https://ganterlab.com/schemas/ganter-symbol-v2.schema.json.
format Genau ganter-symbol.
version Genau 2. Pakete der Version 1 werden abgelehnt, statt durch einen Leser für Altformate zu laufen.
name Der angezeigte Name. Ein Import darf ihn überschreiben, und ein Konflikt bekommt automatisch einen Zusatz.
svg Bereinigtes, statisches SVG, dessen Wurzelelement eine viewBox trägt, die dem Feld viewBox gleicht.
viewBox minX minY width height: vier endliche Zahlen mit positiver Breite und Höhe.
fit contain, stretch, stretch-x oder stretch-y.
footprint { "width": 1..24, "height": 1..12 }, die vorgeschlagenen Zellen im Dashboard.
slots Liste der Slot-Erklärungen (unten).
typeConfigurations Liste der gemeinsamen Typwahlen für Anschlusspunkte (unten).
terminals Liste von bis zu 16 vollständigen Anschlusspunkten (unten).
suggestions Liste der geordneten hinterlegten Kompositionen (unten).

Das öffentliche JSON-Schema für Ganter Symbol v2 prüft den Umschlag für den Transport. Der Import führt danach die inhaltlichen Prüfungen aus, die ein JSON-Schema nicht ausdrücken kann: Existenz des SVG-Ziels, Geometrie des inneren Pfads, Verträglichkeit der Vorschläge. Ein Paket ist in jeder Hinsicht streng: unsicheres Markup, unbekannte Felder, leere Listeneinträge und die früheren Verträge ports[], anchors[], profile und connectionStyle werden abgelehnt statt repariert.

Das Paket enthält nie eine Adresse der Station, eine Verknüpfung eines Dashboards, eine Typwahl einer Instanz, eine GUID aus der Datenbank oder die Identität eines Benutzers. Ein Slot, der eine Adresse in Logic trägt, lässt sich gar nicht erst exportieren: Die Adresse gehört zur platzierten Instanz, nicht zum wiederverwendbaren Symbol.

Größe, View-Box und Einpassung

Die View-Box ist der natürliche Koordinatenraum des Symbols. Anschlusspunkte und innere Pfade werden darin erklärt, und sie muss der viewBox der SVG-Wurzel genau gleichen; ein Paket, dessen beide View-Boxen sich unterscheiden, wird abgelehnt. Nicht quadratische View-Boxen werden voll unterstützt, ein langer Förderer muss also nicht in einem Quadrat wohnen.

Die Einpassung sagt, wie die Grafik das Rechteck nutzt, das der Bediener im Dashboard aufzieht:

Einpassung Verhalten
contain Behält das Seitenverhältnis; die Grafik steht mit Rändern im Rechteck der Zellen. Der Standard.
stretch Füllt das Rechteck in beiden Achsen und verzerrt dabei, wenn nötig.
stretch-x Dehnt waagerecht und behält das natürliche senkrechte Verhältnis.
stretch-y Dehnt senkrecht und behält das natürliche waagerechte Verhältnis.

Die Grundfläche ist die anfängliche Größe in Rasterzellen des Dashboards, wenn das Symbol zum ersten Mal platziert wird: Breite 1 bis 24, Höhe 1 bis 12 (der Editor verwendet standardmäßig 4 × 4). Sie ist ein Vorschlag, keine Vorgabe; der Bediener ändert die Größe danach frei.

Zwei getrennte Tore begrenzen die Größe eines Imports: Die Dateiauswahl lehnt alles über 1 MB ab, bevor sie es liest, und die Bereinigung lehnt Markup über 512 KB oder 4096 Elemente ab.

Slots: die Fläche der Verknüpfung

Ein Slot erklärt eine Eingabe: welches Element er steuert, was er damit tut und wie Eingabewerte auf die Ausgabe abgebildet werden. Die platzierte Instanz im Dashboard wählt später die Quelle jedes Slots (eine Adresse in Logic oder einen festen Wert); das Symbol selbst speichert nie eine Quelle.

Jeder Slot trägt:

Feld Bedeutung
name Der Name des Parameters, den der Autor des Dashboards sieht. Grammatik der Bezeichner wie oben; innerhalb der Slots des Symbols eindeutig.
elementId Die id eines vorhandenen SVG-Elements. Ein Element nimmt höchstens einen Slot je Kanal an, zwei Slots können sich also nicht um die Füllung desselben Elements streiten.
kind Eine der dreizehn Arten unten.
inMin, inMax Der Eingabebereich: die beiden Werte, die auf outMin/outMax abgebildet werden. Endliche Zahlen; von den stetigen Arten verwendet und von fill/stroke als Mitte der Schwelle.
outMin, outMax Der Ausgabebereich in der Einheit der Art (Grad, Einheiten der View-Box, 0..1, Grad je Sekunde). Endliche Zahlen.
outMinSecondary, outMaxSecondary Wahlweise zweite Ausgabeachse, nur bei translate und scale: Die erste Ausgabe ist X, die zweite ist Y. Beide angeben oder keine.
onColor, offColor Sichere Farbangaben für fill/stroke (die beiden Zustände an der Schwelle). Bei fillColor/strokeColor ist onColor die Vorschaufarbe des Inspektors.

Die dreizehn Slot-Arten:

Art Was sie steuert Hinweise
rotate Dreht das Element; die Eingabe wird linear auf Grad abgebildet. Das Ziel muss data-ganter-pivot erklären.
opacity Die Deckkraft des Elements; die Eingabe wird auf 0..1 abgebildet.
fill Färbt die Füllung unterhalb der Mitte des Eingabebereichs mit offColor und ab der Mitte mit onColor. Eine Eingabe vom Typ Bool schaltet unmittelbar. Zielt auf füllbare Formen (nicht auf <line>).
visible Zeigt oder verbirgt das Element danach, ob der Wert wahr ist.
text Ersetzt den Textinhalt des Elements durch den formatierten Wert. Zielt nur auf <text>/<tspan>; für eine begrenzte Anzeige mit den Attributen data-ganter-fit-* kombinieren.
translate Verschiebt das Element in Einheiten der View-Box; die erste Ausgabe ist X, die wahlweise zweite ist Y.
scale Skaliert das Element; die erste Ausgabe ist X, die zweite ist Y (weggelassen bedeutet gleichmäßig). Das Ziel muss data-ganter-pivot erklären.
stroke Färbt die Linie nach derselben Schwellenregel wie fill.
spin Fortlaufende Drehung über die Zeit; die Eingabe wird auf eine Winkelgeschwindigkeit in Grad je Sekunde abgebildet. Kinder mit data-ganter-spin-ratio drehen im erklärten Verhältnis mit. Das Ziel muss data-ganter-pivot erklären. Die Bewegung wird vom Wirt getaktet und ist von den Bewegungseinstellungen des Betriebssystems unabhängig.
spinEnabled Hält den Slot spin am selben Element an oder setzt ihn fort, ohne es zu verbergen. Verlangt einen Slot spin auf dasselbe Element.
fillColor Setzt die Füllung unmittelbar aus dem verknüpften Farbwert (einem Farb-Asset, einer Variablen mit Ausgabe Farbe oder einer sicheren CSS-Farbe).
strokeColor Setzt die Linie unmittelbar aus dem verknüpften Farbwert.
strokeWidth Setzt die Linienbreite unmittelbar, in SVG-Einheiten von 0.5 bis 32; ein Einheitenzusatz oder CSS wird nicht angenommen. Eine ungültige, unauflösbare oder qualitativ schlechte Eingabe stellt die hinterlegte stroke-width wieder her; ebenso Zurücksetzen, erneutes Einhängen und Verwerfen.

Diese Slots gestalten die Grafik; sie gestalten nie die Verbindungsleitungen des Dashboards, deren Farbe und Breite global je Verbindungstyp gelten.

Wem eine Verknüpfung gehört

Das Symbol erklärt Parameter und erlaubte Typwahlen, nicht laufende Quellen und nicht die Wahl einer Instanz. Nach dem Platzieren einer Symbol-Komponente ordnet der Bediener jeden Slot einer Adresse in Logic oder einem festen Wert zu und wählt an dieser Instanz jeden konfigurierbaren Verbindungstyp. Diese Wahlen bleiben in der Station und werden nie mit dem wiederverwendbaren Symbol exportiert. Nicht zugeordnete Slots bleiben neutral: Das Element behält sein hinterlegtes Aussehen.

Globale Positionen und Verbindungstypen

Jeder Anschlusspunkt verweist auf eine Position aus dem festen Katalog der sechzehn Ankerpunkte am Rand. Ein Paket speichert nur anchorId; es wiederholt oder überschreibt nie Koordinaten. Die Positionen, als auf die View-Box normierte Anteile:

  • oben: top-left (0, 0), top-25 (0.25, 0), top-50 (0.5, 0), top-75 (0.75, 0), top-right (1, 0);
  • rechts: right-25 (1, 0.25), right-50 (1, 0.5), right-75 (1, 0.75);
  • unten, im Uhrzeigersinn: bottom-right (1, 1), bottom-75 (0.75, 1), bottom-50 (0.5, 1), bottom-25 (0.25, 1), bottom-left (0, 1);
  • links, im Uhrzeigersinn weiter: left-75 (0, 0.75), left-50 (0, 0.5), left-25 (0, 0.25).

Das sind Positionen am Rand, kein Raster von 5×5. Ein Symbol kann keine weitere Position hinzufügen und keine eigenen Ankerkoordinaten speichern.

Die acht globalen Verbindungstypen sind liquid, gas, air-duct, electrical, signal, network, material und mechanical-shaft. Unter Logic > Assets > Verbindungstypen stellen Sie die Farbe und die sichtbare Linienbreite ein, die zu jedem Typ gehören. Symbole und Verbindungen halten die feste Kennung des Typs, eine globale Änderung gestaltet also jede Leitung neu, die ihn verwendet. Ein Paket kopiert nie Farbe oder Breite und kennt keine kleinen, normalen oder großen Leitungsvarianten.

Zwei Enden bilden eine bestimmte Verbindung, wenn sie zum selben Typ auflösen. Die Rolle eines Anschlusspunkts hilft beim Schreiben und beim Prüfen, verbietet aber für sich genommen keine Anordnung eines Netzes.

Gemeinsame Typwahlen

Ein Symbol, das mit mehr als einem Medium arbeiten kann, erklärt eine gemeinsame Typkonfiguration, statt seine Grafik zu verdoppeln:

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

Die id ist ein fester Schlüssel: Kleinbuchstaben und Ziffern mit einzelnen Bindestrichen, am Anfang und am Ende alphanumerisch (Großbuchstaben werden abgelehnt). allowedTypes ist nicht leer und enthält eindeutige globale Typkennungen; defaultType muss dazugehören; name ist erforderlich. Jeder Anschlusspunkt, der auf process-type verweist, folgt der einen Wahl, die an der platzierten Instanz im Dashboard getroffen wird. Eine Definition darf mehrere unabhängige Konfigurationen tragen, etwa für Prozess- und Entlüftungsmedium, während andere Anschlusspunkte fest bleiben.

Vollständige Anschlusspunkte

Jeder verbindbare Anschlusspunkt erklärt eine globale Position, eine Rolle, genau einen festen Typ oder eine gemeinsame Konfiguration, eine nach außen gerichtete Richtung in der ursprünglichen Ausrichtung und einen inneren Ankunftspfad:

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

Die Regeln, alle beim Import erzwungen:

  • Höchstens 16 Anschlusspunkte, und jede Ankerkennung höchstens einmal verwendet.
  • role ist input, output oder bidirectional; direction ist north, east, south oder west.
  • Genau eines von type (ein globaler Verbindungstyp) oder typeConfiguration (die Kennung einer erklärten Konfiguration), nie beides, nie keines.
  • Der in die natürliche View-Box des SVG umgerechnete globale Anker ist der stillschweigende Anfang von internalPath; wiederholen Sie ihn nicht als ersten Punkt. Die Koordinaten sind absolute Werte der View-Box, keine normierten Anteile, und der Pfad hat mindestens einen Punkt.
  • Jeder Abschnitt bleibt innerhalb der View-Box, hat eine Länge ungleich null und verläuft waagerecht, senkrecht oder genau in 45°; aufeinanderfolgende Abschnitte knicken um höchstens 90°.
  • Anschlusspunkte verlangen, dass das SVG überhaupt eine View-Box trägt.

Das Dashboard zeichnet den inneren Pfad unter der Grafik der Ausrüstung, wandelt ihn beim Ändern der Größe, beim Drehen um eine Vierteldrehung und beim Spiegeln mit und behält die sichtbare Breite des globalen Verbindungstyps, statt sie mit dem Symbol zu skalieren, sodass ein durchgehender Strich vom Inneren des einen Körpers ins Innere des anderen läuft.

Ein Anschlusspunkt gilt ganz oder gar nicht. Ein strenges Paket mit einem unvollständigen Anschlusspunkt ist ungültig; ein nur visuelles Paket verwendet stattdessen eine leere Liste terminals. Nichts wird je abgeleitet, um eine Lücke zu füllen.

Geordnete Vorschläge

Ein Vorschlag hält eine gewollte Komposition fest, samt der genauen Lage des Ziels:

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

Prüfung: sourceAnchorId muss einer der eigenen Anschlusspunkte dieses Symbols sein; targetSymbol muss ein Verweis mit Herkunft sein und darf in einem portablen Paket nur system:<stable-key> sein (eine GUID eines Benutzers ist nur innerhalb ihrer eigenen Station sinnvoll) und ein Symbol nennen, das es im Systemkatalog gibt und das einen Anschlusspunkt an targetAnchorId hat; die Drehung ist 0, 90, 180 oder 270, und beide Spiegelungsangaben sind erforderlich; jeder Vorschlag muss eindeutig sein. connectionType darf nur entfallen, wenn die gleichen festen Typen an beiden Enden den Fall eindeutig auflösen; es ist erforderlich, sobald eines der Enden konfigurierbar ist, und muss dann an beiden Enden erlaubt sein.

Vorschläge sind gerichtet, und die Reihenfolge in der Liste setzt die Priorität, aber sie sind nie eine Erlaubnisliste für gewöhnliche Verbindungen im Dashboard. Bei einer leeren Liste suggestions meldet der Inspektor, dass es keine vorgeschlagene Komposition gibt, statt einen Partner aus dem Katalog zu erfinden.

Was der Import ablehnt

Eine kurze Liste der Ablehnungen, damit ein fehlgeschlagener Import gelesen statt geraten werden kann. Bei einem einfachen SVG gilt nur die erste Gruppe, und darin lehnen nur die Größengrenzen, fehlerhaftes XML und eine fehlende <svg>-Wurzel den Import ab: Nicht erlaubtes Markup wird stattdessen mit einer Warnung repariert. Bei einem Paket ist alles Folgende eine harte Ablehnung.

Grafik

  • Eine Datei über 1 MB, Markup über 512 KB oder mehr als 4096 Elemente.
  • Fehlerhaftes XML oder eine Wurzel, die kein bereinigtes <svg> ist.
  • In einem Paket: jedes Markup, das die Positivliste hätte entfernen müssen (Skripte, Ereignisbehandlungen, externe Verweise, nicht erlaubte Elemente oder Attribute).
  • Eine viewBox, die nicht aus vier endlichen Zahlen mit positiver Breite und Höhe besteht oder die von der der SVG-Wurzel abweicht; ein Paket ganz ohne View-Box an der Wurzel.

Umschlag

  • Ein anderes Schema, Format oder eine andere Version als der Vertrag v2; unbekannte Felder an beliebiger Stelle; ein fehlendes name, fit, footprint oder eine der drei Listen; ein leerer Eintrag innerhalb einer Liste.
  • Eine fit außerhalb der vier Formen; eine Grundfläche außerhalb von 1–24 × 1–12.

Slots

  • Ein Name oder eine Element-ID außerhalb der Grammatik der Bezeichner; ein doppelter Slot-Name; eine Ziel-ID, die das SVG nicht enthält; eine Art, die das Zielelement nicht annehmen kann (Text an einem Element ohne Text, Füllung an einem <line>).
  • Ein Slot rotate, spin oder scale, dessen Ziel kein endliches data-ganter-pivot hat; ein Slot spinEnabled ohne einen Slot spin am selben Element.
  • Zwei Slots auf demselben Kanal eines Elements. Jede Art ist ihr eigener Kanal, außer dass fill und fillColor sich den Kanal der Füllung teilen und stroke und strokeColor den der Linie, ein Element kann also so wenig zwei Drehungen annehmen wie zwei Füllungen.
  • Nicht endliche Bereichszahlen; eine zweite Ausgabe mit nur einem Ende oder an einer anderen Art als translate/scale; eine unsichere Farbangabe; ein Slot, der eine Adresse in Logic trägt.

Verbindungen

  • Mehr als 16 Anschlusspunkte; eine wiederholte oder unbekannte Ankerkennung; ein Anschlusspunkt mit beidem oder keinem von type/typeConfiguration; eine unbekannte Typ- oder Konfigurationskennung; ein ungültiger innerer Pfad (außerhalb der View-Box, Abschnitte der Länge null oder im falschen Winkel, ein Knick über 90°).
  • Eine Typkonfiguration mit ungültiger Kennung, fehlendem Namen, doppelten oder unbekannten erlaubten Typen oder einem Standard außerhalb der eigenen Liste.
  • Ein Vorschlag, dessen Quell-Anschlusspunkt es nicht gibt, dessen Ziel kein Systemsymbol mit dem genannten Anschlusspunkt ist, dessen Lage keine Vierteldrehung ist oder dessen Verbindungstyp nicht an beiden Enden angenommen wird.

symbol_validate am MCP-Endpunkt führt genau diesen Import als Trockenlauf aus und meldet jeden Fehler, jede Warnung und jeden Hinweis, ohne etwas zu speichern.

Verpacken und weitergeben

Paket exportieren (für Systemsymbole wie für eigene verfügbar) lädt <name>.ganter-symbol.json mit der bereinigten Grafik und dem vollständigen Vertrag herunter: $schema, format, version, name, svg, viewBox, fit, footprint, slots[], typeConfigurations[], terminals[] und suggestions[], die drei Verbindungslisten auch dann vorhanden, wenn sie leer sind. Was nie mitreist: Adressen der Station, Typwahlen einzelner Instanzen, die Identität in der Datenbank, die Identität eines Benutzers sowie die Farben und Breiten der Verbindungstypen dieser Station.

Auf der empfangenden Station geht dieselbe Datei durch Symbol importieren (oder über MCP durch symbol_import) und landet als neues eigenes Symbol, mit allen Anschlusspunkten. Weil die Identität eines Typs eine feste Kennung ist und das Aussehen global gilt, folgen die Leitungen eines importierten Symbols sofort der Gestaltung der Verbindungstypen auf der empfangenden Station.