XML Schema Definition des signal.xml-Dateiformats
Zur Navigation springen
Zur Suche springen
Hier entsteht eine XSD-Datei des Dateiformats signal.xml - work in progress! Zweck dieser Datei ist vor allem die Validierung von Vorlagen im Signals-Verzeichnis. Einige formal zulässige, aber in Signalvorlagen nicht sinnvolle Elemente und Attribute sind deshalb in dieser Datei bewusst nicht definiert, damit sie bei toolgestützten Validierungen angemeckert werden.
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:annotation> <xs:documentation xml:lang="de">XML Schema Definition für das signal.xml-Datenformat des Zugsimulators Zusi 3 von Carsten Hölscher. Mit diesem Dateiformat werden Vorlagen für Signaleinbauten definiert. Elemente und Attribute, die als veraltet gelten und von der Referenzimplementation (Zusi3DEditor.exe) zwar noch gelesen werden können, aber nicht mehr geschrieben werden, sind nicht alle in diesem Schema enthalten. Die Definitionen unterhalb des Signal-Elements sind gleichzeitig auch Bestandteil des st3-Dateiformats. Deshalb gibt es einige Elemente und Attribute, die in einer signal.xml-Datei vom Zusi-3D-Editor zwar als formal zulässig akzeptiert werden, aber nur im Kontext einer st3-Datei sinnvoll sind. Solche in signal.xml-Vorlagen nicht sinnvollen Bestandteile sind darum in dieser xsd bewusst nicht definiert. Allgemeine Hinweise zu Zusi-XML-Datenformaten: Bei Attributen existiert für jeden Typ ein Standardwert, der verwendet wird, wenn das Attribut nicht vorhanden ist. Es folgt daraus, dass das Attribut auch beim Schreiben weggelassen werden kann, wenn sein Wert dem Standardwert entspricht. Zusi macht das konsequent so. Der Standardwert ist - bei Ganzzahlen (integer, integer 64 bit, integer enum, bool) der Wert 0. - bei Gleitkommazahlen (single) der Wert 0.0. - bei Zeichenketten (string) die leere Zeichenkette. - bei Farben (D3DColor) die Farbe R=G=B=A=0. - bei Datums-/Zeitangaben (date,time) der 30. Dezember 1899, 00:00:00. Dateipfade (Datei Dateiname="...") sind entweder - Pfade relativ zum Zusi-Datenverzeichnis (Signals\Deutschland\Signal.ls3), wobei ein führender Backslash erlaubt ist und ignoriert wird, oder - wenn sie keinen Backslash enthalten, Dateien im selben Verzeichnis wie die Datei, in der der Pfad steht. Insbesondere können Dateien, die auf einem anderen Laufwerk als das Zusi-Datenverzeichnis liegen, nicht referenziert werden. Programmseitig generierte XML-Dateien, die UTF-8-kodiert sind, sollten eine Byte Order Mark (0xEF,0xBB,0xBF) am Anfang enthalten, damit Texteditoren sie zuverlässig als UTF-8 erkennen.</xs:documentation> </xs:annotation> <xs:element name="Zusi"> <xs:complexType> <xs:sequence> <xs:element ref="Info"/> <xs:element ref="Signal"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Info"> <xs:complexType> <xs:annotation> <xs:documentation xml:lang="de">DateiTyp muss bei signal.xml-Dateien immer 'Signal' sein. MinVersion und Version müssen im aktuellen Dateiformat immer 'A.1' sein. Das ältere A.0-Dateiformat ist nicht Gegenstand dieser xsd-Datei. A.0 wird seit April 2007 von den Zusi-Editoren nicht mehr neu geschrieben und sollte deshalb nicht mehr in freier Wildbahn vorkommen. Wie in allen anderen Zusi-XML-Formaten sind auch im Info-Element von signal.xml folgende Attribute zulässig. Da es allerdings keinen Editor für signal.xml gibt, werden die Inhalte nirgendwo angezeigt: Beschreibung ist eine Freitext-Beschreibung des Objekts, die von Editoren ggfs. dem Benutzer angezeigt werden kann. Mehrere Zeilen werden mit Semikolon getrennt. DateiKategorie ist eine frei vergebene Kategorisierung der Datei. Das Attribut wird derzeit normalerweise nicht genutzt. Für einheitliche Vorgaben zur Kategorisierung ist zukünftig die bei Zusi 3 mitgelieferte Datei _Setup/categories.txt vorgesehen. EinsatzAb und EinsatzBis können dem Benutzer Hinweise geben, in welcher Epoche das Objekt zeitlich sinnvoll einsetzbar ist. ObjektID ist eine Nummer für das Objekt. Das Attribut wird derzeit normalerweise nicht genutzt. Hier könnte es sein, dass zukünftig eine zentral vorgegebene Nummerierung eingeführt wird.</xs:documentation> </xs:annotation> <xs:sequence> <xs:element ref="AutorEintrag" minOccurs="1" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="Beschreibung" type="xs:string"/> <xs:attribute name="DateiKategorie" type="xs:string"/> <xs:attribute name="DateiTyp" type="xs:string" use="required" fixed="Signal"/> <xs:attribute name="EinsatzAb"/> <!-- Datentyp TDateTime --> <xs:attribute name="EinsatzBis"/> <!-- Datentyp TDateTime --> <xs:attribute name="MinVersion" type="xs:string" use="required" fixed="A.1"/> <xs:attribute name="ObjektID" type="xs:int"/> <xs:attribute name="Version" type="xs:string" use="required" fixed="A.1"/> </xs:complexType> </xs:element> <xs:element name="AutorEintrag"> <xs:annotation> <xs:documentation xml:lang="de">AutorAufwand ist der zur Erstellung des Objekts benötigte Zeitaufwand, gemessen in 'Haus-Einheiten'. 1 Haus-Einheit entspricht dem Zeitaufwand zur Erstellung eines durchschnittlichen 3D-Hauses. AutorBeschreibung dient vor allem bei Gemeinschaftsproduktionen der näheren Beschreibung, was genau der Autor zum Objekt beigetragen hat. AutorEmail dient der optionalen Angabe einer Mailadresse des Autors. AutorID steht für eine durch die Firma Hölscher vergebene Autoren-ID. Autor-IDs mit negativen Werten werden an Programme vergeben, die selbstständig ohne großen menschlichen Input Zusi-Inhalte generieren. AutorLizenz muss angegeben werden, wenn der jeweilige Autor eine abweichende Verteilung der ihm zustehenden Einnahmen aus der kommerziellen Nutzung der Zusi-Objekte wünscht. Es gilt: 0 = Einnahmen an den Autor, 1 = Einnahmen auf alle anderen Autoren im Pool verteilen, 2 = Einnahmen gehen an Firma Carsten Hölscher Software, 3 = Objekt ist in der Public Domain (Autor verzichtet auf seine Autorenrechte), 4 = Private nicht zur Veröffentlichung vorgesehene Datei, 5 = Kommerzielle Sondernutzung AutorName ist der Name des Autors. Bei Autoren mit AutorenID der Firma Hölscher muss die genaue Schreibweise des AutorNamens mit Firma Hölscher abgestimmt sein, da dort eine Plausibilitätsprüfung stattfindet (= passt die ID zum Namen?)</xs:documentation> </xs:annotation> <xs:complexType> <xs:attribute name="AutorAufwand" type="xs:float"/> <xs:attribute name="AutorBeschreibung" type="xs:string"/> <xs:attribute name="AutorEmail" type="xs:string"/> <xs:attribute name="AutorID" type="xs:int" use="required"/> <xs:attribute name="AutorLizenz" default="0"/> <!--Datentyp integer enum --> <xs:attribute name="AutorName" type="xs:string" use="required"/> </xs:complexType> </xs:element> <xs:element name="Signal"> <xs:complexType> <xs:annotation> <xs:documentation xml:lang="de"> Formal ebenfalls zulässig, in Signalvorlagen aber nicht sinnvoll sind folgende zusätzliche Attribute: BeideRichtungen, NameBetriebsstelle, Signalname, Stellwerk, ZufallsWert BoundingR: Der Boundingradius der 3D-Dateien dieses Signals. Bei zu geringem Boundingradius werden die 3D-Dateien am Bildschirmrand wegploppen. Zu Details siehe Zusi-3-Doku Kapitel 5.1.1.10 SigAssiErgaenzen: SigAssiGrundZeile: SigAssiKeineGrunddaten: Wird hinter SigAssiRadio benutzt wenn Formulare vor der eigentlichen Positionierung des Signals mit SigAssiPosition benutzt werden. SigAssiKeineKODiff: Wird eingesetzt, wenn das Signal in eine vorhandene Signalmatrix integriert werden soll, aber etwaige durch SigAssiPosition vorgegebene Verschiebungen des Signalstandorts nicht mitmachen soll, sondern auf jeden Fall an den vorgesehenen Koordinaten eingebaut werden soll. Anwendungsfall: Zum Beispiel PZB-Magnete, die unabhängig vom Standort des Hauptsignals (links/rechts vom Gleis) auf jeden Fall an der rechten Schiene positioniert werden sollen. SignalFlags: Codiert binär folgende optionale Funktionen: "Fahrwegsignal wirkt auf beide Fahrtrichtungen", "Fahrwegsignal ist Weichenanimation", "Rangiersignal bei Zugfahrstraße umstellen", "Signal enthält Bahnübergangssteuerung", "Kennlichtschaltung mit Nachfolgesignal", "Kennlichtschaltung mit Vorgängersignal", "Reisendendarstellung". SignalTyp: Definiert die Funktion des Signals. Wird u.a. für korrekte Buchfahrplandarstellung und Befehlsformulare benötigt. Zur Bedeutung der Werte siehe die Tabelle in Zusi-3-Doku 5.3.1.8.2 Zwangshelligkeit: </xs:documentation> </xs:annotation> <xs:sequence> <xs:annotation> <xs:documentation xml:lang="de">Formal ebenfalls zulässig, in Signalvorlagen aber nicht sinnvoll ist hier das Element KoppelSignal</xs:documentation> </xs:annotation> <xs:element minOccurs="0" ref="p"/> <xs:element minOccurs="0" ref="phi"/> <xs:choice> <xs:element ref="SigAssiPosition"/> <xs:choice maxOccurs="unbounded"> <xs:annotation> <xs:documentation xml:lang="de">Beim Einlesen akzeptiert Zusis 3D-Editor zwar auch mehr als 64 SignalFrames. Die über 64 hinausgehenden SignalFrames können allerdings im Simulator nicht angesteuert werden (wegen Limitierung des Signalbild-Attributs auf einen 64-Bit-Integer -> 1 Bit pro SignalFrame).</xs:documentation> </xs:annotation> <xs:element ref="MatrixEintrag"/> <xs:element ref="Ersatzsignal"/> <xs:element ref="HsigBegriff"/> <xs:element ref="SigAssiCheck"/> <xs:element ref="SigAssiRadio"/> <xs:element ref="SigAssiText"/> <xs:element ref="SignalFrame" minOccurs="0" maxOccurs="64"/> <xs:element ref="VsigBegriff"/> </xs:choice> </xs:choice> </xs:sequence> <xs:attribute name="BoundingR" type="xs:integer"/> <xs:attribute name="SigAssiErgaenzen" type="xs:integer"/> <xs:attribute name="SigAssiGrundZeile" type="xs:integer"/> <xs:attribute name="SigAssiKeineGrunddaten" type="xs:integer"/> <xs:attribute name="SigAssiKeineKODiff" type="xs:integer"/> <xs:attribute name="SignalFlags" type="xs:integer"/> <xs:attribute name="SignalTyp" type="xs:integer"/> <xs:attribute name="Zwangshelligkeit" type="xs:float"/> </xs:complexType> </xs:element> <xs:element name="SigAssiPosition"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" ref="SigAssiEintrag"/> </xs:sequence> <xs:attribute name="SigAssiTitel" type="xs:string"/> <xs:attribute name="SigAssiVorbelegung" use="required" type="xs:integer"/> </xs:complexType> </xs:element> <xs:element name="Ersatzsignal"> <xs:complexType> <xs:sequence> <xs:element ref="MatrixEintrag"/> </xs:sequence> <xs:attribute name="ErsatzsigBezeichnung" type="xs:string"/> <xs:attribute name="ErsatzsigID" type="xs:NMTOKEN"/> <xs:attribute name="SigAssiErgaenzen" type="xs:integer"/> </xs:complexType> </xs:element> <xs:element name="HsigBegriff"> <xs:complexType> <xs:attribute name="FahrstrTyp" type="xs:long"/> <xs:attribute name="HsigGeschw" type="xs:decimal"/> </xs:complexType> </xs:element> <xs:element name="SigAssiCheck"> <xs:annotation> <xs:documentation xml:lang="de"> SigAssiCheck generiert im Formular des Signalassistenten ein Ankreuzfeld. Eine Signaloption kann damit an- und abgewählt werden. SigAssiPassiv: Die Checkbox wird ausgegraut dargestellt. Ihr durch das Formular vorgegebener Zustand kann dadurch vom Streckenbauer nicht geändert werden. SigAssiTitel: Hat bei SigAssiCheck anders als bei SigAssiRadio keine Funktion und wird vom 3D-Editor ignoriert. SigAssiVorbelegung: Die Checkbox ist nicht angekreuzt, wenn das Attribut den Wert 0 hat. Sie ist angekreuzt, wenn es den Wert 1 hat. </xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" ref="SigAssiEintrag"/> </xs:sequence> <xs:attribute name="SigAssiPassiv" type="xs:integer"/> <xs:attribute name="SigAssiTitel" type="xs:string"/> <xs:attribute name="SigAssiVorbelegung" type="xs:integer"/> </xs:complexType> </xs:element> <xs:element name="SigAssiRadio"> <xs:annotation> <xs:documentation xml:lang="de"> SigAssiRadio generiert im Formular des Signalassistenten eine Wahlmöglichkeit mit Radiobuttons (genau eine der angebotenen Optionen muss vom Streckenbauer ausgewählt werden) SigAssiPassiv: Die Radiobuttons werden ausgegraut dargestellt. Ihr durch das Formular vorgegebener Zustand kann dadurch vom Streckenbauer nicht geändert werden. SigAssiTitel: Definiert die Überschrift über den Radiobuttons. SigAssiVorbelegung: Definiert, welcher Radiobutton vorausgewählt ist. </xs:documentation> </xs:annotation> <xs:complexType mixed="true"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" ref="SigAssiEintrag"/> </xs:sequence> <xs:attribute name="SigAssiPassiv" type="xs:integer"/> <xs:attribute name="SigAssiTitel" type="xs:string"/> <xs:attribute name="SigAssiVorbelegung" type="xs:integer"/> </xs:complexType> </xs:element> <xs:element name="SigAssiText"> <xs:complexType> <xs:sequence> <xs:element ref="SigAssiEintrag"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="SignalFrame"> <xs:complexType> <xs:annotation> <xs:documentation xml:lang="de">Formal ebenfalls zulässig, in Signalvorlagen aber nicht sinnvoll sind folgende zusätzliche Attribute: WeichenbaugruppeIndex, WeichenbaugruppeNr, WeichenbaugruppeBeschreibung, WeichenbaugruppePos0, WeichenbaugruppePos1. Diese sind in diesert xsd nicht definiert, weil sie in signal.xml nicht sinnvoll sind und ihr Vorkommen dort als Fehler anzusehen ist (entsteht, wenn eine signal.xml aus einer Weiche entwickelt wurde)</xs:documentation> </xs:annotation> <xs:choice maxOccurs="unbounded"> <xs:element ref="Datei"/> <xs:element ref="p"/> <xs:element ref="phi"/> </xs:choice> </xs:complexType> </xs:element> <xs:element name="VsigBegriff"> <xs:complexType> <xs:attribute name="VsigGeschw" type="xs:decimal"/> </xs:complexType> </xs:element> <xs:element name="p"> <xs:complexType> <xs:attribute name="X" type="xs:decimal"/> <xs:attribute name="Y" type="xs:decimal"/> <xs:attribute name="Z" type="xs:decimal"/> </xs:complexType> </xs:element> <xs:element name="phi"> <xs:complexType> <xs:attribute name="X" type="xs:decimal"/> <xs:attribute name="Y" type="xs:decimal"/> <xs:attribute name="Z" type="xs:decimal"/> </xs:complexType> </xs:element> <xs:element name="Datei"> <xs:complexType> <xs:attribute name="Dateiname" use="required"/> <xs:attribute name="NurInfo" type="xs:integer"/> </xs:complexType> </xs:element> <xs:element name="MatrixEintrag"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" ref="Ereignis"/> </xs:sequence> <xs:attribute name="MatrixGeschw" type="xs:decimal"/> <xs:attribute name="Signalbild" type="xs:long"/> </xs:complexType> </xs:element> <xs:element name="Ereignis"> <xs:complexType> <xs:attribute name="Beschr" type="xs:string"/> <xs:attribute name="Er" type="xs:integer"/> <xs:attribute name="Wert" type="xs:decimal"/> </xs:complexType> </xs:element> <xs:element name="SigAssiEintrag"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" ref="SigAssiBild"/> <xs:element minOccurs="0" maxOccurs="unbounded" ref="SigAssiDateiEintrag"/> </xs:sequence> <xs:attribute name="SigAssiBezeichnung"/> </xs:complexType> </xs:element> <xs:element name="SigAssiBild"> <xs:annotation> <xs:documentation xml:lang="de">Das Element SigAssiBild gibt eine bmp-Datei an, die im Signalassistenten als Vorschaubild für den gewählten SigAssiEintrag angezeigt wird. Der Farbwert des Pixels unten links in der Datei wird immer als Transparenzfarbwert interpretiert.</xs:documentation> </xs:annotation> <xs:complexType> <xs:attribute name="Dateiname" use="required"/> </xs:complexType> </xs:element> <xs:element name="SigAssiDateiEintrag"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" ref="Datei"/> <xs:element minOccurs="0" ref="p"/> <xs:element minOccurs="0" ref="phi"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>