SCHEMA Historisierung;

REFERENCE FROM Strassennetz (Streckenobjekt_hist, Bereichsobjekt_hist, Strassenelement, Punktobjekt_hist, Nullpunkt, Verkehrliche_Verknuepfung, Teilnetz, Abschnitt_oder_Ast, BAB_Knotennummer, Netzknoten, Strasse_Netzknoten, Route, Strecke, Netzbereich, Strasse, Teilabschnitt);

REFERENCE FROM Administration (UI_Partner, Strassenbaudienststelle_abstrakt, Dokument);

REFERENCE FROM Strassenausstattungen (Art_der_Entwaesserung, Lage_Entwaesserung, entwaesserte_Fahrbahnflaeche, Leitungsart, Leitungstraeger, Leitungsverlauf);

REFERENCE FROM Verkehr (Fkt_d_Verb_im_Knotenpktber, max_Hoehe, Fahrstreifen_Nummer);

REFERENCE FROM Bauliche_Strasseneigenschaften (Profil, Baustoff, Streifenart, Schichtmaterial, Schichtart);

REFERENCE FROM Statische_Beschilderung (zeitlicher_Gueltigkeitsber);

REFERENCE FROM Umfeldmessstelle (Umfeldmessstelle);

REFERENCE FROM Dynamische_Beschilderung (Anzahl_der_Messquerschnitte, Art_der_erfassten_Daten, Art_der_Anordnung, Detektionsmethode, Anzahl_der_Anzeigequerschnitte, Art_der_Aufstellung, Wechselverkehrszeichen, Ueberwachung_der_Anlage, Verkehrsrechnerzentrale, Unterzentrale, Datenuebertragungssystem, manuelle_Steuerung, Art_der_Stromversorgung, RW_Wirkungsbereich, RW_Anzeigezustaende, Betriebsform, Angaben_zum_Knotenpunkt, richtungsbezogener_WB, KB_Anzeigezustaende, KB_Anlagentyp, WW_Wirkungsbereiche, WW_Anzeigezustaende, SB_Anzeigezustaende, SB_Anlagentyp, Kombination_von_Anlagentypen);

REFERENCE FROM Automatische_Dauerzaehlstelle (Zaehlgeraet, Detektoren_DZ, Erfassungsmerkmale_DZ);

REFERENCE FROM Manuelle_Zaehlstelle (manuelle_Zaehlstelle_SVZ);

REFERENCE FROM Lichtsignalanlage (uebergeordnete_Zentrale, Erfassungseinrichtungen_OeV, Erfassungseinrichtungen_IV, optische_Signalgeber, Angaben_z_Aufstellvorrichtung, Angaben_zur_Verkabelung, Angaben_zum_Steuergeraet, akust_oder_taktile_Signalgeber, hinterlegte_Programme, Signalprogr ammparameter, Angaben_zu_Verkehrsdaten, Grundlage_und_Inbetriebn_daten, Angaben_zum_Knotenpunkt_LSA, Rotlichtueberwachung);

REFERENCE FROM Allgemeine_Objekte (Zeitraum, Datum);

REFERENCE FROM Vermessungspunkt (Vermessungspunkt);

REFERENCE FROM Oekologie (Bewuchs);

ENTITY historisches_Objekt
ABSTRACT SUPERTYPE OF (ONEOF(Strasse , Strasse_Netzknoten , Netzknoten , Netzbereich , BAB_Knotennummer , Abschnitt_oder_Ast , Verkehrliche_Verknuepfung , Route , Strecke , Strassenelement , Nullpunkt , Punktobjekt_hist , Bereichsobjekt_hist , Teilnetz , Streckenobjekt_hist , UI_Partner , Leitungsverlauf , Leitungstraeger , Leitungsart , entwaesserte_Fahrbahnflaeche , Lage_Entwaesserung , Art_der_Entwaesserung , Fahrstreifen_Nummer , max_Hoehe , Fkt_d_Verb_im_Knotenpktber , Schichtart , Schichtmaterial , Streifenart , Baustoff , Profil , zeitlicher_Gueltigkeitsber , Umfeldmessstelle , Kombination_von_Anlagentypen , SB_Anlagentyp , SB_Anzeigezustaende , WW_Anzeigezustaende , WW_Wirkungsbereiche , KB_Anlagentyp , KB_Anzeigezustaende , richtungsbezogener_WB , Angaben_zum_Knotenpunkt , Betriebsform , RW_Anzeigezustaende , RW_Wirkungsbereich , Art_der_Stromversorgung , manuelle_Steuerung , Datenuebertragungssystem , Unterzentrale , Verkehrsrechnerzentrale , Ueberwachung_der_Anlage , Wechselverkehrszeichen , Art_der_Aufstellung , Anzahl_der_Anzeigequerschnitte , Detektionsmethode , Art_der_Anordnung , Art_der_erfassten_Daten , Anzahl_der_Messquerschnitte , Erfassungsmerkmale_DZ , Detektoren_DZ , Zaehlgeraet , manuelle_Zaehlstelle_SVZ , Rotlichtueberwachung , Angaben_zum_Knotenpunkt_LSA , Grundlage_und_Inbetriebn_daten , Angaben_zu_Verkehrsdaten , Signalprogrammparameter , hinterlegte_Programme , akust_oder_taktile_Signalgeber , Angaben_zum_Steuergeraet , Angaben_zur_Verkabelung , Angaben_z_Aufstellvorrichtung , optische_Signalgeber , Erfassungseinrichtungen_IV , Erfassungseinrichtungen_OeV , uebergeordnete_Zentrale , Zeitraum , Vermessungspunkt , Bewuchs ));
--- Attribute :
    gueltig_von: OPTIONAL Datum;
    gueltig_bis: OPTIONAL Datum;
--- Relationen :
    erzeugt_von_Ereignis: OPTIONAL Ereignis;
    geloescht_von_Ereignis: OPTIONAL Ereignis;
    hat_Vorgaenger_hist_Objekt: OPTIONAL historisches_Objekt;
INVERSE
    hat_Nachfolger_hist_Objekt: SET [0: 1] OF historisches_Objekt FOR hat_Vorgaenger_hist_Objekt;
WHERE
    Objektfolge_konsistent: Objektfolge_konsistent(SELF);
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Ereignis;
--- Attribute :
    laufende_Nummer: INTEGER;
    Wirksamkeitsdatum: Datum;
--- Relationen :
    gehoert_zu_Projekt: OPTIONAL Projekt_Strassenbau;
    in_Bauamt: SET [1: ?] OF Strassenbaudienststelle_abstrakt;
    hat_Dokument_zur_Erlaeuterung: OPTIONAL Dokument;
    hat_identisches_Netzteil: OPTIONAL SET [1: ?] OF identisches_Netzteil;
INVERSE
    erzeugt_historisches_Objekt: SET [0: ?] OF historisches_Objekt FOR erzeugt_von_Ereignis;
    loescht_historisches_Objekt: SET [0: ?] OF historisches_Objekt FOR geloescht_von_Ereignis;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Projekt_Strassenbau;
--- Attribute :
--- Relationen :
INVERSE
    hat_Ereignis: SET [0: ?] OF Ereignis FOR gehoert_zu_Projekt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY identisches_Netzteil;
--- Attribute :
    mit_Veraenderungsart: OPTIONAL Veraenderungsart;
--- Relationen :
    war_Teilabschnitt: OPTIONAL Teilabschnitt_IdNT;
    wurde_zu_Teilabschnitt: OPTIONAL Teilabschnitt_IdNT;
INVERSE
    Teil_von_Ereignis: Ereignis FOR hat_identisches_Netzteil;
WHERE
    Bezug_zu_Teilabschnitt: EXISTS(war_Teilabschnitt)OR EXISTS(wurde_zu_Teilabschnitt);
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Veraenderungsart;
--- Attribute :
    Kennung: STRING(2) FIXED;
    Langtext: STRING;
--- Relationen :
UNIQUE
    Kennung_eindeutig: Kennung;
END_ENTITY;


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

   ('NB','Neubau')
   ('VB','Vollausbau')
   ('ZB','Zwischenausbau')
   ('RE','Rekultivierung')
   ('DT','Deckenerneuerung im Tiefeinbau')
   ('DH','Deckenerneuerung im Hocheinbau')
   ('WI','Widmung')
   ('AU','Aufstufung')
   ('AB','Abstufung')
   ('UM','Umnumerierung in der Straßenbezeichnung')
   ('EZ','Einziehung')
   ('OD','Verlegung der OD-Grenze')
   ('UI','UI-Vertrag')
   ('GR','Grenzverlegung')
   ('SB','Änderung der Abschnitts-/Astbezeichnung')
   ('LN','Längenänderung infolge Neumessung')
   ('KO','Korrektur')

*)

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Teilabschnitt_IdNT
SUBTYPE OF (Teilabschnitt);
--- Attribute :
--- Relationen :
INVERSE
    altes_Netzteil: SET [0: 1] OF identisches_Netzteil FOR war_Teilabschnitt;
    neues_Netzteil: SET [0: 1] OF identisches_Netzteil FOR wurde_zu_Teilabschnitt;
WHERE
    entweder_alt_oder_neu: EXISTS(altes_Netzteil)XOR EXISTS(neues_Netzteil);
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<


FUNCTION Objektfolge_konsistent(hO:historisches_Objekt) : BOOLEAN;
LOCAL
      NJ,NM,NT,VJ,VM,VT : INTEGER;
      VE,NA : Datum;
      VO : historisches_Objekt;
END_LOCAL;
      IF EXISTS(hO.hat_Vorgaenger_hist_Objekt) THEN
            VO := hO.hat_Vorgaenger_hist_Objekt;
            IF EXISTS(hO.gueltig_von) AND EXISTS(VO.gueltig_bis) THEN
                  NA := hO.gueltig_von; -- neues Objekt / Nachfolger
                  NJ := VALUE(NA[7:10]); -- Jahr des Enddatums
                  NM := VALUE(NA[4:5]); -- Monat des Enddatums
                  NT := VALUE(NA[1:2]); -- Tag des Enddatums
                  VE := VO.gueltig_bis; -- altes Objekt / Vorgaenger
                  VJ := VALUE(VE[7:10]); -- Jahr des Anfangsdatums
                  VM := VALUE(VE[4:5]); -- Monat des Anfangsdatums
                  VT := VALUE(VE[1:2]); -- Tag des Anfangsdatums
                  RETURN ( ( NJ * 10000 + NM * 100 + NT )
                                > ( VJ * 10000 + VM * 100 + VT ) );
            ELSE
                  RETURN (FALSE);
            END_IF;
      ELSE
            RETURN (TRUE);
      END_IF;
END_FUNCTION;

-- OKSTRA

END_SCHEMA; -- Historisierung