QUERY/RETRIEVE 服务类 (二) 信息模型定义
1. QUERY/RETRIEVE 信息模型定义
Query/Retrieve信息模型在协商时期由SOP Class确定。SOP Class由一个信息模型和一组 DIMSE-C服务构成。注: 协商的SOP Class确定Query/Retrieve信息模型的类型(请不要把协商的SOP Class与SCP存储的SOP Class弄混淆)
Query/Retrieve信息模型分为标准,私有两种类型.
信息模型定义包含:
— 实体-关系模型定义
— 关键属性定义
实体-关系模型定义<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
对于任意Query/Retrieve信息模型,实体-关系模型定义了实体的层次关系,实体的属性在各个层次都有定义(如Patient, Study, Series, Composite SOP Instance).
1.1.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 请求不能包含可选属性.
1.1.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).
多值匹配
如果匹配的属性具有多个值,其中一个值匹配,则所有的值都会返回.