QUERY/RETRIEVE 服务类
1. 简介
Query/Retrieve服务类定义了一个简单管理SOP Instances的应用。Query的类型并不复杂,不要求提供像SQL那样高级的数据查询功能。Query/Retrieve 服务类专注基本的SOP Instances查询,它用一些常用关键属性作为查询值. Query/Retrieve服务类能够获取/传输一组具有规范标识的SOP Instances. 获取/传输功能允许一个DICOM应用实体从一个远程DICOM应用实体获取SOP Instances或者请求远程DICOM应用实体将SOP Instances传输到另一个DICOM应用实体。
1.1 Query/retrieve 信息模型
Query/Retrieve服务类的SCP方拥有一定数量的SOP Instances的信息。这些信息是按照某个规范的Query/retrieve信息模型组织而成. Query/retrieve信息模型或者是标准的(在DICOM标准部分里定义)或者是私有的(在实现者的Conformance Statement定义).
一个特定的Query/Retrieve服务类的SOP Class是由一个信息模型定义和一组DIMSE-C服务构成. 信息模型定义扮演类似其他DICOM服务类的IOD那样的角色.
1.1.1 服务定义
实现Query/Retrieve服务类的两端DICOM实体,一个是SCU角色,一个是SCP角色. Query/Retrieve服务类采用DIMSE-C服务中的C-FIND, C-MOVE和 C-GET 服务.
服务包含了基本和扩展行为,基本行为考虑到互操作性,对所有的实现指定最低水平的一致性.而扩展行为增强了基本行为,提供了额外的特点,而这是需要在建立协商的过程中单独协商的.
1.1.1.1 C-FIND, C-MOVE和C-GET服务中SCU/SCP的语义:
a) C-FIND服务:
— SCU请求SCP对请求标识符(identifier)指定的所有关键值进行匹配查找, 查找方式依赖SCP拥有的信息和请求的水平(如Patient, Study, Series或者Composite SOP Instances).
注: “标识符(identifier)”指在PS 3.7章节里C-FIND, C-MOVE, C-GET服务定义的参数”identifier”.
— SCP对每条匹配产生一个C-FIND响应, 响应消息的Identifier包含所有关键值属性的值以及所有已知请求的属性.响应的Status值都为Pending, Pending表示这个匹配的过程还没有结束.
— 当匹配的过程结束, 发出最后一条响应,其Status值为Success且不带有Identifier.
— 拒绝或者失败的C-FIND响应表示SCP无法处理查询请求.
— SCU 可以在SCP查询过程中发送C-FIND-CANCEL请求取消C-FIND服务, SCP会中断服务并返回Cancel标志.
b) C-MOVE服务:
— SCU提供唯一关键值确定并获取一个实体, SCP启动与该关键值关联的SOP Instances的C-STORE 子操作. 这些C-STORE子操作是在与C-MOVE的Association不同的Association进行. Query/Retrieve服务的SCP和Storage服务的SCU可以在不同的应用程序中运行,所以它们也不一定在同一个系统里. 至于启动C-STORE的机制不在DICOM标准讨论范围内.
注: 这意味着它们不一定使用同一个AET.请参考C.6.1.2.2.2, C.6.2.2.2.2 and C.6.3.2.2.2 关于C-MOVE SCP conformance的要求.
— SCP可以选择在C-STORE的过程中发送带有Pending状态的C-MOVE响应. 这些C-MOVE响应指出还剩多少数量的C-STORE操作没有完成以及完成结果分别为成功,警告,失败的C-STORE操作的数量.
— 当C-STORE操作结束, SCP给出最终的响应,响应状态值可以为Success, Warning, Failed 或者 Refused. 这个响应可以给出C-STORE操作成功,警告,失败的数量. 如果C-STORE失败, 会返回一个UID列表.
— SCU可以发送C-MOVE-CANCEL请求取消C-MOVE服务. SCP会终止所有的C-STORE操作返回CANCEL标志.
c) C-GET 服务
—SCU提供唯一关键值确定并获取一个实体, SCP启动与该关键值关联的SOP Instances的C-STORE 子操作.这些C-STORE子操作与C-GET在同一个Association下进行.而在C-STORE服务中, SCU/SCP的角色反过来了.
— SCP可以选择在C-STORE的过程中发送带有Pending状态的C-GET响应. 这些C-GET响应指出还剩多少数量的C-STORE操作没有完成以及完成结果分别为成功,警告,失败的C-STORE操作的数量.
—当C-STORE操作结束, SCP给出最终的响应,响应状态值可以为Success, Warning, Failed 或者 Refused. 这个响应可以给出C-STORE操作成功,警告,失败的数量. 如果C-STORE失败, 会返回一个UID列表.
—SCU可以发送C-GET-CANCEL请求取消C-MOVE服务. SCP会终止所有的C-STORE操作返回CANCEL标志.
2. QUERY/RETRIEVE 信息模型定义
Query/Retrieve信息模型在协商时期由SOP Class确定。SOP Class由一个信息模型和一组 DIMSE-C服务构成。注: 协商的SOP Class确定Query/Retrieve信息模型的类型(请不要把协商的SOP Class与SCP存储的SOP Class弄混淆)
Query/Retrieve信息模型分为标准,私有两种类型.
信息模型定义包含:
— 实体-关系模型定义
— 关键属性定义
实体-关系模型定义
对于任意Query/Retrieve信息模型,实体-关系模型定义了实体的层次关系,实体的属性在各个层次都有定义(如Patient, Study, Series, Composite SOP Instance).
2.1 属性定义
属性应该在实体-关系模型的每个层次得到定义.在C-FIND,C-MOVE, 或者C-GET 命令里的identifier应当包含被查询实体的值. 对于任意查询,实体的集合应当由identifier中的关键属性集合来决定.
属性类型
Query/Retrieve 信息模型的属性分为唯一,必需,可选三种类别.
唯一属性
在实体-关系模型的每个层次中,有一个属性必须定义为唯一属性. 唯一属性的某个值可以唯一确定该层次的某单一实体. 也就是说两个同一层次的实体不能具有一样的唯一属性值. C-FIND, C-MOVE, C-GET SCP应该支持所有唯一属性的存在和匹配. 所有由C-FIND, C-MOVE, C-GET SCP管理的实体应当具有某一非零长度的唯一属性值. C-FIND请求可能包含唯一属性, C-MOVE and C-GET 请求必须包含唯一属性.
必需属性
在实体-关系模型的每个层次中, 有一组属性被定义为必需属性.必需属性意味着C-FIND的SCP应该支持基于必需属性的匹配查找. 可能会有多个实体, 它们的必需属性具有相同值. 也就是说, 必需属性的某个值并不能完全确定某层次的单一实体.C-FIND SCP应当支持所有必需属性的存在和匹配. 如果C-FIND SCP管理的实体含有值为空的必需属性, 那么该值被视为未知,所有对空值属性的匹配应视为正确的匹配.C-FIND请求可能包含必需属性, C-MOVE and C-GET 请求不能包含必需属性.
可选属性
在实体-关系模型的每个层次中, 有一组属性被定义为可选属性. C-FIND请求中的可选属性可能具有3种不同的行为,这取决于C-FIND SCP对于可选属性的存在和匹配的支持.如果C-FIND SCP
— 不支持可选属性的存在,那么这些属性将不会出现在C-FIND响应里.
— 支持可选属性的存在但不支持可选属性的匹配, 那么可选属性的处理方式就和空值的必需属性一样.即可选属性的查询值会被忽略,但SCP会为这个属性返回一个值.
— 支持可选属性的存在和匹配, 那么可选属性的处理方式就和必需属性一样.
注: 1. C-FIND SCU不能假设值不为空的可选属性会像必需属性那样被处理. C-FIND SCP的Conformance Statement应当列举出被支持的可选属性.
2. 可选属性与必需属性不同,C-FIND SCP不一定支持它们的存在和匹配, 但必需属性是一定支持的.
C-FIND请求可能包含可选属性, C-MOVE and C-GET 请求不能包含可选属性.
2.2 属性匹配
以下匹配方式可以应用于Query/Retrieve服务类的关键属性
—单一值匹配
—UID列表匹配
—全局匹配
—通配符匹配
—范围匹配
—Sequence匹配
匹配所需的特殊字符(如“*”,”?”,”-”,和“/”)不属于关键属性值的VR指定的字符集
Notes: 1.例如, “-“ 对于DA, DT 和 TM 这样的VR不是有效字符,但可以用于范围匹配。2. 当非默认字符集被采用,则应用PS 3.5中的规定,例如 05/12 “/” (反斜线) (ISO IR 6) 或者 05/12 “¥” (日元符号) (in ISO IR 14).
关键属性的总长度可能超过PS3.5中VR指定的长度。当应用于特殊的匹配类型, VM可能超过PS 3.6指定的VM. Specific Character Set (0008,0005) 属性可能存在于标识符中但从不会被匹配. 相反, 它指定其他属性在请求和响应的标识符中如何被编码. 这会影响到其他属性的匹配过程. 如果
Specific Character Set (0008,0005) 属性不存在, 则默认的字符集被采用. Specific Character Set(0008,0005) 不能为空值.如果转义序列用于值在不同字符集之间的切换,则Specific Character Set (0008,0005) 可以有多个值. 如果SCP不支持请求中的Specific Character Set (0008,0005)的值, 那么匹配的方式就必需在Conformance Statement中指定.
注: 如果SCU发送的请求标识符是带有SCP不支持的单字节字符集, 那么SCP就有可能把不识别的字符当作通配符,并且只在默认字符集中匹配及响应.
单一值匹配
如果请求中的关键属性值非空,且:
a) 不属于date, time, datetime类型, 不含有通配符
b) 属于date, time, datetime 类型, 含有单一日期或时间且没有“-“符号.
则采用单一值匹配. 除了PN属性, 只有实体的值刚好等于这个关键属性值才能视为匹配. 该匹配大小写敏感.
对于PN属性, (例如Patient Name (0010,0010)), 应用程序在匹配过程中可以大小写敏感,也可以不考虑大小写,位置,口音. 这取决于实现者,但必需在Conformance Statement中指定.
注: 1. date, time, datetime 的匹配取决于它们的含义而不是字符串. 例如:
— DT “19980128103000.0000” 匹配 “19980128103000”
— DT “19980128103000” 匹配 “19980128073000-0300”
— TM “2230” 匹配 “223000”
— TM “223000” 匹配 ACR/NEMA 2.0 form “22:30:00”
— DA “19980128” 匹配 ACR/NEMA 2.0 form “1998.01.28”
2. 如果应用程序关注其他应用程序如何对日期,时间进行单一值匹配. 它可以考虑采用范围匹配,因为范围匹配始终是基于含义的.
3. 把“-“字符排除于单一值匹配意味者DT类型的数据应用单一值匹配时不能含有Universal Coordinated Time(UTC)的负偏移值. 采用“-“符号表示范围匹配.
4. 如果应用程序是位于负偏移的本地时区,则它不能采用本地时间的单一值匹配.它可以将属性值转换为UTC时间并采用显式的后缀 “+0000”.
5. PN属性的匹配可以是口音不敏感的,这可在Conformance Statement中指定. 口音不敏感匹配是可以成功匹配的,如一个查询字符小写字母a(06/01 default ISO-IR 6) 匹配
GRAVE ACCENT小写字母a (14/00 in ISO-IR 100),
TILDE小写字母a (14/03 in ISO-IR 100),
BREVE小写字母a (14/03 in ISO-IR 101),
ACUTE ACCENT大写字母a (12/01 in ISO-IR 100) (匹配同时是大小写不敏感)
但不匹配14/00 in ISO-IR 101, ACUTE ACCENT小写字母r. 对于特殊的位组合匹配是要看具体支持的字符集(注意14/00 意义的区别),这要在Conformance Statement中定义.
UID列表匹配
UID列表采用“/”作为分割符. 每个UID可以产生一个匹配.
全局匹配
如果关键属性的值为空, 所有具有这个属性的实体都匹配.在C-FIND请求中具有全局匹配格式的属性提供了查询指定属性的机制.
通配符匹配
如果属性不属于date, time, signed long, signed short, unsigned short, unsigned long,
floating point single, floating point double, other byte string, other word string, unknown, attribute tag, decimal string, integer string, age string, UID
并且值包含“*”, “?”, 那么“*”匹配任意字符序列(包括空值), “?”匹配任意单个字符. 这个匹配是大小写敏感的,除了PN (如Patient Name (0010,0010))是实现相关的,需要在一致性声明中定义.
注: 1. 通配符匹配的值为“*”等价于全局匹配.
2. 通配符匹配方法可能在非DICOM多字节字符处理器中不支持.
范围匹配
如果属性是date, 那么:
a) “<date1> - <date2>” 匹配所有在这个范围内的日期
b) “- <date1>” 匹配所有在<date1>前的日期
c) “<date1> -“ 匹配所有在<date1>之后的日期
如果属性是time, 那么:
a) “<time1> - <time2>” 匹配所有在这个范围内的时间
b) “- <time1>” 匹配所有在<time1>前的时间
c) “<time1> -“ 匹配所有在<time1>后的时间
如果属性是datetime, 那么:
a) “<datetime1> - <datetime2>” 匹配所有在这个范围内的日期时间
b) “- <datetime1>” 匹配所有在<datetime1>前的日期时间
c) “<datetime1> -“ 匹配所有在<datetime1>后的日期时间
d) 如果UCT时间的偏移出现在值中,应当也要在匹配中考虑.
范围匹配对于不是日期和时间的属性没有定义.
Sequence匹配
如果C-FIND请求的关键属性用于匹配Sequence(SQ), 关键属性应当是只有一个Item的 Sequence. 这个Item包含零或多个关键属性. 每个关键属性又可以应用单一值匹配, UID列表匹配, 全局匹配, 通配符匹配, 范围匹配 和 Sequence匹配(递归Sequence匹配).
如果至少有一个Item中的属性匹配,则视为一条成功的匹配. C-FIND 响应只会包含请求指定的Sequence属性.
如果C-FIND请求的关键属性不含有Item属性(Item标签为空), 所有具有这个属性的实体都匹配.这就提供了请求指定属性的全局匹配(所有Sequence的Item).
多值匹配
如果匹配的属性具有多个值,其中一个值匹配,则所有的值都会返回.
3. 标准QUERY/RETRIEVE信息模型
有三种标准的Query/Retrieve信息模型, 每种模型关联一组SOP Classes. 这三种模型是:
— Patient Root
— Study Root
— Patient/Study Only
3.1 Patient Root 模型
Patient Root模型基于四层结构:
— Patient
— Study
— Series
— Composite object instance
Patient为顶层,包含与病人相关的属性. Patient层是与Modality无关的.
Study 层位于patient层下面,包含与检验相关的属性.一份检验属于一个病人而一个病人可以有多个检验. Study 层与Modality相关.
Series 层在Study层之下,包含与系列, Frame of Reference以及设备相关的属性. 一个系列属于一份检验而一份检验可以有多个系列. Series 层与modality相关.为了提供modality相关性, Series层的可选属性包括了所有在PS 3.3定义的Series层的属性.
Composite object instance 层位于最底层,它包含所有与Composite object相关的属性. 一个composite object instance属于一个系列而一个系列可以包含多个composite object instances. 大部分的composite object 是modality相关的.为了提供可能的modality相关性, composite object instance 层的可选属性包括了所有PS 3.3定义的composite object instance层的属性.
3.2 Study Root 模型
Study Root模型与Patient Root模型一样但顶层是study层. 病人的属性被视作检验的属性.
3.3 Patient/Study Only 模型
Patient/Study Only模型与Patient Root模型一样但不支持series和composite object instance层.
注: 尽管该模型不包括composite object instance 层, 但可以在patient和study层次获取composite object
instances (也就是获取一个病人或者检验的所有composite object instances).
3.4 额外的Query/Retrieve 属性
有些可选的属性不属于IOD,但可以用于Query/Retrieve信息模型.它们没有在PS 3.3定义. 其定义见下表
额外QUERY/RETRIEVE 属性
属性名称 |
Tag |
属性描述
|
Number of Patient Related Studies |
(0020,1200) |
满足Patient层查询标准的Study的数量 |
Number of Patient Related Series |
(0020,1202) |
满足Patient层查询标准的Series的数量 |
Number of Patient Related Instances
|
(0020,1204) |
满足Patient层查询标准的composite object instances的数量 |
Number of Study Related Series |
(0020,1206) |
满足Study层查询标准的Series的数量 |
Number of Series Related Instances
|
(0020,1209) |
满足Series层查询标准的composite object instances的数量 |
Number of Study Related Instances |
(0020,1208) |
满足Study层查询标准的composite object instances的数量 |
SOP Classes in Study |
(0008,0062) |
Study包含的SOP Classes.
|
Alternate Representation Sequence |
(0008,3001) |
一个Item序列, 每个item代表一个满足Instance层查询标准的可选图像编码. (见C.6.1.1.5.1)
|
如果SCP采用多个不同的编码管理图像, 那么只有一个图像编码会被包含在对象实例的数字里
4. DIMSE-C 服务组
3个DIMSE-C服务被用于构造Query/Retrieve服务类的SOP Classes
— C-FIND
— C-MOVE
— C-GET
4.1 C-FIND
C-FIND 用于查询. 满足identifier的匹配通过C-FIND响应返回.
4.1.1 C-FIND 服务参数
4.1.1.1 SOP Class UID
SOP Class UID指定Query/Retrieve信息模型. C-FIND操作的Presentation Context的Abstract Syntax UID隐含对SOP Class UID的支持.
4.1.1.2 Priority
Priority属性定义C-FIND操作的优先级 SCP不一定处理优先级.无论SCP是否支持优先级处理都必需在Conformance Statement指出不同优先级的含义.
4.1.1.3 Identifier
C-FIND 请求和响应都包含identifier, identifier被编码为Data Set.
4.1.1.3.1 请求Identifier结构
C-FIND请求的identifier应包括:
— 匹配SCP管理的storage SOP Instances值的关键属性值.
— Query/Retrieve 层次, (0008,0052)属性定义了查询的层次
— 如果请求identifier中的属性使用了扩展或者替换的字符集,则应包含属性Specific Character Set (0008,0005).否则就不应包含这个属性.
查询的关键属性和允许的值应该在Query/Retrieve信息模型的SOP Class里有定义.
4.1.1.3.2 响应Identifier结构
C-FIND响应不应当包含请求中没有的属性或者这章节没有提到的属性.
C-FIND响应的identifier应包括:
— 请求中包含的关键属性及其值.
— Query/Retrieve 层次, (0008,0052)属性定义了查询的层次.应与请求的层次相同.如果响应identifier中的属性使用了扩展或者替换的字符集,则应包含属性Specific Character Set (0008,0005).否则就不应包含这个属性.如果SCP不支持SCU请求中的字符集, SCP的响应则不会采用该字符集,而是采用不同的字符集.
C-FIND SCP必需支持Retrieve AE Title 数据元素 或(和) Storage Media File-Set ID/Storage Media File Set UID数据元素. C-FIND响应应包括:
— Storage Media File-Set ID (0088,0130). 标识用户自定义的Composite object instance的可读标识. 如果AE Title 元素不存在,这属性就必须存在. 除了信息模型的最底层,空值有效.
— Storage Media File-Set UID (0088,0140) 唯一确定composite object instance所在的存储位置. 如果AE Title 元素不存在,这属性就必须存在. 除了信息模型的最底层,空值有效.
注: File-Set 概念在PS 3.10用到.
— Retrieve AE Title (0008,0054). 定义了一列DICOM AET, 通过网络可以从这些AET标识的实体返回Composite object instance. 如果Storage Media File-Set ID 和 Storage Media File-Set UID不存在,则该属性必须存在. 这个元素指定的应用实体必须支持C-GET或C-MOVE. 除了信息模型的最底层,空值有效.
注: 1. 例如, DICOM应用实体 “A” 发送C-FIND请求到DICOM应用实体 “B”, 查询层次为“STUDY”. “B”确定这些匹配”Study”的composite object instances可以通过自己获得,则设定Retrieve AE Title 为 “B”.
2. File-Sets可能不会在每个Query/Retrieve层定义. 如果SCP支持File-Set ID/File-Set UID选项但没有在C-FIND请求指定的层次定义这些属性, 它会返回零长度的这些属性以表示这些值是未知的. 而SCU应该重新在更低的QUERY/Retrieve层次发送C-FIND请求.
3. 关键属性值未知并不表示不存在, 之后的获取可以导致存储属性有值的SOP Instance.
C-FIND SCP可以但不必须支持Instance Availability (0008,0056)元素. 该元素不应出现在C-FIND请求里, C-FIND响应可以包含
— Instance Availability (0008,0056) 定义当得到C-MOVE或者C-GET请求时,composite object instance能有多快可用于传输. 如果某些composite instances不如其他可用的快,那么这个最低速度的可用性应该被返回。如果这个元素没有返回,可用性未知或者未指定。不允许Null值。
可选的值为:
— “ONLINE” 表示立即可用,
— “NEARLINE” 表示需要从相对较慢的介质获取,如光盘库或者磁带。
— “OFFLINE” 表示需要人工干预。
— “UNAVAILABLE”, 表示不能获取。
注:不可用的SOP Instances可能有另外可用的表现形式。(见section C.6.1.1.5.1).
4.1.1.4 Status
下表定义了C-FIND返回的特殊状态码. 常规状态码在PS 3.7定义。
4.1.2 C-FIND SCU 行为
这部分讨论C-FIND SCU基本和扩展行为。
4.1.2.1 基本行为
所有的C-FIND SCU应能产生满足层次搜索方法的查询请求。在每个层次上,C-FIND请求的Identifier应包含唯一属性的单一值。
不需要给出必需属性和可选属性.
C-FIND请求应当包含唯一属性且指定是单一值匹配,全局匹配还是UID列表匹配.另外,必需和可选属性可以出现在identifier中.
SCU使用C-FIND请求传达以下语义.
— SCU请求SCP在某层次查询满足所有在identifier指定的关键属性的匹配.
注: 1. SCU不能假定SCP支持任意可选属性. 即可选属性只是当SCP支持的时候用于减少网络负荷.
2. SCU必须准备好过滤可能由于SCP不支持可选属性而产生的C-FIND响应.
— SCU应能明白Pending响应是传递被匹配的实体的属性.
— SCU应能明白Success, Failed 或者 Refused响应是表示Pending响应结束.
— SCU应能理解Refused或Failed响应是表示SCP不能处理请求.
— SCU可以通过C-FIND-CANCEL请求取消正在进行的C-FIND服务.SCU应能识别表示取消成功了的Cancel标志.
4.1.2.2 扩展行为
扩展的SCU行为应当在协商建立时协商好.如果扩展行为没有在协商时达成一致,则只有基本行为会被执行.扩展行为包括所有基本行为,同时还包括以下选项:
— 关联查询
4.1.2.2.1 关联查询
C-FIND服务的关联查询允许关键属性的组合. 唯一关键属性可以采用为单一值匹配,全局匹配,UID列表匹配. 支持关联查询取消了基本行为中所有查询层次都要指定一个唯一属性的限制.
4.1.3 C-FIND SCP 行为
4.1.3.1 基本行为
所有的C-FIND SCU应能产生满足层次搜索方法的查询请求。
SCP通过C-FIND响应表达以下语义:
— SCP被请求执行对请求identifier指定的所有关键属性进行查询.
— SCP采用层次查询方式对每个匹配产生一个C-FIND响应. 所有的响应都包含一个identifier, 这个identifier包含单条匹配的属性值. 所有的响应的状态值为Pending.
—当所有的匹配发送完毕, SCP产生一个状态为Success的C-FIND响应. Success的响应表示SCP所知的匹配都已全部发送.
—如果SCP不能处理请求,应产生一条Refused或Failed的响应. Refused或Failed响应不能包含Identifier.
—如果SCP在处理匹配过程完成之前收到C-FIND-CANCEL请求, 应当终止匹配过程并返回Canceled的响应.
— 如果SCP采用多个编码方式管理图像(见C.6.1.1.5.1), 只有其中一个图像编码会包含在匹配的实例集合.
注: 对不同图像编码的查询, SCP可以基于SCU的身份其他因素来选择合适的编码实例.
4.1.3.1.1 层次搜索方法
从Query/Retrieve信息模型的顶层开始,一直到C-FIND请求指定的层次为止,通过这样的过程产生匹配:
a) 如果当前层是C-FIND请求指定层, 那么用C-FIND请求identifier的关键属性去匹配当前层每个信息实体的该关键属性的值. 对于每个满足指定匹配字串的实体,构造一个identifier.该identifier应包含所有更高层的唯一属性及其所有值.为每个identifier返回一个响应.如果没有匹配, 返回status为Success并且不带identifier.
b) 否则当前层不是C-FIND请求指定层,并且有一个实体满足该层请求的唯一属性的值. 执行过程到下一层.
c) 否则没有匹配, 返回Success响应.
注: 上述描述了一个递归的过程.
4.1.3.2 扩展行为
扩展行为应当在协商建立时间协商好. 如果没有达成一致,则只会执行基本行为.扩展行为包含所有基本行为且包含以下选项:
— 关联查询
4.1.3.2.1 关联查询
C-FIND服务的关联查询允许关键值组合. 在最底层,采用关联查询应当包含唯一关键属性,该关键属性为单一值匹配,通配符匹配或者全局匹配. 支持关联查询取消了基本行为中所有查询层次都要指定一个唯一属性的限制. C-FIND SCP应当基于C-FIND请求的所有关键值进行查询而不用考虑Query/Retrieve层次.
4.1.3.2.1.1 关联查询方法
关联查询方法可以包含任意层次的任意关键属性组合。从Query/Retrieve信息模型顶层开始,直到C-FIND指定的层次为止, 以下过程产生匹配:
a) C-FIND请求的关键属性匹配字符可匹配当前层的任意实体该属性的值.
b) 如果当前层没有指定关键属性并且当前层不是C-FIND请求指定的层, 则应当执行当前层唯一属性的通配符匹配. (也就是说,所有的当前层实体被匹配).
c) 如果当前层是C-FIND请求指定层, 对于每个匹配的实体(一个匹配的实体就是其属性满足所有指定的关键属性匹配字串), 构造一个Identifier. 这个Identifier应包括所有更高层的属性及其值.
d) 否则,如果当前层不是C-FIND请求指定层, 那么对于每个匹配实体构造一串包含匹配属性的属性以及上一层的所有属性. 然后对每条匹配执行该过程到下一层.
e) 否则,如果没有匹配,返回Success响应且不带identifier.
注: 1. 上述定义了一个递归过程.它可能在自身递归多次, 在每一层,它会递归多次(一个匹配实体一次). 这会产生大量的identifier.
2. 上述定义产生匹配的过程不是必需的. 这是为了使不同搜索数据库的算法在实现中相一致.对于给定的查询, 按上述过程产生的匹配集合应当是相同的.
4.2 C-MOVE
Query/Retrieve服务类的SOP Class的SCU采用C-MOVE操作产生获取效果. C-MOVE允许应用实体指示另外一个应用实体采用C-STORE操作传输stored SOP Instances. C-MOVE服务应当在协商建立阶段就要达成一致,因为C-MOVE操作超出了本身的Association. C-STORE子操作总是在另外一个Association里完成.因此Query/Retrieve服务类的SCP则作为Storage服务的SCU.
注: 收到stored SOP Instance的应用实体不一定是C-MOVE操作的发起者.
C-MOVE请求可以在Query/Retrieve的任意层次进行. 尽管stored SOP Instance的传输不是在这个层次进行. 但执行传输的层次是依赖该SOP Class.(见Section C.6).
4.2.1 C-MOVE服务参数
4.2.1.1 SOP Class UID
SOP Class UID指定Query/Retrieve信息模型. C-MOVE操作的Presentation Context的Abstract Syntax UID隐含对SOP Class UID的支持.
4.2.1.2 Priority
Priority定义C-MOVE和C-STORE子操作的优先级.SCP不一定处理优先级.无论SCP是否支持优先级处理都必需在Conformance Statement指出不同优先级的含义.
C-STORE子操作应采用相同的优先级.
4.2.1.3 Move Destination
Move Destination指定C-STORE子操作执行者的AET.
4.2.1.4 Identifier
C-MOVE 请求应包含一个Identifier. C-MOVE响应有条件的包含一个identifier(C.4.2.1.4.2.有要求).
注: 在PS3.7中C-MOVE原语标记Identifier为U,而这里特别指定要求有.
4.2.1.4.1 请求Identifier结构
C-MOVE请求identifier应包含:
—Query/Retrieve Level (0008,0052) 获取层次
— 唯一属性包括Patient ID (0010,0020), Study Instance UIDs (0020,000D), Series Instance UIDs (0020,000E), 以及 SOP Instance UIDs (0008,0018)
Specific Character Set (0008,0005)不能出现.
每一层的唯一关键属性和允许的值应该在Query/Retrieve信息模型的SOP Class里有定义.
注: 在基本行为里,如果Query/Retrieve层次是IMAGE,SERIES 或者STUDY, 采用UID列表匹配可以获取一个以上的实体.但Patient ID (0010,0020)则只能用单一值匹配.
4.2.1.4.2 响应Identifier结构
Failed SOP Instance UID List (0008,0058) 指出C-STORE子操作失败的SOP Instance的UID列表. C-MOVE响应根据status值来有条件的包含Failed SOP Instance UID List (0008,0058).如果没有失败的C-STORE子操作, Failed SOP Instance UID List (0008,0058)属性不存在从而C-MOVE响应就没有Data Set.
Specific Character Set (0008,0005) 不能存在.
C-MOVE响应的identifier在status为:
— Canceled, Failed, Refused, 或 Warning时应包含Failed SOP Instance UID List Attribute
— Pending时不能包含Failed SOP Instance UID List Attribute (没有Data Set)
4.2.1.5 Status
下表规定了C-MOVE操作的特殊状态码. 常规状态码在PS 3.7定义。
3.7.
4.2.1.6 Number of Remaining Sub-Operations
基于C-MOVE响应的状态码选择性的包含Number of Remaining Sub-operations. 该参数指出还有多少个C-STORE子操作没有完成.
若C-MOVE响应状态为:
— Pending :则应包含该参数
— Canceled:可包含该参数
— Warning, Failed, Refused, or Successful 不应包含该参数.
4.2.1.7 Number of Successful Sub-Operations
根据C-MOVE响应状态来决定是否包含Number of Successful Sub-operations. 该参数给出了Store子操作成功的次数.
若C-MOVE 响应状态为:
— Pending 则应当包含该参数.
— Canceled, Warning, Failed, Refused, or Successful 则可能包含该参数
4.2.1.8 Number of Failed Sub-Operations
根据C-MOVE响应状态来决定是否包含该参数. 该参数给出了Store子操作失败的次数
若C-MOVE 响应状态为:
— Pending 则应当包含该参数.
— Canceled, Warning, Failed, Refused, or Successful 则可能包含该参数
4.2.1.9 Number of Warning Sub-Operations
根据C-MOVE响应状态来决定是否包含该参数. 该参数给出了Store子操作警告的次数
若C-MOVE 响应状态为:
— Pending 则应当包含该参数.
— Canceled, Warning, Failed, Refused, or Successful 则可能包含该参数
4.2.2 C-MOVE SCU 行为
这部分讨论C-MOVE SCU的基本行为和扩展行为.
4.2.2.1 基本行为
SCU通过C-MOVE请求表达以下语义:
— SCU在Query/Retrieve层次上应当提供每个层次的唯一属性的单一值.如果获取的层次为STUDY,SCU应提供一个唯一属性. 如果获取多个项目且获取层次为STUDY,SERIES或IMAGE, 则应提供一个UID或UID列表. SCU 还应当提供转移的目标,转移目标应当是具备Storage服务的SCP的AET.
— SCU应能理解C-MOVE响应的状态值为Pending是表示C-STORE子操作正在进行. 这些响应应给出剩余,成功,失败,警告的C-STORE子操作次数.
— SCU应能明白响应状态为Success, Warning, Failed,或Refused表示最后的响应. 这最后的响应应指出C-STORE子操作的成功,失败的次数. SCU应能理解状态为:
— Success 表示所有的子操作为成功的.
— Warning 表示一个或多个子操作为成功的且一个或多个子操作为不成功或者具有警告状态, 或者所有的子操作为警告状态.
— Failed 或 Refused 表示所有的子操作是不成功的.
— SCU可以发送C-MOVE-CANCEL请求取消C-MOVE服务. SCU 应能理解C-MOVE响应状态为Canceled表示传输取消了. 该响应必须包含成功,失败,警告的子操作次数. 如果存在还没有进行的C-STORE子操作,则响应可以包含该次数.
4.2.2.2 扩展行为
扩展的SCU行为应当在协商建立时协商好.如果扩展行为没有在协商时达成一致,则只有基本行为会被执行.扩展行为包括所有基本行为,同时还包括以下选项:
— 关联查询
4.2.2.2.1 关联查询
带关联查询的C-MOVE服务取消了基本行为中所有查询层次都要指定一个唯一属性的限制. 因此,C-MOVE请求的Identifier会传送:
— 所有与Study Instance UID (0020,000D)标识的STUDY相关的composite object instances
— 所有与Series Instance UID (0020,000E)标识的SERIES相关的composite object instances.
— 通过SOP Instance UID (0008,0018)的列表而确定的各个composite object instances.
4.2.3 C-MOVE SCP 行为
这章讨论C-MOVE SCP的基本和扩展行为.
4.2.3.1 基本行为
SCP通过C-MOVE响应表达以下语义.
— SCP应该根据C-MOVE请求的identifier的唯一属性值确定一个实体的集合. SCP应启动相关的Storage SOP Instances的C-STORE操作. 这些C-STORE子操作应发生在另外一个Association. Query/Retrieve服务类的SCP则作为Storage服务类的SCU.
— SCP应当为C-STORE子操作建立新的Association. 如果SCP无法就某一个SOP Instance协商好适合的Presentation Context, 那么对应的子操作则视为失败的.
—SCP应当发起所有与C-MOVE请求中指定的Patient ID, Study Instance UID列表, Series Instance UID列表, SOP Instance UID列表相关的stored SOP Instances的C-STORE子操作.
— SCP可选择在C-STORE过程中产生状态为Pending的C-MOVE响应.这些响应应指出剩余,成功,失败和警告的子操作次数.
— 当C-STORE子操作全部完成, SCP应产生最后的响应,其状态可以为Success, Warning, Failed, Refused. 该响应必须指出成功,失败,警告的子操作次数. C-MOVE响应的状态为:
— Successful : 如果所有子操作成功.
— Warning : 如果一个或多个子操作成功但一个或多个子操作不成功或带警告标志, 或者所有的子操作为警告.
— Failed or Refused : 如果所有的子操作为失败.
SCP可能会在C-MOVE的过程中收到C-MOVE-CANCEL请求. 则SCP应中断所有的C-STORE子操作并返回Canceled标记. 状态为Canceled的C-MOVE响应必须包含C-STORE子操作成功,失败,警告的次数. 如果可能,还应当包含剩余的还没有发起的C-STORE子操作次数.
— 如果SCP通过多个编码管理图像(see C.6.1.1.5.1), 则只有其中一个编码会被包含在object instances集合里.
注: 1.当在Patient,Study,Series层次获取具有多个可能编码的图像时,SCP可以基于SCU的身份,C-STORE所在的Association接受的传输语法或者其他因素来选择合适的编码.
2. 如果C-MOVE所在的Association异常中断, 则不可能发送后续的响应.则C-MOVE-SCP作为C-STORE的SCU的行为在这样的条件下是没有定义的,而且,C-STORE子操作是否继续进行也是没有定义的.
4.2.3.2 扩展行为
扩展的SCP行为应当在协商建立时协商好.如果扩展行为没有在协商时达成一致,则只有基本行为会被执行.扩展行为包括所有基本行为,同时还包括以下选项:
— 关联查询
4.2.3.2.1 关联查询
带关联查询的C-MOVE服务取消了基本行为中所有查询层次都要指定一个唯一属性的限制. 因此,C-MOVE请求的Identifier会传送:
— 所有与Study Instance UID (0020,000D)标识的STUDY相关的composite object instances
— 所有与Series Instance UID (0020,000E)标识的SERIES相关的composite object instances.
— 通过SOP Instance UID (0008,0018)的列表而确定的各个composite object instances.
4.3 C-GET
某些Query/Retrieve服务类的SOP Class的SCU会采用C-GET获取信息。C-GET操作允许某一应用实体指示另外一个应用实体把stored SOP Instances通过C-STORE操作传输给自己。C-GET的支持应当在协商建立阶段达成一致。C-STORE子操作应该在与C-GET操作的Association下进行。因此,Query/Retrieve 服务的SCP则作为Storage服务的SCU.
注: 接受stored SOP Instances的应用实体始终是C-GET操作的发起者, C-GET请求可以应用于Query/Retrieve信息模型的各个层次。在什么层次上进行传输取决于SOP Class.
4.3.1 C-GET 服务参数
4.3.1.1 SOP Class UID
SOP Class UID 确定Query/Retrieve信息模型
4.3.1.2 Priority
Priority定义C-GET及C-STORE子操作的优先级.
SCP不一定处理优先级.无论SCP是否支持优先级处理都必需在Conformance Statement指出不同优先级的含义.C-STORE子操作应采用相同的优先级.
4.3.1.3 Identifier
C-GET 请求应包含一个Identifier. C-GET响应有条件的包含一个identifier(C.4.3.1.3.2.有要求).
注: 在PS3.7中C-GET原语标记Identifier为U,而这里特别指定要求有.
4.3.1.3.1 请求Identifier结构
C-GET请求的Identifier应包含:
— Query/Retrieve Level (0008,0052) 定义获取层次
— 唯一值可以包含Patient ID (0010,0020), Study Instance UIDs (0020,000D), Series Instance UIDs (0020,000E), 和SOPInstance UIDs (0008,0018)
不能包含Specific Character Set (0008,0005).
每一层的唯一关键属性和允许的值应该在Query/Retrieve信息模型的SOP Class里有定义.
注: 在基本行为里,如果Query/Retrieve层次是IMAGE,SERIES 或者STUDY, 采用UID列表匹配可以获取一个以上的实体.但Patient ID (0010,0020)则只能用单一值匹配.
4.3.1.3.2 响应Identifier结构
Failed SOP Instance UID List (0008,0058) 指出C-STORE子操作失败的SOP Instance的UID列表. C-GET响应根据status值来有条件的包含Failed SOP Instance UID List (0008,0058).如果没有失败的C-STORE子操作, Failed SOP Instance UID List (0008,0058)属性不存在从而C-GET响应就没有Data Set.
Specific Character Set (0008,0005) 不能存在.
C-GET响应的identifier在status为:
— Canceled, Failed, Refused, 或 Warning时应包含Failed SOP Instance UID List Attribute
— Pending时不能包含Failed SOP Instance UID List Attribute (没有Data Set)
4.3.1.4 Status
下表规定了C-GET操作的特殊状态码. 常规状态码在PS 3.7定义。
4.3.1.5 Number of Remaining Sub-Operations
基于响应的状态码选择性的包含Number of Remaining Sub-operations. 该参数指出还有多少个C-STORE子操作没有完成.
若C-MOVE响应状态为:
— Pending :则应包含该参数
— Canceled:可包含该参数
— Warning, Failed, Refused, or Successful 不应包含该参数.
4.3.1.6 Number of Successful Sub-Operations
根据响应状态来决定是否包含Number of Successful Sub-operations. 该参数给出了Store子操作成功的次数.
若响应状态为:
— Pending 则应当包含该参数.
— Canceled, Warning, Failed, Refused, or Successful 则可能包含该参数
4.3.1.7 Number of Failed Sub-Operations
根据响应状态来决定是否包含该参数. 该参数给出了Store子操作失败的次数
若响应状态为:
— Pending 则应当包含该参数.
— Canceled, Warning, Failed, Refused, or Successful 则可能包含该参数
4.3.1.8 Number of Warning Sub-Operations
根据响应状态来决定是否包含该参数. 该参数给出了Store子操作警告的次数
若响应状态为:
— Pending 则应当包含该参数.
— Canceled, Warning, Failed, Refused, or Successful 则可能包含该参数
4.3.2 C-GET SCU 行为
这章讨论C-GET SCU 基本和扩展行为.
4.3.2.1 基本行为
SCU通过C-GET请求表达以下语义:
— SCU会在协商建立阶段提议足够的presentation context以容纳会在同一个Association发生的C-STORE子操作. Query/Retrieve服务类的SCU则扮演Storage服务类的SCP.
—在Query/Retrieve层次上应当提供每个层次的唯一属性的单一值.如果获取的层次为STUDY,SCU应提供一个唯一属性. 如果获取多个项目且获取层次为STUDY,SERIES或IMAGE, 则应提供一个UID或UID列表. SCU 还应当提供转移的目标,转移目标应当是具备Storage服务的SCP的AET.
— SCU应能理解C-GET响应的状态值为Pending是表示C-STORE子操作正在进行. 这些响应应给出剩余,成功,失败,警告的C-STORE子操作次数.
— SCU应能明白响应状态为Success, Warning, Failed,或Refused表示最后的响应. 这最后的响应应指出C-STORE子操作的成功,失败的次数. SCU应能理解状态为:
— Success 表示所有的子操作为成功的.
— Warning 表示一个或多个子操作为成功的且一个或多个子操作为不成功或者具有警告状态, 或者所有的子操作为警告状态.
— Failed 或 Refused 表示所有的子操作是不成功的.
— SCU可以发送C-GET-CANCEL请求取消C-GET服务. SCU 应能理解C-GET响应状态为Canceled表示传输取消了. 该响应必须包含成功,失败,警告的子操作次数. 如果存在还没有进行的C-STORE子操作,则响应可以包含该次数.
4.3.2.2 扩展行为
扩展的SCU行为应当在协商建立时协商好.如果扩展行为没有在协商时达成一致,则只有基本行为会被执行.扩展行为包括所有基本行为,同时还包括以下选项:
— 关联查询
4.3.2.2.1 关联查询
带关联查询的C-GET服务取消了基本行为中所有查询层次都要指定一个唯一属性的限制. 因此,C-MOVE请求的Identifier会传送:
— 所有与Study Instance UID (0020,000D)标识的STUDY相关的composite object instances
— 所有与Series Instance UID (0020,000E)标识的SERIES相关的composite object instances.
— 通过SOP Instance UID (0008,0018)的列表而确定的各个composite object instances.
4.3.3 C-GET SCP 行为
这章讨论C-GET SCP的基本和扩展行为.
4.3.3.1 基本行为
SCP通过C-GET响应表达以下语义.
— SCP应该根据C-GET请求的identifier的唯一属性值确定一个实体的集合. SCP应启动相关的Storage SOP Instances的C-STORE操作. 这些C-STORE子操作应发生在另外一个Association. Query/Retrieve服务类的SCP则作为Storage服务类的SCU.
— SCP应当在同一个Association下发起与Patient ID, Study Instance UID列表, Series Instance UID列表, SOP Instance UID列表相关的stored SOP Instances的C-STORE子操作.
— 如果SCP无法就某一个SOP Instance协商好适合的Presentation Context, 那么对应的子操作则视为失败的.
— SCP可选择在C-STORE过程中产生状态为Pending的C-GET响应.这些响应应指出剩余,成功,失败和警告的子操作次数.
— 当C-STORE子操作全部完成, SCP应产生最后的响应,其状态可以为Success, Warning, Failed, Refused. 该响应必须指出成功,失败,警告的子操作次数. C-GET响应的状态为:
— Successful : 如果所有子操作成功.
— Warning : 如果一个或多个子操作成功但一个或多个子操作不成功或带警告标志, 或者所有的子操作为警告.
— Failed or Refused : 如果所有的子操作为失败.
SCP可能会在C-GET的过程中收到C-GET-CANCEL请求. 则SCP应中断所有的C-STORE子操作并返回Canceled标记. 状态为Canceled的C-GET响应必须包含C-STORE子操作成功,失败,警告的次数. 如果可能,还应当包含剩余的还没有发起的C-STORE子操作次数.
— 如果SCP通过多个编码管理图像(see C.6.1.1.5.1), 则只有其中一个编码会被包含在object instances集合里.
注: 1.当在Patient,Study,Series层次获取具有多个可能编码的图像时,SCP可以基于SCU的身份,C-STORE所在的Association接受的传输语法或者其他因素来选择合适的编码.
2. 如果C-GET所在的Association异常中断, 则不可能发送后续的响应.则C-GET-SCP作为C-STORE的SCU的行为在这样的条件下是没有定义的,而且,C-STORE子操作是否继续进行也是没有定义的.
4.3.3.2 扩展行为
扩展的SCP行为应当在协商建立时协商好.如果扩展行为没有在协商时达成一致,则只有基本行为会被执行.扩展行为包括所有基本行为,同时还包括以下选项:
— 关联查询
4.3.3.2.1 关联查询
带关联查询的C-GET服务取消了基本行为中所有查询层次都要指定一个唯一属性的限制. 因此,C-GET请求的Identifier会获取:
— 对应Study Instance UID的所有composite object instances.
— 对应Series Instance UID的所有composite object instances.
— 对应各个SOP Instance UID的composite object instances.