跳到主要内容

5.3制品标识与版本化

作为本地化规范的一部分而发布的制品,往往需要被遵循此规范的资源实例或是衍生规范所引用,因此它们都会具有可被外部引用的标识。除了作为示例而发布的资源实例,制品都包含有一个标准URL(Canonical URL,实际是一个URI类型)作为全局唯一的标识。其它引用这些制品的资源可以通过使用制品的标准URL来声明与其之间的关系。例如,如果定义一个基于Patient资源的profile,它的标准URL为http://example.org/StructureDefinition/patient ,那么声明与此profile的结构定义一致的资源实例,其Resource.meta.profile应使用这一标准URL的值。

标准URL是一种特殊类型的业务标识,这使得它不依赖于资源存在的具体位置,对资源而言这相当于是一种稳定的逻辑标识。公开发布的制品的标准URL具有全局唯一性和不可变性。通常情况下,访问标准URL可以被解析到对应资源原始副本的真实位置。一般的做法是将标准URL重定向到该资源实例的URL,以便通过标准URL也可以访问到制品资源。通过将标准URL独立于资源实例的URL,保证了即使将来资源实例的URL发生了改变,只需调整重定向规则,就仍能使用相同的标准URL继续访问这一资源实例。

举例来说,假设定义了一个表示性别的值集,其逻辑标识ValueSet.id为gender,且服务基地址为http://example.org/ 。那么根据RESTful API规范,该值集的RESTful URL应当为http://example.org/ValueSet/gender ,这一URL代表了该性别值集资源实例实际存在的位置。而它的标准URL则通过ValueSet.url来表示,我们可以选择为此标准URL定义一个与其资源实例URL不同的值,通常这会是一个由代表发布者组织的域名所构成的基地址,例如http://real-publisher.org/fhir/ValueSet/gender 。如果之后将这一资源实例从它原本所处的服务器移动到另一个服务器上,那么它的URL中的基地址部分将会发生改变,而它的标准URL则不会受到影响。

如果实现了URL重定向,那么直接通过标准URL就可以访问这个值集。否则也可以通过RESTful URL来获取指定标准URL的值集,使用http://example.org/ValueSet?url=http://example.org/fhir/valueset-gender ,在这里搜索参数中url参数的值等于性别值集的标准URL。

在使用标准URL发起GET请求时,默认情况下,即Accept标头为text/html时,应返回该制品的说明文档页面;而当Accept标头为application/fhir+xml、application/fhir+json或是其它受支持的内容类型时,则返回资源实例的正文。

标准URL可支持版本化表示,当与特定版本相关时,使用后跟|版本号的方式表示特定版本的资源,例如:http://example.org/fhir/valueset-gender|0.1 。如果标准URL没有显式指定版本,则总是认为引用该资源的最新版本。

除了术语、结构定义这些设计制品可以版本化之外,实施指南和包也可以版本化。由于实施指南本质上会包含具体的设计制品,所以可以将实施指南的版本解读为,对实施指南本身的信息以及包含的所有设计制品作为一个整体赋予了一个版本。同时这些被包含的设计制品所打成的包的版本,与该实施指南本身的版本保持一致。例如:US Core Implementation Guide 4.0.0对应的包是[email protected]。此处的“hl7.fhir.us.core”会被存放在ImplementationGuide.packageId中,而“4.0.0”则会被存放在ImplementationGuide.version中。

考虑到制品发布后具有不可变性,使用版本化以显式表述这一不可变实例与特定版本之间的关系,在大多数情况下是一种推荐的做法,这使得规范的使用者在任何情况下都有机会使引用仅与特定版本相关。不过,版本化的对象也可以针对不同的颗粒度,以达到类似效果。例如,如果不想对每个术语或结构定义的实例指定不同版本号,那么可以默认使用实施指南和包的版本号。这样对于规范的实施者来说,就可以简化对术语与结构定义的引用形式,只需要声明其提供的系统实现或者衍生规范与哪一个版本的实施指南或包保持一致就行。