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 |
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.