Definition von Suchabfragen
Suchabfragen werden in Sciformation ELN durch Name-Wert-Paare beschrieben, wie sie in HTTP-Requests oder auch in Maps beschrieben werden können. Die HTTP-Requests können wahlweise durch ein HTML-Formular oder direkt als URL-Aufruf an das Servlet performSearch ausgelöst werden.
Pflichtparameter ist der Name der Entity-Klasse, die als Parameter table angeben wird, z.B. CdbContainer.
Werden keine weiteren Parameter angegeben, so werden alle für den aktiven Nutzer sichtbaren Datensätze ausgegeben, sofern diese nicht als deaktiviert (disabled) markiert sind. Um (auch) die deaktivierten Einträge zu erhalten, muß der Parameter disabled_filter entweder auf DISABLED_ONLY = 1 (nur deaktivierte Datensätze) oder DISABLED_ANY = 2 (alles) gesetzt werden. Möchte man nur Einträge erhalten, die der Nutzer durch Häkchen selektiert hat, dann kann man selected_only auf 1 oder true setzen.
Die Filterkriterien werden durch positive Ganzzahlen indiziert, der Parameter query beschreibt deren Verknüpfung in einem Boole'schen Ausdruck, z.B. "[0] AND ([1] OR [2]) AND NOT [4]". Fehlende runde Klammern werden am Rand angefügt, um nach Möglichkeit einen gültigen Ausdruck zu erhalten. Ein Filterkriterium # besteht mindestens aus dem Feldnamen (im Java-Objekt) crit# und einem Vergleichswert val#, z.B. sucht
- table=OrgPerson
- query=[0]
- crit0=firstName
- val0=Felix
Für eine genauere Kontrolle über die Suchergebnisse kann man noch einen der nachfolgend aufgeführten Operatoren als op# angeben:
- Allgemein
- OP_IS_NULL = 7: ist NULL
- OP_IS_DEFINED = 55: ist nicht NULL
- OP_SUBQUERY = 26: eine mehrteilige Bedingung, die über SQL-JOINs geprüft werden kann
- val# ist eine Kombination weiterer Kriterien, z.B. val60=[61] AND [62]
- crit# ist der Name eines Felds, typischerweise eine Collection, z.B. crit60=cdbMoleculePropertyCollection
- crit61/op61/val61 sowie crit62/op62/val62 legen Eigenschaften fest, die wenigstens ein Eintrag der genannten Collection erfüllen muß
- Der SQL-Aliasname für die verknüpfte Tabelle wird automatisch erzeugt, d.h. es ist möglich, mehrere unabhängige Bedingungen auf die gleiche Collection zu prüfen.
- OP_SUBSELECT_NOT = 57: wählt alle Einträge aus, die nicht mit Daten verknüpft sind, die die Bedingungen erfüllen. Im Unterschied zu OP_SUBQUERY muß eine echte Unterabfrage ausgeführt werden, deren Ergebnisse in der Hauptabfrage ausgeschlossen werden. Warum? Es kann mehrere verknüpfte Einträge geben, manche erfüllen die Bedingungen der Unterabfrage und andere erfüllen diese nicht. In diesem Fall soll trotzdem der Ausschluß erfolgen. Beispiel: Möchte man nach allen Substanzen suchen, die KEINEN IUPAC-Namen haben, dann würde mit OP_SUBQUERY nach solchen gesucht, die einen Nicht-IUPAC-Namen haben (wahrscheinlich die meisten). OP_SUBSELECT_NOT liefert das gewünschte Ergebnis.
- OP_SUBSELECT = 54: die Negation zu OP_SUBSELECT_NOT (selten gebraucht, im Umgang mit NULL-Werten oder OP_IS_DEFINED)
- Textfelder
- OP_CONTAINS_ALL = 1: enthält alle Wörter, verarbeitet auch Sätze in doppelten Anführungszeichen
- OP_CONTAINS_ALL_BINARY = 59: wie OP_CONTAINS_ALL, aber unter Beachtung der Groß-/Kleinschreibung
- OP_ALL_CONTAINS_PARTS = 46: für alle Wörter bzw. Sätze in doppelten Anführungszeichen kann über wenigstens eine passende Tabellenverknüpfung ein Treffer zugeordnet werden
- OP_CONTAINS_ONE = 2: enthält eines der Wörter, verarbeitet auch Sätze in doppelten Anführungszeichen
- OP_CONTAINS_ONE_BINARY = 60: wie OP_CONTAINS_ONE, aber unter Beachtung der Groß-/Kleinschreibung
- mit Entfernung von Leerzeichen an Anfang und Ende
- OP_CONTAINS = 3: enthält den Text
- OP_EXACT = 4: entspricht dem Text
- OP_ALL_EXACT = 35: für alle angegebenen Werte kann über eine passende Tabellenverknüpfung ein Treffer zugeordnet werden, z.B. bei der Suche nach Gruppen, denen eine gegebene Liste von Tag-Namen zugeordnet ist
- analog dazu OP_ALL_CONTAINS = 36; OP_ALL_CONTAINS_ALL = 37; OP_ALL_CONTAINS_ONE = 38
- OP_STARTSWITH = 5: beginnt mit dem Text
- OP_ENDSWITH = 6: endet mit dem Text
- ohne Leerzeichenentfernung
- OP_CONTAINS_NT = 42: enthält den Text
- OP_EXACT_NT = 43: entspricht dem Text
- OP_STARTSWITH_NT = 44: beginnt mit dem Text
- OP_ENDSWITH_NT = 45: endet mit dem Text
- OP_BINARY = 27: entspricht dem Text, auch Groß-/Kleinschreibung
- OP_IN_BINARY = 29: Wert in der Datenbank ist in Liste enthalten, entweder als kommagetrennte Liste, als Array oder direkt als Collection
- OP_NOT_IN_BINARY = 66: Negation von OP_IN_BINARY
- OP_ALL_BINARY = 34: für alle angegebenen Werte kann über eine passende Tabellenverknüpfung ein Treffer zugeordnet werden, z.B. bei der Suche nach Einträgen, denen eine gegebene Liste von Tag-Namen zugeordnet ist
- OP_NOT_ALL_BINARY = 62: für keinen der angegebenen Werte kann über eine passende Tabellenverknüpfung ein Treffer zugeordnet werden, z.B. bei der Suche nach Einträgen, denen kein Tag-Name einer gegebenen Liste auszuschließender Tag-Namen zugeordnet ist
- Zahlen (ggf. mit einer SysUnits.unitId als Parameter val#_unitzur Umrechnung)
- OP_BETWEEN = 8: Wert in der Datenbank liegt zwischen unten-oben oder unten<oben. Bei Eingabe eines Wertes wird 5 % Toleranz angenommen, außer der Parameter tol# gibt einen anderen Wert an, z.B. 0.02 für 2 %
- OP_GREATER = 9: Wert in der Datenbank liegt über der Zahl
- OP_GREATER_EQUAL = 47: Wert in der Datenbank liegt über der Zahl oder ist identisch
- OP_LOWER = 10: Wert in der Datenbank liegt unter der Zahl
- OP_LOWER_EQUAL = 48: Wert in der Datenbank liegt unter der Zahl oder ist identisch
- OP_BETWEEN_OR_LOWER = 51: Wert in der Datenbank liegt unter der oberen vom Nutzer angegebenen Bereichsgrenze
- OP_BETWEEN_OR_GREATER = 52: Wert in der Datenbank liegt über der unteren vom Nutzer angegebenen Bereichsgrenze
- OP_EQUALS = 11: Wert in der Datenbank entspricht der Zahl
- OP_IN_NUM = 28: Zahlenwert in der Datenbank ist in Liste enthalten, entweder als kommagetrennte Liste, als Array oder direkt als Collection
- OP_NOT_IN_NUM = 65: Negation von OP_IN_NUM
- OP_ALL_NUM = 33: für alle angegebenen Werte kann über eine passende Tabellenverknüpfung ein Treffer zugeordnet werden, z.B. bei der Suche nach Einträgen, denen eine gegebene Liste von Tag-Primärschlüsseln zugeordnet ist
- OP_NOT_ALL_NUM = 61: für keinen der angegebenen Werte kann über eine passende Tabellenverknüpfung ein Treffer zugeordnet werden, z.B. bei der Suche nach Einträgen, denen kein Eintrag einer gegebene Liste auszuschließender Tag-Primärschlüsseln zugeordnet ist
- OP_HAS_BITS = 31: Wert in der Datenbank enthält die gegebene Bitmaske
- Wahrheitswerte (Boolean)
- OP_IS_TRUE = 12: Wert in der Datenbank ist WAHR
- OP_IS_TRUE_OR_NULL = 63: Wert in der Datenbank ist WAHR oder NULL
- OP_IS_FALSE = 13: Wert in der Datenbank ist FALSCH
- OP_IS_FALSE_OR_NULL = 64: Wert in der Datenbank ist FALSCH oder NULL
- OP_IS = 41: Wert in der Datenbank ist gleich val#
- Datumsfelder (der Parameter val# sollte vom Typ long, Date, Calendar oder Text sein, dann im Format, das in der Konfigurationsdatei mit dem Parameter system_date_format definiert ist)
- OP_DATE_BETWEEN = 14: Datum in der Datenbank liegt zwischen unten-oben oder unten<oben.
- OP_DATE_BEFORE = 15: Datum in der Datenbank liegt vor den angegebenen Datum
- OP_DATE_AFTER = 16: Datum in der Datenbank liegt nach den angegebenen Datum
- OP_DATE_EQUALS = 17: Datum in der Datenbank entspricht dem angegebenen Datum
- OP_DATE_UNDEFINED = 18: Datum in der Datenbank ist undefiniert
- Molekülstrukturen
- OP_STRUCTURE_SIMILAR = 19: Struktur ähnelt der als MOLfile eingegebenen (Fingerprints)
- OP_STRUCTURE_CONTAINS = 20: Struktur enthält die als MOLfile eingegebene
- OP_STRUCTURE_EXACT = 21: Struktur entspricht der als MOLfile eingegebenen (stereoSMILES)
- OP_STRUCTURE_STEREOISOMER = 22: Struktur entspricht der als MOLfile eingegebenen, Stereochemie wird ignoriert (SMILES)
- Summenformeln
- OP_SUM_FORMULA_CONTAINS = 23: Summenformel enthält die eingegebene (auch mit Wildcards M, X, Ln, *)
- OP_SUM_FORMULA_EXACT = 24: Summenformel entspricht der eingegebenen (auch mit Wildcards M, X, Ln, *)
- OP_SUM_FORMULA_RANGE = 39: Summenformel liegt in einem definierten Bereich
- OP_EMP_FORMULA_RANGE = 40: Summenformel liegt prozentual in einem definierten Bereich
- Die Bereiche werden definiert, indem dem Kriterium mit uuid#=[eindeutiger Bezeichner] ein oder mehrere eindeutige Bezeichner zugeordnet werden, dann werden mit
- [eindeutiger Bezeichner]_element=Elementsymbol,
- [eindeutiger Bezeichner]_min=untere Schranke und
- [eindeutiger Bezeichner]_max=obere Schranke
- OP_COLOR_SIMILAR = 53: Farbe ähnelt der unter val#=.. angegebenen, Format #RRGGBB hexadezimal, prozentuale Toleranz mit tol#=..
- OP_REACTION_CONTAINS = 25: Reaktionsgleichung
- OP_ANA_DATA_SIMILAR = 32: Signalmuster von Analytikdaten ähnelt
- OP_PROC_STEPS_UNORDERED = 49 und OP_PROC_STEPS_ORDERED = 50: hat entsprechende Prozeßschritte, optional unter Beachtung der Reihenfolge
- Für jeden Prozeßschritt wird eine Unterabfrage definiert, für die zunächst mit uuid#=[eindeutiger Bezeichner] ein oder mehrere eindeutige Bezeichner festgelegt werden. Die einzelnen Parameter der Abfrage werden dann mit dem Präfix [unique identifier]_Parametername=.. definiert, also
- [eindeutiger Bezeichner]_query=[#] AND [#] AND [#]...,
- [eindeutiger Bezeichner]_crit#=, [eindeutiger Bezeichner]_op#= und [eindeutiger Bezeichner]_val#=
Verknüpfung mit anderen (vorherigen) Ergebnislisten
Eine Suchanfrage (B) kann durch Angabe des Parameters list_op mit Ergebnislisten früherer Suchanfragen (A) verknüpft werden:
- LIST_OP_NEW = 0: neue Suche (A)
- LIST_OP_INSIDE = 1: in der Ergebnisliste suchen (A AND B)
- LIST_OP_ATTACH = 2: zur Ergebnisliste hinzufügen (A OR B)
- LIST_OP_EXCLUDE = 3: die Ergebnisliste ausschließen (A AND NOT B)
- LIST_OP_EXCLUDE_NEW = 4: aus der Ergebnisliste entfernen (B AND NOT A)
- LIST_OP_PREVIOUS = 5: aus der Ergebnisliste entfernen (B)
Sortierung (durch Datenbank) und Limit
Um eine Sortierung der Suchergebnisse durch die Datenbank zu veranlassen, kann der Parameter orderBy angegeben werden. Dabei sind SQL-Spaltennamen getrennte durch Kommata anzugeben, also nicht Java-Feldnamen. Die Angabe von DESC kehrt die Sortierreihenfolge für das betreffende Feld um. Ist keine Sortierreihenfolge angegeben, so versucht das System, Treffer mit besserer Übereinstimmung mit den Suchbegriffen nach vorne zu sortieren. Dieses Verhalten kann deaktiviert werden, indem man den Parameter qualityConditionsMode auf 1 setzt, während der Wert 2 die Ordnung nach Qualität gegenüber anderen Ordnungskriterien bevorzugt.
Durch Angabe von limit kann die maximale Anzahl Suchergebnisse beschränkt werden, z.B. zur Leistungssteigerung. Mit dem Parameter skip=n können bei Zugriffen über die Abfrage-API die ersten n Ergebnisse übersprungen werden, sofern benötigt.
Unterabfragen
Um beispielsweise alle Experimente (Tabelle ElnReaction) zu suchen, bei denen die Eigenschaft (Tabelle ElnReactionProperty) "temperature" zwischen 40-60 liegt, ist eine Unterabfrage erforderlich. Diese ermittelt zunächst alle Eigenschaftseinträge, die den geforderten Teilbedingungen genügen und bindet die Ergebnisliste in die Hauptabfrage ein:
- table=ElnReaction
- query=[0] AND [3] AND ...
- crit0=elnReactionPropertyCollection
- op0=OP_SUBQUERY
- val0=[1] AND [2]
- crit1=name
- op1=OP_EXACT
- val1=temperature
- crit2=number
- op2=OP_BETWEEN
- val2=40-60
Suche in Reaktionsgleichungen
Für die Suche in Reaktionsgleichungen stehen zwei Modi zur Verfügung:
- Im einfachen wird als val# einfach ein RXNFile übergeben, und Sciformation ELN liefert alle Experimente, in deren Reaktionsgleichung dieses RXNFile als Substruktur enthalten ist.
- Um Suchergebnisse genauer einzugrenzen, kann eine Tabelle mit Einzelkomponenten angegeben werden, wobei jede Zeile durch eine eindeutige ID gekennzeichnet ist. Die Auflistung dieser IDs kann entweder durch URLs im Stil ..&uuid0=xyz&uuid0=abc&... übergeben werden oder als kommagetrennte Liste bzw. direkt als Collection. Die Bedingungen an die einzelnen Komponenten werden durch [uuid]_query, [uuid]_crit0, [uuid]_val0, etc. beschrieben, so daß es z.B. auch möglich ist, nach Experimenten zu suchen, bei denen eine eingegrenzte Menge einer Substanz verwendet wurde. In der Regel dürfte es am einfachsten sein, einen RowRenderer vom Typ webclient.list.ElnReactionComponentSearchRenderer zu verwenden, der die entsprechenden Parameter korrekt setzt.
Suche nach ähnlichen Signalmustern
Bei der Verarbeitung von Analytikdaten versuchen die Python-Datenkonverter, aus Signalen geeignete Peaklisten zu erzeugen. Diese können dann zur Suche genutzt werden, entweder durch Vergleich mit dem Signal hochgeladener Analytikdaten, einem bestehenden Datensatz oder händisch eingegebenen Werten. Der Parameter mode# gibt an, in welcher Form das Referenzmuster bereitgestellt wird:
- "ctrl": val# ist aufgebaut aus der desktopId des entsprechenden Desktops und der UUID des entsprechenden ImageControls, getrennt durch einen Punkt
- "db": val# verweist auf einen Primärschlüssel dataId in der Datenbank
- "text": in val# sind zeilenweise Peaks im Format x/z bzw. (x/y)/z aufgelistet. Hinweis: Der Z-Wert gibt immer die Signalhöhe für einen X-Wert (1D) oder einen Punkt (X/Y, 2D) an.
Prozentuale Toleranzen für die Retentionszeit, den X-, Y- und Z-Wert können durch die Parameter tolT#, tolX#, tolY# und tolZ# festgelegt werden. So kann z.B. den unterschiedlichen Charakteristika von Schwingungsspektroskopie und Massenspektrometrie Rechnung getragen werden. Für den Z-Wert kann auch ein absoluter Toleranzbereich über den Parameter tolZabs# festgelegt werden, der zur prozentualen Toleranz addiert wird. Darüber hinaus kann die Bewertung der Übereinstimmung über die Parameter minX#, maxX#, minY#, maxY#, minZ# und maxZ# auf ein bestimmtes Fenster eingegrenzt werden.
Der Parameter minHitPerc# gibt an, für wieviel Prozent der angegebenen Signale - im Rahmen der gegebenen Toleranzen - ein passendes Signal gefunden werden muß, damit ein Eintrag in die Ergebnisliste aufgenommen wird. Durch maxMiss# kann eingestellt werden, ab welcher Zahl nicht auffindbarer Signale ein Eintrag aus der Ergebnisliste entfernt wird. Analog dazu kann mittels minHit# auch eine absolute Zahl zuordenbarer Signale gefordert werden.
Ausgabeformat
Um das Ausgabeformat zu steuern, setzen Sie den Parameter format auf:
- "csv": Kommagetrennte Textdatei
- "json": JSON
- "jsonRaw": direkte Serialisierung der Java-Objekt als JSON
- "xls": Microsoft Excel Binärformat
- "xlsx": Microsoft Excel XML-Format
- "pks": Kommagetrennte Liste der Primärschlüssel
- "uuids": Kommagetrennte Liste der UUIDs (sofern anwendbar)
- "bibtex": BibTeX*
- "sdf": SDFile*
Query definition
Search queries in Sciformation ELN are described by name-value-paris, as they can easily be created using HTTP requests or Maps. The HTTP requests can either originate from an HTML form or directly as URL call of the servlet performSearch.
The only mandatory parameter is table, giving the name of the entity class, e.g. CdbContainer.
If no further parameters are given, all data sets visible for the currently active user will be listed, unless they are deactivated (marked as disabled). To(also) display the deactivated entries, the parameter disabled_filter can be set to either DISABLED_ONLY = 1 (show deactivated entries only) or DISABLED_ANY = 2 (everything). If the parameter selected_only is set to 1 or true, only data sets selected by the current user - by clicking the checkbox of the entry line - will be listed.
The filter criteria are indexed using positive integers, the parameter query describes their combination in a Boolean expression like "[0] AND ([1] OR [2]) AND NOT [4]". Missing parentheses will be added to either side, to end up with a valid expression. A filter criterion # compromises at least of a (Java) field name crit# and a value to compare with val#. For instance, the parameters
- table=OrgPerson
- query=[0]
- crit0=firstName
- val0=Felix
The following operators can be provided as parameter op# to better control the search results returned:
- General
- OP_IS_NULL = 7: is NULL
- OP_IS_DEFINED = 55: it not NULL
- OP_SUBQUERY = 26: a condition comprising of multiple parts, that can be checked using SQL-JOINs
- val# is a combination of multiple criteria, e.g. val60=[61] AND [62]
- crit# is the name of a field, typically a collection like crit60=cdbMoleculePropertyCollection
- crit61/op61/val61 sowie crit62/op62/val62 define conditions that at least one entry of said collection must fulfill
- The SQL alias name for the joined table is automatically created, i.e. it is possible to check for multiple conditions on the same condition independently.
- OP_SUBSELECT_NOT = 57: selects all entries not being linked to data that fulfills the conditions. In contrast to OP_SUBQUERY, a real SQL subquery must be performed, of which the results are excluded from the main query's results. Why? It is possible that multiple linked entries exist, of which some fulfill the condition and others do not. In this case, the entry shall be excluded. Example: To search for all substances that do not have a IUPAC name assigned, OP_SUBQUERY would give the ones having a non-IUPAC name (most will). OP_SUBSELECT_NOT gives the desired result.
- OP_SUBSELECT = 54: the negation to OP_SUBSELECT_NOT (rarely used, when dealing with NULL values or OP_IS_DEFINED)
- Text fields
- OP_CONTAINS_ALL = 1: contains all words, also works with double-quoted sentences
- OP_CONTAINS_ALL_BINARY = 59: like OP_CONTAINS_ALL, case-sensitive
- OP_ALL_CONTAINS_PARTS = 46: for all words or double-quoted sentences, at least one joined entry can be matched
- OP_CONTAINS_ONE = 2: contains one of the words, also works with double-quoted sentences
- OP_CONTAINS_ONE_BINARY = 60: like OP_CONTAINS_ONE, case-sensitive
- with whitespace-trimming
- OP_CONTAINS = 3: contains the text
- OP_EXACT = 4: is equal to the text
- OP_ALL_EXACT = 35: for all parts, at least one joined entry can be matched, e.g. when searching for entries to which a certain list of tag names is assigned to
- accordingly OP_ALL_CONTAINS = 36; OP_ALL_CONTAINS_ALL = 37; OP_ALL_CONTAINS_ONE = 38
- OP_STARTSWITH = 5: starts with the text
- OP_ENDSWITH = 6: ends with the text
- without whitespace-trimming
- OP_CONTAINS_NT = 42: contains the text
- OP_EXACT_NT = 43: is equal to the text
- OP_STARTSWITH_NT = 44: starts with the text
- OP_ENDSWITH_NT = 45: ends with the text
- OP_BINARY = 27: is equal to the text, case sensitive
- OP_IN_BINARY = 29: the given list - given either as comma-separated string, as array or directly as Collection - contains the text stored in the database
- OP_NOT_IN_BINARY = 66: negation of OP_IN_BINARY
- OP_ALL_BINARY = 34: for all given values, at least one joined entry can be matched, e.g. when searching for entries to which a certain list of tag names is assigned to
- OP_NOT_ALL_BINARY = 62: for none of the given values, a joined entry can be matched, e.g. when searching for entries to which no tag name of an exclusion list is assigned to
- Numbers (optional parameter val#_unit giving a SysUnits.unitId for transformation)
- OP_BETWEEN = 8: value in the database is between min-max or min<max. When entering a single value, a tolerance of 5 % is applied, unless a different tolerance percentage is defined by parameter tol#, e.g. 0.02 for 2 %
- OP_GREATER = 9: value in the database is greater than the given number
- OP_GREATER_EQUAL = 47: value in the database is greater than or equal to the given number
- OP_LOWER = 10: value in the database is lower than the given number
- OP_LOWER_EQUAL = 48: value in the database is lower than or equal to the given number
- OP_BETWEEN_OR_LOWER = 51: value in the database is lower than the upper boundary of a provided numeric range
- OP_BETWEEN_OR_GREATER = 52: value in the database is greater than the lower boundary of a provided numeric range
- OP_EQUALS = 11: value in the database is equal to than the given number
- OP_IN_NUM = 28: the given list - given either as comma-separated string, as array or directly as Collection - contains the number stored in the database
- OP_NOT_IN_NUM = 65: negation of OP_IN_NUM
- OP_ALL_NUM = 33: for all given values, at least one joined entry can be matched, e.g. when searching for entries to which a certain list of tag IDs is assigned to
- OP_NOT_ALL_NUM = 61: for none of the given values, a joined entry can be matched, e.g. when searching for entries to which no tag ID of an exclusion list is assigned to
- OP_HAS_BITS = 31: value in the database contains the given bit mask
- Boolean fields
- OP_IS_TRUE = 12: value in the database is true
- >OP_IS_TRUE_OR_NULL = 63: value in the database is true or NULL
- OP_IS_FALSE = 13: value in the database is false
- OP_IS_FALSE_OR_NULL = 64: value in the database is false or NULL
- OP_IS = 41: value in the database is equal to val#
- Date fields (parameter val# should be long, Date, Calendar or a text in the date format defined in the configuration file with the parameter system_date_format)
- OP_DATE_BETWEEN = 14: date in the database is between start-end or start<end.
- OP_DATE_BEFORE = 15: date in the database is before the given date
- OP_DATE_AFTER = 16: date in the database is after the given date
- OP_DATE_EQUALS = 17: date in the database is equal to the given date
- OP_DATE_UNDEFINED = 18: date in the database is undefined
- Molecular structures
- OP_STRUCTURE_SIMILAR = 19: structure is similar to the provided MOLfile (based on fingerprints)
- OP_STRUCTURE_CONTAINS = 20: structure contains the provided MOLfile
- OP_STRUCTURE_EXACT = 21: structure is equal to the provided MOLfile (based on stereoSMILES)
- OP_STRUCTURE_STEREOISOMER = 22: structure is equal to the provided MOLfile, ignoring stereochemistry (based on SMILES)
- Molecular formulas
- OP_SUM_FORMULA_CONTAINS = 23: Molecular formula contains the given one (also with wildcards M, X, Ln, *)
- OP_SUM_FORMULA_EXACT = 24: Molecular formula equals to the given one (also with wildcards M, X, Ln, *)
- OP_SUM_FORMULA_RANGE = 39: Molecular formula is within a defined range
- OP_EMP_FORMULA_RANGE = 40: Molecular formula is within a defined percentage range
- The ranges are defined by passing a criterion with one or more uuid#=[unique identifier]. Then the ranges are defined by
- [unique identifier]_element=symbol,
- [unique identifier]_min=lower boundary and
- [unique identifier]_max=upper boundary
- OP_COLOR_SIMILAR = 53: Color is similar to the one provided by val#=.. in #RRGGBB hexadecimal format, tolerance defined by tol#=.. in percent
- OP_REACTION_CONTAINS = 25: Reaction equation
- OP_ANA_DATA_SIMILAR = 32: Peak pattern of analytical data is similar
- OP_PROC_STEPS_UNORDERED = 49 and OP_PROC_STEPS_ORDERED = 50: has the respective process steps, optionally observing the order of appearance
- For each process step, a subquery is with a uuid#=[unique identifier] is defined. The parameters of the respective subquery are prefixed with [unique identifier]_parameter_name=.., i.e.
- [unique identifier]_query=[#] AND [#] AND [#]...,
- [unique identifier]_crit#=, [unique identifier]_op#= und [unique identifier]_val#=
Combinations with other (previous) result lists
A query (B) can be combined with result lists of previous queries (A) using the parameter list_op:
- LIST_OP_NEW = 0: new search (A)
- LIST_OP_INSIDE = 1: refine result list (A AND B)
- LIST_OP_ATTACH = 2: add to result list (A OR B)
- LIST_OP_EXCLUDE = 3: exclude result list (A AND NOT B)
- LIST_OP_EXCLUDE_NEW = 4: remove from result list (B AND NOT A)
- LIST_OP_PREVIOUS = 5: show previous result list (B)
Sorting (at database level) and limit
You can set the parameter orderBy to obtain sorted result lists from the database. You must use comma-separated SQL column names, Java field names will not work. Adding DESC will reverse the sort order for the respective field. If no sort order is defined, the system will try to display better matches first. This behavior can be disabled by setting the parameter qualityConditionsMode to 1, while a value of 2 gives the quality higher priority than other ordering criteria.
The parameter limit can help to increase performance by limiting the maximum number of results. When performing API queries, the parameter skip=n allows to skip the first n results, if required.
Subqueries
A subquery is required to - for example - find all experiments (table ElnReaction) where the property (table ElnReactionProperty) "temperature" is between 40-60. The subquery will first find all matching property entries, which will become part of the main query then:
- table=ElnReaction
- query=[0] AND [3] AND ...
- crit0=elnReactionPropertyCollection
- op0=OP_SUBQUERY
- val0=[1] AND [2]
- crit1=name
- op1=OP_EXACT
- val1=temperature
- crit2=number
- op2=OP_BETWEEN
- val2=40-60
Searching within reaction equations
Two modes can be used to search within reaction equations:
- In the simple case, a RXNFile is passed as val#, Sciformation ELN will list all experiments containing the given equation as substructure.
- To control the search criteria more precisely, a table of individual components can be provided, where every line has a unique identifier. These unique identifiers can be passed as URLs ..&uuid0=xyz&uuid0=abc&..., as comma separated list or directly as Collection. Each component's conditions are described by[uuid]_query, [uuid]_crit0, [uuid]_val0, etc., allowing to search also for certain substance amounts. Normally, using a RowRenderer of type webclient.list.ElnReactionComponentSearchRenderer should be a conventient and reliable option to define such queries.
Searching for similar peak patterns
When processing analytical raw data, the Python data converters try to extract reasonable peak lists. These lists can be used for searching, either by comparing to the signal of uploaded data, or an existing data set or peak data entered manually. The parameter mode# defines how the reference pattern is provided:
- "ctrl": val# consists of the desktop's desktopId and the UUID of the ImageControl, separated by a dot
- "db": val# refers to the primary key dataId in the database
- "text": val# consists - line by line - of peaks in the format x/z or (x/y)/z. Note: The Z value always represents the peak height for a given X value (1D) or a combination (X/Y, 2D).
Relative tolerances for retention time, X, Y and Z value can be defined by parameters tolT#, tolX#, tolY# and tolZ#. By this, different charakteristics of e.g. vibrational spectroscopy and mass spectrometry can be addressed. For the Z value, an absolute tolerance range can also be defined, using the parameter tolZabs#. If both tolZ# and tolZabs# are set, the tolerances will be added. The parameters minX#, maxX#, minY#, maxY#, minZ# and maxZ# allow to limit the peak matching to a certain value range.
The parameter minHitPerc# defines, for which percentage of the query signals a matching signal must be found - with the given tolerance levels - to accept a potential result. If for a candidate, more than maxMiss# signals cannot be assigned, it will be removed from the result list. In the same way, minHit# allows to set a number of signals which must at least be assigned.
Output format
To control the format of the data, set the parameter format to:
- "csv": comma-separated text file
- "json": JSON
- "jsonRaw": direct serialization of the Java objects as JSON
- "xls": Microsoft Excel binary format
- "xlsx": Microsoft Excel XML format
- "pks": comma-separated list of primary keys
- "uuids": comma-separated list of UUIDs (if applicable)
- "bibtex": BibTeX*
- "sdf": SDFile*