Erweiterte Suchen (SQL)

Sie können eine an SQL angelehnte Abfragesprache verwenden, um Elemente zu finden. Die gespeicherten erweiterten Suchen stehen dann im Untermenü Suchen zur Verfügung.

Komplexe Suchabfragen

Sie können eine an SQL angelehnte Abfragesprache verwenden, um Elemente zielgerichteter zu finden, indem insbesondere die Zielmenge der Suche mehrstufig eingeschränkt wird.

Zur Definition einer erweiterten Suche wird das Verfahrensrecht Massenbearbeitung nutzen benötigt.

Wenn eine erweiterte Suche unter einem Namen gespeichert wird, dann steht sie im Untermenü Suchen zur Verfügung, als modellweite Suche auch für alle anderen Benutzer.

Suchabfragen werden im Dialog Suchen im Register Erweitert formuliert.

Editor

IntelliSense

Bei Formulierung des Ausdrucks können Sie über die Tastenkombination [Strg]+[Leertaste] eine IntelliSense-Liste öffnen, aus der an dieser Position gültige Symbole auswählbar sind. Der Text vor der Einfügeposition wirkt als Filter.

Die IntelliSense-Liste bietet Namen von Klassen, Stereotypen, Eigenschaften und Werten stets in der Modellsprache an. Die Suche funktioniert auch nur mit einer in der Modellsprache formulierten Abfrage.

Um eine Suche mit eingestellter Anzeigesprache erfolgreich ausführen zu können, sind Spezifikationstexte und Eigenschaftswerte mit den Typen Aufzählung und Zeichenkette als Platzhalter zu formulieren.

Syntaxhighlighting

Symbole werden in Abhängigkeit von ihrer Funktion im Ausdruck eingefärbt.

  • Zieltyp
  • Eigenschaftsname
  • Eigenschaftswert
  • Abfragename
  • Kommentar

Grundlagen der Abfrageformulierung

Syntaxdiagramme

Abfragen können in einer an SQL angelehnten Syntax formuliert werden.

Die folgenden Syntaxdiagramme veranschaulichen die grundsätzliche Grammatik von Abfragen.

Wurzel (Root)

Abfrage (Query)

Zieltyp (TargetType)

Kombinierte Eigenschaften (CombinedPropExpr)

Unterabfrage (Subquery)

Sammlung (Collect)

Navigation (Navigate)

Ziel der Suche - SELECT FROM

Legt den Typ der Elemente fest, die gesucht und im Ergebnisbereich angezeigt werden. Die Angabe erfolgt entweder über eine Metaklasse des Innovator-Datenmodells oder ein Stereotyp.

Beispiele:

  • Metaklasse: #Klasse#
  • Stereotyp: «class» #Klasse# [ROOT PROFILE]

Hinweise:

  • Die Formulierung des Suchausdrucks erfolgt in der Oberflächensprache (s.u.)
  • Die Angabe von Klasse und Profil beim Stereotyp ist optional. Dann werden jedoch evtl. gleichnamige Stereotype in unterschiedlichen Profilen oder sogar zugehörig zu unterschiedlichen Metaklassen gesucht.
  • Die Guillemets « und » werden im Editor durch die Eingabe von << bzw. >> erzeugt.

Tipp: Es ist wesentlich einfacher, den Zieltyp aus der IntelliSense-Liste auszuwählen, statt diesen einzutippen.

Wird als Zieltyp das Schlüsselwort ELEMENTS verwendet, dann erfolgt bei der Suche keine Einschränkung des Elementtyps.

Suchkriterien - WHERE

Elementeigenschaft

Ein Suchkriterium ist die Abfrage einer Eigenschaft der Elemente, die dem Zieltyp entsprechen, auf einen Wert.

Eigenschaften sind Elementmerkmale, Stereotypeigenschaften, Labels und Spezifikationstexte. Die Art der Eigenschaft ist in der IntelliSense-Liste am Symbol erkennbar.

Durch Verwendung des Schlüsselworts SPECIFICATIONS kann in allen Spezifikationstexten unabhängig von der Textart gesucht werden.

Ein Suchkriterium ist in der Regel ein Triple Eigenschaftsname, Operator und Vergleichswert.

Wertetypen

Die folgende Tabelle beschreibt die Typen von Werten und deren Format:

Werttyp Format

Beispiele

Boolescher Wert TRUE, FALSE

TRUE

FALSE

Numerischer Wert Ganze Zahl

-7

42

Text Text in einfachen Hochkommas

'Suchmuster'

Aufzählungswert Text in einfachen Hochkommas

'in Arbeit'

Datum

'YYYY-MM-DD'

'YYYY-MM-DD hh:mm'

TODAY

'2019-11-19'

'2019-05-27 14:57'

Hinweise:

  • Bei Aufzählungstypen sind die möglichen Werte über IntelliSense auswählbar.
  • Bei einem Datumsformat bezeichnet "TODAY" das aktuelle Datum der Ausführung.

Operatoren auf textuellen Werten

Die folgende Tabelle beschreibt die Operatoren auf textuellen Werten und deren Funktion:

Operatoren Funktion

Vergleich des gesamten Textes mit dem Wert oder
Suche des Werts auf Vorkommen im Text

Berücksichtigung von Groß-/ Kleinschreibung
=, <> Gleichheit, Ungleichheit Gesamter Text nein
LIKE Suche mit einfachem Textmuster
(Sehen Sie hierfür: "Einfache Textmuster")
Gesamter Text nein
CONTAINS Einfache Textsuche Vorkommen im Text nein
REGEXP Textsuche mit regulären Ausdrücken
(Sehen Sie hierfür: "Verwendung von regulären Ausdrücken")
Vorkommen im Text ja

Unäre Operatoren

Diese Operatoren erfordern keinen Wert.

  • IS NULL, IS NOT NULL

    Prüfung auf nicht gesetzten Wert

    Verwendbar bei textuellen Werten, Aufzählungstypen und Datumsformaten

  • IS DEFAULT, IS NOT DEFAULT

    Prüfung auf Gleichheit mit dem Standardwert

    Verwendbar für Stereotypeigenschaften, Labels und Spezifikationstexte

Platzhalter

In textuellen Werten können Platzhalter im Format $Name$ verwendet werden. Bei Ausführung der Suche erscheint dann ein Dialog, in dem der Wert des Platzhalters angegeben werden kann.

Logische Operatoren

Suchkriterien können mit Und- oder Oder-Verknüpfungen kombiniert werden.

Für Klammerungen sind bei Bedarf runde Klammern zu verwenden.

Unterabfrage

Suchkriterien können nicht nur auf Elementen des Zieltyps selbst, sondern auch auf Elementen, die mit diesen verbunden sind, formuliert werden. Dazu dienen Unterabfragen.

In Unterabfragen muss die Beziehung angegeben werden, die ausgehend vom Zieltyp verfolgt wird, um eine neue Ausgangsmenge zu erhalten. Diese Menge kann durch die optionale Angabe eines Typs gefiltert werden. Dann folgen die Suchkriterien, die auf die neue Ausgangsmenge angewendet werden. Ein Element genügt der Unterabfrage, wenn diese mindestens einen Treffer liefert. Optional kann auch ein Vergleich mit einer anderen Anzahl angegeben werden.

Beispiel: Suche nach allen Klassen, die Java-Konstruktoren mit genau zwei Eingabeparametern besitzen

SELECT FROM #Klasse# WHERE
( SELECT FROM "Eigene Operationen" : «JavaConstructor» #Operation# [J2SE] WHERE
( SELECT FROM "Parameter" WHERE "Richtung" = 'Eingabe' ) = 2
)

Achtung: Das Ergebnis der Suche sind immer Elemente des Zieltyps der obersten SELECT FROM-Anweisung. Im Beispiel werden also Klassen gesucht und nicht etwa Parameter.

Erweiterung des Zieltyps – COLLECT

Der Typ der gesuchten Elemente wird im SELECT-Ausdruck festgelegt. Das Schlüsselwort COLLECT ermöglicht einen Wechsel des Zieltyps, indem analog zu Unterabfragen eine Beziehung verfolgt wird. Das Ergebnis der Suche enthält dann Elemente beider Typen.

Beispiel: Suche nach Klassen und deren Operationen

SELECT FROM #Klasse#
COLLECT "Eigene Operationen"

Ist der SELECT-Ausdruck durch ein WHERE eingeschränkt, dann wirkt die Einschränkung auch auf einen nachfolgenden COLLECT.

Beispiel: Suche nach Klassen mit „Entity“ im Namen und deren Operationen

SELECT FROM #Klasse#
   WHERE "Name" CONTAINS 'Entity'
COLLECT "Eigene Operationen"

Der COLLECT-Ausdruck kann analog zu SELECT durch ein WHERE eingeschränkt werden.

Beispiel: Suche nach Klassen und deren Operationen mit mindestens einem Parameter

SELECT FROM #Klasse#
COLLECT "Eigene Operationen"
   WHERE ( SELECT FROM "Parameter" ) > 0

Wie bei Unterabfragen kann bzgl. des Typs gefiltert werden.

Beispiel: Suche nach Klassen und deren Operationen mit Stereotyp «operation»

SELECT FROM #Klasse#
COLLECT "Eigene Operationen" : «operation» #Operation# [ROOT PROFILE]

Mehrere COLLECT-Ausdrücke können aufeinanderfolgen.

Beispiel: Suche nach Klassen, deren Operationen und Parameter

SELECT FROM #Klasse#
COLLECT "Eigene Operationen"
COLLECT "Parameter"

Navigation über Beziehungen – NAVIGATE

Das Schlüsselwort NAVIGATE findet dann Verwendung, wenn wie bei COLLECT Elemente verschiedener Zieltypen gesucht werden sollen, diese aber nicht unmittelbar über eine Beziehung verbunden sind.

Beispiel: Suche nach Klassen und den Parametern derer Operationen

SELECT FROM #Klasse#
NAVIGATE "Eigene Operationen"
COLLECT "Parameter"

Im Unterschied zum COLLECT werden bei NAVIGATE Elemente des neuen Zieltyps also nicht in die Ergebnismenge aufgenommen. Bezüglich Einschränkungen mittels WHERE-Ausdruck oder Filterung des Typs verhalten sich COLLECT und NAVIGATE identisch.

Kombination von Suchergebnissen mit UNION und EXCEPT

Mehrere Abfragen können mit dem Schlüsselworten UNION und EXCEPT kombiniert werden.

Mit UNION werden die Ergebnisse zweier Abfragen vereinigt.

Beispiel: Suche nach allen Klassen und Entitäten

SELECT FROM #Klasse#
UNION
SELECT FROM #Entität#

Mit EXCEPT wird das Ergebnis einer Abfrage um das Ergebnis einer zweiten Abfrage reduziert.

Beispiel: Suche nach allen Konstruktoren von Klassen

SELECT FROM #Klasse#
   COLLECT "Eigene Operationen" : «Konstruktor» #Operation# [UML 2]
EXCEPT
SELECT FROM #Klasse#

Mittels UNION und EXCEPT können gespeicherte Abfragen kombiniert werden. Diese können bei Bedarf in der IntelliSense-Liste ausgewählt werden.

Beispiel: Suche nach allen Klassen und Entitäten (mittels der gespeicherten Suche "Suche nach Entitäten")

SELECT FROM #Klasse#
UNION
Suche nach Entitäten

Sowohl lokale als auch modellweite Suchen können verwendet werden. Existieren Suchen namensgleich in beiden Ausprägungen, dann wird bei der Ausführung die lokale verwendet.

Eine abgespeicherte Suche enthält auch ihren Suchbereich. Sie behält diesen bei, wenn sie innerhalb einer anderen Abfrage aufgerufen wird.

Enthält eine gespeicherte Suche Platzhalter, dann werden deren Werte über einen eigenen Dialog abgefragt.

Kommentare

Kommentare werden mit zwei Bindestrichen eingeleitet und reichen bis zum Zeilenende. Kommentare werden grau dargestellt.

Technische Besonderheiten

Für Metaklassen, Stereotype, Profile sowie Namen und Werte von Merkmalen werden diverse Anführungszeichen verwendet. Sind diese Zeichen selbst im jeweiligen Ausdruck enthalten, dann muss ihnen dort das Escape-Zeichen Backslash (\) vorangestellt werden. Gleiches gilt für das Escape-Zeichen selbst.

Abfragen sind in beiden Oberflächensprachen ausführbar. Ein Zieltyp wie z.B. #Klasse# wird auch mit englischer Oberflächensprache gefunden.

Einschränkung

Die volle Funktionalität der Abfragen ist nur bei eingestellter Modellsprache gegeben. Bei alternativen Anzeigesprachen werden ebenfalls die Abfragewerte der Modellsprache verwendet, wodurch nur Abfragen ohne direkten Textbezug funktionieren.

Spezifikationstexte und Eigenschaftswerte mit den Typen Aufzählung und Zeichenkette werden stets mit dem Wert in der Abfrage gesucht. Für die Verwendung einer Suche in einer Anzeigesprache empfiehlt sich daher die Verwendung von Platzhaltern, um den sprachabhängigen Wert während der Suche eingeben zu können.