SCHEMA Allgemeine_Objekte;

REFERENCE FROM Geometrieschema (Flaechenobjekt_Modell, Linienobjekt_Modell, Punktobjekt_Modell);

REFERENCE FROM Historisierung (historisches_Objekt);

REFERENCE FROM Oekologie (Bewuchs);

ENTITY Wochentag;
--- Attribute :
    Langtext: STRING(10);
--- Relationen :
END_ENTITY;


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

   (1,'Sonntag')
   (2,'Montag')
   (3,'Dienstag')
   (4,'Mittwoch')
   (5,'Donnerstag')
   (6,'Freitag')
   (7,'Samstag')

*)

-- SCHEMA - OKSTRA - INDEX - VERSION <<

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


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

  ( 1, 'EURO' )
  ( 2, 'DM' )

*)

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY einfacher_Zeitraum
SUBTYPE OF (Zeitraum);
--- Attribute :
--- Relationen :
    hat_Startdatum: Startdatum;
    hat_Dauer: Dauer;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Startdatum;
--- Attribute :
    Jahr: OPTIONAL INTEGER;
    Monat_im_Jahr: OPTIONAL INTEGER;
    Woche_im_Jahr: OPTIONAL INTEGER;
    Tag_im_Monat: OPTIONAL INTEGER;
    vorwaerts_oder_rueckwaerts: OPTIONAL BOOLEAN;
    Woche_im_Monat: OPTIONAL INTEGER;
    Tag_in_der_Woche: OPTIONAL INTEGER;
    Stunde_am_Tag: OPTIONAL INTEGER;
    Minute_in_der_Stunde: OPTIONAL INTEGER;
    Sekunde_in_der_Minute: OPTIONAL INTEGER;
--- Relationen :
INVERSE
    von_einfachem_Zeitraum: SET [0: ?] OF einfacher_Zeitraum FOR hat_Startdatum;
WHERE
    nur_Monat_oder_Woche: NOT(EXISTS(Monat_im_Jahr)AND EXISTS(Woche_im_Jahr));
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Dauer;
--- Attribute :
    Jahre: OPTIONAL INTEGER;
    Monate: OPTIONAL INTEGER;
    Wochen: OPTIONAL INTEGER;
    Tage: OPTIONAL INTEGER;
    Stunden: OPTIONAL INTEGER;
    Minuten: OPTIONAL INTEGER;
    Sekunden: OPTIONAL INTEGER;
--- Relationen :
INVERSE
    von_einfachem_Zeitraum: SET [0: ?] OF einfacher_Zeitraum FOR hat_Dauer;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY komplexer_Zeitraum
SUBTYPE OF (Zeitraum);
--- Attribute :
--- Relationen :
    hat_ersten_Zeitraum: Zeitraum;
    hat_zweiten_Zeitraum: Zeitraum;
    hat_Operator: Operator;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

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


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

   ('+','Vereinigung')
   ('*','Durchschnitt')
   ('-','Differenz')

*)

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Zeitraum
ABSTRACT SUPERTYPE OF (ONEOF(einfacher_Zeitraum , komplexer_Zeitraum ))
SUBTYPE OF (historisches_Objekt);
--- Attribute :
--- Relationen :
INVERSE
    erster_in: SET [0: ?] OF komplexer_Zeitraum FOR hat_ersten_Zeitraum;
    zweiter_in: SET [0: ?] OF komplexer_Zeitraum FOR hat_zweiten_Zeitraum;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

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


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

   ('+','Summe')
   ('-','Differenz')

*)

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Objekt_ID;
--- Attribute :
    ID: STRING;
    Namensraum_Verfahren: STRING;
--- Relationen :
INVERSE
    von_Bewuchs: SET [0: ?] OF Bewuchs FOR hat_Objekt_Id;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY geometrische_Auspraegung;
--- Attribute :
--- Relationen :
    hat_Auspraegung_Punkt: OPTIONAL SET [1: ?] OF geometrische_Auspraegung_Punkt;
    hat_Auspraegung_Linie: OPTIONAL SET [1: ?] OF geometrische_Auspraegung_Linie;
    hat_Auspraegung_Flaeche: OPTIONAL SET [1: ?] OF geometrische_Auspraegung_Flaeche;
INVERSE
    von_Bewuchs: SET [0: ?] OF Bewuchs FOR hat_Auspraegungen;
WHERE
    genau_eine_Auspraegung: ((EXISTS(hat_Auspraegung_Punkt)AND NOT EXISTS(hat_Auspraegung_Linie)AND NOT EXISTS(hat_Auspraegung_Flaeche))OR(NOT EXISTS(hat_Auspraegung_Punkt)AND EXISTS(hat_Auspraegung_Linie)AND NOT EXISTS(hat_Auspraegung_Flaeche))OR(NOT EXISTS(hat_Auspraegung_Punkt)AND NOT EXISTS(hat_Auspraegung_Linie)AND EXISTS(hat_Auspraegung_Flaeche)));
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY geometrische_Auspraegung_Punkt
SUBTYPE OF (Punktobjekt_Modell);
--- Attribute :
--- Relationen :
INVERSE
    von_geometrischer_Auspraegung: SET [0: ?] OF geometrische_Auspraegung FOR hat_Auspraegung_Punkt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY geometrische_Auspraegung_Linie
SUBTYPE OF (Linienobjekt_Modell);
--- Attribute :
--- Relationen :
INVERSE
    von_geometrischer_Auspraegung: SET [0: ?] OF geometrische_Auspraegung FOR hat_Auspraegung_Linie;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY geometrische_Auspraegung_Flaeche
SUBTYPE OF (Flaechenobjekt_Modell);
--- Attribute :
--- Relationen :
INVERSE
    von_geometrischer_Auspraegung: SET [0: ?] OF geometrische_Auspraegung FOR hat_Auspraegung_Flaeche;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Sensor
SUPERTYPE OF (ONEOF(Fotostandpunkt ));
--- Attribute :
    Wirkungsrichtung_horizontal: OPTIONAL Winkel;
    Wirkungsrichtung_vertikal: OPTIONAL Winkel;
    Art: Art_Sensor;
    Typbezeichnung: OPTIONAL STRING;
    Hoehe_ueber_Boden: OPTIONAL Meter;
--- Relationen :
    hat_Sensorstandort: Sensorstandort;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Art_Sensor;
--- Attribute :
    Kennung: INTEGER;
    Langtext: STRING(30);
--- Relationen :
UNIQUE
    Kennung_eindeutig: Kennung;
END_ENTITY;


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

   (1,'Fotokamera')
   (2,'Videokamera')
   (3,'Mikrofon')
   (4,'Wärmebildkamera')

*)

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Sensorstandort;
--- Attribute :
    hat_Erfassungsqualitaet: Erfassungsqualitaet;
--- Relationen :
    hat_Sensorstandpunkt: OPTIONAL Sensorstandpunkt;
    hat_Sensorstandlinie: OPTIONAL Sensorstandlinie;
INVERSE
    von_Sensor: SET [0: ?] OF Sensor FOR hat_Sensorstandort;
WHERE
    entweder_Punkt_oder_Linie: (EXISTS(hat_Sensorstandpunkt)XOR EXISTS(hat_Sensorstandlinie));
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Sensorstandpunkt
SUBTYPE OF (Punktobjekt_Modell);
--- Attribute :
--- Relationen :
INVERSE
    von_Sensorstandort: SET [0: ?] OF Sensorstandort FOR hat_Sensorstandpunkt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Sensorstandlinie
SUBTYPE OF (Linienobjekt_Modell);
--- Attribute :
--- Relationen :
INVERSE
    von_Sensorstandort: SET [0: ?] OF Sensorstandort FOR hat_Sensorstandlinie;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Foto;
--- Attribute :
    erstellt_von: OPTIONAL STRING;
    physikalische_Aufloesung: OPTIONAL dpi;
    Farbspektrum: OPTIONAL Farbtiefe;
    Datei: OPTIONAL STRING;
    inhaltliche_Beschreibung: OPTIONAL STRING;
--- Relationen :
    Startdatum: Startdatum;
    verwendetes_Verfahren: OPTIONAL fotografisches_Verfahren;
    Aufbewahrungsort_Medium_analog: OPTIONAL STRING;
    hat_Fotostandpunkt: OPTIONAL Fotostandpunkt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY fotografisches_Verfahren;
--- Attribute :
    Kennung: INTEGER;
    Langtext: STRING(60);
--- Relationen :
UNIQUE
    Kennung_eindeutig: Kennung;
END_ENTITY;


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

   (1,'Digitalkamera')
   (2,'Analogkamera, scannen des Papierabzuges')
   (3,'Analogkamera, scannen des Dia-Positives')

*)

-- SCHEMA - OKSTRA - INDEX - VERSION <<

ENTITY Fotostandpunkt
SUBTYPE OF (Sensor);
--- Attribute :
--- Relationen :
INVERSE
    von_Foto: SET [0: ?] OF Foto FOR hat_Fotostandpunkt;
END_ENTITY;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Datum = STRING;
WHERE
    Datums_Format: SELF LIKE '##.##.####';
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Uhrzeit = STRING;
WHERE
    Uhrzeit_Format: (SELF LIKE '##:##')OR(SELF LIKE '##:##:##')OR(SELF LIKE '##:##:##:###');
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Jahr = INTEGER;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Monat = INTEGER;
WHERE
    Monat_sinnvoll: { 1<=SELF<=12};
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Woche = INTEGER;
WHERE
    Woche_sinnvoll: { 1<=SELF<=53};
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Tag = INTEGER;
WHERE
    Monat_sinnvoll: { 1<=SELF<=31};
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Stunde = INTEGER;
WHERE
    Stunde_sinnvoll: { 1<=SELF<=12};
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Minute = INTEGER;
WHERE
    Minute_sinnvoll: { 1<=SELF<=12};
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Anzahl = INTEGER;
WHERE
    Anzahl_nicht_negativ: SELF>=0;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Anzahl_einstellig = INTEGER;
WHERE
    Anzahl_zweistellig: { 0<=SELF<=9};
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Anzahl_zweistellig = INTEGER;
WHERE
    Anzahl_zweistellig: { 0<=SELF<=99};
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Groesse = REAL;
WHERE
    Groesse_nicht_negativ: SELF>=0;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Tage = Anzahl;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Millisekunden = Anzahl;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Meter = REAL;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Dezimeter = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Zentimeter = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Millimeter = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Mikrometer = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Kubikzentimeter = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Kilometer = REAL;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Meter_ueber_NN = REAL;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Quadratmeter = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Quadratmillimeter = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Tonnen = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Prozent = REAL;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Gon = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Winkel = REAL;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Grad = INTEGER;
WHERE
    Grad_sinnvoll: { 0<=SELF<=359};
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Newton_pro_Quadratmillimeter = Anzahl;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Kilonewton = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Kilogramm = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Kilogramm_pro_Quadratmeter = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE cd_pro_Quadratmeter = Anzahl;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Promille = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Lux = Anzahl;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Kilowatt = Anzahl;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Grad_Celsius = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Hektopascal = INTEGER;
WHERE
    Hektopascal_sinnvoll: { 800<=SELF<=1200};
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Stundenkilometer = Anzahl;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Meter_pro_Sekunde = Groesse;
WHERE
    Meter_pro_Sekunde_nicht_neg: SELF>=0;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Millimeter_pro_Stunde = Groesse;
WHERE
    Millimeter_pro_Stunde_n_neg: SELF>=0;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Betrag = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE DM = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE EURO = Groesse;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE dpi = INTEGER;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Farbtiefe = INTEGER;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Zustaendigkeit = STRING;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

TYPE Erfassungsqualitaet = STRING;
END_TYPE;

-- SCHEMA - OKSTRA - INDEX - VERSION <<

END_SCHEMA; -- Allgemeine_Objekte