你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

DICOM 一致性语句 v2

注意

API 版本 2 是最新的 API 版本。 有关 v2 中与 v1 相比的更改列表,请参阅 DICOM 服务 API v2 更改

适用于 DICOM® 的医学成像服务器支持 DICOMweb 标准子集。 支持包括:

此外,还支持这些非标准 API:

该服务使用 REST API 版本控制。 REST API 的版本必须显式指定为基 URL 的一部分,如以下示例所示:

https://<service_url>/v<version>/studies

此版本的一致性语句对应于 v2 REST API 的版本。

有关如何在发出请求时指定版本的详细信息,请参阅 API 版本控制文档

可以在 Postman 集合中找到支持事务的示例请求。

Preamble Sanitization

该服务忽略 128 字节文件前部分,并将其内容替换为 null 字符。 此行为可确保没有通过服务传递的文件容易受到 恶意前言漏洞的攻击。 但是,此前言清理还意味着 用于编码双重格式内容的 谓词(如 TIFF)不能与服务一起使用。

研究服务

研究 服务 允许用户存储、检索和搜索 DICOM 研究、系列和实例。 我们添加了非标准 Delete 事务,以启用完整的资源生命周期。

存储 (STOW-RS)

此事务使用 POST 或 PUT 方法存储请求有效负载中包含的研究、序列和实例的表示形式。

方法 路径 说明
POST ../studies 存储实例。
POST ../studies/{study} 存储特定检查的实例。
PUT ../studies Upsert 实例。
PUT ../studies/{study} 特定研究的 Upsert 实例。

参数 study 对应 DICOM 属性 StudyInstanceUID。 如果指定,则任何不属于所提供的研究的实例都会被拒绝并 43265 显示警告代码。

以下是唯一支持的响应 Accept 标头:

  • application/dicom+json

支持以下 Content-Type 标头:

  • multipart/related; type="application/dicom"
  • application/dicom

注意

服务器不会强制或替换与 POST 请求的现有数据冲突的属性。 所有数据都按提供存储。 对于 upsert (PUT) 请求,现有数据将替换为收到的新数据。

存储所需的属性

尝试存储的每个 DICOM 文件中需要存在以下 DICOM 元素:

  • StudyInstanceUID
  • SeriesInstanceUID
  • SOPInstanceUID
  • SOPClassUID
  • PatientID

注意

所有 UID 长度必须介于 1 到 64 个字符之间,并且仅包含 alpha 数字字符或以下特殊字符: .- PatientID 继续为必需标记,可以在输入中将值设置为 null。 PatientID根据其LOVR类型进行验证。

存储的每个文件必须具有唯一的组合 StudyInstanceUIDSeriesInstanceUID并且 SopInstanceUID。 如果存在具有相同标识符的文件,则会返回警告代码 45070

仅接受具有显式值表示形式的传输语法。

注意

请求限制为 4GB。 没有单个 DICOM 文件或文件组合可能超过此限制。

存储 v1 中的更改

在以前的版本中,如果任何 必需的可搜索属性 未能通过验证,Store 请求将失败。 从 V2 开始,仅当所需的属性未通过验证时,请求才会失败。

API 不需要对属性的验证失败,导致文件存储有警告。 针对每个实例的每个失败属性发出警告。 如果序列包含验证失败的属性,或者单个属性存在多个问题,则只会指出第一个失败的属性原因。

如果属性填充为 null,则当可搜索且存储为 dicom+json 元数据时,该属性将编制索引。 未提供验证警告。

存储响应状态代码

代码 说明
200 (OK) 请求中的所有 SOP 实例都存储。
202 (Accepted) 源服务器存储了一些实例,其他实例失败或返回了警告。 有关此错误的其他信息可能会在响应消息正文中找到。
204 (No Content) 存储事务请求中未提供任何内容。
400 (Bad Request) 请求的格式不正确。 例如,提供的学习实例标识符不符合预期的 UID 格式。
401 (Unauthorized) 客户端未进行身份验证。
406 (Not Acceptable) 不支持指定的 Accept 标头。
409 (Conflict) 存储事务请求中的实例都未存储。
415 (Unsupported Media Type) 不支持提供 Content-Type
424 (Failed Dependency) DICOM 服务无法访问它依赖的资源来完成此请求。 例如,无法访问连接的 Data Lake Store 或密钥保管库以支持客户管理的密钥加密。
500 (Internal Server Error) 服务器遇到未知的内部错误。 请稍后重试。
503 (Service Unavailable) 服务不可用或正忙。 请稍后重试。

存储响应 paylo

响应有效负载使用以下元素填充 DICOM 数据集:

标记 名称 描述
(0008, 1190) RetrieveURL 如果存储请求中提供了 StudyInstanceUID,并且至少有一个实例成功存储,则检索该检查的 URL。
(0008, 1198) FailedSOPSequence 未能存储的实例的序列。
(0008, 1199) ReferencedSOPSequence 已存储实例的序列。

中的每个数据集 FailedSOPSequence 具有以下元素(如果尝试存储的 DICOM 文件可以读取):

标记 名称 描述
(0008, 1150) ReferencedSOPClassUID 未能存储的实例的 SOP 类唯一标识符。
(0008, 1155) ReferencedSOPInstanceUID 未能存储的实例的 SOP 例实唯一标识符。
(0008, 1197) FailureReason 此实例未能存储的原因代码。
(0008, 1196) WarningReason 指示 WarningReason 检测到但不够严重但不足以使存储操作失败的验证问题。
(0074, 1048) FailedAttributesSequence 该序列 ErrorComment 包括每个失败属性的原因。

每个数据集 ReferencedSOPSequence 都有以下元素:

标记 名称 描述
(0008, 1150) ReferencedSOPClassUID 存储的实例的 SOP 类唯一标识符。
(0008, 1155) ReferencedSOPInstanceUID 存储的实例的 SOP 实例唯一标识符。
(0008, 1190) RetrieveURL DICOM 服务器上此实例的检索 URL。

在 ReferencedSOPSequence 中没有 FailedAttributesSequence 的标头application/dicom+json的示例响应Accept

{
  "00081190":
  {
    "vr":"UR",
    "Value":["http://localhost/studies/d09e8215-e1e1-4c7a-8496-b4f6641ed232"]
  },
  "00081198":
  {
    "vr":"SQ",
    "Value":
    [{
      "00081150":
      {
        "vr":"UI","Value":["cd70f89a-05bc-4dab-b6b8-1f3d2fcafeec"]
      },
      "00081155":
      {
        "vr":"UI",
        "Value":["22c35d16-11ce-43fa-8f86-90ceed6cf4e7"]
      },
      "00081197":
      {
        "vr":"US",
        "Value":[43265]
      }
    }]
  },
  "00081199":
  {
    "vr":"SQ",
    "Value":
    [{
      "00081150":
      {
        "vr":"UI",
        "Value":["d246deb5-18c8-4336-a591-aeb6f8596664"]
      },
      "00081155":
      {
        "vr":"UI",
        "Value":["4a858cbb-a71f-4c01-b9b5-85f88b031365"]
      },
      "00081190":
      {
        "vr":"UR",
        "Value":["http://localhost/studies/d09e8215-e1e1-4c7a-8496-b4f6641ed232/series/8c4915f5-cc54-4e50-aa1f-9b06f6e58485/instances/4a858cbb-a71f-4c01-b9b5-85f88b031365"]
      }
    }]
  }
}

Accept ReferencedSOPSequence 中 FailedAttributesSequence 的标头 application/dicom+json 的示例响应:

{
  "00081190":
  {
    "vr":"UR",
    "Value":["http://localhost/studies/d09e8215-e1e1-4c7a-8496-b4f6641ed232"]
  },
  "00081199":
  {
    "vr":"SQ",
    "Value":
    [{
      "00081150":
      {
        "vr":"UI",
        "Value":["d246deb5-18c8-4336-a591-aeb6f8596664"]
      },
      "00081155":
      {
        "vr":"UI",
        "Value":["4a858cbb-a71f-4c01-b9b5-85f88b031365"]
      },
      "00081190":
      {
        "vr":"UR",
        "Value":["http://localhost/studies/d09e8215-e1e1-4c7a-8496-b4f6641ed232/series/8c4915f5-cc54-4e50-aa1f-9b06f6e58485/instances/4a858cbb-a71f-4c01-b9b5-85f88b031365"]
      },
      "00081196": {
        "vr": "US",
        "Value": [
            1
        ]
      },
      "00741048": {
        "vr": "SQ",
        "Value": [
          {
            "00000902": {
              "vr": "LO",
              "Value": [
                "DICOM100: (0008,0020) - Content \"NotAValidDate\" does not validate VR DA: one of the date values does not match the pattern YYYYMMDD"
              ]
            }
          },
          {
            "00000902": {
              "vr": "LO",
              "Value": [
                "DICOM100: (0008,002a) - Content \"NotAValidDate\" does not validate VR DT: value does not mach pattern YYYY[MM[DD[HH[MM[SS[.F{1-6}]]]]]]"
              ]
            }
          }
        ]
      }
    }]
  }
}

存储失败原因代码

代码 说明
272 由于处理操作时出现一般失败,存储事务未存储实例。
43264 DICOM 实例验证失败。
43265 提供的实例与存储请求中指定的实例 StudyInstanceUID 不匹配 StudyInstanceUID
45070 具有相同的 StudyInstanceUIDSeriesInstanceUIDDICOM 实例,并且SopInstanceUID已存储。 如果要更新内容,请先删除此实例。
45071 DICOM 实例正在由另一个进程创建,或者先前尝试创建失败且清理过程未完成。 请先删除此实例,然后再尝试重新创建。

存储警告原因代码

代码 说明
45063 DICOM 实例数据集与 SOP 类不匹配。 研究存储事务(第 10.5 节)观察到,数据集在实例存储期间与 SOP 类的约束不匹配。
1 研究存储事务(第 10.5 节)观察到数据集具有验证

存储错误代码

代码 说明
100 提供的实例属性不符合验证条件。

检索 (WADO-RS)

此检索事务支持按引用检索存储的研究、序列、实例和帧。

方法 路径 说明
GET ../studies/{study} 检索检查中的所有实例。
GET ../studies/{study}/metadata 检索研究中所有实例的元数据
GET ../studies/{study}/series/{series} 检索序列中的所有实例
GET ../studies/{study}/series/{series}/metadata 检索序列中所有实例的元数据
GET ../studies/{study}/series/{series}/instances/{instance} 检索单个实例
GET ../studies/{study}/series/{series}/instances/{instance}/metadata 检索单个实例的元数据
GET ../studys/{study}/series/{series}/instances/{instance}/rendered 检索呈现为图像格式的实例
GET ../studies/{study}/series/{series}/instances/{instance}/frames/{frames} 从单个实例中检索一个或多个帧。 若要指定多个帧,请用逗号分隔要返回的每个帧。 例如,/studies/1/series/2/instance/3/frames/4,5,6
GET ../studys/{study}/series/{series}/instances/{instance}/frames/{frame}/rendered 检索呈现为图像格式的单个帧

检索检查或序列内的实例

支持检索研究或系列中的实例的以下 Accept 标头。

  • multipart/related; type="application/dicom"; transfer-syntax=*
  • multipart/related; type="application/dicom"; (如果未指定传输语法,则默认使用 1.2.840.10008.1.2.1)
  • multipart/related; type="application/dicom"; transfer-syntax=1.2.840.10008.1.2.1
  • multipart/related; type="application/dicom"; transfer-syntax=1.2.840.10008.1.2.4.90
  • */* (如果未指定传输语法, * 则用作默认值,mediaType 默认值为 application/dicom

检索实例

支持检索特定实例的以下 Accept 标头。

  • application/dicom; transfer-syntax=*
  • multipart/related; type="application/dicom"; transfer-syntax=*
  • application/dicom; (如果未指定传输语法, 1.2.840.10008.1.2.1 则用作默认值)
  • multipart/related; type="application/dicom" (如果未指定传输语法, 1.2.840.10008.1.2.1 则用作默认值)
  • application/dicom; transfer-syntax=1.2.840.10008.1.2.1
  • multipart/related; type="application/dicom"; transfer-syntax=1.2.840.10008.1.2.1
  • application/dicom; transfer-syntax=1.2.840.10008.1.2.4.90
  • multipart/related; type="application/dicom"; transfer-syntax=1.2.840.10008.1.2.4.90
  • */* (如果未指定传输语法, * 则用作默认值,mediaType 默认值为 application/dicom

检索帧

检索帧支持以下 Accept 标头。

  • multipart/related; type="application/octet-stream"; transfer-syntax=*
  • multipart/related; type="application/octet-stream"; (如果未指定传输语法, 1.2.840.10008.1.2.1 则用作默认值)
  • multipart/related; type="application/octet-stream"; transfer-syntax=1.2.840.10008.1.2.1
  • multipart/related; type="image/jp2"; (如果未指定传输语法, 1.2.840.10008.1.2.4.90 则用作默认值)
  • multipart/related; type="image/jp2";transfer-syntax=1.2.840.10008.1.2.4.90
  • application/octet-stream; transfer-syntax=* 用于单帧检索
  • */* (如果未指定传输语法, * 则用作默认值,mediaType 默认值为 application/octet-stream

检索传输语法

当请求的传输语法与原始文件不同时,原始文件将转码为请求的传输语法。 原始文件必须是以下格式之一才能成功转码,否则转码可能会失败。

  • 1.2.840.10008.1.2 (Little Endian Implicit)
  • 1.2.840.10008.1.2.1 (Little Endian Explicit)
  • 1.2.840.10008.1.2.2 (Explicit VR Big Endian)
  • 1.2.840.10008.1.2.4.50 (JPEG Baseline Process 1)
  • 1.2.840.10008.1.2.4.57 (JPEG Lossless)
  • 1.2.840.10008.1.2.4.70 (JPEG Lossless Selection Value 1)
  • 1.2.840.10008.1.2.4.90 (JPEG 2000 Lossless Only)
  • 1.2.840.10008.1.2.4.91 (JPEG 2000)
  • 1.2.840.10008.1.2.5 (RLE Lossless)

不支持 transfer-syntax 的结果 406 Not Acceptable

检索(检查、序列或实例的)的元数据

支持检索研究、序列或实例的元数据的以下 Accept 标头。

  • application/dicom+json

检索元数据不会返回具有以下值表示形式的属性。

VR 名称 说明
OB Other Byte
OD Other Double
OF Other Float
OL Other Long
OV Other 64-Bit Very Long
OW Other Word
UN 未知

检索的元数据在用 null 填充属性并按原样存储时包含 null 字符。

检索元数据缓存验证(适用于研究、序列或实例)

使用 ETag 机制可支持缓存验证。 在对元数据请求的响应中,ETag 将作为其中一个标头返回。 此 ETag 可以缓存并作为标头添加到 If-None-Match 后续请求中的相同元数据。 如果数据存在,则可能会出现两种类型的响应。

  • 自上次请求以来,数据保持不变:发送 HTTP 304 (Not Modified) 响应时没有响应正文。
  • 自上次请求以来的数据已更改:使用更新的 HTTP 200 (OK) ETag 发送响应。 必需数据作为正文的一部分返回。

检索呈现的图像(例如或帧)

对于检索实例或帧呈现的图像,支持以下 Accept 标头。

  • image/jpeg
  • image/png

如果未 Accept 指定标头,则服务默认呈现一个 image/jpeg 标头。

该服务仅支持呈现单个帧。 如果为具有多个帧的实例请求呈现,则默认情况下,仅第一帧呈现为图像。

指定要返回的特定帧时,帧索引从 1 开始。

quality还支持查询参数。 介于和100非独占(11 为最差质量,100 为最佳质量)之间的整数值可能会作为查询参数的值传递。 此参数用于呈现为 jpeg和忽略 png 呈现请求的图像。 如果未指定参数,则默认为 100.

检索原始版本

使用批量更新操作可以检索研究、系列或实例的原始版本或最新版本。 默认情况下,始终返回最新版的研究、系列或实例。 通过将标头设置为 msdicom-request-original true 可以返回原始版本。 下面是一个示例请求:

GET ../studies/{study}/series/{series}/instances/{instance}
Accept: multipart/related; type="application/dicom"; transfer-syntax=*
msdicom-request-original: true
Content-Type: application/dicom

检索响应状态代码

代码 说明
200 (OK) 检索了所有请求的数据。
304 (Not Modified) 自上次请求以来,请求的数据保持不变。 在这种情况下,内容不会添加到响应正文中。 有关详细信息,请参阅上一部分 :检索元数据缓存验证(适用于研究、系列或实例)。
400 (Bad Request) 请求的格式不正确。 例如,提供的学习实例标识符不符合预期的 UID 格式,或者不支持请求的传输语法编码。
401 (Unauthorized) 客户端未进行身份验证。
403 (Forbidden) 用户未获得授权。
404 (Not Found) 找不到指定的 DICOM 资源,或者对于呈现的请求,实例不包含像素数据。
406 (Not Acceptable) 不支持指定的 Accept 标头,或者对于呈现和转码的请求,请求的文件太大。
424 (Failed Dependency) DICOM 服务无法访问它依赖的资源来完成此请求。 例如,无法访问连接的 Data Lake Store 或密钥保管库以支持客户管理的密钥加密。
503 (Service Unavailable) 服务不可用或正忙。 请稍后重试。

搜索 (QIDO-RS)

基于 DICOM 对象 ID 的查询 (QIDO) 允许按属性搜索检查、序列和实例。

方法 路径 说明
搜索检查
GET ../studies?... 搜索检查
搜索序列
GET ../series?... 搜索序列
GET ../studies/{study}/series?... 搜索检查中的序列
搜索实例
GET ../instances?... 搜索实例
GET ../studies/{study}/instances?... 搜索检查中的实例
GET ../studies/{study}/series/{series}/instances?... 搜索序列中的实例

支持以下 Accept 标头进行搜索。

  • application/dicom+json

从 v1 搜索更改

在 v1 API 中,如果扩展查询标记存在任何错误,因为一个或多个现有实例的标记值无法编制索引,则包含扩展查询标记的后续搜索查询将按文档中的详细信息返回erroneous-dicom-attributes。 但是,包含 STOW-RS 验证警告的标记(也称为属性)不包括 在此标头中。 如果存储请求在存储实例时导致可搜索属性的验证警告,则这些属性可能不用于搜索存储的实例。 但是,如果值被存储在失败的同一个研究或序列中的实例覆盖,或者如果值已由上一个实例正确存储,则验证失败的任何 可搜索属性 都可能会返回结果。 如果未覆盖属性值,它们不会生成任何搜索结果。

可以通过以下方式更正属性。

  • 删除存储的实例并上传包含更正数据的新实例
  • 在同一个研究/系列中上传包含更正数据的新实例

支持的搜索参数

各查询均支持以下参数:

密钥 支持值 允许的计数 说明
{attributeID}= {value} 0...N 在查询中搜索属性/值匹配
includefield= {attributeID}
all
0...N 响应中要返回的其他属性。 支持公有标记和私有标记。
提供时 all ,请参阅 “搜索响应 ”了解详细信息。
如果提供的混合 {attributeID} 服务器 all ,则服务器默认使用 all
limit= {value} 0..1 整数值,用于限制响应中返回值的数量。
值介于 1 >= x <= 200 之间。 默认为 100
offset= {value} 0..1 跳过 {value} 结果。
如果提供的偏移量大于搜索结果数,则返回 204(无内容)响应。
fuzzymatching= true / false 0..1 如果模糊匹配为 true 且应用于 PatientName 属性时。 它在 PatientName 值内执行任何名称部分的前缀单词匹配。 例如,如果 PatientName 为“John^Doe”,则为“joh”、“do”、“jo do”、“Doe”和“John Doe”全部匹配。 然而,“ohn”不匹配。

可搜索属性

支持搜索以下属性和搜索类型。

属性关键字 所有研究 所有系列 所有实例 研究系列 研究实例 研究系列实例
StudyInstanceUID X X X
PatientName X X X
PatientID X X X
PatientBirthDate X X X
AccessionNumber X X X
ReferringPhysicianName X X X
StudyDate X X X
StudyDescription X X X
ModalitiesInStudy X X X
SeriesInstanceUID X X X X
Modality X X X X
PerformedProcedureStepStartDate X X X X
ManufacturerModelName X X X X
SOPInstanceUID X X X

注意

不支持使用空字符串搜索任何属性。

搜索匹配

支持以下匹配类型。

搜索类型 支持的属性 示例
范围查询 StudyDate/PatientBirthDate {attributeID}={value1}-{value2}。 对于日期/时间值,我们支持标记上的非独占范围。 此范围映射到 attributeID >= {value1} AND attributeID <= {value2}{value1}如果未指定,则匹配之前的所有日期/时间,包括{value2}匹配。 同样,如果未指定, {value2} 则匹配所有匹配项 {value1} 和后续日期/时间。 但是,必须存在其中一个值。 {attributeID}={value1}-{attributeID}=-{value2}{attributeID}=-无效。
完全匹配 所有支持的属性 {attributeID}={value1}
模糊匹配 PatientName, ReferringPhysicianName 匹配以值开头的名称的任何组件
UID 列表匹配 StudyInstanceUID 匹配列表中提供的值确定的研究。 支持逗号 (,) 或反斜杠 (\) 作为有效分隔符。 {attributeID}=1.2.3,5.6.7,8.9.0 将返回与所有研究相关的详细信息,因为它们存在。

属性 ID

可以通过多种方式对查询参数进行标记编码。 我们部分实现了 PS3.18 6.7.1.1.1.1定义的标准。 支持标记的以下编码。

示例
{group}{element} 0020000D
{dicomKeyword} StudyInstanceUID

搜索实例的示例查询:

../instances?Modality=CT&00280011=512&includefield=00280010&limit=5&offset=0

搜索响应

响应是 DICOM 数据集的数组。 根据资源, 默认情况下 返回以下属性。

默认学习标记

标记 属性名称
(0008, 0020) StudyDate
(0008, 0050) AccessionNumber
(0008, 1030) StudyDescription
(0009, 0090) ReferringPhysicianName
(0010, 0010) PatientName
(0010, 0020) PatientID
(0010, 0030) PatientBirthDate
(0020,000D) StudyInstanceUID

默认系列标记

标记 属性名称
(0008, 0060) Modality
(0008, 1090) ManufacturerModelName
(0020,000E) SeriesInstanceUID
(0040, 0244) PerformedProcedureStepStartDate

默认实例标记

标记 属性名称
(0008, 0018) SOPInstanceUID

如果 includefield=all包含这些属性,则附带默认属性。 除了默认属性,此列表还包含每个资源级别支持的属性的完整列表。

其他研究标记

标记 属性名称
(0008, 0005) SpecificCharacterSet
(0008, 0030) StudyTime
(0008, 0056) InstanceAvailability
(0008, 0201) TimezoneOffsetFromUTC
(0008, 0063) AnatomicRegionsInStudyCodeSequence
(0008, 1032) ProcedureCodeSequence
(0008, 1060) NameOfPhysiciansReadingStudy
(0008, 1080) AdmittingDiagnosesDescription
(0008, 1110) ReferencedStudySequence
(0010, 1010) PatientAge
(0010, 1020) PatientSize
(0010, 1030) PatientWeight
(0010, 2180) Occupation
(0010, 21B0) AdditionalPatientHistory
(0010, 0040) PatientSex
(0020, 0010) StudyID

其他系列标记

标记 属性名称
(0008, 0005) SpecificCharacterSet
(0008, 0201) TimezoneOffsetFromUTC
(0020, 0011) SeriesNumber
(0020, 0060) Laterality
(0008, 0021) SeriesDate
(0008, 0031) SeriesTime
(0008, 103E) SeriesDescription
(0040, 0245) PerformedProcedureStepStartTime
(0040, 0275) RequestAttributesSequence

其他实例标记

标记 属性名称
(0008, 0005) SpecificCharacterSet
(0008, 0016) SOPClassUID
(0008, 0056) InstanceAvailability
(0008, 0201) TimezoneOffsetFromUTC
(0020, 0013) InstanceNumber
(0028, 0010) “行”
(0028, 0011)
(0028, 0100) BitsAllocated
(0028, 0008) NumberOfFrames

返回以下属性。

  • 资源 URL 中的所有匹配查询参数和 UID
  • IncludeField 该资源级别支持的属性
  • 如果目标资源是 All Series,则 Study 还会返回级别属性。
  • 如果目标资源是All Instances,则StudySeries还会返回级别属性。
  • 如果目标资源是 Study's Instances,则 Series 还会返回级别属性。
  • NumberOfStudyRelatedInstances级别includeField支持Study聚合属性。
  • NumberOfSeriesRelatedInstances级别includeField支持Series聚合属性。

搜索响应代码

查询 API 在响应中返回以下状态代码之一。

代码 说明
200 (OK) 响应有效负载包含所有匹配的资源。
204 (No Content) 搜索成功完成,但未返回任何结果。
400 (Bad Request) 由于查询的部分无效,服务器无法执行查询。 响应正文包含失败的详细信息。
401 (Unauthorized) 客户端未进行身份验证。
403 (Forbidden) 用户未获得授权。
414 (URI Too Long) URI 超出了支持的最大长度为 8192 个字符。
424 (Failed Dependency) DICOM 服务无法访问它依赖的资源来完成此请求。 例如,无法访问连接的 Data Lake Store 或密钥保管库以支持客户管理的密钥加密。
503 (Service Unavailable) 服务不可用或正忙。 请稍后重试。

备注

  • 不支持使用 TimezoneOffsetFromUTC (00080201) 查询。
  • 查询 API 不返回 413 (request entity too large)。 如果请求的查询响应限制超出可接受的范围,则返回错误的请求。 解决在可接受的范围内请求的任何内容。
  • 当目标资源为 Study/Series 时,可能会跨多个实例实现不一致的研究/系列级别元数据。 例如,两个实例可能具有不同的 patientName。 在这种情况下,最新的胜利,只能搜索最新数据。
  • 已对分页结果进行优化以先返回匹配 的最新 实例,如果添加了与查询匹配的较新的数据,则可能会导致后续页面中的重复记录。
  • 匹配不区分大小写,对 PN VR 类型不区分重音。
  • 匹配不区分大小写,其他字符串 VR 类型区分重音。
  • 只有第一个值是错误地具有多个值的单个值数据元素的索引。
  • 使用默认属性或限制请求的结果数可最大化性能。
  • 使用 null 填充存储属性时,可以在 URI 编码中使用或不使用 null 填充来搜索它。 检索的结果适用于同时存储且不带 null 填充的属性。

删除

此交易不属于官方 DICOMweb 标准。 它使用 DELETE 方法从商店中删除研究、系列和实例的表示形式。

方法 路径 说明
DELETE ../studies/{study} 删除特定检查的所有实例。
DELETE ../studies/{study}/series/{series} 删除检查中特定序列的所有实例。
DELETE ../studies/{study}/series/{series}/instances/{instance} 删除序列中的特定实例。

参数studyseriesinstance对应于 DICOM 属性StudyInstanceUIDSeriesInstanceUID以及SopInstanceUID分别对应于。

请求的 Accept 标头、 Content-Type 标头或正文内容没有限制。

注意

删除事务后,已删除的实例将无法恢复。

响应状态代码

代码 说明
204 (No Content) 删除所有 SOP 实例时。
400 (Bad Request) 请求的格式不正确。
401 (Unauthorized) 客户端未进行身份验证。
403 (Forbidden) 用户未获得授权。
404 (Not Found) 在研究中未找到指定序列或未在序列中找到指定实例时。
424 (Failed Dependency) DICOM 服务无法访问它依赖的资源来完成此请求。 例如,无法访问连接的 Data Lake Store 或密钥保管库以支持客户管理的密钥加密。
503 (Service Unavailable) 服务不可用或正忙。 请稍后重试。

删除响应有效负载

响应正文为空。 状态代码是返回的唯一有用信息。

Worklist Service (UPS-RS)

DICOM 服务支持工作列表服务 (UPS-RS) 的推送和拉取 SOP。 此服务提供对包含 Workitems 的一个 Worklist 的访问权限,每个工作列表表示统一过程步骤(UPS)。

在整个过程中,URI 模板中的变量 {workitem} 代表 Workitem UID。

可用的 UPS-RS 终结点包括:

谓词 路径 说明
POST {s}/workitems{?AffectedSOPInstanceUID} 创建工作项
POST {s}/workitems/{instance}{?transaction} 更新工作项
GET {s}/workitems{?query*} 搜索工作项
GET {s}/workitems/{instance} 检索工作项
PUT {s}/workitems/{instance}/state 更改工作项状态
POST {s}/workitems/{instance}/cancelrequest 取消工作项
POST {s}/workitems/{instance}/subscribers/{AETitle}{?deletionlock} 创建订阅
POST {s}/workitems/1.2.840.10008.5.1.4.34.5/ 暂停订阅
DELETE {s}/workitems/{instance}/subscribers/{AETitle} 删除订阅
GET {s}/subscribers/{AETitle} 打开订阅频道

创建 Workitem

此事务使用 POST 方法创建新的 Workitem。

方法 路径 说明
POST ../workitems 创建 Workitem。
POST ../workitems?{workitem} 使用指定的 UID 创建 Workitem。

如果未在 URI 中指定,则有效负载数据集必须包含属性中的 SOPInstanceUID Workitem。

请求 Accept 中需要标头和 Content-Type 标头,并且必须同时具有值 application/dicom+json

特定事务的上下文中存在一些与 DICOM 数据属性相关的要求。 可能需要存在属性、需要不存在、需要为空或非空属性。 此表中可以找到这些要求。

注意

尽管参考表指出不应存在 SOP 实例 UID,但本指南特定于 DIMSE 协议,在 DICOMWeb 中以不同的方式进行处理。 SOP 实例 UID 应存在于数据集中(如果不在 URI 中)。

注意

所有条件要求代码(包括 1C 和 2C)都被视为可选。

创建响应状态代码

代码 说明
201 (Created) 已成功创建目标 Workitem。
400 (Bad Request) 请求存在问题。 例如,请求有效负载不符合要求。
401 (Unauthorized) 客户端未进行身份验证。
403 (Forbidden) 用户未获得授权。
409 (Conflict) Workitem 已存在。
415 (Unsupported Media Type) 不支持提供 Content-Type
424 (Failed Dependency) DICOM 服务无法访问它依赖的资源来完成此请求。 例如,无法访问连接的 Data Lake Store 或密钥保管库以支持客户管理的密钥加密。
503 (Service Unavailable) 服务不可用或正忙。 请稍后重试。

创建响应有效负载

成功响应没有有效负载。 Location Content-Location响应标头包含对创建的 Workitem 的 URI 引用。

故障响应有效负载包含描述失败的消息。

请求取消

此事务使用户能够请求取消非拥有的 Workitem。

有四个 有效的 Workitem 状态

  • SCHEDULED
  • IN PROGRESS
  • CANCELED
  • COMPLETED

此事务仅针对处于该状态的 SCHEDULED Workitems 成功。 任何用户都可以通过将 Workitem 的事务 UID 设置为其状态来 IN PROGRESS声明其所有权。 此后,用户只能通过提供正确的事务 UID 来修改 Workitem。 虽然 UPS 定义了允许转发取消请求和其他事件的监视类和事件 SOP 类,但此 DICOM 服务不实现这些类,因此返回失败的工作项 IN PROGRESS 上的取消请求。 可以通过 Change Workitem 状态 事务取消拥有的 Workitem。

方法 路径 说明
POST ../workitems/{workitem}/cancelrequest 请求取消计划的 Workitem

标头 Content-Type 是必需的,并且必须具有值 application/dicom+json

请求有效负载可能包括 DICOM 标准中定义的操作信息

请求取消响应状态代码

代码 说明
202 (Accepted) 服务器已接受请求,但目标工作项状态尚未更改。
400 (Bad Request) 请求的语法出现问题。
401 (Unauthorized) 客户端未进行身份验证。
403 (Forbidden) 用户未获得授权。
404 (Not Found) 找不到 Target Workitem。
409 (Conflict) 请求与 Target Workitem 的当前状态不一致。 例如,Target Workitem 处于 SCHEDULEDCOMPLETED 状态。
415 (Unsupported Media Type) 不支持提供 Content-Type
424 (Failed Dependency) DICOM 服务无法访问它依赖的资源来完成此请求。 例如,无法访问连接的 Data Lake Store 或密钥保管库以支持客户管理的密钥加密。
503 (Service Unavailable) 服务不可用或正忙。 请稍后重试。

请求取消响应有效负载

成功响应没有有效负载,故障响应有效负载包含描述失败的消息。 如果 Workitem 实例已处于取消状态,响应将包含以下 HTTP 警告标头: 299: The UPS is already in the requested state of CANCELED.

检索 Workitem

此事务检索 Workitem。 它对应于 UPS DIMSE N-GET 操作。

指: https://dicom.nema.org/medical/dicom/current/output/html/part18.html#sect_11.5

如果源服务器上存在 Workitem,则 Workitem 在可接受的媒体类型中返回。 返回的 Workitem 不包含事务 UID (0008,1195) 属性。 必须保留属性的角色作为访问锁。

方法 路径 说明
GET ../workitems/{workitem} 检索 Workitem 的请求

标头 Accept 是必需的,并且必须具有值 application/dicom+json

检索 Workitem 响应状态代码

代码 说明
200(正常) 已成功检索 Workitem 实例。
400(错误请求) 请求存在问题。
401(未授权) 客户端未进行身份验证。
403(已禁止) 用户未获得授权。
404(未找到) 找不到 Target Workitem。
424 (失败的依赖项) DICOM 服务无法访问它依赖的资源来完成此请求。 例如,无法访问连接的 Data Lake Store 或密钥保管库以支持客户管理的密钥加密。
503(服务不可用) 服务不可用或正忙。 请稍后重试。

检索 Workitem 响应有效负载

  • 成功响应包含所选媒体类型中请求的工作项的单个部分有效负载。
  • 返回的 Workitem 不应包含 Workitem 的 Transaction UID (0008, 1195) 属性,因为只有所有者知道该属性。

更新 Workitem

此事务修改现有 Workitem 的属性。 它对应于 UPS DIMSE N-SET 操作。

指: https://dicom.nema.org/medical/dicom/current/output/html/part18.html#sect_11.6

若要更新当前处于状态的 SCHEDULED Workitem, Transaction UID 该属性不应存在。 对于处于状态的 IN PROGRESS Workitem,请求必须包含当前事务 UID 作为查询参数。 如果 Workitem 已处于 COMPLETEDCANCELED 状态,则响应为 400 (Bad Request)

方法 路径 说明
POST ../workitems/{workitem}?{transaction-uid} 更新 Workitem 事务

标头 Content-Type 是必需的,并且必须具有值 application/dicom+json

请求有效负载包含一个数据集,其中包含要应用于目标 Workitem 的更改。 修改序列时,请求必须包含序列中的所有项,而不仅仅是要修改的项。 如果需要将多个属性更新为组,请在单个请求中将其更新为多个属性,而不是多个请求。

特定事务的上下文中有许多与 DICOM 数据属性相关的要求。 可能需要存在属性、需要不存在、需要为空或非空属性。 此表中可以找到这些要求。

注意

所有条件要求代码(包括 1C 和 2C)都被视为可选。

注意

请求无法设置过程步骤状态(0074,1000)属性的值。 过程步骤状态是使用更改状态事务或请求取消事务管理的。

更新 Workitem 事务响应状态代码

代码 说明
200 (OK) Target Workitem 已更新。
400 (Bad Request) 请求存在问题。 例如:(1) Target Workitem 处于 COMPLETEDCANCELED 状态。 (2) 事务 UID 缺失。 (3) 事务 UID 不正确。 (4) 数据集不符合要求。
401 (Unauthorized) 客户端未进行身份验证。
403 (Forbidden) 用户未获得授权。
404 (Not Found) 找不到 Target Workitem。
409 (Conflict) 请求与 Target Workitem 的当前状态不一致。
415 (Unsupported Media Type) 不支持提供 Content-Type
424 (Failed Dependency) DICOM 服务无法访问它依赖的资源来完成此请求。 例如,无法访问连接的 Data Lake Store 或密钥保管库以支持客户管理的密钥加密。
503 (Service Unavailable) 服务不可用或正忙。 请稍后重试。

更新 Workitem 事务响应有效负载

源服务器支持表 11.6.3-2所需的标头字段。

成功响应没有有效负载,或者包含状态报告文档的有效负载。

故障响应有效负载可能包含描述任何故障、警告或其他有用信息的状态报告。

更改 Workitem 状态

此事务用于更改 Workitem 的状态。 它对应于 UPS DIMSE N-ACTION 操作“更改 UPS 状态”。 状态更改用于声明所有权、完成或取消 Workitem。

指: https://dicom.nema.org/medical/dicom/current/output/html/part18.html#sect_11.7

如果源服务器上存在 Workitem,则 Workitem 在可接受的媒体类型中返回。 返回的 Workitem 不包含事务 UID (0008,1195) 属性。 必须保留属性的角色作为访问锁,如此处所述

方法 路径 说明
PUT ../workitems/{workitem}/state 更改 Workitem 状态

标头 Accept 是必需的,并且必须具有值 application/dicom+json

请求有效负载包含更改 UPS 状态数据元素。 这些数据元素如下所示。

  • 事务 UID (0008, 1195) 。 请求有效负载包括事务 UID。 用户代理在请求转换到 IN PROGRESS 给定 Workitem 的状态时创建事务 UID。 用户代理在该 Workitem 的后续事务中提供事务 UID。
  • 过程步骤状态 (0074, 1000)。 法律值对应于请求的状态转换。 这些是: IN PROGRESSCOMPLETEDCANCELED

更改 Workitem 状态响应状态代码

代码 说明
200 (OK) 已成功检索 Workitem 实例。
400 (Bad Request) 由于以下原因之一,无法执行请求:(1)如果 Target Workitem 的当前状态,请求无效。 (2) 事务 UID 缺失。 (3) 事务 UID 不正确
401 (Unauthorized) 客户端未进行身份验证。
403 (Forbidden) 用户未获得授权。
404 (Not Found) 找不到 Target Workitem。
409 (Conflict) 请求与 Target Workitem 的当前状态不一致。
424 (Failed Dependency) DICOM 服务无法访问它依赖的资源来完成此请求。 例如,无法访问连接的 Data Lake Store 或密钥保管库以支持客户管理的密钥加密。
503 (Service Unavailable) 服务不可用或正忙。 请稍后重试。

更改 Workitem 状态响应有效负载

  • 响应包括第 11.7.3.2 节中指定的标头字段。
  • 成功响应没有有效负载。
  • 故障响应有效负载可能包含描述任何故障、警告或其他有用信息的状态报告。

Search Workitems

通过此事务,可以按属性搜索 Workitems。

方法 路径 说明
GET ../workitems? 搜索 Workitems

支持以下 Accept 标头进行搜索。

  • application/dicom+json

支持的搜索参数

各查询均支持以下参数:

密钥 支持值 允许的计数 说明
{attributeID}= {value} 0...N 在查询中搜索属性/值匹配。
includefield= {attributeID}
all
0...N 响应中要返回的其他属性。 只能包含顶级属性 -- 不是属于序列的一部分的属性。 支持公共标记和专用标记。 在提供 all 的情况下。 有关每个查询类型返回的属性的详细信息,请参阅 搜索响应 。 如果提供了混合 {attributeID} 服务器, all 则服务器默认使用“all”。
limit= {value} 0...1 整数值,用于限制响应中返回值的数量。 值可以介于范围 1 >= x <= 200之间。 默认为 100.
offset= {value} 0...1 跳过 {value} 个结果。 如果提供的偏移量大于搜索结果数, 204 (no content) 则返回响应。
fuzzymatching= true \ false 0...1 如果对具有人员名称(PN)值表示形式(VR)的任何属性应用真正的模糊匹配。 它对这些属性中的任何名称部分执行前缀词匹配。 例如,如果是PatientNameJohn^Doe,则为、、dojohjo doDoe John Doe所有匹配项。 但是 ohn 不匹配。
可搜索属性

支持搜索以下属性。

属性关键字
PatientName
PatientID
ReferencedRequestSequence.AccessionNumber
ReferencedRequestSequence.RequestedProcedureID
ScheduledProcedureStepStartDateTime
ScheduledStationNameCodeSequence.CodeValue
ScheduledStationClassCodeSequence.CodeValue
ScheduledStationGeographicLocationCodeSequence.CodeValue
ProcedureStepState
StudyInstanceUID

注意

不支持使用空字符串搜索任何属性。

搜索匹配

支持以下匹配类型。

搜索类型 支持的属性 示例
范围查询 ScheduledProcedureStepStartDateTime {attributeID}={value1}-{value2}。 对于日期/时间值,我们支持标记上的非独占范围。 此范围映射到 attributeID >= {value1} AND attributeID <= {value2}。 如果未 {value1} 指定,则匹配之前的所有日期/时间,包括 {value2} 匹配。 同样,如果未指定, {value2} 则匹配所有匹配项 {value1} 和后续日期/时间。 但是,这些值之一必须存在。 {attributeID}={value1}- 并且 {attributeID}=-{value2} 有效,但 {attributeID}=- 无效。
完全匹配 所有支持的属性 {attributeID}={value1}
模糊匹配 PatientName 匹配以值开头的名称的任何组件。
通配符匹配 PatientID,
ReferencedRequestSequence.AccessionNumber,
ReferencedRequestSequence.RequestedProcedureID,
ProcedureStepState,
ScheduledStationNameCodeSequence.CodeValue,
ScheduledStationClassCodeSequence.CodeValue,
ScheduledStationGeographicLocationCodeSequence.CodeValue
支持以下通配符:
* - 匹配零个或多个字符。 例如 - {attributeID}={val*} 匹配“val”、“valid”、“value”而不是“evaluate”。
? - 匹配单个字符。 例如 - {attributeID}={valu?} 匹配“value”、“valu1”而不是“valued”或“valu”

注意

虽然我们不支持完整序列匹配,但我们确实支持对序列中包含的属性进行完全匹配。

属性 ID

可通过多种方式对查询参数的标记进行编码。 我们部分实现了 PS3.18 6.7.1.1.1.1定义的标准。 支持标记的以下编码。

示例
{group}{element} 00100010
{dicomKeyword} PatientName

示例查询:

../workitems?PatientID=K123&0040A370.00080050=1423JS&includefield=00404005&limit=5&offset=0

搜索响应

响应是返回以下属性的 0...N DICOM 数据集数组。

  • DICOM PowerShell 3.4 表 CC.2.5-3 中的所有属性,返回键类型为 1 或 2
  • DICOM PowerShell 3.4 表 CC.2.5-3 中的所有属性,其返回键类型为 1C,满足条件要求
  • 作为匹配参数传递的所有其他 Workitem 属性
  • 作为 includefield 参数值传递的所有其他 Workitem 属性

搜索响应代码

查询 API 将在响应中返回以下状态代码之一:

代码 说明
200 (OK) 响应有效负载包含所有匹配的资源。
206 (Partial Content) 响应有效负载仅包含一些搜索结果,其余内容可以通过相应的请求进行请求。
204 (No Content) 搜索成功完成,但未返回任何结果。
400 (Bad Request) 请求存在问题。 例如,查询参数语法无效。 响应正文包含失败的详细信息。
401 (Unauthorized) 客户端未进行身份验证。
403 (Forbidden) 用户未获得授权。
424 (Failed Dependency) DICOM 服务无法访问它依赖的资源来完成此请求。 例如,无法访问连接的 Data Lake Store 或密钥保管库以支持客户管理的密钥加密。
503 (Service Unavailable) 服务不可用或正忙。 请稍后重试。

其他注释

查询 API 不返回 413 (request entity too large)。 如果请求的查询响应限制超出可接受的范围,则返回错误的请求。 解决在可接受的范围内请求的任何内容。

  • 已对分页结果进行优化以先返回匹配的最新实例,如果添加了与查询匹配的较新的数据,则可能会导致后续页面中的记录重复。
  • 匹配是 PN VR 类型的不区分大小写和不区分重音。
  • 匹配对于其他字符串 VR 类型不区分大小写和区分重音。
  • 如果存在取消 Workitem 并同时查询相同的情况,则查询很可能排除正在更新的 Workitem,并且响应代码是 206 (Partial Content)

注意

DICOM® 是美国电气制造商协会的注册商标,适用于其有关医疗信息数字通信的标准出版物。