Anpassbare Suchen (XML)
Sie können eigene komplexe Suchmuster verwenden, um Elemente zu finden. Dazu nutzen Sie die Datei inoref.xml im Verzeichnis $INODIR, deren Suchen dann im Untermenü Suchen zur Verfügung stehen.
Zweck
Sie können anpassbare Suchen nutzen, um komplexere Suchvorgänge, die mit der Standardsuche nur in mehreren Schritten oder gar nicht möglich wären, wiederverwendbar abzulegen. Die so definierten Suchen können auch bei der Generierung einer Dokumentation als vorgeschaltete Suchen zur Bestimmung der Menge der Elemente herangezogen werden.
Der Hauptzweck der anpassbaren Suchen liegt darin, komplexe Navigationen in einer Suche abzulegen.
Einige Beispiele für Suchen, die Sie realisieren könnten:
- transitiver Inhalt eines Pakets inklusive enthaltener Referenzen
- alle Parameter, die innerhalb eines Classifiers enthalten sind
- alle Typen, die von Attributen oder Parametern einer Klasse verwendet werden
Eine Suche beschreibt hierbei in Einzelschritten die filterbare Navigation von einem Element zu einem anderen.
Schematisch könnte die oben erwähnte Suche nach verwendeten Typen von Attributen oder Parametern einer Klasse wie folgt aussehen:
- [Für alle Klassen] Erweitere um direkt enthaltene Elemente [Ausgabe-Elementtypen: Attribut, Operation]
- [Für alle Operationen] Erweitere um direkt enthaltene Elemente [Ausgabe-Elementtyp: Parameter]
- [Für alle typisierbaren Elemente (hier: Attribute, Operationen)] Erweitere um Typen [Ausgabe-Elementtyp: Typ]
- Filtere die gesamte ermittelte Menge auf Typen
Die Umsetzung dieses beispielhaften Schemas würde folgendes Suchmuster ergeben:
<Referenz name="typesUsedByFeaturesOfClasses"
nameDe="Typen von Attributen oder Parametern in einer Klasse"
nameEn="types of attributes and parameters of a class">
<View>
<!-- Für alle Klassen -->
<ViewEingabeRestriktionsKlasse>
<Klassifizierung>
<Klasse>
<KlassenName>CLClass</KlassenName>
</Klasse>
</Klassifizierung>
</ViewEingabeRestriktionsKlasse>
<!-- direkt enthaltene Elemente -->
<ViewName>OwnedElement</ViewName>
<!-- Ausgabe-Elementtyp: Attribut, Operation -->
<ViewAusgabeRestriktionsKlasse>
<Klassifizierung>
<Klasse>
<KlassenName>CLProperty</KlassenName>
</Klasse>
</Klassifizierung>
<Klassifizierung>
<Klasse>
<KlassenName>CLOperation</KlassenName>
</Klasse>
</Klassifizierung>
</ViewAusgabeRestriktionsKlasse>
</View>
<View>
<!-- Für alle Operationen -->
<ViewEingabeRestriktionsKlasse>
<Klassifizierung>
<Klasse>
<KlassenName>CLOperation</KlassenName>
</Klasse>
</Klassifizierung>
</ViewEingabeRestriktionsKlasse>
<!-- direkt enthaltene Elemente -->
<ViewName>OwnedElement</ViewName>
<!-- Ausgabe-Elementtyp: Parameter -->
<ViewAusgabeRestriktionsKlasse>
<Klassifizierung>
<Klasse>
<KlassenName>CLParameter</KlassenName>
</Klasse>
</Klassifizierung>
</ViewAusgabeRestriktionsKlasse>
</View>
<View>
<!-- alle typisierbaren Elemente -->
<ViewEingabeRestriktionsKlasse>
<Klassifizierung>
<Klasse>
<KlassenName>ELTypedElement</KlassenName>
</Klasse>
</Klassifizierung>
</ViewEingabeRestriktionsKlasse>
<!-- Typen -->
<ViewName>Type</ViewName>
<!-- Ausgabe-Elementtyp: Typen -->
<ViewAusgabeRestriktionsKlasse>
<Klassifizierung>
<Klasse>
<KlassenName>ELType</KlassenName>
</Klasse>
</Klassifizierung>
</ViewAusgabeRestriktionsKlasse>
</View>
<!-- Gesamtmenge auf Typen filtern -->
<ErgebnisKlasse>
<Klassifizierung>
<Klasse>
<KlassenName>ELType</KlassenName>
</Klasse>
</Klassifizierung>
</ErgebnisKlasse>
</Referenz>
Zusätzlich haben Sie bei jedem Navigationsschritt auch die Möglichkeit, die Ein- und Ausgabe auf bestimmte Stereotype einzuschränken. Auf diese Weise lassen sich sehr spezielle Suchen erstellen, die auf Ihre Modellierungsmethodik abgestimmt sind.
Als mögliche Navigationsschritte stehen alle sogenannten Views zur Verfügung, die z.B. in der Innovator-API-Beschreibung in der Klasse K_VW2 gelistet sind.
Abgrenzung
Es ist im Rahmen einer anpassbaren Suche nicht möglich, bei einem Navigationsschritt Eigenschaftsfilter (z.B. auf Merkmale, Stereotypeigenschaften, Labels oder Texte) zu verwenden.
Aufbau und Funktionsweise der Datei inoref.xml
Der Aufbau der Datei inoref.xml ist konform zur zugehörigen Schemadatei inoref.xsd. Die Validierung der XML-Datei findet jeweils vor einer Auswertung statt. Nur eine positiv validierte Datei wird ausgewertet.
In der positiv validierten xml-Datei wird nach einem Tag mit dem Namen Referenz gesucht, dessen Attribut Name den Wert des Aufrufarguments Section hat. Sollten mehrere gleich benannte Tags Referenz existieren, wird das erste gefundene ausgewertet. Der Inhalt von Referenz wird ausgewertet und umgesetzt in einen Aufruf von ADClientAbleHelper.GetReferences.
Innerhalb einer Referenz muss mindestens ein Tag View und kann ein Tag ErgebnisKlasse folgen. Sie werden in die Aufrufparameter des View-Aufrufs GetReferences verpackt. Die Reihenfolge der View-Tags ist wichtig, da der Server nach Auswertung des Aufrufs diese Views in genau dieser Reihenfolge hintereinander ausführt. Ein einzelner Tag View ist bestimmt durch seinen Namen ViewName. Für den View können folgende weiteren Spezifizierungen getroffen werden:
- ViewEingabeRestriktionsKlasse beschränkt die Auswertung des Views auf die angegebenen Eingangsobjekte.
- ViewAusgabeRestriktionsKlasse beschränkt die Auswertung des Views auf die angegebenen Ausgangsobjekte.
Nach der Spezifikation der einzelnen Views kann eine ErgebnisKlasse angegeben werden.
ErgebnisKlasse beschränkt das Auswertungsergebnis auf die angegebenen Ausgangsobjekte nach Verarbeitung aller Views.
Ergebnisklasse, ViewEingabeRestriktionsKlasse und ViewAusgabeRestriktionsKlasse haben denselben Aufbau.
PATTERN, KIND und MODE können wie in der API üblich verwendet werden.
Detailliertere Klassifizierungen können dem xsd-Schema entnommen werden.
Was ist noch zu beachten?
Die anpassbare Suche arbeitet die in einem Durchlauf neu gefundenen Elemente erneut mit allen angegebenen Views ab. Ein Durchlauf umfasst die Abarbeitung aller Views in der angegebenen Reihenfolge. Dies geschieht so lange, bis die Menge nicht mehr wächst. Somit ist der Aufruf von transitiven Views nur selten notwendig.
Anpassen eines vorhandenen Suchmusters
Zusammenhang
Die Datei inoref.xml enthält im Tag Referenz mit dem Namen AttributeVonClassifiern eine Suche nach in Classifiern vorhandenen Attributen.
Innerhalb dieser Suchanweisung wird nur ein einziger View beschrieben: OwnedElement. Zusammen mit der ViewEingabeRestriktionsKlasse ergibt sich folgende Funktionsweise der Suche:
- Diese Suche nimmt alle ausgewählten Classifier entgegen und ermittelt die direkt enthaltenen Elemente. Jeder hierbei gefundene Classifier (z.B. geschachtelte Klassen) wird erneut auf alle direkt enthaltenen Elemente durchsucht.
- Sobald die Menge nicht mehr wächst, ist der Aufruf des Views abgeschlossen. Alle hierbei zusammengetragenen Elemente (d.h. alle direkt enthaltenen Elemente des Ausgangs-Classifiers sowie alle Elemente von direkt einem Classifier untergeordneten Classifier) werden nun durch die ErgebnisKlasse gefiltert. Als ErgebnisKlasse werden nur Attribute akzeptiert.
Die Suche liefert also alle Attribute von Classifiern, die von der Ausgangselementmenge erreichbar sind.
Die vorhandene Suche nach in Classifiern vorhandenen Attributen soll zu einer Suche erweitert werden, die sowohl Attribute als auch Operationen von Classifiern findet.
So gehen Sie vor
-
Öffnen Sie die Datei inoref.xml im Verzeichnis $INODIR und suchen Sie sich das Tag Referenz mit dem Namen AttributeVonClassifiern heraus.
-
Ergänzen Sie das Tag ErgebnisKlasse um ein weiteres Tag Klassifizierung mit dem Klassennamen CLOperation.
Ergebnis der ErgänzungKopieren<Referenz name="AttributeVonClassifiern"
nameDe="Attribute von Classifiern"
nameEn="Attributes of Classifiers">
<View>
<ViewEingabeRestriktionsKlasse>
<Klassifizierung>
<Klasse>
<KlassenName>CLClassifier</KlassenName>
<Exaktheit>false</Exaktheit>
</Klasse>
</Klassifizierung>
</ViewEingabeRestriktionsKlasse>
<ViewName>OwnedElement</ViewName>
</View>
<ErgebnisKlasse>
<Klassifizierung>
<Klasse>
<KlassenName>CLProperty</KlassenName>
<Exaktheit>true</Exaktheit>
</Klasse>
<Invertierung>false</Invertierung>
</Klassifizierung>
<!-- Ergänzung um Operationen -->
<Klassifizierung>
<Klasse>
<KlassenName>CLOperation</KlassenName>
<Exaktheit>true</Exaktheit>
</Klasse>
<Invertierung>false</Invertierung>
</Klassifizierung>
</ErgebnisKlasse>
</Referenz> -
Führen Sie die Suche aus.
Neben Attributen werden nun auch Operationen gefunden.