SCHEMA Strassennetz;

REFERENCE FROM Administration (Widmung, OD_FS, Verwaltungsbezirk_abstrakt, Verwaltungsbezirk, Baulast, Strassenbaudienststelle, UI_Vereinbarung);

REFERENCE FROM Verkehr (Strassenbeschreibung_verkehrl, Anzahl_Fahrstreifen, Beschraenkung_verkehrlich);

REFERENCE FROM Bauwerke (Teilbauwerk, Bauwerk_Netzzuordnung);

REFERENCE FROM Strassenzustandsdaten (ZEB_Objekt);

REFERENCE FROM Strassenausstattungen (Strassenentwaesserung, Ausstattung_und_Anlagen);

REFERENCE FROM Bauliche_Strasseneigenschaften (Bahnigkeit, Querschnittstreifen, Regelquerschnitt, Bauweise_Oberbau, Bauklasse_Oberbau, Fahrbahnlaengsneigung, Fahrbahnquerneigung, Schicht, Fahrbahntrennung, Trassenbreite, Fahrbahnbreite, Kreuzung, Fussweg, Radweg, Streifenbegrenzung, Schichtbegrenzung, Durchlass, Schutzzone, Hindernis);

REFERENCE FROM Entwurf (Trasse);

REFERENCE FROM Ausstattung (Schutz_und_Leiteinrichtungen, Fahrbahnmarkierungen, Beschilderung_Lichtsignalanl);

REFERENCE FROM Statische_Beschilderung (Wegweiserinhalt, Standort, raeumlicher_Gueltigkeitsber, Position, stat_verkehrsreg_Beschilderung, Wegweiser);

REFERENCE FROM Dynamische_Beschilderung (Aufstellvorrichtung, Anordnung_des_Messsystems, Wirkungsbereich_SP, WW_Wirkungsbereiche, SB_Wirkungsbereiche);

REFERENCE FROM Manuelle_Zaehlstelle (raeuml_Gueltigkeitsbereich_MZ, oertliche_Zuordnung_MZ);

REFERENCE FROM Automatische_Dauerzaehlstelle (abgeleitete_Dauerzaehlstelle, automatische_Dauerzaehlstelle, oertliche_Zuordnung_DZ);

REFERENCE FROM Historisierung (Teilabschnitt_IdNT, historisches_Objekt);

REFERENCE FROM Allgemeine_Objekte (Winkel, Kilometer, Meter, Datum);

REFERENCE FROM Geometrieschema (Linienobjekt_Modell, Punktobjekt_Modell);

REFERENCE FROM Umfeldmessstelle (oertliche_Zuordnung_UM);

REFERENCE FROM Unfall (Unfallort_Strassenpunkt, Angaben_zum_Unfallort);

REFERENCE FROM Lichtsignalanlage (oertliche_Zuordnung_LS);

REFERENCE FROM Kostenberechnung (Projektkennzeichnung_Kostra);

REFERENCE FROM Oekologie (Baumassnahme, Standortbeschreibung_Baum);

ENTITY Strassenklasse;
--- Attribute :
    Kennung: STRING(1);
    Langtext: STRING;
--- Relationen :
UNIQUE
    Kennung_eindeutig: Kennung;
END_ENTITY;


(* zulaessige Werte, in der Form (Kennung,Langtext):

   ('A','Bundesautobahn')
   ('B','Bundesstraße')
   ('L','Landesstraße')
   ('S','Staatsstraße')
   ('K','Kreisstraße')
   ('G','Gemeindestraße')

*)

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Strassenbezeichnung;
--- Attribute :
    Strassenklasse: Strassenklasse;
    Strassennummer: Strassennummer;
    Zusatzbuchstabe: OPTIONAL Zusatzbuchstabe;
DERIVE
    Strassenname: STRING(6) := Strassenklasse.Kennung+FORMAT(Strassennummer,'4I')+Zusatzbuchstabe_oder_Leerzeichen(Zusatzbuchstabe);
--- Relationen :
INVERSE
    von_Strasse: SET [1: ?] OF Strasse FOR hat_Strassenbezeichnung;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Strasse
SUBTYPE OF (historisches_Objekt, Strasse_abstrakt);
--- Attribute :
--- Relationen :
    hat_Strassenbezeichnung: Strassenbezeichnung;
    hat_Strassenknoten: SET [2: ?] OF Strasse_Netzknoten;
    hat_Abschnitt_oder_Ast: SET [1: ?] OF Abschnitt_oder_Ast_abstrakt;
    hat_BAB_Knotennummer: OPTIONAL SET [1: ?] OF BAB_Knotennummer;
    in_Verwaltungsbezirk: OPTIONAL SET [1: ?] OF Verwaltungsbezirk_abstrakt;
    enthaelt_Block: OPTIONAL SET [1: ?] OF Block;
    von_Unfallort: OPTIONAL SET [1: ?] OF Angaben_zum_Unfallort;
    muendet_ein_am_Anfg_von_Unfall: OPTIONAL SET [1: ?] OF Angaben_zum_Unfallort;
    muendet_ein_am_Ende_von_Unfall: OPTIONAL SET [1: ?] OF Angaben_zum_Unfallort;
    zu_Projektkennzeichnung_Kostra: OPTIONAL SET [1: ?] OF Projektkennzeichnung_Kostra;
    zu_Baumassnahme: OPTIONAL SET [1: ?] OF Baumassnahme;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Strasse_abstrakt
ABSTRACT SUPERTYPE OF (ONEOF(Strasse , Strasse_Symbol ));
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Strasse_Symbol
SUBTYPE OF (Strasse_abstrakt);
--- Attribute :
    Kennung: STRING(7);
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Verlaufskennzeichen;
--- Attribute :
    Kennung: INTEGER;
    Langtext: STRING;
--- Relationen :
UNIQUE
    Kennung_eindeutig: Kennung;
END_ENTITY;


(* zulaessige Werte, in der Form (Kennung,Langtext):

   (1,'Anfang Straße')
   (2,'Ende Straße')
   (3,'Anfang Seitenarm')
   (4,'Ende Seitenarm')
   (5,'Anfang Unterbrechung')
   (6,'Ende Unterbrechung')
   (7,'Anfang getr. verl. Fahrbahn')
   (8,'Ende getr. verl. Fahrbahn')
   (9,'Wiederholung')

*)

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Strasse_Netzknoten
SUBTYPE OF (historisches_Objekt);
--- Attribute :
    Verlaufskennzeichen: OPTIONAL Verlaufskennzeichen;
--- Relationen :
    hat_Netzknoten: SET [1: ?] OF Netzknoten_abstrakt;
    hat_Vorgaenger: OPTIONAL SET [1: ?] OF Strasse_Netzknoten;
    von_Strasse: SET [1: ?] OF Strasse_abstrakt;
INVERSE
    hat_Nachfolger: SET [0: ?] OF Strasse_Netzknoten FOR hat_Vorgaenger;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Knotenart;
--- Attribute :
    Kennung: INTEGER;
    Langtext: STRING;
--- Relationen :
UNIQUE
    Kennung_eindeutig: Kennung;
END_ENTITY;


(* zulaessige Werte, in der Form (Kennung,Langtext):

   (1,'plangleich (höhengleich)')
   (2,'planfrei (höhenungleich)')
   (3,'teilplanfrei')
   (0,'fiktiver Netzknoten')

*)

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Knotenpunktsform;
--- Attribute :
    Kennung: INTEGER;
    Langtext: STRING;
--- Relationen :
UNIQUE
    Kennung_eindeutig: Kennung;
END_ENTITY;


(* zulaessige Werte, in der Form (Kennung,Langtext):

   (01,'Einmündung oder Kreuzung von 2-streifigen Straßen')
   (02,'Einmündung oder Kreuzung von 2-bahnigen mit 2-streifigen Straßen in der Regel mit Lichtsignalanlage')
   (03,'Einmündung oder Kreuzung von zwei 2-bahnigen Straßen mit Lichtsignalanlage')
   (04,'planfreie Kreuzung von 2-streifigen oder 2-bahnigen Straßen')
   (05,'Kreuzung 2-streifiger Straßen als Versatz')
   (06,'Aufgeweitete Einmündung oder Kreuzung mit mindestens einer 2-bahnigen Straße')
   (07,'Kreisverkehrsplatz, d < 30 m')
   (08,'Kreisverkehr, d > 30 m')

*)

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Knotenpunktsystem;
--- Attribute :
    Kennung: INTEGER;
    Langtext: STRING;
--- Relationen :
UNIQUE
    Kennung_eindeutig: Kennung;
END_ENTITY;


(* zulaessige Werte, in der Form (Kennung,Langtext):

   (01,'Trompete')
   (02,'Birne')
   (03,'Dreieck mit 3 zweigeschossigen Bauwerken')
   (04,'Dreieck mit 1 dreigeschossigen Bauwerk')
   (05,'Kleeblatt')
   (06,'Kleeblatt, abgewandelt mit halbdirekter Führung eines Linksabbiegestromes')
   (07,'Kleeblatt, abgewandelt mit zügiger halbdirekter Führung eines Linksabbiegestromes')
   (08,'halbes Kleeblatt')
   (09,'halbes Kleeblatt, asymmetrisch mit außenliegenden Linksabbiegespuren')
   (10,'halbes Kleeblatt, asymmetrisch mit innen- und hintereinanderliegenden Linksabbiegespuren')
   (11,'halbes Kleeblatt, asymmetrisch mit innen- und nebeneinanderliegenden Linksabbiegespuren')
   (12,'halbes Kleeblatt, symmetrisch')
   (13,'Raute mit innen- und hintereinanderliegenden Linksabbiegespuren')
   (14,'Raute mit innen- und nebeneinanderliegenden Linksabbiegespuren')
   (15,'Raute mit aufgeweiteter Kreuzung')
   (16,'Raute mit außenliegenden Linksabbiegespuren')
   (17,'Sondersystem')

*)

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Netzknoten
SUBTYPE OF (Punktobjekt_Modell, historisches_Objekt, Netzknoten_abstrakt);
--- Attribute :
    Numerierungsbezirk: TK25_Blattnummer;
    Nummer: lfd_NK_Nummer;
    Knotenart: OPTIONAL Knotenart;
    Knotenname: OPTIONAL STRING(30);
    Knotenpunktsform: OPTIONAL Knotenpunktsform;
    Knotenpunktsystem: OPTIONAL Knotenpunktsystem;
--- Relationen :
    hat_BAB_Knotennummer: OPTIONAL SET [1: ?] OF BAB_Knotennummer;
    hat_Nullpunkt: SET [1: ?] OF Nullpunkt_abstrakt;
    in_Strassenknoten: SET [1: ?] OF Strasse_Netzknoten;
    Beginn_von: OPTIONAL SET [1: ?] OF WW_Wirkungsbereiche;
    Ende_von: OPTIONAL SET [1: ?] OF WW_Wirkungsbereiche;
    auf_Trasse: OPTIONAL SET [1: ?] OF Trasse;
    hat_Wegweiser: OPTIONAL SET [1: ?] OF Wegweiser;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Netzknoten_abstrakt
ABSTRACT SUPERTYPE OF (ONEOF(Netzknoten , Netzknoten_Symbol ));
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Netzknoten_Symbol
SUBTYPE OF (Netzknoten_abstrakt);
--- Attribute :
    Kennung: STRING(7) FIXED;
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY BAB_Knotennummer
SUBTYPE OF (historisches_Objekt);
--- Attribute :
    Knotennummer: INTEGER;
    Buchstabe: OPTIONAL STRING(1);
--- Relationen :
    auf_Strasse: SET [1: ?] OF Strasse_abstrakt;
    von_Netzknoten: SET [1: ?] OF Netzknoten_abstrakt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Stadium;
--- Attribute :
    Kennung: INTEGER;
    Langtext: STRING;
--- Relationen :
UNIQUE
    Kennung_eindeutig: Kennung;
END_ENTITY;


(* zulaessige Werte, in der Form (Kennung,Langtext):

   (00,'unter Verkehr')
   (11,'Neubau in Planung')
   (12,'Neubau in Ausführung')
   (20,'Erneuerung/Ersatzneubau in Planung')
   (21,'Erneuerung/Ersatzneubau in Ausführung')
   (30,'Instandsetzung in Planung')
   (31,'Instandsetzung in Ausführung')

*)

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Abschnitt_oder_Ast
ABSTRACT SUPERTYPE OF (ONEOF(Abschnitt , Ast ))
SUBTYPE OF (Linienobjekt_Modell, historisches_Objekt, Abschnitt_oder_Ast_abstrakt);
--- Attribute :
    Laenge: OPTIONAL Meter;
    Stadium: OPTIONAL Stadium;
    Streckenart: OPTIONAL INTEGER;
    Verkehrsfreigabe: OPTIONAL Datum;
--- Relationen :
    beginnt_bei_NP: SET [1: ?] OF Nullpunkt_abstrakt;
    endet_bei_NP: SET [1: ?] OF Nullpunkt_abstrakt;
    gehoert_zu_Strasse: SET [1: ?] OF Strasse_abstrakt;
    hat_Teilabschnitt: OPTIONAL SET [1: ?] OF Teilabschnitt;
    hat_Strassenpunkt: OPTIONAL SET [1: ?] OF Strassenpunkt;
    zu_Baumassnahme: OPTIONAL SET [1: ?] OF Baumassnahme;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Abschnitt_oder_Ast_abstrakt
ABSTRACT SUPERTYPE OF (ONEOF(Abschnitt_oder_Ast , Abschnitt_oder_Ast_Symbol ));
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Abschnitt_oder_Ast_Symbol
SUBTYPE OF (Abschnitt_oder_Ast_abstrakt);
--- Attribute :
    Kennung: STRING(16);
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Abschnitt
SUBTYPE OF (Abschnitt_oder_Ast);
--- Attribute :
    Abschnittsnummer: OPTIONAL INTEGER;
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Ast
SUBTYPE OF (Abschnitt_oder_Ast);
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Verkehrliche_Verknuepfung
SUBTYPE OF (historisches_Objekt);
--- Attribute :
--- Relationen :
    von_Strassenelement: SET [1: ?] OF Strassenelement;
    nach_Strassenelement: SET [1: ?] OF Strassenelement;
    ueber_Nullpunkt: SET [1: ?] OF Nullpunkt_abstrakt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Nullpunkt
SUBTYPE OF (Punktobjekt_Modell, historisches_Objekt, verallgemeinerter_Nullpunkt, Nullpunkt_abstrakt);
--- Attribute :
    Zusatz: Nullpunktkennung;
    zentraler_Nullpunkt: OPTIONAL BOOLEAN;
--- Relationen :
    in_Netzknoten: SET [1: ?] OF Netzknoten_abstrakt;
    Beginn_von_Abschnitt_oder_Ast: OPTIONAL SET [1: ?] OF Abschnitt_oder_Ast_abstrakt;
    Ende_von_Abschnitt_oder_Ast: OPTIONAL SET [1: ?] OF Abschnitt_oder_Ast_abstrakt;
    verbindet_Verkehrl_Verknuepfg: OPTIONAL SET [1: ?] OF Verkehrliche_Verknuepfung;
    hat_Nullpunktsort: SET [1: ?] OF Nullpunktsort;
INVERSE
    hat_GDF_Verbindungpunkt: SET [0: ?] OF GDF_Verbindungspunkt FOR entspricht_Nullpunkt;
    hat_GDF_Verbindungselement: SET [0: ?] OF GDF_Verbindungselement FOR gehoert_zu_Nullpunkt;
WHERE
    Beginn_von_oder_Ende_von: EXISTS(Beginn_von_Abschnitt_oder_Ast)OR EXISTS(Ende_von_Abschnitt_oder_Ast);
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Nullpunkt_abstrakt
ABSTRACT SUPERTYPE OF (ONEOF(Nullpunkt , Nullpunkt_Symbol ));
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Nullpunkt_Symbol
SUBTYPE OF (Nullpunkt_abstrakt);
--- Attribute :
    Kennung: STRING(8) FIXED;
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Strassenpunkt
ABSTRACT SUPERTYPE OF (ONEOF(Strassenpunkt_TA , Strassenpunkt_PO , Nullpunktsort , Strassenpunkt_PoB ));
--- Attribute :
    Station: Meter;
    Abstand_zur_Bestandsachse: OPTIONAL Meter;
    Abstand_zur_Fahrbahnoberkante: OPTIONAL Meter;
--- Relationen :
    auf_Abschnitt_oder_Ast: Abschnitt_oder_Ast_abstrakt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Bezugsrichtung;
--- Attribute :
    Kennung: STRING(1);
    Langtext: STRING;
--- Relationen :
UNIQUE
    Kennung_eindeutig: Kennung;
END_ENTITY;


(* zulaessige Werte, in der Form (Kennung,Langtext):

   ('B','beide Richtungen')
   ('R','in Stationierungsrichtung')
   ('G','gegen Stationierungsrichtung')

*)

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Strassenpunkt_PO
SUBTYPE OF (Strassenpunkt);
--- Attribute :
--- Relationen :
INVERSE
    gehoert_zu_PO: Punktobjekt FOR bei_Strassenpunkt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Punktobjekt
ABSTRACT SUPERTYPE OF (ONEOF(Punktobjekt_stat , Punktobjekt_hist ));
--- Attribute :
--- Relationen :
    bei_Strassenpunkt: Strassenpunkt_PO;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Punktobjekt_stat
ABSTRACT SUPERTYPE OF (ONEOF(Position , stat_verkehrsreg_Beschilderung , Standort , Unfallort_Strassenpunkt , Anordnung_des_Messsystems , oertliche_Zuordnung_SP , Bauwerk_Netzzuordnung , Wirkungsbereich_SP , GDF_Verbindungspunkt , Standortbeschreibung_Baum ))
SUBTYPE OF (Punktobjekt);
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Punktobjekt_hist
ABSTRACT SUPERTYPE OF (ONEOF(Schichtbegrenzung , Streifenbegrenzung , Durchlass , Kilometrierung , Aufstellvorrichtung , Kreuzung , Teilbauwerk ))
SUBTYPE OF (Punktobjekt, historisches_Objekt);
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY oertliche_Zuordnung
ABSTRACT SUPERTYPE OF (ONEOF(oertliche_Zuordnung_UM , oertliche_Zuordnung_DZ , oertliche_Zuordnung_MZ , oertliche_Zuordnung_LS ));
--- Attribute :
--- Relationen :
    liegt_auf_Strassenpunkt: OPTIONAL oertliche_Zuordnung_SP;
    liegt_auf_nicht_klass_Strasse: OPTIONAL nicht_nach_ASB_klass_Strasse;
WHERE
    Strassenpunkt_o_nicht_klassif: EXISTS(liegt_auf_Strassenpunkt)XOR EXISTS(liegt_auf_nicht_klass_Strasse);
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY oertliche_Zuordnung_SP
SUBTYPE OF (Punktobjekt_stat);
--- Attribute :
--- Relationen :
INVERSE
    von_oertlicher_Zuordnung: SET [0: ?] OF oertliche_Zuordnung FOR liegt_auf_Strassenpunkt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY nicht_nach_ASB_klass_Strasse;
--- Attribute :
    Strassenklasse: STRING(50);
    Nummer: INTEGER;
    Lage: STRING(28);
--- Relationen :
INVERSE
    von_oertlicher_Zuordnung: SET [0: ?] OF oertliche_Zuordnung FOR liegt_auf_nicht_klass_Strasse;
    zu_Projektkennzeichnung_Kostra: SET [0: ?] OF Projektkennzeichnung_Kostra FOR hat_nicht_nach_ASB_klass_Str;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Strassenpunkt_TA
SUBTYPE OF (Strassenpunkt);
--- Attribute :
--- Relationen :
INVERSE
    Beginn_von_TA: SET [0: 1] OF Teilabschnitt FOR beginnt_bei_SP;
    Ende_von_TA: SET [0: 1] OF Teilabschnitt FOR endet_bei_SP;
WHERE
    entweder_Beginn_oder_Ende: EXISTS(Beginn_von_TA)XOR EXISTS(Ende_von_TA);
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Nullpunktsort
SUBTYPE OF (Strassenpunkt);
--- Attribute :
--- Relationen :
    bei_Nullpunkt: SET [1: ?] OF Nullpunkt_abstrakt;
INVERSE
    Beginn_von_SE: SET [0: ?] OF Strassenelement FOR beginnt_bei_NPO;
    Ende_von_SE: SET [0: ?] OF Strassenelement FOR endet_bei_NPO;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Strassenpunkt_PoB
SUBTYPE OF (Strassenpunkt);
--- Attribute :
--- Relationen :
INVERSE
    Punktobjekt_o_Bereichsobjekt: SET [0: ?] OF Punktobjekt_o_Bereichsobjekt FOR ist_Punktobjekt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Punktobjekt_o_Bereichsobjekt
ABSTRACT SUPERTYPE OF (ONEOF(Beschilderung_Lichtsignalanl , Fahrbahnmarkierungen , Schutz_und_Leiteinrichtungen ));
--- Attribute :
--- Relationen :
    ist_Punktobjekt: OPTIONAL Strassenpunkt_PoB;
    ist_Bereichsobjekt: OPTIONAL Netzbereich;
WHERE
    Punktobjekt_o_Bereichsobjekt: EXISTS(ist_Punktobjekt)XOR EXISTS(ist_Bereichsobjekt);
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Netzbereichskomponente
ABSTRACT SUPERTYPE OF (ONEOF(Teilabschnitt_NB , Netzbereich , Strecke ));
--- Attribute :
--- Relationen :
INVERSE
    in_Netzbereich: SET [0: ?] OF Netzbereich FOR enthaelt_Netzbereichskomp;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Netzbereich
SUBTYPE OF (Netzbereichskomponente, historisches_Objekt);
--- Attribute :
--- Relationen :
    enthaelt_Netzbereichskomp: SET [1: ?] OF Netzbereichskomponente;
INVERSE
    zu_Bereichsobjekt: SET [1: ?] OF Bereichsobjekt FOR hat_Netzbereich;
    Punktobjekt_o_Bereichsobjekt: SET [0: ?] OF Punktobjekt_o_Bereichsobjekt FOR ist_Bereichsobjekt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Bereichsobjekt
ABSTRACT SUPERTYPE OF (ONEOF(Bereichsobjekt_stat , Bereichsobjekt_hist ));
--- Attribute :
--- Relationen :
    hat_Netzbereich: SET [1: ?] OF Netzbereich;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Bereichsobjekt_stat
SUBTYPE OF (Bereichsobjekt);
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Bereichsobjekt_hist
ABSTRACT SUPERTYPE OF (ONEOF(UI_Vereinbarung , Strassenbaudienststelle , Baulast , Verwaltungsbezirk , Schutzzone ))
SUBTYPE OF (Bereichsobjekt, historisches_Objekt);
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Teilabschnitt
ABSTRACT SUPERTYPE OF (ONEOF(Teilabschnitt_SO , Teilabschnitt_NB , Teilabschnitt_Str , Teilabschnitt_IdNT ));
--- Attribute :
--- Relationen :
    beginnt_bei_SP: Strassenpunkt_TA;
    endet_bei_SP: Strassenpunkt_TA;
    auf_Abschnitt_oder_Ast: Abschnitt_oder_Ast_abstrakt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY verallgemeinerte_Strecke
ABSTRACT SUPERTYPE OF (ONEOF(Teilabschnitt_SO , Strecke_SO ));
--- Attribute :
--- Relationen :
INVERSE
    zu_Streckenobjekt: SET [1: ?] OF Streckenobjekt FOR hat_Strecke;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Teilabschnitt_SO
SUBTYPE OF (Teilabschnitt, verallgemeinerte_Strecke);
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Streckenobjekt
ABSTRACT SUPERTYPE OF (ONEOF(Streckenobjekt_stat , Streckenobjekt_hist ));
--- Attribute :
--- Relationen :
    hat_Strecke: SET [1: ?] OF verallgemeinerte_Strecke;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Streckenobjekt_stat
ABSTRACT SUPERTYPE OF (ONEOF(Fahrbahntrennung , Trassenbreite , Fahrbahnbreite , Fussweg , Radweg , ZEB_Objekt , Strassenentwaesserung , Beschraenkung_verkehrlich , Strassenbeschreibung_verkehrl , Anzahl_Fahrstreifen , Entwurfselement , Bauwerk_Netzzuordnung ))
SUBTYPE OF (Streckenobjekt);
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Streckenobjekt_hist
ABSTRACT SUPERTYPE OF (ONEOF(Fahrbahnlaengsneigung , Widmung , Querschnittstreifen , Fahrbahnquerneigung , OD_FS , Schicht , Hindernis , Block , Bauklasse_Oberbau , Bauweise_Oberbau , Bahnigkeit , Regelquerschnitt , raeumlicher_Gueltigkeitsber , SB_Wirkungsbereiche , Ausstattung_und_Anlagen , automatische_Dauerzaehlstelle , abgeleitete_Dauerzaehlstelle , raeuml_Gueltigkeitsbereich_MZ ))
SUBTYPE OF (Streckenobjekt, historisches_Objekt);
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Teilabschnitt_Str
SUBTYPE OF (Teilabschnitt);
--- Attribute :
--- Relationen :
INVERSE
    in_Strecke: Strecke FOR entlang_Teilabschnitt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Teilabschnitt_NB
SUBTYPE OF (Teilabschnitt, Netzbereichskomponente);
--- Attribute :
--- Relationen :
WHERE
    Teilabschnitt_NB_existiert: EXISTS(SELF\Netzbereichskomponente. in_Netzbereich);
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Strecke
SUPERTYPE OF (ONEOF(Strecke_SO ))
SUBTYPE OF (Netzbereichskomponente, historisches_Objekt);
--- Attribute :
--- Relationen :
    entlang_Teilabschnitt: LIST [1: ?] OF Teilabschnitt_Str;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Strecke_SO
SUBTYPE OF (Strecke, verallgemeinerte_Strecke);
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Teilnetzkomponente
ABSTRACT SUPERTYPE OF (ONEOF(Strassenelement , Teilnetz , Route ));
--- Attribute :
--- Relationen :
INVERSE
    in_Teilnetz: SET [0: ?] OF Teilnetz FOR enthaelt_Teilnetzkomponente;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Teilnetz
SUBTYPE OF (Teilnetzkomponente, historisches_Objekt);
--- Attribute :
    Kennzeichen_Teilnetz: OPTIONAL STRING(6);
    Beschreibung_Teilnetz: OPTIONAL STRING(60);
--- Relationen :
    enthaelt_Teilnetzkomponente: SET [1: ?] OF Teilnetzkomponente;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Routenkomponente
ABSTRACT SUPERTYPE OF (ONEOF(Strassenelement , Route ));
--- Attribute :
--- Relationen :
    hat_Vorgaenger: OPTIONAL SET [1: ?] OF Routenkomponente;
INVERSE
    hat_Nachfolger: SET [0: ?] OF Routenkomponente FOR hat_Vorgaenger;
    in_Route: SET [0: ?] OF Route FOR entlang_Routenkomponente;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Route
SUBTYPE OF (Teilnetzkomponente, Routenkomponente, historisches_Objekt);
--- Attribute :
--- Relationen :
    entlang_Routenkomponente: SET [1: ?] OF Routenkomponente;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Strassenelement
SUBTYPE OF (Teilnetzkomponente, Routenkomponente, historisches_Objekt, Linienobjekt_Modell);
--- Attribute :
    RDS_TMC_Code: OPTIONAL STRING(12);
--- Relationen :
    beginnt_bei_NPO: Nullpunktsort;
    endet_bei_NPO: Nullpunktsort;
INVERSE
    Beginn_von_verkehrlicher_Verkn: SET [0: ?] OF Verkehrliche_Verknuepfung FOR von_Strassenelement;
    Ende_von_verkehrlicher_Verkn: SET [0: ?] OF Verkehrliche_Verknuepfung FOR nach_Strassenelement;
    hat_GDF_Verbindungselement: SET [0: ?] OF GDF_Verbindungselement FOR entspricht_Strassenelement;
    von_Wegweiserinhalt: SET [0: ?] OF Wegweiserinhalt FOR von_Strassenelement;
    nach_Wegweiserinhalt: SET [0: ?] OF Wegweiserinhalt FOR nach_Strassenelement;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Kilometrierung
SUPERTYPE OF (ONEOF(Betriebskilometer ))
SUBTYPE OF (Punktobjekt_hist);
--- Attribute :
    Kilometrierung: Kilometer;
--- Relationen :
INVERSE
    von_Bauwerk_Netzzuordnung: SET [0: ?] OF Bauwerk_Netzzuordnung FOR hat_Kilometrierung;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Betriebskilometer
SUBTYPE OF (Kilometrierung);
--- Attribute :
--- Relationen :
    in_Block: SET [1: ?] OF Block;
INVERSE
    von_Angaben_zum_Unfallort: SET [0: ?] OF Angaben_zum_Unfallort FOR bei_Betriebskilometer;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Block
SUBTYPE OF (Streckenobjekt_hist);
--- Attribute :
    Blocknummer: INTEGER;
    km_Anfang: REAL;
    km_Ende: REAL;
--- Relationen :
    auf_Strasse: SET [1: ?] OF Strasse_abstrakt;
INVERSE
    enthaelt_Betriebskilometer: SET [0: ?] OF Betriebskilometer FOR in_Block;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY GDF_Verbindungspunkt
SUBTYPE OF (Punktobjekt_stat, Punktobjekt_Modell, verallgemeinerter_Nullpunkt);
--- Attribute :
--- Relationen :
    entspricht_Nullpunkt: Nullpunkt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY GDF_Verbindungselement
SUBTYPE OF (Linienobjekt_Modell);
--- Attribute :
--- Relationen :
    beginnt_bei_verallg_Nullpunkt: verallgemeinerter_Nullpunkt;
    endet_bei_verallg_Nullpunkt: verallgemeinerter_Nullpunkt;
    gehoert_zu_Nullpunkt: OPTIONAL Nullpunkt;
    entspricht_Strassenelement: OPTIONAL Strassenelement;
WHERE
    entweder_NP_oder_SE: EXISTS(gehoert_zu_Nullpunkt)XOR EXISTS(entspricht_Strassenelement);
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY verallgemeinerter_Nullpunkt
ABSTRACT SUPERTYPE OF (ONEOF(Nullpunkt , GDF_Verbindungspunkt ));
--- Attribute :
--- Relationen :
INVERSE
    Beginn_von_GDF_Verbindungelem: SET [0: ?] OF GDF_Verbindungselement FOR beginnt_bei_verallg_Nullpunkt;
    Ende_von_GDF_Verbindungselem: SET [0: ?] OF GDF_Verbindungselement FOR endet_bei_verallg_Nullpunkt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Entwurfselement
ABSTRACT SUPERTYPE OF (ONEOF(Entwurfselement_Kreisbogen , Entwurfselement_Klothoide , Entwurfselement_Gerade ))
SUBTYPE OF (Streckenobjekt_stat);
--- Attribute :
    Richtungsw_Tangente_am_Anfang: OPTIONAL Winkel;
    beginnt_bei_Vermessungspunkt: INTEGER;
    endet_bei_Vermessungspunkt: INTEGER;
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Entwurfselement_Kreisbogen
SUBTYPE OF (Entwurfselement);
--- Attribute :
    Radius: Meter;
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Entwurfselement_Klothoide
SUBTYPE OF (Entwurfselement);
--- Attribute :
    Radius_am_Anfang: Meter;
    Radius_am_Ende: OPTIONAL Meter;
    Parameter: Meter;
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Entwurfselement_Gerade
SUBTYPE OF (Entwurfselement);
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Strassennummer = INTEGER;
WHERE
    maximal_vierstellig: { 0< SELF<=9999};
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Zusatzbuchstabe = STRING;
WHERE
    erlaubte_Buchstaben: { 'A'<=SELF<='Z'};
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE TK25_Blattnummer = INTEGER;
WHERE
    vierstellig: { 1<=SELF<=9999};
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE lfd_NK_Nummer = INTEGER;
WHERE
    dreistellig: { 1<=SELF<=999};
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Nullpunktkennung = STRING;
WHERE
    Buchstabe: {'A'<=SELF<='Z'} OR SELF=' ';
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<


FUNCTION Zusatzbuchstabe_oder_Leerzeichen(zb:Zusatzbuchstabe) : STRING(1);
      IF EXISTS(zb) THEN
            RETURN(zb);
      END_IF;
      RETURN(' ');
END_FUNCTION;

-- OKSTRA

END_SCHEMA; -- Strassennetz