SCHEMA Entwurf;

REFERENCE FROM Strassennetz (Knotenpunktsform, Netzknoten_abstrakt);

REFERENCE FROM Ingenieurbauwerke (Bauwerkseinzelheiten);

REFERENCE FROM Ausstattung (Schutz_und_Leiteinrichtungen, Fahrbahnmarkierungen, Beschilderung_Lichtsignalanl);

REFERENCE FROM Geometrieschema (Linienobjekt_Modell, Punktobjekt_Modell);

REFERENCE FROM Allgemeine_Objekte (Prozent, Stundenkilometer, Winkel, Groesse, Kilometer, Meter);

REFERENCE FROM Allgemeine_Geometrieobjekte (allgemeines_Flaechenobjekt, allgemeines_Linienobjekt, allgemeines_Punktobjekt, Dreieck);

REFERENCE FROM Kataster (ALKIS_Objekt_Flaeche, ALKIS_Objekt_Linie, ALKIS_Objekt_Punkt);

ENTITY Trasse
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
--- Relationen :
    hat_Netzknoten: OPTIONAL Netzknoten_abstrakt;
    hat_Achse: OPTIONAL SET [1: ?] OF Achse;
    hat_Entwurfsparameter: OPTIONAL SET [1: ?] OF Entwurfsparameter;
    hat_Laengsschnitt: OPTIONAL SET [1: ?] OF Laengsschnitt;
    hat_Trassenkoerper: OPTIONAL SET [1: ?] OF Trassenkoerper;
    hat_Sichtweiten: OPTIONAL SET [1: ?] OF Sichtweiten;
END_ENTITY;

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

ENTITY Achse
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
--- Relationen :
    hat_Achselement: LIST [1: ?] OF Achselement;
INVERSE
    gehoert_zu_Trasse: Trasse FOR hat_Achse;
    hat_Laengsschnitt: SET [0: 1] OF Laengsschnitt FOR gehoert_zu_Achse;
    hat_Trassenkoerper: SET [0: 1] OF Trassenkoerper FOR gehoert_zu_Achse;
    hat_Sichtweiten: SET [0: ?] OF Sichtweiten FOR gehoert_zu_Achse;
    von_Kreuzungs_o_Einmuend_plang: SET [0: ?] OF Kreuzungs_o_Einmuendungsplang FOR hat_Achse;
    von_Abstand_Achse_Achse: SET [0: ?] OF Abstand_Achse_Achse FOR hat_zweite_Achse;
END_ENTITY;

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

ENTITY Achselement
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
    Elementtyp: Achselementtyp;
    Anfangsstation_rechnerisch: Meter;
    Verwaltungsstation_Betriebskm: Kilometer;
    Laenge: Meter;
    Richtung: Winkel;
    Parameter: Groesse;
    Radius_zu_Beginn: Meter;
    Radius_am_Ende: Meter;
--- Relationen :
    beginnt_bei_Achshauptpunkt: Achshauptpunkt;
    endet_bei_Achshauptpunkt: Achshauptpunkt;
INVERSE
    gehoert_zu_Achse: SET [0: 1] OF Achse FOR hat_Achselement;
END_ENTITY;

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

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


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

   (1,'Gerade')
   (2,'Kreisbogen, tangential')
   (12,'Klothoide')

*)

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

ENTITY Achshauptpunkt
SUBTYPE OF (Punktobjekt_Modell);
--- Attribute :
--- Relationen :
INVERSE
    Beginn_von_Achselement: SET [0: ?] OF Achselement FOR beginnt_bei_Achshauptpunkt;
    Ende_von_Achselement: SET [0: ?] OF Achselement FOR endet_bei_Achshauptpunkt;
    zu_Kreuzungs_o_Einmuendplanung: SET [0: ?] OF Kreuzungs_o_Einmuendungsplang FOR hat_Achshauptpunkt;
END_ENTITY;

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

ENTITY Kreuzungs_o_Einmuendungsplang
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
    Netzknotennummer: STRING(7);
    Knotenpunktsform: Knotenpunktsform;
--- Relationen :
    hat_Achse: SET [1: ?] OF Achse;
    hat_DGM: OPTIONAL DGM;
    hat_Achshauptpunkt: Achshauptpunkt;
END_ENTITY;

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

ENTITY DGM
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
--- Relationen :
    hat_Dreiecke: OPTIONAL SET [1: ?] OF Dreieck;
INVERSE
    gehoert_zu_Kreuz_o_Einmplang: SET [0: ?] OF Kreuzungs_o_Einmuendungsplang FOR hat_DGM;
END_ENTITY;

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

ENTITY Laengsschnitt
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
--- Relationen :
    gehoert_zu_Achse: Achse;
    hat_kreuzende_Bauw_o_baul_Anl: OPTIONAL SET [1: ?] OF kreuzende_Bauwerke_o_baul_Anl;
    hat_Gelaendehorizonte: OPTIONAL SET [1: ?] OF Gelaendehorizonte;
    hat_Gradiente: OPTIONAL SET [1: ?] OF Gradiente;
INVERSE
    gehoert_zu_Trasse: Trasse FOR hat_Laengsschnitt;
END_ENTITY;

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

ENTITY Gelaendehorizonte
SUBTYPE OF (Laengsschnittlinie);
--- Attribute :
--- Relationen :
INVERSE
    gehoert_zu_Laengsschnitt: Laengsschnitt FOR hat_Gelaendehorizonte;
END_ENTITY;

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

ENTITY Gradiente
SUBTYPE OF (Laengsschnittlinie);
--- Attribute :
--- Relationen :
INVERSE
    gehoert_zu_Laengsschnitt: Laengsschnitt FOR hat_Gradiente;
    zu_Hoehe_Gradiente: SET [0: ?] OF Hoehe_Gradiente FOR hat_Gradiente;
END_ENTITY;

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

ENTITY kreuzende_Bauwerke_o_baul_Anl
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
--- Relationen :
    hat_Tunnel_Kanal_Strasse_etc: OPTIONAL Tunnel_Kanal_Strasse_Durchlass;
    hat_Schnittgeometrie: SET [1: ?] OF Schnittgeometrie;
INVERSE
    gehoert_zu_Laengsschnitt: SET [0: ?] OF Laengsschnitt FOR hat_kreuzende_Bauw_o_baul_Anl;
END_ENTITY;

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

ENTITY Tunnel_Kanal_Strasse_Durchlass;
--- Attribute :
--- Relationen :
INVERSE
    von_kreuz_Bauwerken_o_baul_Anl: SET [0: ?] OF kreuzende_Bauwerke_o_baul_Anl FOR hat_Tunnel_Kanal_Strasse_etc;
    hat_Schnittgeometrie: SET [0: ?] OF Schnittgeometrie FOR abgel_von_Tunnel_Kanal_Str_etc;
END_ENTITY;

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

ENTITY Schnittgeometrie;
--- Attribute :
    Schnittstation: Meter;
    Schnitthoehe: Meter;
    Schnittwinkel_horizontal: Winkel;
    Laengsneigung_kreuzend_Bauwerk: Winkel;
--- Relationen :
    abgel_von_Tunnel_Kanal_Str_etc: Tunnel_Kanal_Strasse_Durchlass;
    hat_Schnittpolygone: SET [1: ?] OF Schnittpolygone;
    hat_Mindestabstandspolygone: OPTIONAL SET [1: ?] OF Mindestabstandspolygon;
    hat_Maximalabstandspolygone: OPTIONAL SET [1: ?] OF Maximalabstandspolygon;
INVERSE
    geh_zu_kreuz_Bauw_o_baul_Anl: SET [0: ?] OF kreuzende_Bauwerke_o_baul_Anl FOR hat_Schnittgeometrie;
END_ENTITY;

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

ENTITY Schnittpolygone
SUBTYPE OF (Polygon);
--- Attribute :
--- Relationen :
INVERSE
    gehoert_zu_Schnittgeometrie: SET [1: ?] OF Schnittgeometrie FOR hat_Schnittpolygone;
END_ENTITY;

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

ENTITY Mindestabstandspolygon
SUBTYPE OF (Polygon);
--- Attribute :
--- Relationen :
INVERSE
    gehoert_zu_Schnittgeometrie: SET [1: ?] OF Schnittgeometrie FOR hat_Mindestabstandspolygone;
END_ENTITY;

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

ENTITY Maximalabstandspolygon
SUBTYPE OF (Polygon);
--- Attribute :
--- Relationen :
INVERSE
    gehoert_zu_Schnittgeometrie: SET [1: ?] OF Schnittgeometrie FOR hat_Maximalabstandspolygone;
END_ENTITY;

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

ENTITY Polygon
ABSTRACT SUPERTYPE OF (ONEOF(Schnittpolygone , Maximalabstandspolygon , Mindestabstandspolygon ));
--- Attribute :
--- Relationen :
    hat_QP_Punkte: LIST [1: ?] OF QP_Punkte;
END_ENTITY;

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

ENTITY Laengsschnittlinie
SUPERTYPE OF (ONEOF(Gelaendehorizonte , Gradiente ))
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
    abs_Abstand: OPTIONAL REAL(16);
--- Relationen :
    hat_LS_Koor: LIST [1: ?] OF LS_Koor;
    hat_Breite: OPTIONAL SET [1: ?] OF Breite;
WHERE
    Bezug_eindeutig: NOT EXISTS(abs_Abstand)OR NOT EXISTS(hat_Breite);
END_ENTITY;

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

ENTITY LS_Koor
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
    Station: Meter;
    Hoehe: Meter;
--- Relationen :
    folgt_auf_LS_Koor: OPTIONAL Punktfolge;
INVERSE
    gehoert_zu_Laengsschnittlinie: SET [0: ?] OF Laengsschnittlinie FOR hat_LS_Koor;
END_ENTITY;

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

ENTITY Punktfolge;
--- Attribute :
--- Relationen :
    hat_Tangente_Gerade: Tangente_Gerade;
INVERSE
    LS_Koor_Nachfolger: LS_Koor FOR folgt_auf_LS_Koor;
END_ENTITY;

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

ENTITY Tangentenfolge;
--- Attribute :
--- Relationen :
    hat_Ausrundung: OPTIONAL Ausrundung;
INVERSE
    Tangente_Gerade_Nachfolger: Tangente_Gerade FOR folgt_auf_Tangente_Gerade;
END_ENTITY;

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

ENTITY Ausrundung;
--- Attribute :
    Ausrundungstyp: Ausrundungstyp;
    Ausrundungsparameter: Groesse;
--- Relationen :
INVERSE
    gehoert_zu_Tangentenfolge: SET [0: 1] OF Tangentenfolge FOR hat_Ausrundung;
END_ENTITY;

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

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


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

   (13,'Parabel 2. Grades')
   (14,'Parabel 3. Grades mit langem Teil '+
    'vor TS')
   (15,'Parabel 3. Grades mit langem Teil '+
    'hinter TS')

*)

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

ENTITY Tangente_Gerade;
--- Attribute :
--- Relationen :
    folgt_auf_Tangente_Gerade: OPTIONAL Tangentenfolge;
INVERSE
    gehoert_zu_Punktfolge: SET [0: 1] OF Punktfolge FOR hat_Tangente_Gerade;
END_ENTITY;

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

ENTITY Volumen_aus_QP
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
    Station_1: Meter;
    Station_2: Meter;
--- Relationen :
    wird_begrenzt_von_Profillinie: Profillinien;
INVERSE
    von_Trassenkoerper: SET [0: ?] OF Trassenkoerper FOR hat_Volumen;
END_ENTITY;

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

ENTITY Oberflaeche
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
    Art_der_Oberflaeche: INTEGER;
    Station_1: Meter;
    Station_2: Meter;
--- Relationen :
    liegt_auf_Profillinie: Profillinien;
    beginnt_bei_QP_Punkt: QP_Punkte;
    endet_bei_QP_Punkt: QP_Punkte;
INVERSE
    von_Trassenkoerper: SET [0: ?] OF Trassenkoerper FOR hat_Oberflaeche;
END_ENTITY;

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

ENTITY Trassenkoerper;
--- Attribute :
--- Relationen :
    hat_Volumen: OPTIONAL SET [1: ?] OF Volumen_aus_QP;
    hat_Oberflaeche: OPTIONAL SET [1: ?] OF Oberflaeche;
    hat_Deckenbuch: OPTIONAL Deckenbuch;
    hat_Querprofil: OPTIONAL LIST [1: ?] OF Querprofil;
    hat_Ausgangsdaten: OPTIONAL SET [1: ?] OF Ausgangsdaten;
    hat_Bildungsgesetze: OPTIONAL SET [1: ?] OF Bildungsgesetze;
    gehoert_zu_Achse: Achse;
INVERSE
    gehoert_zu_Trasse: Trasse FOR hat_Trassenkoerper;
END_ENTITY;

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

ENTITY Querprofil;
--- Attribute :
    Station: Meter;
--- Relationen :
    von_Ausgangsdaten_Bildungsges: OPTIONAL SET [1: ?] OF Ausgangsdaten_Bildungsgesetze;
    hat_Schnittebene: OPTIONAL Schnittebene;
    hat_Profillinien: SET [1: ?] OF Profillinien;
    hat_QP_Punkte: OPTIONAL SET [1: ?] OF QP_Punkte;
INVERSE
    gehoert_zu_Trassenkoerper: SET [0: 1] OF Trassenkoerper FOR hat_Querprofil;
    von_Ausgangsdaten: SET [0: ?] OF Ausgangsdaten FOR hat_Querprofil;
END_ENTITY;

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

ENTITY Bildungsgesetze;
--- Attribute :
--- Relationen :
    hat_Ausgangsdaten_Bildungsges: SET [1: ?] OF Ausgangsdaten_Bildungsgesetze;
INVERSE
    von_Trassenkoerper: SET [0: ?] OF Trassenkoerper FOR hat_Bildungsgesetze;
END_ENTITY;

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

ENTITY Ausgangsdaten_Bildungsgesetze;
--- Attribute :
--- Relationen :
INVERSE
    Bildungsgesetze: Bildungsgesetze FOR hat_Ausgangsdaten_Bildungsges;
    Ausgangsdaten: Ausgangsdaten FOR mit_Bildungsgesetzen;
    hat_Querprofil: SET [1: ?] OF Querprofil FOR von_Ausgangsdaten_Bildungsges;
END_ENTITY;

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

ENTITY Ausgangsdaten;
--- Attribute :
--- Relationen :
    mit_Bildungsgesetzen: OPTIONAL SET [1: ?] OF Ausgangsdaten_Bildungsgesetze;
    hat_Querprofil: OPTIONAL SET [1: ?] OF Querprofil;
    hat_Breite: OPTIONAL SET [1: ?] OF Breite;
    hat_Querneigung: OPTIONAL SET [1: ?] OF Querneigung;
    hat_Hoehenzuege: OPTIONAL SET [1: ?] OF Hoehenzuege;
    hat_Achsstationswerte: OPTIONAL SET [1: ?] OF Achsstationswerte;
INVERSE
    von_Trassenkoerper: SET [0: ?] OF Trassenkoerper FOR hat_Ausgangsdaten;
END_ENTITY;

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

ENTITY QP_Punkte
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
    Abstand_zur_Achse: REAL(16);
    Hoehe_NN: REAL(16);
--- Relationen :
INVERSE
    gehoert_zu_Profillinien: SET [0: ?] OF Profillinien FOR hat_QP_Punkte;
    gehoert_zu_Querprofil: SET [0: ?] OF Querprofil FOR hat_QP_Punkte;
    Beginn_von_Oberflaeche: SET [0: ?] OF Oberflaeche FOR beginnt_bei_QP_Punkt;
    Ende_von_Oberflaeche: SET [0: ?] OF Oberflaeche FOR endet_bei_QP_Punkt;
    Beginn_von_Spur_aus_Querprof: SET [0: ?] OF Spur_aus_Querprofilen FOR beginnt_bei_QP_Punkt;
    Ende_von_Spur_aus_Querprof: SET [0: ?] OF Spur_aus_Querprofilen FOR endet_bei_QP_Punkt;
    gehoert_zu_Polygon: SET [0: ?] OF Polygon FOR hat_QP_Punkte;
END_ENTITY;

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

ENTITY Profillinien
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
--- Relationen :
    hat_QP_Punkte: LIST [1: ?] OF QP_Punkte;
INVERSE
    gehoert_zu_Querprofil: SET [0: ?] OF Querprofil FOR hat_Profillinien;
    gehoert_zu_Oberflaeche: SET [0: ?] OF Oberflaeche FOR liegt_auf_Profillinie;
    begrenzt_Volumen_aus_QP: SET [0: 4] OF Volumen_aus_QP FOR wird_begrenzt_von_Profillinie;
    von_Spur_aus_Querprofilen: SET [0: ?] OF Spur_aus_Querprofilen FOR liegt_auf_Profillinie;
END_ENTITY;

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

ENTITY Schnittebene;
--- Attribute :
--- Relationen :
    hat_SNT_Punkte: OPTIONAL LIST [1: ?] OF SNT_Punkt;
INVERSE
    gehoert_zu_Querprofil: SET [1: ?] OF Querprofil FOR hat_Schnittebene;
END_ENTITY;

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

ENTITY SNT_Punkt;
--- Attribute :
    Abstand: Meter;
    Richtungsaenderung: REAL(16);
    korrespondierende_Achse: OPTIONAL STRING(255);
    Naeherungsstation: OPTIONAL Meter;
--- Relationen :
INVERSE
    gehoert_zu_Schnittebene: SET [1: ?] OF Schnittebene FOR hat_SNT_Punkte;
END_ENTITY;

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

ENTITY Deckenbuch
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
    Station_1: Meter;
    Station_2: Meter;
--- Relationen :
    hat_Spur_aus_Ausgangsdaten: OPTIONAL LIST [1: ?] OF Spur_aus_Ausgangsdaten;
    hat_Spur_aus_Querprofilen: OPTIONAL LIST [1: ?] OF Spur_aus_Querprofilen;
INVERSE
    gehoert_zu_Trassenkoerper: SET [1: ?] OF Trassenkoerper FOR hat_Deckenbuch;
WHERE
    Ausgangsdaten_oder_Querprofile: EXISTS(hat_Spur_aus_Ausgangsdaten)XOR EXISTS(hat_Spur_aus_Querprofilen);
END_ENTITY;

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

ENTITY Spur_aus_Ausgangsdaten
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
--- Relationen :
    hat_Querneigung: OPTIONAL Querneigung;
    hat_Breite: Breite;
    hat_Hoehenzuege: OPTIONAL Hoehenzuege;
    hat_Hochbord: OPTIONAL Hochbord;
INVERSE
    von_Deckenbuch: SET [1: ?] OF Deckenbuch FOR hat_Spur_aus_Ausgangsdaten;
    zu_BR_Punkt: SET [0: ?] OF BR_Punkt FOR bez_auf_Spur_aus_Ausgangsdaten;
    ist_Fahrspur_zu: SET [0: ?] OF Sichtweiten FOR hat_Fahrspur;
    ist_Gegenspur_zu: SET [0: ?] OF Sichtweiten FOR hat_Gegenspur;
END_ENTITY;

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

ENTITY Spur_aus_Querprofilen
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
--- Relationen :
    liegt_auf_Profillinie: Profillinien;
    beginnt_bei_QP_Punkt: QP_Punkte;
    endet_bei_QP_Punkt: QP_Punkte;
INVERSE
    von_Deckenbuch: SET [1: ?] OF Deckenbuch FOR hat_Spur_aus_Querprofilen;
END_ENTITY;

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

ENTITY Breite
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
--- Relationen :
    hat_BR_Punkt: LIST [1: ?] OF BR_Punkt;
INVERSE
    von_Ausgangsdaten: SET [0: ?] OF Ausgangsdaten FOR hat_Breite;
    von_Spur_aus_Ausgangsdaten: SET [0: ?] OF Spur_aus_Ausgangsdaten FOR hat_Breite;
    gehoert_zu_Laengsschnittlinie: SET [0: ?] OF Laengsschnittlinie FOR hat_Breite;
END_ENTITY;

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

ENTITY BR_Punktfolge;
--- Attribute :
--- Relationen :
    hat_Aufweitg_Verbreit_Verbind: Aufweitung_Verbreit_Verbind;
INVERSE
    vor_BR_Punkt: BR_Punkt FOR folgt_auf_BR_Punkt;
END_ENTITY;

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

ENTITY BR_Punkt;
--- Attribute :
    Breite: OPTIONAL Meter;
    Station: Meter;
--- Relationen :
    hat_Abstand_Achse_Achse: OPTIONAL Abstand_Achse_Achse;
    hat_Abstand_Achse_Linie: OPTIONAL Abstand_Achse_Linie;
    folgt_auf_BR_Punkt: OPTIONAL BR_Punktfolge;
    bez_auf_Spur_aus_Ausgangsdaten: OPTIONAL Spur_aus_Ausgangsdaten;
INVERSE
    gehoert_zu_Breite: Breite FOR hat_BR_Punkt;
WHERE
    genau_eine_Abstandsangabe: (EXISTS(Breite)AND NOT EXISTS(hat_Abstand_Achse_Achse)AND NOT EXISTS(hat_Abstand_Achse_Linie))OR(EXISTS(hat_Abstand_Achse_Achse)AND NOT EXISTS(Breite)AND NOT EXISTS(hat_Abstand_Achse_Linie))OR(EXISTS(hat_Abstand_Achse_Linie)AND NOT EXISTS(Breite)AND NOT EXISTS(hat_Abstand_Achse_Achse));
END_ENTITY;

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

ENTITY Aufweitung_Verbreit_Verbind;
--- Attribute :
    Art_der_Verziehung: Art_der_Verziehung;
    Tangentenlaenge: OPTIONAL Meter;
--- Relationen :
INVERSE
    gehoert_zu_Breite_BR_Punkt: SET [1: ?] OF BR_Punktfolge FOR hat_Aufweitg_Verbreit_Verbind;
END_ENTITY;

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

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


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

   (1,'Parabelfolge 2. Grades')
   (2,'Bogenfolge')
   (3,'Parabelfolge 2. Grades / Zwischengerade')
   (4,'Gerade')
   (5,'Bezug auf Referenzobjekt')

*)

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

ENTITY Abstand_Achse_Achse;
--- Attribute :
    Naeherungsstation_auf_zw_Achse: Meter;
--- Relationen :
    hat_Lage_der_Knicklinie: Lage_der_Knicklinie;
    hat_zweite_Achse: Achse;
INVERSE
    von_BR_Punkt: SET [0: ?] OF BR_Punkt FOR hat_Abstand_Achse_Achse;
END_ENTITY;

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

ENTITY Abstand_Achse_Linie
SUBTYPE OF (Linienobjekt_Modell);
--- Attribute :
--- Relationen :
INVERSE
    von_BR_Punkt: SET [0: ?] OF BR_Punkt FOR hat_Abstand_Achse_Linie;
END_ENTITY;

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

ENTITY Lage_der_Knicklinie;
--- Attribute :
    Typ_der_Knicklinie: Typ_der_Knicklinie;
    Breite: OPTIONAL Meter;
--- Relationen :
INVERSE
    von_Abstand_Achse_Achse: SET [0: ?] OF Abstand_Achse_Achse FOR hat_Lage_der_Knicklinie;
END_ENTITY;

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

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


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

   (1,'Parallele / Breite zur zweiten Achse')
   (2,'Parallele / Breite zur Achse')
   (3,'Mittig mit Abstand zur Knicklinie')

*)

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

ENTITY Hoehenzuege
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
--- Relationen :
    hat_HZ_Punkte: LIST [1: ?] OF HZ_Punkt;
INVERSE
    von_Ausgangsdaten: SET [0: ?] OF Ausgangsdaten FOR hat_Hoehenzuege;
    von_Spur_aus_Ausgangsdaten: SET [0: ?] OF Spur_aus_Ausgangsdaten FOR hat_Hoehenzuege;
END_ENTITY;

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

ENTITY HZ_Punkt;
--- Attribute :
    Station: Meter;
    Hoehe_fest: OPTIONAL Meter;
--- Relationen :
    hat_Hoehe_Gradiente: OPTIONAL Hoehe_Gradiente;
    hat_Hoehe_Linie: OPTIONAL Hoehe_Linie;
INVERSE
    gehoert_zu_Hoehenzug: Hoehenzuege FOR hat_HZ_Punkte;
WHERE
    Bezug_eindeutig: (EXISTS(Hoehe_fest)AND NOT EXISTS(hat_Hoehe_Gradiente)AND NOT EXISTS(hat_Hoehe_Linie))OR(EXISTS(hat_Hoehe_Gradiente)AND NOT EXISTS(Hoehe_fest)AND NOT EXISTS(hat_Hoehe_Linie))OR(EXISTS(hat_Hoehe_Linie)AND NOT EXISTS(Hoehe_fest)AND NOT EXISTS(hat_Hoehe_Gradiente));
END_ENTITY;

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

ENTITY Hoehe_Gradiente;
--- Attribute :
    Naeherungsstation_Gradiente: Meter;
--- Relationen :
    hat_Gradiente: Gradiente;
INVERSE
    von_HZ_Punkt: SET [0: ?] OF HZ_Punkt FOR hat_Hoehe_Gradiente;
END_ENTITY;

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

ENTITY Hoehe_Linie
SUBTYPE OF (Linienobjekt_Modell);
--- Attribute :
--- Relationen :
INVERSE
    von_HZ_Punkt: SET [0: ?] OF HZ_Punkt FOR hat_Hoehe_Linie;
END_ENTITY;

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

ENTITY Querneigung
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
--- Relationen :
    hat_QN_Punkte: LIST [1: ?] OF QN_Punkt;
INVERSE
    von_Ausgangsdaten: SET [0: ?] OF Ausgangsdaten FOR hat_Querneigung;
    von_Spur_aus_Ausgangsdaten: SET [0: ?] OF Spur_aus_Ausgangsdaten FOR hat_Querneigung;
END_ENTITY;

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

ENTITY Querneigungswechsel;
--- Attribute :
    Verziehungsform: Verziehungsform;
--- Relationen :
INVERSE
    vor_QN_Punkt: QN_Punkt FOR folgt_auf_QN_Punkt;
END_ENTITY;

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

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


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

   (0,'reserviert')
   (1,'normale Verziehung')
   (2,'Verziehung mit Gratlinie '+
    '(Schrägverwindung)')

*)

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

ENTITY QN_Punkt;
--- Attribute :
    Station: Meter;
    Querneigung: Prozent;
    automatische_Berechnung: OPTIONAL BOOLEAN;
--- Relationen :
    folgt_auf_QN_Punkt: OPTIONAL Querneigungswechsel;
INVERSE
    gehoert_zu_Querneigung: Querneigung FOR hat_QN_Punkte;
END_ENTITY;

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

ENTITY Hochbord
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
--- Relationen :
    hat_HB_Punkte: LIST [1: ?] OF HB_Punkt;
    hat_HB_Neigung: OPTIONAL SET [1: ?] OF HB_Neigung;
INVERSE
    von_Spur_aus_Ausgangsdaten: SET [0: ?] OF Spur_aus_Ausgangsdaten FOR hat_Hochbord;
END_ENTITY;

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

ENTITY HB_Punkt;
--- Attribute :
    Station: Meter;
    Differenzhoehe: Meter;
--- Relationen :
INVERSE
    gehoert_zu_Hochbord: Hochbord FOR hat_HB_Punkte;
END_ENTITY;

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

ENTITY HB_Neigung;
--- Attribute :
    Station: Meter;
    Neigungswinkel: Groesse;
--- Relationen :
INVERSE
    zu_Hochbord: SET [0: ?] OF Hochbord FOR hat_HB_Neigung;
END_ENTITY;

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

ENTITY Achsstationswerte
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
--- Relationen :
    hat_AW_Koor: LIST [1: ?] OF AW_Koor;
INVERSE
    von_Ausgangsdaten: SET [0: ?] OF Ausgangsdaten FOR hat_Achsstationswerte;
END_ENTITY;

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

ENTITY AW_Koor;
--- Attribute :
    Station: Meter;
    Character_Kennwert: OPTIONAL STRING;
    Integer_Kennwert: OPTIONAL INTEGER;
    Real_Kennwert: OPTIONAL REAL;
--- Relationen :
INVERSE
    gehoert_zu_Achsstationswerten: SET [0: ?] OF Achsstationswerte FOR hat_AW_Koor;
WHERE
    nur_ein_Kennwert: (EXISTS(Character_Kennwert)AND NOT EXISTS(Integer_Kennwert)AND NOT EXISTS(Real_Kennwert))OR(EXISTS(Integer_Kennwert)AND NOT EXISTS(Character_Kennwert)AND NOT EXISTS(Real_Kennwert))OR(EXISTS(Real_Kennwert)AND NOT EXISTS(Character_Kennwert)AND NOT EXISTS(Integer_Kennwert));
END_ENTITY;

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

ENTITY Entwurfsparameter;
--- Attribute :
    Strassenkategorie: OPTIONAL STRING(255);
    Verkehrsbelastung: OPTIONAL INTEGER;
    Dokumentenverweis: OPTIONAL STRING(255);
    Regelquerschnitt: OPTIONAL STRING(255);
--- Relationen :
    hat_Geschwindigkeitsband: OPTIONAL SET [1: ?] OF Geschwindigkeitsband;
INVERSE
    gehoert_zu_Trasse: Trasse FOR hat_Entwurfsparameter;
END_ENTITY;

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

ENTITY Geschwindigkeitsband
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
--- Relationen :
    hat_V_Koor: LIST [1: ?] OF V_Koor;
INVERSE
    von_Entwurfsparameter: SET [0: ?] OF Entwurfsparameter FOR hat_Geschwindigkeitsband;
END_ENTITY;

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

ENTITY V_Koor;
--- Attribute :
    Station: Meter;
    Geschwindigkeit: Stundenkilometer;
--- Relationen :
INVERSE
    gehoert_zu_Geschwindigkeitsbd: SET [0: ?] OF Geschwindigkeitsband FOR hat_V_Koor;
END_ENTITY;

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

ENTITY Sichtweiten
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
    Sichtweite: REAL(16);
--- Relationen :
    gehoert_zu_Achse: Achse;
    hat_SW_Koor: LIST [1: ?] OF SW_Koor;
    hat_Fahrspur: OPTIONAL Spur_aus_Ausgangsdaten;
    hat_Gegenspur: OPTIONAL Spur_aus_Ausgangsdaten;
INVERSE
    gehoert_zu_Trasse: Trasse FOR hat_Sichtweiten;
END_ENTITY;

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

ENTITY SW_Koor;
--- Attribute :
    Station: Meter;
    Sichtweite: Meter;
--- Relationen :
INVERSE
    von_Sichtweite: SET [0: ?] OF Sichtweiten FOR hat_SW_Koor;
END_ENTITY;

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

ENTITY allgemeine_Eigenschaften
ABSTRACT SUPERTYPE OF (ONEOF(Beschilderung_Lichtsignalanl , Fahrbahnmarkierungen , Schutz_und_Leiteinrichtungen , Bauwerkseinzelheiten , Trasse , Achse , Achselement , Kreuzungs_o_Einmuendungsplang , Laengsschnitt , kreuzende_Bauwerke_o_baul_Anl , Laengsschnittlinie , LS_Koor , Hochbord , Hoehenzuege , Profillinien , QP_Punkte , Volumen_aus_QP , DGM , Oberflaeche , Deckenbuch , Spur_aus_Ausgangsdaten , Spur_aus_Querprofilen , Breite , Querneigung , Achsstationswerte , Geschwindigkeitsband , Sichtweiten , allgemeines_Punktobjekt , allgemeines_Linienobjekt , allgemeines_Flaechenobjekt , ALKIS_Objekt_Punkt , ALKIS_Objekt_Linie , ALKIS_Objekt_Flaeche ));
--- Attribute :
    Bezeichnung: OPTIONAL STRING;
    fachliche_Bedeutung: STRING;
    Informationstext: OPTIONAL SET [1: ?] OF STRING;
--- Relationen :
END_ENTITY;

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

END_SCHEMA; -- Entwurf