Design: API Query and Rules
Queries and Rules
Fig. 1: Class Diagram API Queries and Rules
Query ermöglicht Datalog-ähnliche Abfrage
Abfragen können mittels Substitutions verknüpft werden
Performance im Rahmen:
10.000 Klassen
5 Properties / Klasse, 5 Referenzen / Klasse
binds(r,d) and has(d,p) ergibt 250.000 Substitutions
ca. 35 Sekunden bei ungebundener Abfrage
Variablen und Aufrufparameter werden über Abbildungstabelle gemappt (siehe hinten), nur mittels Generierung sinnvoll verwendbar
FactBasedQuery
Query-Adapter für FactCollection
resolve-Agorithmus siehe FactCollection
Basisklasse für alle “normalen” Queries
NonEqualsQuery
TODO: recognize sub-kinds
Pseudo-Query für Relation im if-Teil einer Regel
Zwei Versionen:
symmetrisch (!=): liefert bei ungebundenen (leeren) Aufruf alle Kombinationsmöglichkeiten
für Elemente a, b also: (a,b) und (b,a)
asymmetrisch (!!=): liefert bei ungebundenen (leeren) Aufruf halb so viele Ergebnisse
für Elemente a, b also nur: (a,b)
greift nicht auf Facts zurück, sondern auf Programmelemente
es werden nur Programmelemente gleicher Kind berücksichtigt
Substitutions
Variable --> ProgramElement
Variable wird über Index (in der lokalen Variablenliste) identifiziert
ungebundene Variable kann beim Resolven gebunden werden
argMapping
bildet Index einer lokalen Variablen (vgl. varNames oder varTypes) auf Parameterindex beim Query-Aufruf ab
wird generiert
Resolve
ungebundene Variablen einer Substitution werden gebunden
beim Binden wird Kopie der Substitution erstellt, die die (ungebundenere) Version ersetzt
implementiert im Wesentlichen in FactBaseCollection (siehe auch Rule und Query)