DICOM allows a dataset to contain other nested datasets, which are encoded as "sequences". The point of this structure is to allow repeating groups of data, so whilst such sequences often only contain a single dataset, the format is defined such that each sequence consists of a set of datasets. Of course, this structure lends itself perfectly to recursion, and some DICOM IODs such a Structured_Reporting and the Radiotherapy_Extensions can use sequences nested 5 or 6 deep !
The format of a sequence is as shown here:
There are many different possible encoding of sequence data, using either explicit lengths for the lengths of the sequence as a whole and the datasets within it, or using an undefined length (FFFFFFFF) and end markers. Both are valid irrespective of the Transfer_Syntax in use, but of course DicomObjects handles all the possible variations.
For advice on how to create sequences using DicomObjects, see the article on Adding_Sequence_Items
Note on encoding
In general, nested datasets are required to use the same encoding as the surrounding data. The only exception is if the sequence is labelled as having a VR of UN (as opposed to the normal SQ). In that case, they must be Implicit VR Little Endian. The logic is that UN can only occur where an application:
- Has received the data in Implicit VR Little Endian form
- Does not "know" what the VR should be for that item (e.g. if new or private)
- Is asked to write/send the data in explicit form.
In this case, the application would use a VR of UN, but since it would not know the true VR (and would not realise it was a sequence), then it would pass it out "as received" in its entirety, which would of course (as a consequence of point 1 above) be in Implicit VR Little Endian form.