SCHEMA Strassennetz;

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

REFERENCE FROM Bauwerke (Teilbauwerk);

REFERENCE FROM Strassenzustandsdaten (ZEB_Objekt);

REFERENCE FROM Strassenausstattungen (Strassenentwaesserung, Ausstattung_und_Anlagen);

REFERENCE FROM Verkehr (Strassenbeschreibung_verkehrl, Anzahl_Fahrstreifen, Beschraenkung_verkehrlich);

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 (Achselementpunkt, Querprofilpunkt, Trasse);

REFERENCE FROM Ausstattung (Schutz_und_Leiteinrichtungen, Fahrbahnmarkierungen, Beschilderung_Lichtsignalanl);

REFERENCE FROM Statische_Beschilderung (raeumlicher_Gueltigkeitsber, stat_verkehrsreg_Beschilderung, Position, stat_wegweisende_Beschilderung);

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

REFERENCE FROM Manuelle_Zaehlstelle (Erfassung_Gesamtverkehr);

REFERENCE FROM Historisierung (Teilabschnitt_IdNT, historisches_Objekt);

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

REFERENCE FROM Geometrieschema (Linienobjekt_Modell, Punktobjekt_Modell);

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 << - 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 << - VERSION >>

ENTITY Strasse
SUBTYPE OF (historisches_Objekt);
--- Attribute :
--- Relationen :
    hat_Strassenbezeichnung: Strassenbezeichnung;
    hat_Strassenknoten: SET [2: ?] OF Strasse_Netzknoten;
    hat_Abschnitt_oder_Ast: SET [1: ?] OF Abschnitt_oder_Ast;
    hat_BAB_Knotennummer: OPTIONAL SET [1: ?] OF BAB_Knotennummer;
    in_Verwaltungsbezirk: SET [1: ?] OF Verwaltungsbezirk;
INVERSE
    enthaelt_Block: SET [0: ?] OF Block FOR auf_Strasse;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - 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 << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - 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 << - 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 << - 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 << - VERSION >>

ENTITY Netzknoten
SUBTYPE OF (Punktobjekt_Modell, historisches_Objekt);
--- 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;
INVERSE
    in_Strassenknoten: SET [1: ?] OF Strasse_Netzknoten FOR hat_Netzknoten;
    hat_Nullpunkt: SET [1: ?] OF Nullpunkt FOR in_Netzknoten;
    Beginn_von: SET [0: ?] OF WW_Wirkungsbereiche FOR beginnt_bei_Netzknoten;
    Ende_von: SET [0: ?] OF WW_Wirkungsbereiche FOR endet_bei_Netzknoten;
    auf_Trasse: SET [0: ?] OF Trasse FOR hat_Netzknoten;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY BAB_Knotennummer
SUBTYPE OF (historisches_Objekt);
--- Attribute :
    Knotennummer: INTEGER;
    Buchstabe: OPTIONAL STRING(1);
--- Relationen :
INVERSE
    von_Netzknoten: SET [1: ?] OF Netzknoten FOR hat_BAB_Knotennummer;
    auf_Strasse: SET [1: ?] OF Strasse FOR hat_BAB_Knotennummer;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - 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 << - VERSION >>

ENTITY Abschnitt_oder_Ast
ABSTRACT SUPERTYPE OF (ONEOF(Abschnitt , Ast ))
SUBTYPE OF (Linienobjekt_Modell, historisches_Objekt);
--- Attribute :
    Laenge: OPTIONAL Meter;
    Stadium: OPTIONAL Stadium;
    Streckenart: OPTIONAL INTEGER;
    Verkehrsfreigabe: OPTIONAL Datum;
--- Relationen :
    beginnt_bei_NP: SET [1: ?] OF Nullpunkt;
    endet_bei_NP: SET [1: ?] OF Nullpunkt;
INVERSE
    gehoert_zu_Strasse: SET [1: ?] OF Strasse FOR hat_Abschnitt_oder_Ast;
    hat_Teilabschnitt: SET [0: ?] OF Teilabschnitt FOR auf_Abschnitt_oder_Ast;
    hat_Strassenpunkt: SET [0: ?] OF Strassenpunkt FOR auf_Abschnitt_oder_Ast;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - 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;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Nullpunkt
SUBTYPE OF (Punktobjekt_Modell, historisches_Objekt, verallgemeinerter_Nullpunkt);
--- Attribute :
    Zusatz: Nullpunktkennung;
    zentraler_Nullpunkt: OPTIONAL BOOLEAN;
--- Relationen :
    in_Netzknoten: SET [1: ?] OF Netzknoten;
INVERSE
    Beginn_von_Abschnitt_oder_Ast: SET [0: ?] OF Abschnitt_oder_Ast FOR beginnt_bei_NP;
    Ende_von_Abschnitt_oder_Ast: SET [0: ?] OF Abschnitt_oder_Ast FOR endet_bei_NP;
    verbindet_Verkehrl_Verknuepfg: SET [0: ?] OF Verkehrliche_Verknuepfung FOR ueber_Nullpunkt;
    hat_Nullpunktsort: SET [1: ?] OF Nullpunktsort FOR bei_Nullpunkt;
    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 << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Punktobjekt_stat
ABSTRACT SUPERTYPE OF (ONEOF(stat_wegweisende_Beschilderung , Position , stat_verkehrsreg_Beschilderung , Anordnung_des_Messsystems , oertliche_Zuordnung_SP , Wirkungsbereich_SP , GDF_Verbindungspunkt , Achselementpunkt , Querprofilpunkt ))
SUBTYPE OF (Punktobjekt);
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - 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 << - 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 << - VERSION >>

ENTITY Nullpunktsort
SUBTYPE OF (Strassenpunkt);
--- Attribute :
--- Relationen :
    bei_Nullpunkt: SET [1: ?] OF Nullpunkt;
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 << - 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 << - 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: NOT EXISTS(ist_Punktobjekt)OR NOT EXISTS(ist_Bereichsobjekt);
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - 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 << - 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 << - 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 << - VERSION >>

ENTITY Bereichsobjekt_stat
ABSTRACT SUPERTYPE OF (ONEOF(Teilbauwerk ))
SUBTYPE OF (Bereichsobjekt);
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - 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 << - 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;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - 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 << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - 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 << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - 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 ))
SUBTYPE OF (Streckenobjekt, historisches_Objekt);
--- Attribute :
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - 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 << - 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 << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - 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 << - 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 << - 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 << - VERSION >>

ENTITY Route
SUBTYPE OF (Teilnetzkomponente, Routenkomponente, historisches_Objekt);
--- Attribute :
--- Relationen :
    entlang_Routenkomponente: SET [1: ?] OF Routenkomponente;
INVERSE
    fuer_Teilbauwerk: SET [0: ?] OF Teilbauwerk FOR hat_Route;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Strassenelement
SUBTYPE OF (Teilnetzkomponente, Routenkomponente, historisches_Objekt, Linienobjekt_Modell);
--- Attribute :
    RDS_TMC_Code: OPTIONAL STRING(12);
--- Relationen :
    beginnt_bei_NPO: SET [1: ?] OF Nullpunktsort;
    endet_bei_NPO: SET [1: ?] OF 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;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Kilometrierung
SUPERTYPE OF (ONEOF(Betriebskilometer ))
SUBTYPE OF (Punktobjekt_hist);
--- Attribute :
    Kilometrierung: Kilometer;
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

ENTITY Betriebskilometer
SUBTYPE OF (Kilometrierung);
--- Attribute :
--- Relationen :
    in_Block: SET [1: ?] OF Block;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - 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 << - 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 << - 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 << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - 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 << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>

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

-- SCHEMA - OKSTRA - INDEX - VERSION << - VERSION >>


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

-- OKSTRA

END_SCHEMA; -- Strassennetz