DICOM message schema

A message schema is used to describe the messages sent and received by the DICOM nodes.

Description

The DICOM nodes all use the same schema to describe the content of their DICOM XML messages.

The DICOMInput and DICOMOutput nodes use the same complex type definition (DICOM). The DICOMFindMove node has a complex type that is called FindMove (which defines the search parameters for the query) and a complex type that is called Results (which defines the structure of the results message).

The following table summarizes the complex types that are expected on the input terminal and sent from the output terminal.

Node Complex type that is expected on input terminal Complex type that is sent from output terminal
DICOMInput node   DICOM
DICOMOutput node DICOM DICOM
DICOMFindMove node FindMove Results

The DICOM complex type is an ordered list of DICOM data elements. Each data element, which is known as an Attribute, can either contain a single value (for example, the patient’s name), or it can contain a repeating sequence of other Attribute elements inside an Item element. Each DICOM Attribute contains an element that is called Tag (which contains the DICOM tag name), and an element called VR (which specifies the DICOM data type).

DICOM XML messages also contain attributes that are called Source and Location. These attributes are used in DICOMInput and DICOMOutput nodes to link to data on the file system that is not included in the DICOM XML messages (for example, pixel data). The Location attribute is always present on the DICOM root element and points to the directory that contains the image sent to the DICOMInput node. The Source attribute is optionally present on Attribute and Item elements and specifies a file name in the processing directory which contains data not present in the DICOM XML message. For example,
<Attribute Tag="7FE00010" VR="OW" Source="7FE00010"/>

The DICOMFindMove node uses the FindMove schema type to represent the search parameters for a C-FIND command. The node can return multiple search results. Each result is represented by a DICOM element (the same type definition that is used by the DICOMInput and DICOMOutput nodes). If the search parameters include a MoveDestination element, then each Results element also includes an extra XML element called MoveResults. The MoveResults element specifies whether the DICOM image was successfully moved to the destination. This element also provides detailed error information (if available) in the ErrorID and ErrorComment elements. Query messages can include vendor-specific return tags in the Return element. If the relevant vendor support is configured on the Service Class Provider (SCP), these tags are included in the response messages.

You can configure the data elements to be excluded from the message flow using a DICOMInput node property (Exclude DICOM attributes). For more information, see the Advanced properties section in DICOMInput node.
Note: The DICOM schema definition file, DICOM.xsd, is included in the library, DICOMLibrary, which is generated by the Healthcare: Web service to DICOM pattern.

Schema

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns="http://com.ibm.healthcare/DICOM" xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://com.ibm.healthcare/DICOM">
  <xsd:element name="DICOM" type="DICOM"/>
  <xsd:element name="Results" type="Results"/>
  <xsd:element name="FindMove" type="FindMove"/>

  <xsd:complexType name="Attribute" mixed="true">
    <xsd:annotation>
      <xsd:documentation xml:lang="en">Defines the schema for DICOM data attributes.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" minOccurs="0" name="Item" type="Item"/>
    </xsd:sequence>
    <xsd:attribute name="Tag" type="xsd:string"/>
    <xsd:attribute name="VR" type="xsd:string" use="optional"/>
    <xsd:attribute name="Source" type="xsd:string" use="optional"/>
  </xsd:complexType>

  <xsd:complexType name="MoveResults">
    <xsd:annotation>
      <xsd:documentation xml:lang="en">Defines the schema for DICOM C-MOVE results.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="Completed" type="xsd:string"/>
      <xsd:element name="Failed" type="xsd:string"/>
      <xsd:element name="Warnings" type="xsd:string"/>
      <xsd:element name="Status" type="xsd:string"/>
      <xsd:element name="ErrorID" type="xsd:string"/>
      <xsd:element name="ErrorComment" type="xsd:string"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="Item">
    <xsd:annotation>
      <xsd:documentation xml:lang="en">Defines the schema for DICOM sequences.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" minOccurs="0" name="Attribute" type="Attribute"/>
    </xsd:sequence>
    <xsd:attribute name="Source" type="xsd:string" use="optional"/>
  </xsd:complexType>

  <xsd:complexType name="DICOM">
    <xsd:annotation>
      <xsd:documentation xml:lang="en">Defines the schema for DICOM data objects.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" minOccurs="0" name="Attribute" type="Attribute"/>
      <xsd:element minOccurs="0" name="MoveResults" type="MoveResults"/>
    </xsd:sequence>
    <xsd:attribute name="Location" type="xsd:string" use="optional"/>
  </xsd:complexType>

  <xsd:complexType name="Results">
    <xsd:annotation>
      <xsd:documentation xml:lang="en">Defines the schema for DICOM C-FIND result messages.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" minOccurs="0" name="DICOM" type="DICOM"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="FindMove">
    <xsd:annotation>
      <xsd:documentation xml:lang="en">Defines the schema for DICOM C-FIND query messages.</xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element minOccurs="0" name="QueryRoot" type="xsd:string"/>
      <xsd:element minOccurs="0" name="QueryLevel" type="xsd:string"/>
      <xsd:element minOccurs="0" name="MoveDestination" type="xsd:string"/>
      <xsd:element minOccurs="0" name="OperationPriority" type="xsd:string"/>
      <xsd:element name="Match">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element maxOccurs="unbounded" name="Attribute" type="Attribute"/>
          </xsd:sequence>
	      </xsd:complexType>
	    </xsd:element>
      <xsd:element minOccurs="0" name="Return">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element maxOccurs="unbounded" minOccurs="0" name="Tag" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
</xsd:schema>