Anforderungen an das Netzmodell (REQ-TOP)
Umgesetzt in crates/railit-topology, nachgewiesen in crates/railit-topology/tests/validation.rs. Jede Prüfung meldet ihre ID über TopologyError::requirement(). Stellbereiche, Betriebsstellen und Teilnetze sind in crates/railit-import/tests/areas.rs nachgewiesen, der Import von railML 3 in crates/railit-import/tests/railml.rs.
| ID | Anforderung | Gefährdung | Nachweis |
|---|---|---|---|
| REQ-TOP-001 | Jeder fachliche Name ist über alle Elementarten hinweg eindeutig. | H-004 | duplicate_names_are_rejected_across_kinds |
| REQ-TOP-002 | Jeder Port ist genau einmal verbunden. Netzenden werden ausdrücklich als Prellbock oder Netzgrenze modelliert; ein offener Port ist ein Fehler. | H-004 | open_and_double_connected_ports_are_rejected |
| REQ-TOP-003 | Verbindungen bestehen nur zwischen existierenden Ports der jeweiligen Elementart. Ein Port kann nicht mit sich selbst verbunden werden. IDs aus fremden Netzen werden abgewiesen. | H-004 | invalid_ports_and_self_connections_are_rejected |
| REQ-TOP-004 | Gleisabschnitte haben eine Länge größer null. Die Anzahl Elemente je Art ist auf u32::MAX begrenzt. | H-004 | zero_length_tracks_are_rejected |
| REQ-TOP-005 | Punktobjekte (Signale) liegen innerhalb ihres Gleisabschnitts. | H-004 | signals_outside_their_track_are_rejected |
| REQ-TOP-006 | Jedes Gleis und jede Weiche gehört zu genau einem Gleisfreimeldeabschnitt; kein Abschnitt ist leer. | H-001, H-005 | tvd_coverage_must_be_complete_and_unique |
| REQ-TOP-007 | Eine Weiche ist nur zwischen Spitze und linkem Strang (Lage links) oder Spitze und rechtem Strang (Lage rechts) befahrbar, nie zwischen den beiden Strängen. Jeder Weg durch eine Weiche nennt die erforderliche Lage. | H-002 | points_can_only_be_traversed_tip_to_branch, Property-Test exits_stay_on_node |
| REQ-TOP-008 | Ein Netz ist nur nach vollständiger, erfolgreicher Validierung verfügbar und danach unveränderlich. | H-004 | Typsystem: Topology hat keinen öffentlichen Konstruktor und keine verändernden Methoden. |
| REQ-TOP-009 | Die Validierung meldet alle gefundenen Fehler, nicht nur den ersten. | – (Qualität) | all_errors_are_collected_with_context (railit-import) |
| REQ-TOP-010 | Ein Netz aus mehreren nicht verbundenen Teilen erzeugt eine Warnung. | H-004 | open_and_double_connected_ports_are_rejected |
| REQ-TOP-011 | Sind Stellbereiche festgelegt, gehört jeder Gleisfreimeldeabschnitt genau einem Stellbereich an; kein Stellbereich ist leer. | H-004, H-012 | nordbahn_has_three_areas_and_two_links, every_tvd_needs_exactly_one_area |
| REQ-TOP-012 | Die Haltsignale eines Bahnsteigs sind Signale, an denen Fahrstraßen enden (Haupt- oder Mehrabschnittssignale). | H-004 | platforms_need_route_signals |
| REQ-TOP-013 | Jeder Stellbereich lässt sich als eigenes, vollständig validiertes Teilnetz ausschneiden. Verbindungen zu Nachbarbereichen werden zu Grenzen (>Nachbar); welcher Bereich beim Anlauf die Erlaubnis übernimmt, ist eindeutig festgelegt. Die Abbildung der IDs auf das Gesamtnetz bleibt erhalten. | H-004, H-012 | area_cut_replaces_neighbours_by_borders, border_terminals_can_be_written_by_hand |
| REQ-TOP-014 | Ein Netz aus railML 3 durchläuft dieselbe Validierung wie ein Netz aus rail-it-TOML. Fehlende oder widersprüchliche Angaben (Länge, Wirkrichtung, Verbindungen) sind Fehler mit Angabe des railML-Elements und werden nie ergänzt oder geraten. Elemente, die rail-it nicht übernimmt, werden als Warnung gemeldet. Export und erneuter Import ergeben dasselbe Netz und bitgleiche Plan-Images. | H-004 | handmade_railml_is_imported, errors_are_collected_with_location, beispielstadt_survives_the_roundtrip, nordbahn_with_areas_and_stations_survives_the_roundtrip, railml_roundtrip_yields_identical_plans, railml_export_validate_compile |
| REQ-TOP-015 | Ein Netz aus PlanPro (1.9, 1.10; .ppxml) durchläuft dieselbe Validierung wie ein Netz aus rail-it-TOML. Gelesen werden LST_Zustand und die Zielzustände aller Ausgaben, nie ein Startzustand. Fehlende oder widersprüchliche Angaben (Länge, Lage auf der TOP_Kante, Wirkrichtung, Bezeichnung, Signalart, Signalsystem, Anschlüsse am Knoten) sind Fehler mit Angabe des PlanPro-Objekts und werden nie ergänzt oder geraten; Signalsysteme außer Ks und HV und widersprüchliche Weichenanschlüsse sind Fehler. Objekte, die rail-it nicht übernimmt (fiktive Signale, Gleissperren, Signale ohne Lichtsignalschirm), werden als Warnung gemeldet. Export und erneuter Import ergeben dasselbe Netz und ein bitgleiches Plan-Image. | H-004 | handmade_planpro_is_imported, errors_are_collected_with_location, beispielstadt_survives_the_roundtrip, generated_corridor_survives_the_roundtrip, planpro_roundtrip_yields_identical_plans, Fuzz-Ziel planpro_network, Szenario 23 |
| REQ-TOP-016 | Eine Kreuzung ohne bewegliche Teile verbindet keine Gleise; ihre beiden Kreuzungsstellen liegen auf verschiedenen Gleisen im selben Gleisfreimeldeabschnitt, sonst ist das Netz ungültig. Fahrstraßen und Durchrutschwege über die eine und die andere Kreuzungsstelle sind damit feindlich, und ein Zug auf der einen Kreuzungsstelle hält Fahrten über die andere fern. railML (crossing vom Typ simpleCrossing) und PlanPro (W_Kr_Gsp_Komponente mit Kreuzung) bilden Kreuzungen ab; ein Abschnitt aus mehreren nicht verbundenen Teilen wird dabei aus seinen begrenzenden Einrichtungen erkannt. Der Simulator meldet zwei Züge zugleich auf beiden Kreuzungsstellen als Zusammenstoß. | H-001, H-004 | crossing_legs_share_one_tvd, crossing_survives_the_roundtrip (railML, PlanPro), Szenario 24 |
| REQ-TOP-017 | Gekoppelte Weichen hängen an einem gemeinsamen Antrieb und laufen immer gemeinsam um, gleich- oder gegenläufig. Eine Weiche ist mit höchstens einer anderen gekoppelt, nie mit sich selbst; gekoppelte Weichen gehören demselben Stellbereich an. Eine Kreuzungsweiche (EKW, DKW) besteht aus Zungenpaaren (Weichen mit der Spitze nach außen, links gerade, rechts in den Bogen), den inneren Gleisen, einer Kreuzung der beiden geraden Gleise und einem eigenen Gleisfreimeldeabschnitt; die Zungenpaare eines Endes einer DKW sind gegenläufig, die beiden einer EKW gleichläufig gekoppelt. railML (railit:slip, railit:coupling) bildet beides ab, PlanPro Kreuzungsweichen als W_Kr_Anlage mit W_Kr_Art DKW bzw. EKW; eine Kreuzungsweiche, deren Teile anders verbunden sind, ist ein Fehler. | H-001, H-002, H-004 | double_slip_is_built_from_coupled_points, invalid_couplings_are_rejected, slip_names_are_checked_first, slips_and_couplings_survive_the_roundtrip, slips_survive_the_planpro_roundtrip, broken_slip_is_rejected, Szenario 25 |