5 Grammatik

Nachfolgend die formale Spezifikation für das Datenformat. Sie wurde in Augmented BNF aufgestellt, entsprechend RFC 2234. Die eigentliche Spezifikation ist in dicktengeleicher Schrift gesetzt, alles übrige sind Kommentare.

Warnung: Die Grammatik wird derzeit ausgearbeitet und ist noch nicht entgültig.

5.1 Grundlegendes
5.2 Datentypen

5.1 Grundlegendes

5.1.1 Leerraum und Kommentare

Leerraum (white space) trennt Worte. Er besteht aus Leerzeichen, Zeilenumbrüchen und Tabulatorzeichen. Kommentare (comments) beginnen mit dem Prozentzeichen und gehen bis zum Zeilenende. Sie gelten als Leerraum. Optionaler Leerraum (optional white space) ist Leerraum, der gesetzt werden darf, aber nicht muss.

ws-char          =   WSP / CR / LF
comment          =   "%" *%x20-FF (CR / LF)
wspace           =   1*(ws-char / comment)
owspace          =   *(ws-char / comment)

5.1.2 Schlüsselwort, gewöhnliches Wort, Satzzeichen

Schlüsselworte (identifier) sind solche Worte, die als Schlüssel für Objekte o.ä. verwendet werden. Sie müssen mit einem Großbuchstaben beginnen, dürfen danach aber alle gewöhnlichen Buchstaben, Ziffern und ausgewählte Sonderzeichen enthalten. Gewöhnliche Worte (words) sind alle übrigen Worte. Satzzeichen (specials) sind alle Sonderzeichen, die für sich selbst bereits ein Wort darstellen. Sollen solche Zeichen in gewöhnlichen Worten auftauchen oder soll ein Wort Leerraum enthalten, muss es zitiert werden. Dies geschieht, indem es entweder in einfachen oder doppelten Anführungsstrichen eingeschlossen wird. Beide Varianten sind gleichwertig. Innerhalb von zitierten Worten sind Escapesequencen erlaubt. Es werden die in C üblichen Sequencen erkannt (\0, \a, \b, \n, \v, \f, \r), ansonsten wird das auf den Rückwärts-Schrägstrich folgenende Zeichen übernommen, ohne dass seine etwaige Sonderbedeutung eintritt.

identifier       =   (ALPHA / DIGIT) *(ALPHA / DIGIT / "-" / "/" / "_" / ".")

wtext            =   "!" / "#" / "$" /  ; characters without need for
                     "&" / "+" /        ; quoting
		     "," / "-" / "." /
		     "/" / ":" / "=" /
		     "<" / "?" / "@" /
		     "\" / "|" /
		     DIGIT / ALPHA /
		     %d128-255
escape           =   "\" %d32-255       ; escape sequence
sqtext           =   %d32-38 /          ; chars for single quoted
                     %d40-255 /
		     escape
dqtext           =   " " / %d35-255 /   ; chars for double quoted
                     escape             
        
word             =   1*wtext /
                     ("'" *sqtext "'" ) /
                     (DQUOTE *dqtext DQUOTE)

special          =   ";" / ">" / "{" / "}" / "[" / "]" / "*"

5.1.3 Anmerkungen und Quellen, Faktenenden

Anmerkungen (notes) werden von runden Klammern begrenzt. Im Gegensatz zu Kommentaren werden sie von Parsern verarbeitet und erscheinen in aufbereiteten Daten. Quellen (sources) verweisen auf externe Daten. Sie werden von eckigen Klammern begrenzt. Das Faktenende (fact tail) besteht aus einer optionalen Anmerkung gefolgt von einer optionalen Quellenangabe und einem abschließenden Strichpunkt.

ntext            = %d32-39 /            ; everything except parantheses
                   %d42-255 /
		   escape
note             = "(" *ntext ")"

sources          = "[" 1*(owspace identifier) owspace "]"

fact-tail        = owspace [note owspace] [sources owspace] ";"

5.2 Datentypen

5.2.1 Datum

Obwohl der Oder- und der Zeitraum-Operand für Datumsangaben definiert sind, sind keine beliebig komplizierten Ausdrücke möglich. Dies insbesondere deswegen, weil ein Präzedenzoperator (Klammerung) fehlt. Komplizierte Datumsangaben sollten ggf. im Kommentar untergebracht werden. Sollten komplexe Ausdrücke doch noch notwendig werden, so wird die Grammatik hier nochmals geändert.

Zur Erläuterung siehe 3.2.1 Datum.

single-date      = [["c"] 4DIGIT ["-" 2DIGIT ["-" 2DIGIT]]] *2"?"
or-datum         = single-datum 1*("|" single-datum)
period           = single-datum "/" single-datum

datum            = single-datum / or-datum / period / "-"

5.2.2 Trassen und Punkte

Zur Erläuterung siehe 3.2.2 Angabe von Punkten im Netz.

trasse           = 1*DIGIT *[1*ALPHA 1*DIGIT]
punkt            = ["-"] 1*DIGIT ["," 1*DIGIT] 
                   ["+" 1*DIGIT (*"." / ("," 1*DIGIT))] *2"?"

streckenpunkt    = punkt / identifier
netzpunkt        = trasse "/" punkt

abschnitt        = ("*" / streckenpunkt)
                   owspace ">" owspace 
		   ("*" / streckenpunkt)

5.2.3 Basistypen

float            = *DIGIT ["," 1*DIGIT]

5.3 Fakten

5.3.1 Streckenfakten

strecke-objekt   = "strecke" wspace strecke-id owspace "{"
		   *strecke-fakt owspace "}"
trasse-objekt    = "trasse" wspace trasse-id owspace "{"
		   *strecke-fakt owspace "}"
strecke-id	 = 5DIGIT
trasse-id	 = 5DIGIT 1*( 1*ALPHA 1*DIGIT )
strecke-fakt	 = strecke-typ / strecke-von / strecke-via
		 / strecke-vvia / strecke-vvvia / strecke-nach
		 / strecke-anm / strecke-nr / strecke-abk
		 / strecke-verlauf / strecke-abschn / strecke-vertrag
		 / strecke-konzess / strecke-baubeg / strecke-abnahme
		 / strecke-einweih / strecke-va / strecke-gva
		 / strecke-pva / strecke-nva / strecke-vva
		 / strecke-uebern / strecke-va / strecke-gve
		 / strecke-pve / strecke-nve / strecke-vve
		 / strecke-aufgeg / strecke-dritte / strecke-still
		 / strecke-abbau / strecke-entwidm / strecke-status
		 / strecke-gleise / strecke-elektr / strecke-spurw
		 / strecke-dreis / strecke-viers / strecke-zahnst
		 / strecke-sperr / strecke-freig / strecke-verleg
		 / strecke-eigent / strecke-betrf / strecke-eigebetr

5.3.1.1 Streckenbeschreibung

strecke-typ      = "typ" wspace 
                   word                 	; Beschreibung
		   fact-tail
strecke-von      = "von" wspace
                   word				; Streckenbeginn
		   fact-tail
strecke-via      = "via" wspace
		   word				; Streckenknoten
		   fact-tail
strecke-viaa     = "Via" wspace
		   word				; Bezeichnung Streckenknoten
		   fact-tail
strecke-viaaa    = "VIA" wspace
		   word				; Bezeichnung Streckenknoten
		   fact-tail
strecke-nach     = "nach" wspace
		   word				; Bezeichnung Streckenende
		   fact-tail
strecke-anm	 = "anm" ["erkung"] wspace
		   word				; Anmerkungstext
		   fact-tail
strecke-nr	 = ("nr" / "nummer")
		   wspace datum
		   wspace abschnitt
		   wspace identifier		; Klasse
		   wspace word			; Nummer
		   [wspace "tw"]		; Nr auch für andere Strecke
		   fact-tail
strecke-verlauf  = "verlauf"
		   wspace abschnitt		; Verlauf
		   fact-tail
strecke-abschn	 = "abschn" ["itt"]
		   wspace 1*ALPHA		; Bezeichner
		   wspace abschnitt		; Abschnitt
		   fact-tail

5.3.1.2 Vorgeschichte

strecke-vertrag  = "vertrag"
		   wspace datum			; Vertragsdatum
		   wspace abschnitt		; betroffener Abschnitt
		   1*firma-id			; Vertragspartner
		   fact-tail
strecke-konzess  = "konzess" ["ion"]
		   wspace datum			; Erteilungsdatum
		   wspace abschnitt		; betroffener Abschnitt
		   [firma-id			; Erteilender
		    [firma-id]]			; Begünstigter
		   fact-tail
strecke-baubeg   = "baubeg" ["inn"]
		   wspace datum			; Datum des Baubeginns
		   wspace abschnitt		; betroffener Abschnitt
		   fact-tail
strecke-abnahme  = "abnahme"
		   wspace datum			; Datum der Abnahme
		   wspace abschnitt		; betroffener Abschnitt
		   [wspace firma-id]		; Abnehmender
		   fact-tail
strecke-einweih  = "einweih" ["ung"]
		   wspace datum			; Datum der Feier
		   wspace abschnitt		; betroffener Abschnitt
		   fact-tail

5.3.1.3 Betriebsgeschichte

strecke-va       = "va"
		   wspace datum			; Datum der Verkehrsaufnahme
		   wspace abschnitt		; betroffener Abschnitt
		   [wspace "gel"]		; nur Gelegenheitsverkehr
		   fact-tail
strecke-gva      = "gva"
		   wspace datum			; Datum der Verkehrsaufnahme
		   wspace abschnitt		; betroffener Abschnitt
		   [wspace "gel"]		; nur Gelegenheitsverkehr
		   fact-tail
strecke-pva      = "pva"
		   wspace datum			; Datum der Verkehrsaufnahme
		   wspace abschnitt		; betroffener Abschnitt
		   [wspace "gel"]		; nur Gelegenheitsverkehr
		   fact-tail
strecke-nva      = "nva"
		   wspace datum			; Datum der Verkehrsaufnahme
		   wspace abschnitt		; betroffener Abschnitt
		   [wspace "gel"]		; nur Gelegenheitsverkehr
		   fact-tail
strecke-vva      = "vva"
		   wspace datum			; Datum der Verkehrsaufnahme
		   wspace abschnitt		; betroffener Abschnitt
		   fact-tail
strecke-uebern	 = "uebern" ["ahme"]
		   wspace datum			; Übernahmedatum
		   wspace abschnitt		; betroffener Abschnitt
		   wspace trasse		; Strecke
		   wspace abschnitt		; Abschnitt auf der Strecke
		   fact-tail
strecke-ve       = "ve"
		   wspace datum			; Datum der Einstellung
		   wspace abschnitt		; betroffener Abschnitt
		   fact-tail
strecke-gve      = "gve"
		   wspace datum			; Datum der Einstellung
		   wspace abschnitt		; betroffener Abschnitt
		   fact-tail
strecke-pve      = "pve"
		   wspace datum			; Datum der Einstellung
		   wspace abschnitt		; betroffener Abschnitt
		   fact-tail
strecke-nve      = "nve"
		   wspace datum			; Datum der Einstellung
		   wspace abschnitt		; betroffener Abschnitt
		   fact-tail
strecke-vve      = "vve"
		   wspace datum			; Datum der Einstellung
		   wspace abschnitt		; betroffener Abschnitt
		   fact-tail
strecke-aufgeg	 = "aufgeg" ["angen"]
		   wspace datum			; Datum
		   wspace abschnitt		; betroffener Abschnitt
		   wspace trasse		; Strecke
		   fact-tail
strecke-dritte   = "dritte"
		   wspace datum			; Stichtag
		   wspace abschnitt		; betroffener Abschnitt
		   [wspace datum]		; Veröffentlichungstag
		   fact-tail
strecke-still	 = "still" ["gelegt"]
		   wspace datum			; Stilllegungsdatum
		   wspace abschnitt		; betroffener Abschnitt
		   [wspace datum]		; Genehmigungsdatum
		   fact-tail
strecke-abbau    = "abbau"
		   wspace datum			; Datum der Fertigstellung
		   wspace abschnitt		; betroffener Abschnitt
		   fact-tail
strecke-entwidm  = "entwidm" ["ung"]
		   wspace datum			;
		   wspace abschnitt		; betroffener Abschnitt
		   fact-tail

5.3.1.4 Eigenschaften

strecke-status   = "status"
		   wspace datum			; gültig ab
		   wspace abschnitt		; betroffener Abschnitt
		   wspace identifier		; neuer Status
		   fact-tail
strecke-gleise   = "gleise"
		   wspace datum			; gültig ab
		   wspace abschnitt		; betroffener Abschnitt
		   wspace 1*DIGIT   		; Anzahl der Gleise
		   fact-tail
spannung         = float "V" ["/" float "Hz" [DIGIT]]
strecke-elektr   = "elektr"
		   wspace datum			; gültig ab
		   wspace abschnitt		; betroffener Abschnitt
		   [wspace
		    ("oberleitung" /		; Art der Stromzuführung
		     ("stromschiene"
		      ("oben" / "unten" / "seitlich")
		      "bestrichen"))
		   [wspace
		    ("-" /			; eingestellt
		     (spannung 
		      *(wspace spannung)))]]
		   fact-tail
strecke-spurw    = "spurw" ["eite"]
		   wspace datum			: gültig ab
		   wspace abschnitt		; betroffener Abschnitt
		   wspace 1*DIGIT "mm"		; Spurweite
		   fact-tail
strecke-dreis	 = "dreis" ["chinen"]
		   wspace datum			: gültig ab
		   wspace abschnitt		; betroffener Abschnitt
		   wspace 1*DIGIT "mm"		; Spurweite
		   wspace 1*DIGIT "mm"		; Spurweite
		   fact-tail
strecke-viers	 = "viers" ["chinen"]
		   wspace datum			: gültig ab
		   wspace abschnitt		; betroffener Abschnitt
		   wspace 1*DIGIT "mm"		; Spurweite
		   wspace 1*DIGIT "mm"		; Spurweite
		   fact-tail
strecke-zahnst   = "zahnst" ["ange"]
		   wspace datum			: gültig ab
		   wspace abschnitt		; betroffener Abschnitt
		   wspace identifier		; System oder keine
		   fact-tail
strecke-sperr    = "sperr" ["ung"]
		   wspace datum			: gültig ab
		   wspace abschnitt		; betroffener Abschnitt
		   fact-tail
strecke-freig    = "freig" ["abe"]
		   wspace datum			: gültig ab
		   wspace abschnitt		; betroffener Abschnitt
		   fact-tail
strecke-verleg   = "verleg" ["ung"
		   wspace datum			: gültig ab
		   wspace abschnitt		; betroffener Abschnitt
		   wspace trasse-id		; Trasse
		   fact-tail

5.3.1.5 Eigentum und Betriebsführung

strecke-eigent   = "eigent" ["uemer"]
		   wspace datum			; gültig ab
		   wspace abschnitt		; betroffener Abschnitt
		   wspace firma-id		; Firma
		   fact-tail
strecke-bertrf   = ("betrf" / "betriebsfuehrer")
		   wspace datum			: gültig ab
		   wspace abschnitt		; betroffener Abschnitt
		   wspace firma-id		; Firma
		   fact-tail
strecke-eigebetr = "eigent-betrf"
		   wspace datum			; gültig ab
		   wspace abschnitt		; betroffener Abschnitt
		   wspace firma-id		; Firma
		   fact-tail

5.3.2 Betriebsstellenfakten

betrst-objekt	 = "betrst" wspace betrst-id owspace "{"
		   *betrst-fakt owspace "}"
betrst-id	 = ALPHA *(ALPHA / DIGIT / "-" / "/" / "_" / ".")
betrst-fakt      = betrst-eroeff / betrst-aufgel / betrst-eingegl
		 / betrst-name / betrst-nr / betrst-abk
		 / betrst-rang / betrst-merkmal / betrst-mu
		 / betrst-zu / betrst-verb

5.3.2.1 Eröffnung und Auflassung

betrst-eroeff    = "ereoff" ["net"]
                   wspace datum                 ; Eröffnungsdatum
		   fact-tail
betrst-aufgel    = "aufgel" ["assen"]
                   wspace datum
		   fact-tail
betrst-eingegl   = "eingegl" ["iedert"]
                   wspace datum                 ; Zeitpunkt
		   wspace betrst-id             ; Betriebsstelle
		   fact-tail

5.3.2.2 Lage, Name und Kürzel

betrst-lage      = "lage"
                   wspace datum                 ; ab Zeitpunkt
		   wspace netzpunkt		; Lage
		   fact-tail
betrst-name      = "name"
                   wspace datum			; ab Zeitpunkt
		   wspace word			; Name
		   fact-tail
betrst-nr        = ( "nr" / "nummer" )
		   wspace identifier		; Klasse
		   wspace word			; Nummer
		   [wspace datum]		; ab Zeitpunkt
		   fact-tail
betrst-abk       = "abk" ["uerzung"]
		   wspace identifier		; Klasse
		   wspace word			; Kürzel
		   [wspace datum]		; ab Zeitpunkt
		   fact-tail

5.3.2.3 Rang und Merkmale

betrst-rang      = "rang"
		   wspace datum			; ab Zeitpunkt
		   1*(wspace identifier)	; Ränge
		   fact-tail
betrst-merkmal   = "merkmal"
		   wspace datum			; ab Zeitpunkt
		   1*(wspace ["-"] identifier)	; Merkmale
		   fact-tail
betrst-mu	 = "mu"
		   wspace datum			; ab Zeitpunkt
		   wspace (betrst-id / "-")	; Betriebsstelle
		   fact-tail
betrst-zu	 = "zu"
		   wspace datum			; ab Zeitpunkt
		   wspace (betrst-id / "-")	; Betriebsstelle
		   fact-tail
betrst-verb	 = "verb" ["indung"]
		   wspace betrst-id		; Betriebsstelle
		   fact-tail

5.3.3 Firmen

firma-objekt     = "firma" wspace firma-id owspace "{"
		   *firma-fakt owspace "}"
firma-id	 = ALPHA *(ALPHA / DIGIT / "-" / "/" / "_" / ".")
firma-fakt       = firma-gegr / firma-aufgel / firma-uebern
		 / firma-fusion / firma-staatl / firma-name
		 / firma-sitz
firma-gegr       = "gegr" ["uendet"]
		   wspace datum
		   fact-tail
firma-aufgel	 = "aufgel" ["oest"]
		   wspace datum
		   fact-tail
firma-uebern	 = "uebern" ["ommen"]
		   wspace datum
		   wspace firma-id		; Firma
		   fact-tail
firma-fusion     = "fusion" ["iert"]
		   wspace datum
		   wspace firma-id		; Firma
		   fact-tail
firma-staatl	 = "staatl" ["ich"]
		   wspace datum
		   fact-tail
firma-name	 = "name"
		   wspace datum
		   wspace word			; Name
		   fact-tail
firma-sitz	 = "sitz"
		   wspace datum
		   wspace word			; Ort
		   fact-tail

5.3.4 Quellen

quelle-objekt    = "quelle" wspace quelle-id owspace "{"
		   *quelle-fakt owspace "}"
quelle-id	 = ALPHA *(ALPHA / DIGIT / "-" / "/" / "_" / ".")
quelle-fakt	 = quelle-text / quelle-html
quelle-text	 = "text"
		   wspace word
		   fact-tail
quelle-text	 = "html"
		   wspace word
		   fact-tail

5.4 Dateien

datei            = *(strecke-objekt / betrst-objekt / firma-objekt
			/ quelle-objekt)

Zuletzt geändert am 13. X. 2004.
Anregungen, Kommentare und Kritik an
Martin Hoffmann <hn@nvnc.de>.