2019年8月8日 星期四

HL7 FHIR 核心觀念 - 根元素

物件導向那篇已經知道所謂is-a與has-a的差異。這篇來談談根元素(XML結構的習慣用語)。Java的根類別(程式語言還是要稱之為類別)是java.lang.Object。C#則是Object。那FHIR呢?
首先得知道,FHIR的物件結構分成兩支,一個是Resource系列,一個是Data Type系列。

Data Type 系列

此系列的根元素是Element。其結構如下表:
Structure
NameFlagsCard.TypeDescription & Constraints
.. ElementIn/aThe base for all elements
All FHIR elements must have a @value or children
... id0..1stringUnique id for inter-element referencing
... extension0..*ExtensionAdditional content defined by implementations
也就是說,任何一個Data type都需要有個Id,那這個id是什麼意思,用途是什麼。另一個就是extension,這個得專篇來討論之,在此先放下。
這個id稱之為internal Id,在xml結構中他是在屬性位置。一般是用在資源內部參照用。不過,也只有少數資源會用到,例如StructureDefinition。
只要在同一個Resource下保持唯一就符合規範。
這個根元素最重要的核心觀念是constrains。
Constraints

idLevelLocationDescriptionExpression
ele-1Rule(base)All FHIR elements must have a @value or childrenhasValue() or (children().count() > id.count())
也就是說,所有FHIR的元素,都必須要有一個屬性值,其名稱為value;否則就得要有子元素。
所以,最完整結構範例如下:
<status id="[internal id]" value="[value of code]"">
    <extension url="..."/>
      ... if there are any extensions
    <extension>
</status>
一般而言,id很少出現。


Resource 系列

此系列的跟元素是Resource。其結構如下表:
Structure
NameFlagsCard.TypeDescription & Constraints
.. ResourceNn/aBase Resource
... idΣ0..1idLogical id of this artifact
... metaΣ0..1MetaMetadata about the resource
... implicitRules?!Σ0..1uriA set of rules under which this content was created
... language0..1codeLanguage of the resource content
Common Languages (Preferred but limited to AllLanguages)
這個比較複雜點。
  1. id:這個就不是屬性囉,他是一個元素,其資料型態是id。他是邏輯ID。他是用來辨識不同資源者,就得要全域唯一了。也就是在同一台FHIR Server下,每個Resource的id必須要唯一。資料型態id的定義是:Any combination of upper- or lower-case ASCII letters。
  2. meta:其資料型態是Meta。存放一些有關於此Resource的中介資料。其結構為:
  3. Structure
    NameFlagsCard.TypeDescription & Constraintsdoco
    .. MetaΣNElementMetadata about a resource
    Elements defined in Ancestors: idextension
    ... versionIdΣ0..1idVersion specific identifier
    ... lastUpdatedΣ0..1instantWhen the resource version last changed
    ... sourceΣ0..1uriIdentifies where the resource comes from
    ... profileΣ0..*canonical(StructureDefinition)Profiles this resource claims to conform to
    ... securityΣ0..*CodingSecurity Labels applied to this resource
    SecurityLabels (Extensible)
    ... tagΣ0..*CodingTags applied to this resource
    Common Tags (Example)
    1. versionId:版本控制用之Id。
    2. lastUpdated:最近更新之時間差戳記。
    3. source:用來紀錄這個Resource是從哪裡產生的。也許是FHIR Server或這是哪份文件、訊息等。
    4. profile:說明此Resource是遵循哪一份profile產生的。(什麼是profile又得另篇說明)
    5. security:標示安全等級。(這也得另篇說明,可以肯定應該會很久以後,先給原始資料吧。http://www.hl7.org/fhir/security-labels.html)
    6. tag:如字面解釋。我們可以利用這個tag,串起Resource的關聯性。
  4. implicitRules:其實每一個Resource都是由一堆規則所型塑起來的。千萬別以為FHIR就比CAD R2好用,都是抽象元素,都要加上一堆Constrains之後,來明確規範其用途。
  5. language:如字面說明。就是設定此Resource所採用的語言。台灣是
    zh-TWChinese (Taiwan)

談到這得注意,所有的Resource不會直接繼承於Resource,而是繼承於DomainResource。其結構如下:
Structure
NameFlagsCard.TypeDescription & Constraints
.. DomainResourceINResourceA resource with narrative, extensions, and contained resources
+ Rule: If the resource is contained in another resource, it SHALL NOT contain nested Resources
+ Rule: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource
+ Rule: If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated
+ Rule: If a resource is contained in another resource, it SHALL NOT have a security label
+ Guideline: A resource should have narrative for robust management
Elements defined in Ancestors: idmetaimplicitRuleslanguage
... text0..1NarrativeText summary of the resource, for human interpretation
... contained0..*ResourceContained, inline Resources
... extension0..*ExtensionAdditional content defined by implementations
... modifierExtension?!0..*ExtensionExtensions that cannot be ignored
是不是又有一堆觀念需要理清呢?
別說FHIR很簡單,那是標準實作角度。從標準制定的角度就沒這麼容易了。只是國內不在意標準制定而已。

沒有留言:

張貼留言