DICOM QueryRetrieve Explained
DICOM provides a simple mechanism to query a PACS system for imaging information and receive the results. Instead of a full SQL-style syntax, a set of "Key Attributes" are passed to the server. The request attributes and results are encoded as DICOM Data Sets. There are four levels of information that may be queried: PATIENT, STUDY, SERIES, IMAGE (instance). Each level defines specific Required and Optional keys that may be queried, as well as a required "Unique" key that identifies a single entity at the desired query level. If an empty (length=0) tag is added, it is treated like a wildcard. For each entity that matches all of the keys in the query, the server sends back a set of attributes with the specific results.
For Instance, a common query is to ask the PACS for all the exams related to a specific patient. A typical SQL statement would look like this:
select PATIENT.PatientID, STUDY.StudyDate, STUDY.ModalitiesInStudy, STUDY.StudyDescription from PATIENT, STUDY where PATIENT.PatientID = "99999" and STUDY.Patient_fk = PATIENT.pk
For a DICOM request, we want to issue a "Patient Root" query and pass in the tag that specifies we want Study Level information. We'll have to add in the Patient ID tag with its value filled in. Then to request the Study Description, Study Date, and Modality fields to be returned, we add these tags to the request but give each an empty value. This all gets assembled into a Data Set as follows:
Each response comes back as a separate Data Set with all the fields filled in:
TODO: The query may be rooted at the Patient or Study Level. ...