Query DSL
The --query / -q flag on stare search commands accepts a simple filter
expression validated and normalized client-side before being sent to the server.
Each search command validates against the field catalogue for its own record
type. See the
endpoint status table
for which commands currently accept --query.
Grammar
// Generic DSL grammar — no field names hard-coded.
// Syntax only; field/operator semantics validated downstream.
//
// NULL sentinel: the API-defined token __EMPTY__ (quoted or bare) is used to
// compare a field against NULL, e.g. "publicShortTitle" = "__EMPTY__".
// It is matched as an ordinary VALUE (bare) or STRING (quoted) — no special rule.
?expression: or_expr
?or_expr: and_expr
| or_expr _OR and_expr -> or_expr
?and_expr: term
| and_expr _AND term -> and_expr
?term: condition
| "(" expression ")"
condition: field OP value -> condition
field: IDENT | STRING
value: VALUE | STRING
OP: "=" | "!=" | "contain"i | "not-contain"i
_AND: /[Aa][Nn][Dd]/
_OR: /[Oo][Rr]/
IDENT: /[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*/
VALUE: /[^\s()"]+/
STRING: /"[^"\n\r\t\f\v]*"/
%import common.WS
%ignore WS
and / or are case-insensitive at parse time; canonical output is uppercase
(AND, OR).
Operators
| Operator | Meaning |
|---|---|
= |
Exact match |
!= |
Not equal |
contain |
Field contains the value (array membership or substring) |
not-contain |
Field does not contain the value |
Boolean fields only support = and !=
Some fields are boolean (e.g. analysisTeam.isContactEditor, phase0.editorialBoard.isChair).
Using contain or not-contain on these fields raises a DSLValidationError at parse time.
Their values are typically "true" or "false".
Comparing against NULL
Use the special token __EMPTY__ as the value to test whether a field is
NULL. Both the bare and quoted forms are accepted; the API documentation
consistently uses the quoted form:
# Find analyses with no public short title set
stare analysis search -q 'publicShortTitle = "__EMPTY__"'
# Find papers where shortTitle is not NULL
stare paper search -q 'shortTitle != "__EMPTY__"'
__EMPTY__ is treated as an ordinary string token by the parser — it
receives no special validation.
Field names
Fields accept either camelCase or snake_case — both are normalized to
camelCase before being sent to the server:
# These are equivalent:
stare analysis search -q 'referenceCode = ANA-HION-2018-01'
stare analysis search -q 'reference_code = ANA-HION-2018-01'
Nested fields use a dot separator: metadata.keywords, phase0.state.
Field catalogue is generated
Run pixi run extract-fields after an API update to regenerate both src/stare/dsl/data/fields.toml and the tables below.
Quoting
Both the field name and the value may optionally be wrapped in double quotes. Quotes are required on the value when it is empty or contains spaces, parentheses, or square brackets; for everything else they are optional.
The grammar's string token (STRING: /"[^"\n\r\t\f\v]*"/) restricts quoted
values to printable characters plus spaces — it excludes embedded double-quotes
and all non-space whitespace (tabs, newlines, carriage returns, form feeds, and
vertical tabs). Values containing any of those characters are rejected at parse
time. If your value contains a literal ", use contain with a non-quote
substring instead; escaped-quote support is not yet implemented.
# These are equivalent:
stare analysis search -q 'referenceCode = HION'
stare analysis search -q '"referenceCode" = HION'
stare analysis search -q 'referenceCode = "HION"'
# Multi-word values require quotes:
stare analysis search -q 'shortTitle = "Phase Closed"'
stare paper search -q '"phase2.state" = "Phase Closed"'
Canonical output (to_dsl()) emits quotes on the value only when they are
required; bare single-token values are always emitted unquoted. Fields are
always emitted bare after normalization.
Only " (double quotes) are accepted — single quotes are not special.
Values
Values are bare tokens or double-quoted strings. A bare value like
ANA-HION-2018-01 or Active works without quotes. Double quotes are required
when the value is empty or contains spaces, parentheses, or square brackets:
# bare value — no quotes needed
stare analysis search -q 'metadata.keywords contain jets'
# space in value — quotes required
stare analysis search -q 'shortTitle = "Phase Closed"'
# quoted field, bare value — both forms mix freely
stare analysis search -q '"phase0.state" = Active'
Combining conditions
# AND (both must match)
stare analysis search -q 'status = Active and groups.leadingGroup = HDBS'
# OR (either may match)
stare analysis search -q 'status = Active or status = Approved'
AND binds tighter than OR: a = 1 AND b = 2 OR c = 3 is parsed as
(a = 1 AND b = 2) OR c = 3.
Parentheses are not supported by the server
The grammar accepts parentheses, but the Glance API ignores them. stare will log a warning and send the query without parentheses. Rely on AND binding tighter than OR instead of explicit grouping.
Sorting
--sort-by and --sort-desc are independent of the query string and work with
any search command:
stare analysis search -q 'status = Active' --sort-by creationDate --sort-desc
stare paper search --sort-by referenceCode
Skipping validation
Use --no-validate to bypass client-side field checking and send the raw string
directly to the server. This is useful for experimental server fields or when
you know the DSL is already in canonical form:
Analysis fields
| Group | Fields |
|---|---|
| Top-level | creationDate, publicShortTitle, referenceCode, shortTitle, status |
amiGlance |
amiGlance.label, amiGlance.url |
analysisTeam |
analysisTeam.analysisContactAssignments.endDate, analysisTeam.analysisContactAssignments.startDate, analysisTeam.cernCcid, analysisTeam.email, analysisTeam.firstName, analysisTeam.isAnalysisContact, analysisTeam.isContactEditor, analysisTeam.lastName |
documentation |
documentation.repositories.gitlabId, documentation.repositories.type, documentation.repositories.url, documentation.supportingInternalDocuments.label, documentation.supportingInternalDocuments.url |
groups |
groups.leadingGroup.name, groups.otherGroups.name, groups.subgroups.name |
metadata |
metadata.analysisFramework.histogramming, metadata.analysisFramework.ntupling, metadata.collisions.ecmUnit, metadata.collisions.ecmValue, metadata.collisions.luminosityUnit, metadata.collisions.luminosityValue, metadata.collisions.run, metadata.collisions.type, metadata.collisions.year, metadata.datasets.name, metadata.keywords.name, metadata.mvaMlTools.name, metadata.statTools.name, metadata.triggers.name |
phase0 |
phase0.approvalMeeting.comments, phase0.approvalMeeting.date, phase0.approvalMeeting.label, phase0.approvalMeeting.title, phase0.approvalMeeting.url, phase0.datasetUsed, phase0.editorialBoard.cernCcid, phase0.editorialBoard.email, phase0.editorialBoard.firstName, phase0.editorialBoard.isChair, phase0.editorialBoard.isExOfficio, phase0.editorialBoard.lastName, phase0.editorialBoardFormedDate, phase0.editorialBoardRequestMeeting.comments, phase0.editorialBoardRequestMeeting.date, phase0.editorialBoardRequestMeeting.label, phase0.editorialBoardRequestMeeting.title, phase0.editorialBoardRequestMeeting.url, phase0.eoiMeeting.comments, phase0.eoiMeeting.date, phase0.eoiMeeting.label, phase0.eoiMeeting.title, phase0.eoiMeeting.url, phase0.mainPhysicsAim, phase0.methods, phase0.modelTested, phase0.pgcOrSgcSignOffDate, phase0.preApprovalMeeting.comments, phase0.preApprovalMeeting.date, phase0.preApprovalMeeting.label, phase0.preApprovalMeeting.title, phase0.preApprovalMeeting.url, phase0.startDate, phase0.state |
relatedPublications |
relatedPublications.referenceCode, relatedPublications.type |
CONF note fields
| Group | Fields |
|---|---|
| Top-level | finalReferenceCode, fullTitle, publicShortTitle, shortTitle, status, temporaryReferenceCode |
analysisTeam |
analysisTeam.analysisContactAssignments.endDate, analysisTeam.analysisContactAssignments.startDate, analysisTeam.cernCcid, analysisTeam.email, analysisTeam.firstName, analysisTeam.isAnalysisContact, analysisTeam.isContactEditor, analysisTeam.lastName |
documentation |
documentation.supportingInternalDocuments.label, documentation.supportingInternalDocuments.url |
groups |
groups.leadingGroup.name, groups.otherGroups.name, groups.subgroups.name |
metadata |
metadata.collisions.ecmUnit, metadata.collisions.ecmValue, metadata.collisions.luminosityUnit, metadata.collisions.luminosityValue, metadata.collisions.run, metadata.collisions.type, metadata.collisions.year, metadata.keywords.name, metadata.mvaMlTools.name, metadata.statTools.name |
phase1 |
phase1.draftCdsUrl, phase1.editorialBoard.cernCcid, phase1.editorialBoard.email, phase1.editorialBoard.firstName, phase1.editorialBoard.isChair, phase1.editorialBoard.isExOfficio, phase1.editorialBoard.lastName, phase1.editorialBoardDraftSignOffDate, phase1.editorialBoardFormedDate, phase1.firstSignOffDate, phase1.firstSignOffResponsible.cernCcid, phase1.firstSignOffResponsible.email, phase1.firstSignOffResponsible.firstName, phase1.firstSignOffResponsible.lastName, phase1.pgcApprovalDate, phase1.presentationDate, phase1.publicWebPageURLForFiguresAndTables, phase1.releaseDate, phase1.secondSignOffDate, phase1.secondSignOffResponsible.cernCcid, phase1.secondSignOffResponsible.email, phase1.secondSignOffResponsible.firstName, phase1.secondSignOffResponsible.lastName, phase1.startDate, phase1.state |
relatedAnalysis |
relatedAnalysis.referenceCode, relatedAnalysis.type |
supersededBy |
supersededBy.referenceCode, supersededBy.type |
PUB note fields
| Group | Fields |
|---|---|
| Top-level | finalReferenceCode, fullTitle, publicShortTitle, shortTitle, status, temporaryReferenceCode |
analysisTeam |
analysisTeam.analysisContactAssignments.endDate, analysisTeam.analysisContactAssignments.startDate, analysisTeam.cernCcid, analysisTeam.email, analysisTeam.firstName, analysisTeam.isAnalysisContact, analysisTeam.isContactEditor, analysisTeam.lastName |
documentation |
documentation.supportingInternalDocuments.label, documentation.supportingInternalDocuments.url |
groups |
groups.leadingGroup.name, groups.otherGroups.name, groups.subgroups.name |
metadata |
metadata.collisions.ecmUnit, metadata.collisions.ecmValue, metadata.collisions.luminosityUnit, metadata.collisions.luminosityValue, metadata.collisions.run, metadata.collisions.type, metadata.collisions.year, metadata.keywords.name, metadata.mvaMlTools.name, metadata.statTools.name |
phase1 |
phase1.atlasCirculationDate, phase1.draftCdsUrl, phase1.firstReaderDraftSignOffDate, phase1.firstReaderSignOffDate, phase1.groupApprovalDate, phase1.presentationDate, phase1.proceedToSignOffDate, phase1.publicWebPageURLForFiguresAndTables, phase1.readers.cernCcid, phase1.readers.email, phase1.readers.firstName, phase1.readers.isFirstReader, phase1.readers.isSecondReader, phase1.readers.lastName, phase1.releaseDate, phase1.secondReaderSignOffDate, phase1.startDate, phase1.state |
relatedAnalysis |
relatedAnalysis.referenceCode, relatedAnalysis.type |
supersededBy |
supersededBy.referenceCode, supersededBy.type |
Paper fields
| Group | Fields |
|---|---|
| Top-level | fullTitle, publicShortTitle, referenceCode, rivetRoutinesUrl, shortTitle, status |
analysisTeam |
analysisTeam.analysisContactAssignments.endDate, analysisTeam.analysisContactAssignments.startDate, analysisTeam.cernCcid, analysisTeam.email, analysisTeam.firstName, analysisTeam.isAnalysisContact, analysisTeam.isContactEditor, analysisTeam.lastName |
documentation |
documentation.supportingInternalDocuments.label, documentation.supportingInternalDocuments.url |
groups |
groups.leadingGroup.name, groups.otherGroups.name, groups.subgroups.name |
metadata |
metadata.collisions.ecmUnit, metadata.collisions.ecmValue, metadata.collisions.luminosityUnit, metadata.collisions.luminosityValue, metadata.collisions.run, metadata.collisions.type, metadata.collisions.year, metadata.keywords.name, metadata.mvaMlTools.name, metadata.statTools.name |
phase1 |
phase1.atlasMeetingDate, phase1.draftReleasedDate, phase1.editorialBoard.cernCcid, phase1.editorialBoard.email, phase1.editorialBoard.firstName, phase1.editorialBoard.isChair, phase1.editorialBoard.isExOfficio, phase1.editorialBoard.lastName, phase1.editorialBoardDraftSignOffDate, phase1.editorialBoardFormedDate, phase1.languageEditorsSignOffDate, phase1.pgcApprovalDate, phase1.presentationDate, phase1.pubcommChairOrDeputyOrDelegated.cernCcid, phase1.pubcommChairOrDeputyOrDelegated.email, phase1.pubcommChairOrDeputyOrDelegated.firstName, phase1.pubcommChairOrDeputyOrDelegated.lastName, phase1.pubcommSignOffDate, phase1.spokespersonOrDeputyOrDelegated.cernCcid, phase1.spokespersonOrDeputyOrDelegated.email, phase1.spokespersonOrDeputyOrDelegated.firstName, phase1.spokespersonOrDeputyOrDelegated.lastName, phase1.startDate, phase1.state |
phase2 |
phase2.draft2CernSignOffDate, phase2.draft2ReleasedDate, phase2.draft2SentToCernDate, phase2.editorialBoardDraft2SignOffDate, phase2.editorialBoardRevisedSignOffDate, phase2.paperClosureDate, phase2.paperClosureMeeting.label, phase2.paperClosureMeeting.url, phase2.preliminaryPlotsAndResultsReleased, phase2.pubcommChairOrDeputyOrDelegated.cernCcid, phase2.pubcommChairOrDeputyOrDelegated.email, phase2.pubcommChairOrDeputyOrDelegated.firstName, phase2.pubcommChairOrDeputyOrDelegated.lastName, phase2.pubcommChairOrDeputySignOffDate, phase2.spokespersonDelegatedSignOffDate, phase2.spokespersonOrDeputySignOffDate, phase2.startDate, phase2.state |
publicationPhase |
publicationPhase.1stProofDate, publicationPhase.1stRefereeReportDate, publicationPhase.arXivSubmissionDate, publicationPhase.arXivUrls.label, publicationPhase.arXivUrls.url, publicationPhase.finalJournalPublication.label, publicationPhase.finalJournalPublication.url, publicationPhase.finalSubmissionJournal, publicationPhase.finalTitleTex, publicationPhase.journalAcceptanceDate, publicationPhase.physicsBriefing.label, publicationPhase.physicsBriefing.url, publicationPhase.publishedOnlineDate, publicationPhase.startDate, publicationPhase.state |
relatedAnalysis |
relatedAnalysis.referenceCode, relatedAnalysis.type |
Publication fields
| Group | Fields |
|---|---|
| Top-level | finalReferenceCode, referenceCode, shortTitle, status, temporaryReferenceCode, type |
groups |
groups.leadingGroup.name, groups.subgroups.name |
Leading group fields
| Group | Fields |
|---|---|
| Top-level | name |
Subgroup fields
| Group | Fields |
|---|---|
| Top-level | name |
Trigger fields
| Group | Fields |
|---|---|
| Top-level | name, year |
category |
category.name |