Copyright ©
Mindbreeze GmbH, A-4020 Linz, 2023.
Alle Rechte vorbehalten. Alle verwendeten Hard- und Softwarenamen sind Handelsnamen und/oder Marken der jeweiligen Hersteller.
Diese Unterlagen sind streng vertraulich. Durch die Übermittlung und Präsentation dieser Unterlagen alleine werden keine Rechte an unserer Software, an unseren Dienstleistungen und Dienstleistungsresultaten oder sonstigen geschützten Rechten begründet. Die Weitergabe, Veröffentlichung oder Vervielfältigung ist nicht gestattet.
Aus Gründen der einfacheren Lesbarkeit wird auf die geschlechtsspezifische Differenzierung, z.B. Benutzer/-innen, verzichtet. Entsprechende Begriffe gelten im Sinne der Gleichbehandlung grundsätzlich für beide Geschlechter.
Die Property Expression Language kann verwendet werden, um Metadaten zu extrahieren, oder Filterwerte zu erzeugen, auf die dann bei der Suche eingeschränkt werden kann.
Konstante literale Werte wie Zahlen oder Zeichenketten können angegeben werden.
Beispiel: | |
Zeichenkette (String) | "text" |
Ganzzahl (Integer) | 3 |
Boolscher Typ (boolean) | true |
Ein Identifier bezieht sich immer auf den aktuellen Kontext.
Dieser Kontext kann ein Dokument sein, aber auch ein Item.
Wird eine Referenz nachverfolgt, so ist dies ein Verweis auf das referenzierte Dokument.
Beispiel: | |
Reguläres Metadatum eines Dokuments | title |
Referenz-Metadatum eines Dokuments | referenz |
Eigenschaft innerhalb eines Items | itemProperty |
Zu beachten ist, dass folgende Character-Class ohne Escaping gültig ist: [A-Za-z0-9_:\-]
Folgende Zeichen in einem Identifier müssen also nicht escaped werden:
Alle anderen Zeichen müssen mit einem Backslash (\) escaped werden, damit die Zeichenkette als Identifier erkannt wird. Z. B. muss property.value folgendermaßen escaped werden: property\.value
Eine Liste mehrerer Ausdrücke, die alle emittiert werden.
Beispiel: | |
Ausdruck | Emittiert wird … |
list("text1", "text2", "text3") | "text1", "text2", "text3" |
Der unique-Operator entfernt Duplikate aus seinen Parametern, wobei die Reihenfolge beibehalten wird. Er kann auf alle Expressions angewendet werden die eine String-Repräsentation besitzen.
Beispiele: | |
Ausdruck | Emittiert wird … |
unique("a", "b", "c", "b") | "a", "b", "c" |
unique("a", "a", "a") | "a" |
Soll auf Metadaten des referenzierten Dokuments zugegriffen werden, kann der Pfad-Operator „/“ verwendet werden.
Beispiel: | ||
Variante 1 | referenz/title | Falls das aktuelle Dokument eine Referenzeigenschaft referenz hat, wird der Titel des referenzierten Dokumentes emittiert |
Variante 2 | referenz1/referenz2/title | Falls das aktuelle Dokument eine Referenzeigenschaft referenz1 hat, und das referenzierte Dokument wiederum eine Referenzeigenschaft referenz2 hat das auf ein weiteres Dokument verweist, wird dessen Titel emittiert |
Um inversen Referenzen zu folgen, kann der rev-Operator verwendet werden. Dazu ist es nötig, in den Reference Settings des Index die Referenzeigenschaft als Inverted Reference Metadata Keys zu konfigurieren. Siehe auch Konfiguration Mindbreeze InSpire – Registerkarte Indices (Bereich: Reference Settings).
Beispiel: | |
rev(parent)/mes:key | Es werden alle mes:key Werte der invertieren Referenz parent emittiert. |
Um String Referenzen zu folgen, kann der lookup Operator in Kombination mit dem Pfad-Operator (/) verwendet werden. Dazu ist es notwendig, in den Reference Settings des Index die Referenzeigenschaft als Inverted Hash Reference Metadata Keys und Hash Reference Target Metadata Keys zu konfigurieren, siehe auch Konfiguration Mindbreeze InSpire – Registerkarte Indices (Bereich: Reference Settings).
Beispiel: | |
lookup(author_email)/name | Falls das aktuelle Dokument eine Eigenschaft author_email hat, wird der Name der referenzierten Person emittiert |
lookup(creator_email,last_edited_email)/name | Falls das aktuelle Dokument eine Eigenschaft creator_email oder last_edited_email hat, werden die Namen der referenzierten Personen emittiert. Anmerkung: Es müssen 1 oder mehrere Parameter für lookup angegeben werden. |
Bei der Verwendung des lookup Operators sind folgende Einschränkungen zu beachten:
Außerdem wird empfohlen, die Anzahl der unterschiedlichen Werte aus Hash Reference Target Metadata Keys zu begrenzen, um Mehrdeutigkeiten zu vermeiden und eine angemessene Performance zu gewährleisten. Eine solche Begrenzung kann mittels „Precomputed Synthesized Metadata“ durchgeführt werden. Nachfolgend wird dies anhand eines Anwendungsbeispiels demonstriert:
Anwendungsbeispiel: Den Namen des Autors eines Dokuments synthetisieren. | |
Im folgenden Beispiel befinden sich Dokumente und Personen im Index. Auf den Dokumenten existiert bereits ein Metadatum author_email mit der E-Mail-Adresse des Autors. Das Ziel dieses Beispiels ist es, ein Metadatum author_fullname für alle Dokumente zu synthetisieren, indem Referenzen zu den Personen (Autoren) hergestellt wird. Dokument 1 mit folgenden Metadaten: key: "doc1", datasource/category: "DataIntegration", author_email: "max.mustermann@mindbreeze.com" Person 1 mit folgenden Metadaten: key: "person1", datasource/category: "Microsoft Graph", fullname: "Max Mustermann", email: "max.mustermann@mindbreeze.com" Als Ergebnis soll ein Metadatum author_fullname: "Max Mustermann" auf Dokument 1 erhalten werden. Dazu sind folgende Konfigurationsschritte in der Index-Konfiguration notwendig: | |
Precomputed Synthesized Metadata | |
Name | target_email |
Property Expression | regex_match(datasource\/category, "Microsoft Graph") && email |
Reference Settings | |
Inverted Hash Reference Metadata Keys | author_email |
Hash Reference Target Metadata Keys | target_email |
Synthesized Metadata | |
Name | author_fullname |
Property Expression | lookup(author_email)/fullname |
Ergebnis | |
Dokument 1 mit folgenden Metadaten: key: "doc1", datasource/category: "DataIntegration", author_email: "max.mustermann@mindbreeze.com", author_fullname: "Max Mustermann" Person 1 mit folgenden Metadaten: key: "person1", datasource/category: "Microsoft Graph", fullname: "Max Mustermann", email: "max.mustermann@mindbreeze.com", target_email: "max.mustermann@mindbreeze.com" |
Für weitere Informationen siehe Metadaten-Anreicherung – Precomputed Synthesized Metadata.
Um inversen String Referenzen zu folgen, kann der rev_lookup-Operator in Kombination mit dem Pfad-Operator „/“ verwendet werden. Dazu ist es notwendig, in den Reference Settings des Index die Refernzeigenchaft als Inverted Hash Reference Metadata Keys und Hash Reference Target Metadata Keys zu konfigurieren, siehe auch Konfiguration Mindbreeze InSpire – Registerkarte Indices (Bereich: Reference Settings).
Beispiel: | |
rev_lookup(email,author_email)/title | Es werden alle title Werte der invertieren String Referenz email emittiert. Beispiel für einen Anwendungsfall: Dokumente referenzieren Personen (Dokumentmetadatum author_email referenziert Person mit Metadatum email). Die Property Expression rev_lookup(email,author_email)/title liefert die Titel aller Dokumente, die von der ausgehenden Person geschrieben wurde. |
rev_lookup(list(email,email_alias), | Es werden alle title Werte der invertieren String Referenzen email und email_alias emittiert. Beispiel für einen Anwendungsfall: Dokumente referenzieren Personen (Dokumentmetadatum creator_email und last_edited_email referenzieren Person mit Metadatum email und email_alias). Die Property Expression (siehe linke Spalte) liefert die Titel aller Dokumente, die von der ausgehen Person erstellt oder das letzte Mal bearbeitet wurden. Anmerkung: Es müssen 2 oder mehr Parameter für rev_lookup angegeben werden. Der erste Parameter von rev_lookup ist das Zielmetadatum, auf das die Referenz zeigt. Mithilfe von list können hier mehrere Eigenschaften angegeben werden. Alle weiteren Parameter stehen für die Eigenschaften, von denen die Referenzen ausgehen. |
Der dfs-Operation kann verwendet werden, um alle Items zu emittieren die mittels eines Ausdrucks mittels Tiefensuche („DFS“ = Depth First Search) beschritten werden. dfs kann mit zwei oder drei Argumenten verwendet werden.
Beispiele: | |
dfs(.,parent)/mes:key | Emittiert alle mes:key Werte die ausgehend vom aktuellen Kontext mit dem Ausdruck parent erreicht werden können. |
dfs(.,rev(parent))/mes:key | Emittiert alle mes:key Werte die ausgehend vom aktuellen Kontext mit dem Ausdruck rev(parent) erreicht werden können. |
dfs(.,parent,"terminal")/mes:key | Emittiert den mes:key Wert des letzten (terminal) Items das vom aktuellen Kontext mit dem Ausdruck parent erreichbar ist. Wenn der Graph Baumförmig ist, wird der mes:key Wert der Wurzel emittiert. |
dfs(.,rev(parent),"terminal")/mes:key | Emittiert den mes:key Wert des letzten (terminal) Items das vom aktuellen Kontext mit dem Ausdruck rev(parent) erreichbar ist. Wenn der Graph Baumförmig ist, werden alle mes:key Werte der Blätter emittiert die vom akuellen Kontext aus erreichbar sind. |
Mit dem Filter-Operator kann eine zusätzliche Einschränkung definiert werden, die für selektierte Ausdrücke (i. d. R. für Items) gelten muss.
Beispiel: | ||
Variante 1 | title[../mes:numericdate < 1444381468000] | Der Titel des aktuellen Dokuments wird nur dann emittiert, falls dessen Datum vor 2015-10-09T09:04:28.000Z liegt (als Millisekunden seit 1970) |
Folgende Vergleichsoperatoren können verwendet werden:
entweder in Kombination mit den logischen Verknüpfungen
oder innerhalb eines Filters
Beispiele in Kombination mit logischen Verknüpfungen: | ||
Ausdruck | Emittiert wird … | |
Gleichheit | 3 = 3 && "true" || "false" | "true" |
Ungleichheit | 3 != 3 && "true" || "false" | "false" |
Kleiner | 3 < 3 && "true" || "false" | "false" |
Kleiner oder gleich | 3 <= 3 && "true" || "false" | "true" |
Größer | 3 > 3 && "true" || "false" | "false" |
Größer oder gleich | 3 >= 3 && "true" || "false" | "true" |
Beispiele in Kombination mit Filter: | ||
Ausdruck | Emittiert wird … | |
Gleichheit | title[3 = 3] | Titel des aktuellen Dokuments |
Ungleichheit | title[3 != 3] | nichts |
Kleiner | title[3 < 3] | nichts |
Kleiner oder gleich | title[3 <= 3] | Titel des aktuellen Dokuments |
Größer | title[3 > 3] | nichts |
Größer oder gleich | title[3 >= 3] | Titel des aktuellen Dokuments |
Bei der Und-Verknüpfung wird nur das letzte Element in der &&-Kette genau dann emittiert, falls alle Elemente davor etwas emittiert hätten und ihr Wert nicht als false interpretiert wird.
Beispiel: | ||
Ausdruck | Emittiert wird … | |
Literale 1 | "text" && "text2" && "text3" | "text3" |
Boolsche Ausdrücke | 0 && "text2" | nichts |
1=1 && "true" || "false" | "true" | |
1!=1 && "true" || "false" | "false" |
Bei der Oder-Verknüpfung wird das erste Element in der ||-Kette emittiert, das etwas emittiert. In kombinierten Ausdrücken, die sowohl && als auch || enthalten, hat das && Vorrang vor dem ||.
Beispiel: | ||
Ausdruck | Emittiert wird … | |
Literale 1 | "text1" || "text2" || "text3" | "text1" |
Boolsche Ausdrücke | 0 || "text2" | "text2" |
0=0 && "true" || "text2" | "true" |
Folgende arithmetische Operatoren können verwendet werden:
Ausdruck | Emittiert wird … | |
Addition | 3 + 2 3.2 + 5 | 5 8.2 |
Subtraktion | 3 – 2 3.2 – 5 | 1 -2.2 |
Multiplikation | 3 * 2 3.2 * 5 | 6 16.0 |
Division | 3 div 2 3.2 div 5 | 1 0.64 |
Modulo | mod(3, 2) | 1 |
Bei zusammengesetzten Ausdrücken ist eine Operator-Präzedenz unterstützt, sodass Multiplikation und Division eine höhere Präzedenz als Addition und Subtraktion aufweisen. Durch den Einsatz von Klammern kann die Präzedenz von Teilausdrücken geändert werden:
Ausdruck | Emittiert wird … | |
Präzedenz | 3 + 1 * 2 – 1 (3 + 1) * 2 – 1 (3 + 1) * (2 – 1) | 4 7 4 |
Mit dem Parent-Operator .. kann auf den übergeordneten Kontext zugegriffen werden.
Dieser Operator ist besonders im Kombination mit dem Filter-Operator nützlich, siehe Inverse Referenzen.
Beispiel: | ||
Variante 1 | referenz/title/.. | Entspricht referenz |
Variante 2 | referenz/title/../.. | Entspricht dem evaluierten Dokument selbst |
Mit der Funktion name kann von einem Value-Kontext auf den Namen des Metadatums oder der Item-Eigenschaft zurückgeschlossen werden.
Beispiel: | ||
Variante 1 | name(regex_match(title, "^T.*$")) | title wird emittiert, falls der Titel des aktuellen Dokuments dem regulären Ausdruck entspricht |
Mit der Funktion regex_match kann auf jene Zeichenketten eingeschränkt werden, die einem regulären Ausdruck entsprechen.
Beispiel: | ||
Variante 1 | regex_match(title, "^T.*$") | Titel, die mit “T” beginnen, werden emittiert (implizit Case sensitive) |
Variante 2 | regex_match(title, "^T.*$", "i") | Titel, die mit “T” beginnen, werden emittiert (explizit Case insensitive) |
Mit den Funktionen to_lower und to_upper können Expressions auf Groß- oder Kleinschreibung konvertiert werden.
Beispiel: | ||
to_lower("UPPER") | "upper" wird emittiert | |
to_upper("lower") | "LOWER" wird emittiert |
Mit der Funktion concat können mehrere Werte von Metadaten zusammengehängt werden.
Beispiel: | |
concat("Hauptplatz", " ", "123") | "Hauptplatz 123" wird emittiert |
Mit der Funktion replace können Zeichen(ketten) ersetzt werden, dabei können auch reguläre Ausdrücke verwendet werden.
Beispiel: | ||
Buchstaben entfernen | replace("12ab34cd56", "[a-z]", "") | "123456" wird emittiert |
replace("0123456789","[0-9]{9}$","") | "0" wird emittiert |
Mit der Funktion int kann eine Zeichenkette oder ein Datumswert auf eine Ganzzahl konvertiert werden.
Beispiel: | ||
Ausdruck | Emittiert wird … | |
Variante 1 | int("3") | Zahl 3 |
Variante 2 | int(dateproperty) | Datumswert der Eigenschaft "dateproperty" als Millisekunden seit 1970 |
Variante 3 | int(now()) | Aktueller Zeitpunkt als Millisekunden seit 1970 |
Mit der Funktion float kann eine Zeichenkette oder ein Datumswert auf eine Fließkommazahl konvertiert werden.
Beispiel: | ||
Ausdruck | Emittiert wird … | |
Variante 1 | float("3.124") | Zahl 3.124 |
Variante 2 | float(10) | 10 als Fließkommazahl |
Variante 3 | float(now()) | Aktueller Zeitpunkt als Millisekunden seit 1970 |
Mit der Funktion split(<string-expr>, <pattern>) kann ein String in mehrere Werte zerlegt werden.
Beispiel: | |
Ausdruck | Emittiert wird … |
split("a,b und c", " *(und|,) *") | Liste: a,b,c |
Mit der Funktion split(<string-expr>, <pattern>) kann ein String in eine hierachische Liste von Werten zerlegt werden. Diese Liste kann unter anderem als hierachische Facette angezeigt werden.
Beispiel:
Ausdruck | Emittiert wird … |
split_path(“/path/to/documents”, “/”) | Hierachische Liste: path, to, documents |
Mit der Funktion json_parse(<json>) kann ein JSON-Ausdruck analysieren und strukturiert dargestellt werden.
Beispiel:
Ausdruck | Emittiert wird … |
json_parse("\"a\"") | a |
json_parse("[\"a\", \"b\"]") | Liste: a,b |
json_parse("{\"int\": 1, \"str\": \"a\"}") | der analysierte JSON-Ausdruck hierarchisch als Item dargestellt |
Mit der Funktion parse_date können Zeichenketten als Datumswert interpretiert werden.
Parameter sind:
Zeichenketten-Wert, der geparsed werden soll
Datumsformatierung-Parameter, siehe http://userguide.icu-project.org/formatparse/datetime#TOC-Date-Time-Format-Syntax
(Optional) Locale, siehe http://userguide.icu-project.org/locale#TOC-Examples
Beispiel: | ||
Ausdruck | Emittiert wird … | |
Variante 1 | parse_date("1970-01-01 00:00:00 UTC", "yyyy-MM-dd HH:mm:ss zzz") | Entsprechender Datumswert |
Variante 2 | parse_date("October 2015", "MMMM y", "en") | Entsprechender Datumswert |
Die Funktion now kann verwendet werden, um auf den aktuellen Zeitpunkt Bezug zu nehmen. Der Wert ist gegeben in Millisekunden seit 1. Jänner 1970, was bei arithmetischen Ausdrücken wichtig ist.
Beispiel: | ||
Ausdruck | Emittiert wird … | |
Variante 1 | now() | aktueller Zeitpunkt |
Variante 2 | now() - 3600000 | Zeitpunkt vor einer Stunde |
Variante 3 | mes:date[../mes:date < now()] | Datumswerte von Dokumenten, die in der Vergangenheit liegen |
Variante 4 | now() - dateproperty > 3600000 && "true" || "false" | "true" |