Skip to content

Erste Schritte mit datacat: Entwickler

SeeRoSee edited this page Feb 10, 2022 · 7 revisions

Katalogbearbeitung per GraphiQL Interface

Abfragen

Beispiel: Abfrage von Klassen

Die Ausgabe umfasst alle Klassen mit dem Namen "Beleuchtung" inklusive ihrer in nodes angegebenen Parameter.

{
    findSubjects(input: {query: "Beleuchtung"}) {
        nodes {
            id
            createdBy
        }
    }
}

Beispiel: Abfrage von Klassen und den Gruppen denen sie zugeordnet sind

Die Ausgabe umfasst alle Klassen mit dem Namen "Klassenname" inklusive ihrer in nodes angegebenen Parameter sowie der übergeordneten Gruppen und deren in nodes {} angegebenen Parameter.

{
    findSubjects(input: {query:"Klassenname"}) {
        nodes {
            name
            collectedBy {
                nodes {
                    relatingCollection {
                        name
		    }
                }
            }
        }
    }
}

Beispiel: Abfrage von verknüpften Referenzdokumenten

Wenn der Abfrage kein Wert im query-Parameter übergeben wird, werden alle Katalogelemente des entsprechenden Typs, inklusive der in nodes {} angegebenen Parameter, ausgegeben. Über den documentedBy-Parameter wird, sofern vorhanden, das verknüpfte Referenzdokument mit ausgegeben.

{
	findSubjects(input: {query:""}) {
		nodes {
			name
			documentedBy {
				nodes {
					relatingDocument {
						name
						id
					}
				}
			}
		}
	}
}

Beispiel: Abfrage von Einheiten einer Größe

Die Ausgabe umfasst alle Maßeinheiten inklusive ihrer in nodes angegebenen Parameter, sowie die Größen, denen die Maßeinheit zugewiesen ist.

{
	findUnits(input: {query:""}) {
		nodes {
			name
			assignedTo {
				nodes {
					relatingMeasure {
						name
						id
					}
				}
			}
		}
	}
}

Beispiel: Abfrage der Hierarchie

Ausgabe der gesamten Hierarchie möglich. Filterung nach ID, Schlagworten oder Knoten-Typ durchführbar.

{
    hierarchy(input: {rootNodeFilter: {catalogEntryTypeIn: Subject}}) {
        nodes {
          	name
          	description
        }
    }
}

Im GraphiQL-Interface sind diese weiteren Abfragen möglich:

Abfrage Rückgabe
hierarchy Hierarchie
findTags Schlagworte
findExternalDocuments Referenzdokumente
findBags Fachmodelle
findAssignsPropertyWithValues Gruppen
findSubjects Klassen
findNests Merkmalsgruppen
findProperties Merkmale
findMeasures Größen
findUnits Maßeinheiten
findValues Werte
findAccounts Nutzer (siehe hier)

Bei diesen Abfragen sind folgende Parameter (nodes) möglich:

Parameter Rückgabe
id Eindeutige ID des Knoten
name Name des Knoten
description Beschreibung des Knoten
tags {name, id} Schlagworte des Knoten (hier: name und ID des Schlagwortes)
names {language(displayLanguage)} Verfügbare Sprachen des Knoten
created Erstellungsdatum
createdBy Name des Erstellers
lastModified Datum der letzten Bearbeitung
lastModifiedBy Name des letzten Bearbeiters
versionId Versions-ID
versionDate Datum der Version
recordType Knoten-Typ
__typename Knoten-Typ (nach ISO 12006-3)

Bei diesen Abfragen sind folgende weiterführende Filterkriterien möglich: (Für Anwendung: siehe obige Beispiele)

Kriterium Parameter Rückgabe
assignedTo relatedMeasure Einem Wert zugehörige Größe
assignedTo relatingMeasure Einer Maßeinheit zugehörige Größe
assignedTo relatingProperty Einer Größe übergeordnetes Merkmal
assignedCollections relatedCollections Untergeordnete Entitäten des Typs XtdCollection (Merkmalsgruppe)
assignedProperties relatedProperties Untergeordnete Entitäten des Typs XtdProperty (Merkmal)
collectedBy relatingCollection Übergeordnete Entitäten
documentedBy relatingDocument Verknüpfte Referenzdokumente zu gesuchter Entität
documents relatedThings Verknüpfungen mit gesuchtem Referenzdokument

Einfügen

Erstellen einer neuen Klasse

mutation {
  createCatalogEntry(input: {
    catalogEntryType: Subject
    properties: {
      id: 1234
      version: {
        versionId: "1.0" 
        versionDate: "13.12.2021"
      }
      names: {
        id: 123
        languageTag: "de"
        value: "Neue Klasse"
      }
    }
    tags: 234763214
  }) {
    catalogEntry{__typename}
  }
}

Weitere GraphiQL-Befehle befinden sich innerhalb der Docs welche rechts oberhalb des Ausgabefensters des GraphiQL Interfaces zu finden sind!


Änderungen

Aktualisieren eines Namens

mutation {
  updateName(input: {
    catalogEntryId: 67574
    name: {
      translationId: 123
      value: "Neuer Name"
    }
  }) {
    catalogEntry{__typename}
  }
}

Weitere GraphiQL-Befehle befinden sich innerhalb der Docs welche rechts oberhalb des Ausgabefensters des GraphiQL Interfaces zu finden sind!

Prüfroutinen

(noch nicht implementiert)

Um die Katalogkonsistenz zu gewährleisten, sind über den Reiter Prüfen im Menü die Prüfroutinen abrufbar. Die umfassen die folgenden Abfragen:

Abfrage Überprüfung auf
findModelWithoutGroup Fachmodelle ohne zugehörige Gruppe
findGroupWithoutSubject Gruppe ohne zugehörige Klasse
findSubjectWithoutProp Klassen ohne zugehörige Merkmale oder Merkmalsgruppen
findPropGroupWithoutProp Merkmalsgruppen ohne zugehörige Merkmale
findPropWithoutSubjectOrPropGroup Merkmale ohne zugehörige Klassen oder Merkmalsgruppe
findMeasureWithoutProp Größen ohne zugehörige Merkmale
findUnitWithoutMeasure Einheiten ohne zugehörige Größe
findValueWithoutMeasure Werte ohne zugehörige Einheiten
findMultipleIDs ID-Duplikate
findMultipleNames Namens-Duplikate
findMissingDescription Fehlende Beschreibung
findMissingEnglishDescription Fehelende englische Beschreibung
findMissingEnglishName Fehelender englischer Name

Beispiel: findMultipleNames

Die Parameter für die Ausgabe sind der Tabelle im oberen Absatz Abfragen zu entnehmen.

{
    findMultipleNames(input: {nodeTypeFilter: {}}) {
        nodes {
          	name
          	id
          	description
        }
    }
}

Weiterentwicklung

Dieser Teil bezieht sich auf die Arbeit mit einer lokalen datacat-Instanz zur Entwicklung. Voraussetzung ist das erfolgreiche Durchführen des Leitfaden zur lokalen Installation von datacat.

Frontend

Das Frontend, in Form des datacat-Editors basiert auf dem JavaScript-Framework React. Daher werden Änderungen am Frontend nach dem Speichern der angepassten Datei direkt im Browser angezeigt.

Backend

Das Backend basiert vollständig auf Java. Es ist empfehlenswert, Änderungen am Code über einen Quelltext-Editor, wie Visual Studio Code, vorzunehmen. Anders als bei JavaScript ist es notwendig, damit die Änderungen über den Browser sichtbar sind, den entsprechenden Docker-Container vollständig neu zu starten. Wenn nur das Backend selbst bearbeitet wird, ist es nötig, den Container datacat zu löschen und das Image datacat_api zu entfernen. Das Löschen des Containers kann über den Befehl:

$ docker compose down

durchgeführt werden. Wenn das Image manuell gelöscht wurde, kann der Container "datacat" über die Konsole neu gestartet werden:

$ docker-compose up -d

Die Container db und mail betreffen in der Regel die Weiterentwicklung nicht. Über mail wird der E-Mail-Verkehr für die Registrierung neuer Nutzer verwaltet. Dieses Prozess ist in der lokalen datacat-Umgebung nicht funktionsfähig. Der db-Container betrifft die Datenbank und wird im Rahmen dieses Tutorials bearbeitet.