Skip to content

Update query logic and API endpoints to support categorical AND queries #589

Description

@alyssadai

Example query:

{
  "diagnosis": ["snomed:12345", "snomed:23456"],
  "assessment": ["snomed:22222", "snomed:33333"],
  "image_modal": ["nidm:T1Weighted", "nidm:T2Weighted"],
  "pipeline": [
     {"name": "np:fmriprep", "version": "24.1.1"},
     {"name": "np:fmriprep", "version": "25.0.0"},
     {"name": "np:freesurfer"}
  ]
}

pipeline_name and pipeline_version fields will be removed

TODO:

  • Update subjects query
  • Switch all categorical variables to list values in POST query body
    • diagnosis
    • assessment
    • imaging modality
    • replace pipeline_name and pipeline_version with single pipeline field that accepts a list of {"name": ..., "version": ...} objects
  • add validation to error out when a pipeline version is specified without specifying a pipeline name
  • Update SPARQL query logic to support matching >1 diagnosis value per record
    • update PhenotypicSession SPARQL model
    • update ImagingSession SPARQL models
    • update class method for SPARQL query triple generator to handle creating >1 triple for the same variable when multiple values are passed
    • add custom SPARQL triple generator for >1 imaging modality or pipeline name/version (since each imaging modality / pipeline is its own instance)
  • update catalog mode logic to support AND queries
    • when >1 term specified for diagnosis or assessment, only match dataset if its dataset metadata includes all specified terms

Example AND phenotypic queries:

WHERE {
    ...
    ?phenotypic_session a nb:PhenotypicSession.
    ?phenotypic_session nb:hasDiagnosis snomed:22222.
    ?phenotypic_session nb:hasDiagnosis snomed:33333.
}

Example AND imaging queries:

WHERE {
    ...
    ?imaging_session a nb:ImagingSession.
    ?imaging_session nb:hasAcquisition ?acquisition1.
    ?acquisition1 nb:hasContrastType nidm:T1Weighted.
    ?imaging_session nb:hasAcquisition ?acquisition2.
    ?acquisition2 nb:hasContrastType nidm:FlowWeighted.
}
WHERE {
    ...
    ?imaging_session a nb:ImagingSession.
    ?imaging_session nb:hasCompletedPipeline ?pipeline1.
    ?pipeline1 nb:hasPipelineName np:fmriprep.
    ?pipeline1 nb:hasPipelineVersion "23.2.0".
}

Other:

  • update crud.query_records (?)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

releasedThis issue/pull request has been released.usabilityIssue affecting user or developer experience.

Projects

  • Status
    Review - Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions