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 (Anzahl_zweistellig, Prozent, Stundenkilometer, Winkel, Groesse, Kilometer, Meter);

REFERENCE FROM Allgemeine_Geometrieobjekte (Boeschungsschraffen, 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 <<

ENTITY Achse
SUBTYPE OF (allgemeine_Eigenschaften, Ausgangsdaten_QP);
--- 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;
    hat_Entwurfsparameter: SET [0: 1] OF Entwurfsparameter FOR gehoert_zu_Achse;
END_ENTITY;

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

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

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

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

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

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

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

-- SCHEMA - OKSTRA - INDEX - 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;
    zu_Kreuzungs_o_Einmuendungspl: SET [0: ?] OF Kreuzungs_o_Einmuendungsplang FOR hat_Gradiente;
END_ENTITY;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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;
    gehoert_zu_Achse: Achse;
INVERSE
    gehoert_zu_Trasse: Trasse FOR hat_Trassenkoerper;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY dynamisches_Querprofil;
--- Attribute :
--- Relationen :
    hat_Zuordnung_Ausgangsdaten: OPTIONAL SET [1: ?] OF Zuordnung_Ausgangsdaten;
    hat_generellen_RQ_Code: RQ_Code;
    hat_lokalen_RQ_Code: OPTIONAL LIST [1: ?] OF RQ_Code;
    zu_Querprofil: Querprofil;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY RQ_Code;
--- Attribute :
    RQ_Aufruf: STRING;
--- Relationen :
    hat_RQ_Code_Modul: SET [1: ?] OF RQ_Code_Modul;
INVERSE
    ist_genereller_RQ_Code: SET [0: ?] OF dynamisches_Querprofil FOR hat_generellen_RQ_Code;
    ist_lokaler_RQ_Code: SET [0: ?] OF dynamisches_Querprofil FOR hat_lokalen_RQ_Code;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY RQ_Code_Modul;
--- Attribute :
    RQ_Modulname: STRING;
    Code: STRING;
--- Relationen :
INVERSE
    zu_RQ_Code: SET [0: ?] OF RQ_Code FOR hat_RQ_Code_Modul;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Zuordnung_Ausgangsdaten;
--- Attribute :
    Zuordnungsname: STRING;
--- Relationen :
    hat_Ausgangsdaten_links_beide: Ausgangsdaten_QP;
    hat_Ausgangsdaten_rechts: OPTIONAL Ausgangsdaten_QP;
INVERSE
    zu_dynamischem_Querprofil: SET [0: ?] OF dynamisches_Querprofil FOR hat_Zuordnung_Ausgangsdaten;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Ausgangsdaten_QP
ABSTRACT SUPERTYPE OF (ONEOF(Abstand_Achse_Achse , Achse , Achsstationswerte , Breite , Hochbord , Hoehenzuege , Profillinien , Querneigung ));
--- Attribute :
--- Relationen :
INVERSE
    in_Zuordnung_links_beide: SET [0: ?] OF Zuordnung_Ausgangsdaten FOR hat_Ausgangsdaten_links_beide;
    in_Zuordnung_rechts: SET [0: ?] OF Zuordnung_Ausgangsdaten FOR hat_Ausgangsdaten_rechts;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Querprofil;
--- Attribute :
    Station: Meter;
--- Relationen :
    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;
    hat_dynamisches_Querprofil: SET [0: ?] OF dynamisches_Querprofil FOR zu_Querprofil;
END_ENTITY;

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

ENTITY Profillinien
SUBTYPE OF (allgemeine_Eigenschaften, Ausgangsdaten_QP);
--- Attribute :
    Horizont_Nummer: OPTIONAL Anzahl_zweistellig;
    Art: Art_des_Horizonts;
--- 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 <<

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


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

   (66,'Horizont')
   (54,'geschlossene Linie')

*)

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

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

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

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

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

ENTITY Breite
SUBTYPE OF (allgemeine_Eigenschaften, Ausgangsdaten_QP);
--- Attribute :
--- Relationen :
    hat_BR_Punkt: LIST [1: ?] OF BR_Punkt;
INVERSE
    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 <<

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

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

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

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

ENTITY Abstand_Achse_Achse
SUBTYPE OF (Ausgangsdaten_QP);
--- 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 <<

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

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

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

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

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

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

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

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

-- SCHEMA - OKSTRA - INDEX - VERSION <<

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

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

ENTITY QN_Punkt;
--- Attribute :
    Station: Meter;
    Querneigung: OPTIONAL Prozent;
    automatische_Berechnung: OPTIONAL BOOLEAN;
--- Relationen :
    folgt_auf_QN_Punkt: OPTIONAL Querneigungswechsel;
INVERSE
    gehoert_zu_Querneigung: Querneigung FOR hat_QN_Punkte;
WHERE
    entweder_Quern_oder_autom: (EXISTS(Querneigung)XOR EXISTS(automatische_Berechnung));
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Hochbord
SUBTYPE OF (allgemeine_Eigenschaften, Ausgangsdaten_QP);
--- 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 <<

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

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

ENTITY Achsstationswerte
SUBTYPE OF (allgemeine_Eigenschaften, Ausgangsdaten_QP);
--- Attribute :
--- Relationen :
    hat_AW_Koor: LIST [1: ?] OF AW_Koor;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY AW_Koor;
--- Attribute :
    Station: Meter;
    Character_Kennwert: OPTIONAL STRING;
    Integer_Kennwert: OPTIONAL INTEGER;
    Real_Kennwert: OPTIONAL REAL;
    Boolean_Kennwert: OPTIONAL BOOLEAN;
--- 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)AND NOT EXISTS(Boolean_Kennwert))OR(EXISTS(Integer_Kennwert)AND NOT EXISTS(Character_Kennwert)AND NOT EXISTS(Real_Kennwert)AND NOT EXISTS(Boolean_Kennwert))OR(EXISTS(Real_Kennwert)AND NOT EXISTS(Character_Kennwert)AND NOT EXISTS(Integer_Kennwert)AND NOT EXISTS(Boolean_Kennwert))OR(EXISTS(Boolean_Kennwert)AND NOT EXISTS(Character_Kennwert)AND NOT EXISTS(Integer_Kennwert)AND NOT EXISTS(Real_Kennwert));
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

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

-- SCHEMA - OKSTRA - INDEX - VERSION <<

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


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

   (11,'A-I')
   (12,'A-II')
   (13,'A-III')
   (14,'A-IV')
   (15,'A-V')
   (16,'A-VI')
   (21,'B-I')
   (22,'B-II')
   (23,'B-III')
   (24,'B-IV')
   (31,'C-I')
   (32,'C-II')
   (33,'C-III')
   (34,'C-IV')
   (42,'D-II')
   (43,'D-III')
   (44,'D-IV')
   (45,'D-V')
   (53,'E-III')
   (54,'E-IV')
   (55,'E-V')
   (56,'E-VI')
   (99,'Sonstiges')

*)

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

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

ENTITY Sichtweiten
SUBTYPE OF (allgemeine_Eigenschaften);
--- Attribute :
--- 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 <<

ENTITY SW_Koor;
--- Attribute :
    Station: Meter;
    Sichtweite_erforderlich: Meter;
    Sichtweite_vorhanden: Meter;
--- Relationen :
INVERSE
    von_Sichtweite: SET [0: ?] OF Sichtweiten FOR hat_SW_Koor;
WHERE
    mindestens_eine_Sichtweite: (EXISTS(Sichtweite_erforderlich)OR EXISTS(Sichtweite_vorhanden));
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - 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 , Boeschungsschraffen ));
--- Attribute :
    Bezeichnung: OPTIONAL STRING;
    fachliche_Bedeutung: STRING;
    Informationstext: OPTIONAL SET [1: ?] OF STRING;
--- Relationen :
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

END_SCHEMA; -- Entwurf