FHIR-Resource-Definition

Kopei article

FHIR资源定义

本文主要记录FHIRv4.3.0的资源Resource内容是如何定义的。实际数据交换时,资源可以用不同的格式来表示: XMLJSONTurtleUML. 未来批量数据Bulk Data Formats的定义也将发布.

Resource Definition

FHIR资源指一个规格标准定义如何展示和健康相关的某个概念, 当前版本一共有146种资源,主要包括临床信息,人员与组织,财务,安全和术语。资源可以用几种不同的方法来定义:

  • 一种是层级表格,以逻辑视图的方式展示内容, 简称逻辑表Logical table
  • UML 统一模型语言
  • 片假XML语法
  • 片假JSON
  • 片假Turtle

除了上述语法,还有其他格式可以使用,包括W3C schema, Schematron, JSON SchemaStructureDefinition.

Logical Table 逻辑表

逻辑表以树形结构来表示资源,并固定几个特定列, 如名称、标志、类型等。相对其它表示方式,用表格的形式显得更加直观和整洁。

Column Content
Name 资源中元素的名字,如XML中manifest清单,JSON/RDF的属性名。有些名字结尾有[x]代表下面详细的介绍。同时名字前面还有一个图标标记类型。
Flags 一组标记表示实现时该如何处理该元素。比如这个元素必须被支持或它是可以选择的。
Card 基。 该元素在资源中允许出现的次数的下限和上限。
Type 元素的类型。注意,元素的类型有两种含义,取决于该元素是否有定义的子元素。如果元素有子代,那么元素有一个匿名的类型,由子元素给定具体的类型。如果元素没有子代,那么该元素可以被预置的类型所指定。
Description&Contraints 元素的描述,约束的细节。比如那些情况适用编码的元素。
表一. 逻辑表固定字段

举例:

对于Type类型的图标:

  • resource代表一个基础资源。
  • element资源中的元素,同时此元素还可以定义子元素
  • type choice此元素可以有多个不同的类型
  • 基础类型代表基础类型元素,基础类型都以小写字母开头
  • 复合类型元素的数据类型描述了其它的元素,称为复合类型,复合类型用大写字母开头
  • reference子元素可以引用另一个资源
  • reuse此元素和同一个资源内另一个元素内容一样
  • 切片集引入切片集合, 具体见profile中定义.
  • complet extension复杂嵌套扩展
  • simple extension简单扩展,只扩展一个值没有嵌套
  • 复杂修改扩展
  • simple modifier 简单修改扩展
  • rootprofile逻辑概貌的根

对于Flag标志的图标

  • ?!: 这个元素是一个正在建设的元素
  • S: 这个元素必须被支持
  • Σ: 此元素是汇总集合的一部分
  • I: 此元素定义了约束或被约束
  • 《A》抽象类型
  • 《I》此资源是接口定义
  • TU此元素是试用状态
  • N该元素的标准状态为规范性,既正式状态。
  • D该元素的标准状态是起草阶段。

其它注意项

  • 资源和元素是大小写敏感的
  • 任何元素是基础类型的,它会有一个value的属性来表示具体的数值
  • 元素都有一个基数,来表示这个元素会出现或者必须出现多少次
  • 元素复用方面,如果子元素和另一个子元素有相同的数据类型,那么可以这样表示:see[name]括号中name是另子元素的名称。
  • 每个元素名都会在数值字典里有正式的定义名,通过超链接找到对应的关系。
  • 有些元素可能会有id的属性用来内部引用,上面的例子没有显示出来这个id
  • FHIR的元素永不为空。如果有一个元素在资源里出现,那么它要么必须有值,要么它的子元素定义,或者其他扩展。
  • 基础类的元素是所有资源共有的,所以不会在表格中展示。这些共用的元素在基类Resource DomainResource 中定义。
    元素的数据类型表示一般是type类型直接体现的,但是有两个特例:
  • 如果元素支持多个类型(名字结尾[x]), 那么类似可以是一系列选项,用|来分割。
  • 如果一个类型是Referencecanonical, 那么数据类型将直接列出可能的引用或者profile链接。如果链接到profile, 参考的类型可能被profiled, 比如元素的实例必须遵循特定profile或者一组profile列表。特定的url使用{}来表示。

数据类型的选择

有些元素可能有多个数据类型的选择,这样的情况需要使用name[x]来定义元素名,[x]指定实际使用的数据类型。如果想要某个元素只重复一次数据类型,那么它的基数只能是1.

格式的序列化

可以使用如下方式序列化资源:

  • JSON
  • XML
  • RDF(Turtle)

系统必须在Capability Statement 声明它支持的格式. 如果一个服务器收到它不支持的格式请求,那么需要返回406 Not Acceptable. 如果客户端post一个不支持的格式,那么返回416 Unsupported Media Type.
比较推荐的做法是支持JSON和XML格式,以适用于不同的技术栈。RDF比较适用于数据分析而不是数据交换。

批量数据格式(建设中)

当FHIR需要交换批量数据如1000条以上数据的时候,批量数据格式就可以用上了。目前建议的支持格式有:

  • ND-JSON(New line delimited JSON)
  • Google Protobuf
  • Apache Parquet/Avro

外部链接

  • Post title:FHIR-Resource-Definition
  • Post author:Kopei
  • Create time:2023-02-20 15:49:09
  • Post link:https://kopei.github.io/2023/02/20/FHIR-Resource-Definition/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
 Comments