GUC

Bereitstellung von Daten aus der DiversityWorkbench für die GUC

Anmelden

Beim Start des Programms müssen zunächst die Login Daten eingegeben werden.

Danach startet das Programm mit dem Hauptfenster.

Subsections of GUC

Download

Das Setup für das Programm liegt bereit unter:

8.1.0 (2024-02-02)

Download

  • Bugfix Export nach SQLite

8.0.9 (2023-12-27)

Download

  • Bugfix Export nach SQLite

8.0.8 (2023-12-19)

Download

  • Redesign von Formular für Artcode
  • Anzeige letzter Änderung in Daten

8.0.7 (2023-11-30)

Download

  • Bugfix Export

8.0.6 (2023-11-28)

Download

  • Path for export files changed
  • Artcode including all datasets

8.0.5 (2023-11-27)

Download

  • TK25 including log
  • Login changed

8.0.4 (2023-11-24)

Download

  • Removal of Password string after encryption
  • Log zusammen mit anderen Tabellen anzeigen
  • Bugfixes creating the SQLite database
  • Button to open the SQLite database

8.0.3 (2023-11-24)

Download

  • Bugfix Login
  • Password encrypted

8.0.2 (2023-11-23)

Download

  • async await zum Beschleunigen des Ladens der Daten
  • ToDo: Die Seiten des Manuals werden noch nicht erkannt
  • ToDo: das Manual wird nachgezogen wenn alles wie gewünscht funktioniert

8.0.1 (2023-11-21)

Download

  • Anpassung der Prozedur zum Export der Daten
  • Überprüfung des Imports

Internals

For users that need more detailed information about the software including database design etc.

Artcode

PROCEDURE GUC_AnpassungArtcodeTemp

-- setting the timestamp
delete from [dbo].[Artcode_LastChange] where Tabelle = 'ArtcodeTemp'

TRUNCATE TABLE [dbo].[Artcode_ArtID];

INSERT INTO  [dbo].[Artcode_ArtID](NameID)
select T.ID
FROM ArtcodeTemp AS T
where T.Art_ID IS NULL

-- Setting the Art_ID for missing names
UPDATE T SET T.Art_ID = '9P0#'  + REPLICATE('0', 6 - LEN(CAST(A.ID AS varchar))) + CAST(A.ID AS varchar)
-- select T.Art_ID, '9P0#'  + REPLICATE('0', 6 - LEN(CAST(A.ID AS varchar))) + CAST(A.ID AS varchar)
FROM ArtcodeTemp AS T INNER JOIN [Artcode_ArtID] A ON T.ID = A.NameId
WHERE T.Art_ID IS NULL


-- Setting the family
TRUNCATE TABLE [dbo].[Artcode_Family]
INSERT INTO [dbo].[Artcode_Family]
           ([NameID]
           ,[FamilyNameID]
           ,[Family])
SELECT 
 T_0.NameID,
CASE WHEN T_1.TaxonomicRank = 'fam.' THEN T_1.NameID 
ELSE 
CASE WHEN T_2.TaxonomicRank = 'fam.' AND T_2.IgnoreButKeepForReference = 0 THEN T_2.NameID 
ELSE 
CASE WHEN T_3.TaxonomicRank = 'fam.' AND T_3.IgnoreButKeepForReference = 0 AND H_2.IgnoreButKeepForReference = 0 
THEN T_3.NameID ELSE 
CASE WHEN T_4.TaxonomicRank = 'fam.' AND T_4.IgnoreButKeepForReference = 0 AND H_3.IgnoreButKeepForReference = 0 
THEN T_4.NameID 
ELSE NULL 
END END END END AS FamilyNameID, 
CASE WHEN T_1.TaxonomicRank = 'fam.' THEN T_1.GenusOrSupragenericName ELSE CASE WHEN T_2.TaxonomicRank = 'fam.' AND 
T_2.IgnoreButKeepForReference = 0 THEN T_2.GenusOrSupragenericName ELSE CASE WHEN T_3.TaxonomicRank = 'fam.' AND 
T_3.IgnoreButKeepForReference = 0 AND 
H_2.IgnoreButKeepForReference = 0 THEN T_3.GenusOrSupragenericName ELSE CASE WHEN T_4.TaxonomicRank = 'fam.' AND 
T_4.IgnoreButKeepForReference = 0 AND H_3.IgnoreButKeepForReference = 0 THEN T_4.GenusOrSupragenericName ELSE NULL 
END END END END AS Family
FROM dbo.TaxonHierarchy AS H_3 INNER JOIN
dbo.TaxonName AS T_4 ON H_3.NameParentID = T_4.NameID AND H_3.ProjectID = 1128 RIGHT OUTER JOIN
dbo.TaxonName AS T_3 INNER JOIN
dbo.TaxonHierarchy AS H_2 ON T_3.NameID = H_2.NameParentID AND H_2.ProjectID = 1128 ON 
H_3.NameID = T_3.NameID RIGHT OUTER JOIN
dbo.TaxonHierarchy AS H_1 INNER JOIN
dbo.TaxonName AS T_2 ON H_1.NameParentID = T_2.NameID AND H_1.ProjectID = 1128 RIGHT OUTER JOIN
dbo.TaxonHierarchy AS H_0 INNER JOIN
dbo.TaxonName AS T_0 ON H_0.NameID = T_0.NameID AND H_0.ProjectID = 1128 INNER JOIN
dbo.TaxonName AS T_1 ON H_0.NameParentID = T_1.NameID AND H_0.ProjectID = 1128 ON H_1.NameID = T_1.NameID AND H_1.ProjectID = 1128 ON 
H_2.NameID = T_2.NameID AND H_2.ProjectID = 1128

-- family for synonyms
INSERT INTO [dbo].[Artcode_Family]
           ([NameID]
           ,[FamilyNameID]
           ,[Family])
SELECT S.NameID, F.FamilyNameID, F.Family
FROM [Artcode_Family] F
INNER JOIN dbo.TaxonSynonymy S ON S.SynNameID = F.NameID AND S.ProjectID = 1128
AND NOT EXISTS(SELECT * FROM [Artcode_Family] A WHERE A.NameID = S.NameID)

UPDATE  T SET T.fam = UPPER(SUBSTRING(F.Family, 1, 3)), T.id_fam = AF.Art_ID
-- select  T.fam, UPPER(SUBSTRING(F.Family, 1, 3)), T.id_fam, AF.Art_ID
FROM ArtcodeTemp AS T INNER JOIN Artcode_Family F ON T.ID = F.NameID
INNER JOIN ArtcodeTemp AS AF ON AF.ID = F.FamilyNameID

--Ausgabesperre, Statistiksperre, Eingabesperre, SAP
UPDATE  T SET T.Ausgabesperre = NULL, T.Statistiksperre = NULL, T.Eingabesperre = NULL, T.saP = NULL
-- select T.Ausgabesperre, Statistiksperre, Eingabesperre, SAP
FROM ArtcodeTemp AS T WHERE T.Ausgabesperre = 0

-- setting the rank
UPDATE  T SET T.rang = R.rang_id
-- select T.rang, R.rang_id
FROM ArtcodeTemp AS T INNER JOIN [dbo].[Artcode_Rang] R ON R.Code = T.TaxonomicRank

-- setting the rank for synonyms
UPDATE  T SET T.rang = 'syn'
-- select  T.rang, 'syn'
FROM ArtcodeTemp AS T INNER JOIN TaxonSynonymy S ON T.ID = S.NameID and S.ProjectID = 1128 --and (T.rang is null or T.rang = '')

-- setting the Art_ID_Gueltig for synonyms
UPDATE  T SET T.Art_ID_Gueltig = A.Art_ID
-- select T.Art_ID, T.Art_ID_Gueltig, A.Art_ID
FROM ArtcodeTemp AS T INNER JOIN TaxonSynonymy S ON T.ID = S.NameID and S.ProjectID = 1128 AND T.Art_ID_Gueltig IS NULL
INNER JOIN ArtcodeTemp A ON S.SynNameID = A.ID

-- Eintrag  Art_ID_Gueltig wo er fehlt
UPDATE A SET A.Art_ID_Gueltig =  CASE WHEN E.ExternalNameURI IS NULL THEN NULL ELSE E.ExternalNameURI END
-- SELECT A.Art_ID_Gueltig,  CASE WHEN E.ExternalNameURI IS NULL THEN NULL ELSE E.ExternalNameURI END AS Art_ID_Gueltig_E
FROM            dbo.TaxonNameExternalID AS E INNER JOIN
dbo.TaxonName AS N ON E.NameID = N.NameID AND E.ExternalDatabaseID = 1003 AND  (N.IgnoreButKeepForReference = 0) 
INNER JOIN ArtcodeTemp AS A ON A.ID = N.NameID AND A.Art_ID_Gueltig  IS NULL


-- setting the Autor_Pos
UPDATE  T SET T.Autor_Pos = 1
-- select T.Autor_Pos, 1,  T.rang, N.TaxonNameCache, N.TaxonomicRank, ar.DisplayOrder
FROM ArtcodeTemp AS T
inner join TaxonName N on T.id = N.NameID and N.SpeciesEpithet = N.InfraspecificEpithet and N.BasionymAuthors <> ''
inner join Artcode_Rang as AR on N.TaxonomicRank = ar.Code and ar.DisplayOrder < 170

-- setting the Autor_Pos
UPDATE  T SET T.Autor_Pos = 2
-- select T.Autor_Pos, 2,  T.rang, N.TaxonNameCache, N.TaxonomicRank, ar.DisplayOrder, T.Autor
FROM ArtcodeTemp AS T
inner join TaxonName N on T.id = N.NameID and N.SpeciesEpithet like 'x %' and N.BasionymAuthors <> ''
inner join Artcode_Rang as AR on N.TaxonomicRank = ar.Code and ar.DisplayOrder < 170


-- setting Verantwortung Bayerns
UPDATE  T SET T.VeraB = A.AnalysisValue
FROM ArtcodeTemp AS T INNER JOIN [dbo].[TaxonNameListAnalysis] A ON T.ID = A.NameID AND A.AnalysisID = 5

-- setting Verantwortung Deutschlands
UPDATE  T SET T.VeraD = A.AnalysisValue
FROM ArtcodeTemp AS T INNER JOIN [dbo].[TaxonNameListAnalysis] A ON T.ID = A.NameID AND A.AnalysisID = 4

-- setting Gefährdung nach Roter Liste Bayern 2003
UPDATE  T SET T.RLB  = A.AnalysisValue
-- select T.RLB, A.AnalysisValue
FROM ArtcodeTemp AS T INNER JOIN [dbo].[TaxonNameListAnalysis] A ON T.ID = A.NameID AND A.AnalysisID = 1

-- setting Gefährung nach Roter Liste Deutschland 2018
UPDATE  T SET T.RLD  = A.AnalysisValue
FROM ArtcodeTemp AS T INNER JOIN [dbo].[TaxonNameListAnalysis] A ON T.ID = A.NameID AND A.AnalysisID = 62

-- setting Schutzstatus in Bayern
UPDATE  T SET T.Schutz_BNatSchG = case when A.AnalysisValue = '§§' then 's' else 'b' end
FROM ArtcodeTemp AS T INNER JOIN [dbo].[TaxonNameListAnalysis] A ON T.ID = A.NameID AND A.AnalysisID = 7


UPDATE  T SET T.sensu  = N.NonNomenclaturalNameSuffix
-- select  T.sensu, N.NonNomenclaturalNameSuffix
FROM ArtcodeTemp AS T INNER JOIN [TaxonName] N ON T.ID = N.NameID  and N.NonNomenclaturalNameSuffix <> ''



-- setting Schutzstatus in Bayern
UPDATE  T SET T.Schutz_BNatSchG = case when A.AnalysisValue = '§§' then 's' else 'b' end
FROM ArtcodeTemp AS T INNER JOIN [dbo].[TaxonNameListAnalysis] A ON T.ID = A.NameID AND A.AnalysisID = 7


-- setting id_agg
UPDATE  T SET T.id_agg = case when P.Art_ID_Gueltig is null then P.Art_ID else P.Art_ID_Gueltig end
-- select T.id_agg, case when P.Art_ID_Gueltig is null then P.Art_ID else P.Art_ID_Gueltig end
FROM ArtcodeTemp AS T INNER JOIN [dbo].[TaxonHierarchy] H ON T.ID = H.NameID AND H.ProjectID = 1128
inner join ArtcodeTemp P on H.NameParentID = P.ID
inner join dbo.TaxonAcceptedName A on T.id = A.NameID and A.ProjectID = 1128

-- setting id_agg for not accepted names
UPDATE  T SET T.id_agg = case when P.Art_ID_Gueltig is null then P.Art_ID else P.Art_ID_Gueltig end
-- select T.id_agg, case when P.Art_ID_Gueltig is null then P.Art_ID else P.Art_ID_Gueltig end
FROM ArtcodeTemp AS T INNER JOIN [dbo].[TaxonHierarchy] H ON T.ID = H.NameID AND H.ProjectID = 1128
inner join ArtcodeTemp P on H.NameParentID = P.ID
WHERE T.id_agg IS NULL OR T.id_agg = ''

-- setting id_agg for not synynyms missing a hierarchy
UPDATE  T SET T.id_agg = case when P.Art_ID_Gueltig is null then P.Art_ID else P.Art_ID_Gueltig end
-- select T.id_agg, case when P.Art_ID_Gueltig is null then P.Art_ID else P.Art_ID_Gueltig end
FROM ArtcodeTemp AS T 
INNER JOIN [dbo].[TaxonSynonymy] S ON S.NameID = T.ID AND S.ProjectID = 1128
INNER JOIN [dbo].[TaxonHierarchy] H ON S.SynNameID = H.NameID AND H.ProjectID = 1128
inner join ArtcodeTemp P on H.NameParentID = P.ID
WHERE T.id_agg IS NULL OR T.id_agg = ''


-- setting BOLD_ID 
UPDATE  T SET T.BOLD_ID  = E.ExternalNameURI
FROM ArtcodeTemp AS T INNER JOIN [dbo].[TaxonNameExternalID] E ON T.ID = E.NameID and E.ExternalDatabaseID = 1010


-- setting Bayernstatus 
UPDATE  T SET T.staby = B.staby
FROM ArtcodeTemp AS T INNER JOIN [dbo].[TaxonNameListAnalysis] A ON T.ID = A.NameID AND A.AnalysisID = 2
INNER JOIN [dbo].[Artcode_Bayernstatus] B ON B.[AnalysisValue] = A.AnalysisValue

INSERT INTO [dbo].[Artcode_LastChange] ([Tabelle])
     VALUES           ('ArtcodeTemp')


-- setting the timestamp
delete from [dbo].[Artcode_LastChange] where Tabelle = 'Artcode'

TRUNCATE TABLE [dbo].[Artcode]

INSERT INTO Artcode
             (Ordnung, Art_ID, Synonym, Art_ID_Gueltig, Gattung, Art, Autor, Autor_Pos, Name_Deutsch, RLB, RLD, FFH_Anh2, FFH_Anh4, FFH_Anh5, VSR_Anh1, Status_IUCN, Schutz_BNatSchG, Ausgabesperre, Statistiksperre, 
                         Eingabesperre, saP, saP_ABC, saP_BC, saP_ZR, rang, sensu, id_agg, staby, VeraB, VeraD, WnASA, EUBrd, BASVO, BOLD_ID, NAME_DG, fam, id_fam, pruefung, ID)
SELECT        Ordnung, Art_ID, Synonym, Art_ID_Gueltig, Gattung, Art, Autor, Autor_Pos, Name_Deutsch, RLB, RLD, FFH_Anh2, FFH_Anh4, FFH_Anh5, VSR_Anh1, Status_IUCN, Schutz_BNatSchG, Ausgabesperre, Statistiksperre, 
                         Eingabesperre, saP, saP_ABC, saP_BC, saP_ZR, rang, sensu, id_agg, staby, VeraB, VeraD, WnASA, EUBrd, BASVO, BOLD_ID, NAME_DG, fam, id_fam, pruefung, ID
FROM            ArtcodeTemp

INSERT INTO [dbo].[Artcode_LastChange] ([Tabelle])
     VALUES           ('Artcode')

Artcode

Anleitung des LfU

Nach einem Click auf den Button Export Artcode im Hauptformular öffnet sich ein Fenster wie unten dargestellt.

Transfer der Daten aus DTN

Mit den Buttons kann man den Inhalt der ausgewählten Tabellen nach jedem Schritt überprüfen.


graph TD;
    DTN[<i class="fa-fw fas fa-database"></i> Taxa in DiversityTaxonNames_Plants] -->GUC_TransferTaxa(<i class="fa-fw fas fa-arrow-alt-circle-down"></i> Prozedur GUC_TransferTaxa:<br>Transfer der Daten) --> GUC[<i class="fa-fw fas fa-database"></i> Taxon Tabellen in DiversityCollectionCacheGUC]
    GUC -->GUC_Artcode
    GUC_Artcode(<i class="fa-fw fas fa-arrow-alt-circle-down"></i> Procedur GUC_Artcode:<br>Transfer aus den Taxon Tabellen in ArtcodeTemp<br><i class="fa-fw fas fa-eye"></i> GUC_ArtcodeTemp<br><i class="fa-fw fas fa-long-arrow-alt-down"></i> <br><i class="fa-fw fas fa-table"></i> ArtcodeTemp) 
    GUC_Artcode--> ArtcodeTemp[<i class="fa-fw fas fa-table"></i> ArtcodeTemp]
    ArtcodeTemp --> GUC_AnpassungArtcodeTemp( <i class="fa-fw fas fa-edit"></i> Prozedur GUC_AnpassungArtcodeTemp:<br>Überarbeitung der Daten in Tabelle ArtcodeTemp<br><i class="fa-fw fas fa-caret-right"></i> Eintrag Art_ID = NameID bei neuen Namen<br><i class="fa-fw fas fa-caret-right"></i> Eintrag Familie<br><i class="fa-fw fas fa-caret-right"></i> Eintrag rang<br><i class="fa-fw fas fa-caret-right"></i> ...)
    GUC_AnpassungArtcodeTemp --> Artcode[<i class="fa-fw fas fa-table"></i> Artcode]
    Artcode --> SQLite[<i class="fa-fw fas fa-database"></i> SQLite]

Schritt 1

  • Mit einem Click auf den Button Transfer …GUC werden die Daten aus der Datenbank DiversityTaxonNames_Plants auf dem tnt.diversityworkbench.de in gleich aufgebaute Tabellen in der Datenbank DiversityCollectionCacheGUC auf dem bfl.diversityworkbench.de übertragen.
  • Die Zahl der Datensätze in den Tabellen werden wie in der Abbildung oben gelistet
  • Hierfür wird die stored procedure GUC_TransferTaxa in DiversityCollectionCacheGUC verwendet.
  • Diese löscht den Inhalt der Taxon Tabellen in DiversityCollectionCacheGUC und befüllt die Tabellen mit dem aktuellen Inhalt aus DiversityTaxonNames_Plants

Schritt 2

  • Mit einem Click auf den Button Transfer … Arcode wird die Prozedur GUC_TransferInArtcode gestartet: Auslesen der Daten aus Sicht GUC_Artcode und import in Tabelle ArtcodeTemp

Schritt 3

  • Mit einem Click auf den Button Anpassung …Temp wird die Prozedur GUC_AnpassungArtcodeTemp gestarted. Diese überarbeitet die Daten in Tabelle ArtcodeTemp um sie an die Anforderungen von GUC anzupassen.

Schritt 4

  • Übertrag der Daten aus ArtcodeTemp in Artcode erfolgt automatisch nach Schritt 3

Schritt 5

  • Export der Daten in SQLite Datenbank mit click auf dem Export button.

Öffnen der SQLite Datenbank

Mit einem Click auf den Button Ordner kann man das Verzeichnis in dem die SQLite Datenbank gespeichert ist öffnen. Mit einem geeigneten Tool kann man diese dann öffnen. Die Software selbst stellt hierfür keine Option bereit. Beim Versuch die Datenbank aus dem Programm heraus zu öffnen wird ein entsprechender Fehler angezeigt.

Nachweis

Programm

Aktualisierung der CacheDB

Vor dem Export für GUC müssen die Daten der hierfür relevanten Projekte in der DiversityCollectionCache_BayernFlora aktualisiert werden.

Aktualisierung der Artcode Tabelle

Vor dem Export für GUC müssen die Daten in der Tabelle Artcode aktualisiert werden.

Transfer in die GUC Tabellen

Mit einem Click auf den Button wird die Prozedur TransferToGUC (s. unten) gestartet. Diese Überträgt die Daten aus der Datenbank DiversityCollectionCache_BayernFlora in Abhängigkeit der ausgewählten Optionen in die Tabellen der Datenbank DiversityCollectionCacheGUC und bereitet diese für den Export auf.

---
title: PROCEDURE TransferToGUC
---
graph TD;
    1{ } -->|1| Clear[Clear the export tables]
    1 -->|2| Status[Tabelle <br><u>_Status</u><br> füllen]
    1 --> |3|Identification[Tabelle <br>_Identification<br> füllen]    
    1 --> |4|FehlendeTaxa[Daten ohne Code aus <br>_Identification<br> entfernen] 
    1 --> |5|NACHWEIS[Tabelle <br>NACHWEIS<br> füllen]
    FehlendeTaxa --> Identification
    Identification --> NACHWEIS
    Status --> EintragStatus
    NACHWEIS --> Jahresangaben(In NACHWEIS Entfernen der Daten ohne Jahresangaben)
    Jahresangaben --> EintragStatus(In NACHWEIS Eintrag des Status)
    EintragStatus --> Quellentyp(In NACHWEIS Eintrag des Quellentyp)
    Quellentyp --> verbleib_nachname(In NACHWEIS verbleib_nachname eintragen)
    verbleib_nachname --> Projekt(In NACHWEIS Projekt eintragen)
    Projekt --> VERORTUNG_PUNKT_WKT(In NACHWEIS VERORTUNG_PUNKT_WKT eintragen)
    VERORTUNG_PUNKT_WKT --> status_code_lfu(In NACHWEIS status_code_lfu eintragen)
    1 --> |6|FUNDORT[Tabelle <br>FUNDORT<br> füllen]
    FUNDORT --> TK(In FUNDORT TK eintragen)
    TK --> TOPONYM(In FUNDORT TOPONYM eintragen)
    TOPONYM --> Hoehe(In FUNDORT Hoehe eintragen)
    Hoehe --> LEBENSRAUM(In FUNDORT LEBENSRAUM eintragen)
    LEBENSRAUM --> WGS84(In FUNDORT WGS84 eintragen)
    WGS84 --> NATURRAUM(In FUNDORT NATURRAUM eintragen)
    NATURRAUM --> Landkreis(In FUNDORT Landkreis eintragen)
    Landkreis --> naturraum_code_lfu(In FUNDORT naturraum_code_lfu eintragen)
    naturraum_code_lfu --> landkreis_code_lfu(In FUNDORT landkreis_code_lfu eintragen)
    1 --> |7|SAMMLER[Tabelle <br>SAMMLER<br> fuellen]

Der Zeitbedarf sowie die Zahl der betroffenen Datensätze wird im Log angezeigt

Export nach SQLite

Um die Daten als SQLite zu exportieren einfach auf den Export nach SQLite Button clicken.

TK25

Nach einem Click auf den Button TK25 öffnet sich ein Fenster wie unten dargestellt.

Laden der Daten

Ein Click auf den Button startet die Prozedur TK25.TransferToQuadrant mit den ausgewählten Parameter für das Jahr und den tax. Rang. Diese Prozedur füllt die Tabelle TK25.Quadrant und TK25.Identification.

---
title: PROCEDURE TransferToQuadrant
---
graph TD;
    Clear[Clear the export tables] --> Identification[Insert the taxa in table<br><u>Identification</u>]
    Identification --> former(Remove the former identifications in table Identification)
    former --> year(Remove those before the given year in table Identification)
    year --> accepted(Set the synonyms to the accepted names in table Identification)
    accepted --> higher(Setting the higher taxa in table Identification)
    Identification --> Quadrant[Fill table <br><u>Quadrant</u>]

Export

Um die Daten als Textdatei zu exportieren auf den Export Button clicken. Dadurch wird im Projektverzeichnis eine Datei mit dem Name TK25export.txt erstellt.