Wie funktioniert das Filtern, Sortieren und Selektieren?
Bevor die Sortier-Funktionalität in Kombination mit der Selektion zum Einsatz kommt, werden zunächst ggf. angegebene Filter auf die Liste der darzustellenden Objekte angewendet. Die Filter-Angaben dienen dem völligen Ausschluss von Infos aus der Liste. Die Rubrik-Zuordnung der Infos kann beispielsweise zum Filtern verwendet werden.
Nach dem Filtern wird auf den verbliebenen Rest der Liste auf Anforderung das Sortieren und die Selektierung in einem kombinierten Verfahren durchgeführt. Dazu werden die für das Sortieren und Selektieren relevanten Parameter aller zu sortierenden Infos beschafft.
Dann wird für die numerischen Sortier-Parameterwerte ihr Wertebereich bestimmt und auf den Wertebereich von 0 bis 1 abgebildet. Alphabetische Parameterwerte werden in Kleinbuchstaben umgewandelt, falls die Groß- /Kleinschreibung nicht berücksichtigt werden soll.
Mit einer Selektierung können Infos, die das Selektions-Kriterium erfüllen, vorrangig oder nachrangig gelistet werden. Selektierte Infos bekommen für jedes Kriterium eine Ergebnis-Relevanz zwischen 0 und 1 zugewiesen. Alle nicht-selektierten Werte bekommen den Wert 1 minus dem Wert der Ergebnis-Relevanz der Selektierten Werte.
Wenn beispielsweise alle Infos, die die Zeichenfolge "Murks" enthalten, den Relevanz-Wert von 0.1 bekommen, erhalten alle anderen Infos den Relevanz-Wert 0.9 .
Sind alle numerischen Sortier- und Ergebnis-Relevanz-Werte für die Infos bestimmt, werden sie pro Info miteinander multipliziert und ergeben den für die Platzierung in der Ergebnisliste relevanten numerischen Gesamtwert der Info. Nicht-numerische (beispielsweise alphabetische) Sortierwerte bleiben im Prinzip (Ausnahme: Kleinschreibung o.ä.) erhalten. Für die nicht-numerischen Werte wird die Sortier-Reihenfolge relevant. Also, ob beispielsweise zunächst nach dem Autoren-Namen und dann nach dem Veröffentlichungsdatum - oder umgekehrt - sortiert werden soll.
Um die im Prinzip sehr mächtige und fein justierbare Filter-, Sortier- und Selektions-Funktionalität auch für neue oder gelegentliche Nutzer handhabbar zu machen, werden in der Regel einzelne für den jeweiligen Aufgabenbereich am meisten relevante Voreinstellungen angeboten. Power-User können bei Bedarf dann an "allen" Parametern drehen (sobald die entsprechende Nutzer-Schnittstelle bereitsteht).
Welche Parameterwerte stehen für das Ranking zur Verfügung?
Das Ranking findet nicht nur beim INFOS-Modul der App statt, sondern kann an alle Datenlieferanten ausgelagert werden, um die zu übertragenden Datenmengen zu reduzieren. Die Parameter-Spezifikationen haben diesen Umstand zu berücksichtigen.
Die Sortier-Parameter ...
Die Sortier-Parameter sind in Form einer Liste von "SortSpec"-Datensätzen angegeben. Die Reihenfolge der Spezifikationen in der Liste spiegelt die Sortier-Rangfolge bei den nicht-numerischen Parameterwerten wider.
Nachfolgend die Liste der Parameter der Sortier-Spezifikationen.
- ParamName: Bezeichner des Objekt-Parameters, für den diese Sortier-Spezifikation gelten soll.
Dem Bezeichner kann ein "_"-Zeichen vorangestellt werden, wenn der Parameterwert mit der Objekt-/Werte-Liste geliefert wurde. Beispielsweise "_PUBLISHED". - Weight: Das Gewicht dieses Parameters für die Sortierung, falls es sich um einen numerischen Parameterwert handelt.
Negative Werte bedeuten eine invertierte Sortier-Reihenfolge. - Type: Art des Wertes des Parameters. Beispielsweise "String" für alphabetische Sortierung oder "Number" für eine numerische Sortierung.
- Title: Der (kurze) Titel zur Vorstellung bei der Nutzer-Auswahl.
- Description: Eine verbale Beschreibung zum Sortierparameter, die den Nutzern bei der Auswahl des Parameters hilft.
ParamName="PUBLISHED" Weight="-1" Type="DateTime"
Bedeutet: Die Infos sollen nach Veröffentlichungszeitpunkt sortiert werden; die neuesten Infos zuerst.
Angaben für die Unterstützung einer Nutzerauswahl sind nicht anbgegeben.ParamName="_PUBLISHED" Weight="-0.5" Type="DateTime" Title="Veröffentlicht" Description="Zeitpunkt der Veröffentlichung der Info"
Bedeutet: Die Infos sollen mit einer Sortier-Relevanz von 50% absteigend (neueste zuoberst) nach dem Veröffentlichungszeitpunkt sortiert werden. Der Veröffentlichungszeitpunkt wird mit der Objekte-/Werte-Liste mitgeliefert (beispielsweise durch die Liste der neuesten Infos des Projektes). Für die anderen 50% der Sortier-Relevanz muss noch eine andere Spezifikation angegeben werden (beispielsweise der Grad der inhaltlichen Verwandschaft). Die verbliebenen 50% können aber auch unter mehreren weiteren Parameterwerten aufgeteilt werden. Für eine Nutzerschnittstelle zur Einstellung der Sortierparameter wird "Veröffentlicht" als Titel angegeben und eine Erläuterung bereitgehalten.
Die Filter-und Selektions-Parameter ...
Die Filter- und Selektions-Parameter werden (beispielsweise als "SelectBy"-Parameterwert einer INFOS-Modul Spezifikation) als Liste von "SelectSpec"-Datensätzen angegeben. Die Reihenfolge der Datensätze spielt hier keine Rolle. Aus einem Selektions-Datensatz wird ein Filter-Datensatz, wenn der Relevance-Parameter entweder den Wert 0 oder 1 hat.
Nachfolgend die Parameter der Filter-(und Selektions-) Spezifikationen:
- ParamName: Name des Parameters, dessen Wert zum Filter oder Selektieren verwendet werden soll.
- Operator: Operator, der den Parameterwert und den Vergleichswert angewendet werden soll:
- Textbasierte Operatoren: contains, startsWIth, endsWith,
- Numerische Operatoren: gt, lt, eq, ne, ge, le
- ...
Anmerkung: Ein "nicht" -Operator ist nicht vorgesehen, da die Negierung über den Relevance-Parameterwert erreicht werden kann. - ReferenceValue /ReferenceValues: Konstante (Zahlenwert oder Zeichenfolge), mit der der Parameterwert in Beziehung gesetzt werden soll.
(Zukünftig vielleicht auch mal noch "ReferenceParam" ?) - Weight: Die Relevanz, die die Info bekommen soll, wenn das Filter-/Selektionskriterium erfüllt wird. Bei Nicht-Erfüllung wird der Relevanzwert auf (1 - Relevance) gesetzt.
- Title: Der (kurze) Titel zur Vorstellung bei der Nutzer-Auswahl.
- Description: Eine verbale Beschreibung zum Filterparameter, die den Nutzern bei der Auswahl des Parameters hilft.
ParamName="CLASSIFICATIONS" Operator="contains" ReferenceValues="aAaA BbBb cCCc" Relevance="1"
Bedeutet, dass nur solche Infos (bzw. Objekte) weiter beachtet (z. B. versandt) werden, die den Rubriken ("CLASSIFICATIONS") "aAaA" oder "BbBb" oder "cCCc" zugeordnet sind.ParamName="CLASSIFICATIONS" Operator="contains" ReferenceValues="DddD EEee" Relevance="0.8"
Bedeutet, dass die Infos (bzw. Objekte), die den Rubriken "DddD" oder "EEee" oder "cCCc" zugeordnet sind, im Verhältnis 0.8 : 0.2 (also vier mal) relevanter sind, wie die restlichen Infos.ParamName="CONTENT" Operator="contains" ReferenceValues="murks" Relevance="0"
Bedeutet, dass keine Infos weiter beaachtet werden sollen, die im Inhalt ("CONTENT") den Text "murks" enthalten. Die Groß-/Kleinschreibung ist hier irrelevant. Die eventuell im Text enthaltenen "soft hyphen"-Zeichen (weicher Trennstrich: ) werden dabei ignoriert. "Achtung" wird beispielsweise als "achtung" interpretiert.ParamName="TITLE" Operator="contains" ReferenceValues="INFOS" Relevance="1"
Bedeutet, dass nur solche Infos weiter beaachtet werden sollen, die im Titel ("TITLE") den Text "INFOS" enthalten. Die Groß-/Kleinschreibung wird beachtet, da im Text mindestens 1 Großbuchstabe enthalten ist.ParamName="author" Operator="contains" ReferenceValues="Ernie" Relevance="0.2"
Bedeutet, dass Infos des Autors "Ernie" nur ein Viertel (0.8 : 0.2) der Relevanz bekommen sollen, wie der Rest.
Parameter für die "Fernabfrage" von gefilterten und sortierten Listen:
Für die WIM-App kann es notwendig sein, mehrere (vor-)sortierte Infos-Listen bei verschiedenen Quelle anzufordern und zusammenzuführen. Auch kann es notwendig sein, einen eigentlich nur sehr kleinen Anteil einer auf dem Frontend-Server liegende sehr lange Liste nach einer speziellen Sortierung abzurufen. Dann lässt sich die Menge der zur App zu übertragenden Daten erheblich verringern, wenn die Liste der Infos bereits auf dem Frontend-Server sortiert wird und nur der bereits (vor-)sortierte und mengenmäßig begrenzte Teil der theoretisch sehr langen Liste übermittelt wird.
Für die "Fernabfrage" von Infos-Listen gibt es spezielle zusätzliche Parameter:
- ObjSpecs: Die Angabe der Liste der Kennungen der Infos (ohne Wertangabe pro Info). Gegebenenfalls auch eine indirekte Spezifikation mit Angabe des Objektes und Parameters, bei dem die eigentliche Liste der Infos-Kennungen zu besorgen ist.
- ObjValSpecs: Die Angabe der Liste der Kennungen der Infos inklusive einer Wertangabe pro Info. Gegebenenfalls auch eine indirekte Spezifikation mit Angabe des Objektes und Parameters, bei dem die eigentliche Liste der Infos-Kennungen zu besorgen ist.
- Limit: Die maximale Länge der abgefragten Infos-Liste.
- Offset: Eine Infos-Liste kann "häppchenweise" abgefragt werden. Mit Offset kann angegeben werden, ab welcher Position der Liste das zu sendende Häppchen beginnen soll.
- Version: Bei der häppchenweisen Abfrage von Listen könnte sich die Liste während der Zeit zwischen den Abfragen geändert haben. Daher wird der Änderungszeitpunkt des letzten Häppchens beider nächsten Abfrage mitgeliefert. Hat sich der Zeitpunkt geändert, wird dieses gemeldet.
- Checksum: Ändern sich Infos-Listen sehr schnell, ist die Verionsangabe bei häppchenweise übertragenen Listen unpraktisch. Dann wird eine Prüfsumme zu den bisher übermittelten Häppchen angegeben.
Limit="1" Offset="0"(plus Angabe von Filter- und Sortierparametern)
Bedeutet: Es soll nur die erste Info der (sortierten) Liste der abgefragten Infos zurückgemeldet werden. Das kann beispielsweise die neueste Info aus einer Gruppe ausgewählter Rubriken sein.- ObjValSpec="@.latestPublished" Limit="10" (plus ggf. weitere Angaben)
Bedeutet: Die Liste der Info-Objekte soll vom "latestPublished"-Parameter des Projekt-Objekts besorgt werden. Zum Sortieren kann bei dieser Liste der ParamName "_PUBLISHED" verwendet werden, weil zu den Objekt-Kennungen jeweils der Veröffentlichungszeitpunkt als Wert-Angabe beigefügt ist. Von der Infos-Liste sollen nur die maximal 10 ersten Kennungen übertragen werden. Da im Beispielfall die Liste bereits sortiert ist, wären meist keine expliziten Sortierangaben notwendig. - more tbd: ?*?
Welche Schritte werden zur Ermittlung der darzustellenden Liste ("ranking") durchlaufen?
Filtern plus sortieren ist doch eigentlich relativ einfach - sollte man meinen. In der mächtigen Kombination beim WIM-System wird das dann aber doch ein relativ anspruchsvolles Verfahren. Kein Wunder, dass man eine solch mächtige Funktionalität nur selten findet.
Ermittlung einer "Roh-Liste" der darzustellenden Infos:
Für das INFOS-Modul gibt es verschiedene "Eingänge". Die Infos können direkt als Liste von Objekt-Spezifikationen (ObjSpecs) oder Objekt-Spezifikation plus Wertangabe (ObjValSpecs) -Liste angegeben werden. Anstelle einer "fertigen" Objekt-Spezifikationsliste kann auch eine indirekte Angabe erfolgen. Beispiel ObjValSpecs="@.latestPublished 1". Hier müssen die Werte der angegebenen Objekt (bzw. Projekt-) Parameter besorgt und ggf. zusammengefügt werden.
Bei der Abfrage der Objektspezifikationslisten sollten (zukünftig) möglichst bereits die Selektions- und Sortierparameter mitgegeben werden, damit die Menge der zu übertragenden Daten eingedämmt werden kann.
Eine alternative "Quelle" für die Roh-Liste der darzustellenden Infos kann dem INFOS-Modul mit dem Parameter ReferenceTopics mitgeteilt werden. Dann werden alle mit den in ReferenceTopics verlinkten Info-Objekte als Roh-Liste verwendet. Dieses ist beispielsweise für Blogs nützlich.
Die (Roh-)Liste der Objekt-Spezifikationen wird im Array this.$rawObjSpecs abgelegt. Die eventuell bereits verfügbaren Parameterwerte der Objekte in this.$objParamValues[...] . Im ZUge der weiteren Stufen werden ggf. weitere Parameterwerte nachgetragen, sobald sie beschafft wurden.
Ermittlung der "expandierten" Liste der darzustellenden Infos:
Die "Roh-Liste" der Objekt-Spezifikationen kann noch "indirekte" Angaben ("@...") enthalten. Diese indirekten Angaben müssen aufgelöst werden. Das Ergebnis wird dann in this.$expandedObjSpecs abgelegt.
Herausfiltern der unerwünschten Infos:
Für das Filtern der Infos sind erstmal alle dafür notwendigen Parameterwerte zu beschaffen.
Wenn Angaben zur Filterung der Infos-Liste gemacht wurden, werden diese als nächstes angewendet. Hier kommen SelectSpec -Datensätze zur Anwendung, falls sie einen Relevanzwert von 0 oder 1 haben. Auf diesem Wege können beispielsweise Infos aussortiert werden, die nicht den gewünschten Rubriken zugeordnet sind.
Die Liste der nach dem Filtern verbliebenen Objekte wird in this.$filteredObjSpecs abgelegt.
Beschaffen benötigter Parameterwerte der Infos und anwenden der Selektion:
Für das Selektieren und Sortieren der Infos sind erstmal alle dafür notwendigen Parameterwerte zu beschaffen und ggf. in eine numerische Form zu bringen. Dabei werden die Wertebereiche für die einzelnen Parameterarten ermittelt.
Dann werden die Parameterwerte der Infos "normalisiert". Der kleinste Wert wird auf den Wert 0 abgebildet, der größte auf den Wert 1 und die restlichen Werte proportional auf den Bereich dazwischen.
Als nächstes werden die Selektionswerte auf alle zum Sortieren zu verwendenden Parameterwerte angewendet. Dazu werden sie jeweils mit den normalisierten Werten multipliziert.
Endlich: Sortieren der Infos:
Anhand der Weight-Werte der Sortieranweisungen (SortSpec -Datensätze) wird für alle numerischen Parameter ein normiertes Sortiergewicht ermittelt. Die absoluten Werte der Sortiergewichte aller Sortierranweisungen müssen zusammen den Wert 1 ergeben. Alle normalisierten Parameterwerte werden dann mit den zugehörigen Sortiergewichten multipliziert. Dis so erhaltenen Werte werden pro Info zu einem einzigen Zahlenwert zusammengefasst.
Alphabetische Parameterwerte lassen sich für die hier angestrebten Zwecke nicht sinnvoll in einen sortier-relevanten Zahlenwert schrumpfen. Daher kommt hier die Sortier-Reihenfolge ins Spiel. Die Reihenfolge der in den SortBy -Vorgaben enthaltenen Datensätze spiegelt die Sortierfolge wider. Daraus kann sich dann beispielsweise ergeben, dass zunächst nach Autorenname und dann nach Veröffentlichungszeitpunkt (oder umgekehrt) sortiert werden soll. Statt den einfachen Veröffentlichungszeitpunkt könnte auch die Nutzerbewertung der Info in Kombination mit dem Veröffentlichungszeitpunkt als Sortierparameter zum Einsatz kommen.
Die Liste der sortierten Objekte wird unter this.$sortedObjSpecs abgelegt.
...
INFOS-Modul Technische WIM-Verfahren Cloud-Server-Verfahren WIM-App-Verfahren (techn.) Objekte beim WIM-System Gewünschte Features
