BackboneElement
這個會出現在Resource結構中,連結到另一個物件時(不是參照,在UML圖中會多畫一個類別),會用BackboneElement當作其Data Type。
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
BackboneElement | N | Element | Base for elements defined inside a resource Elements defined in Ancestors: id, extension | |
modifierExtension | ?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized |
但是,這裡的Extension卻是很重要,他是說,無論如何這個擴展的都不能忽略。
有三個Data Types是直接繼承於BackboneElement: Timing, Dosage, ElementDefinition。Time已經談過。ElementDefinition得單獨討論之。
Extension
這個概念很簡單(80/20),但應用面卻很廣,很難駕馭,甚至需要有個管理機制。看到values[x]的Type打個*,就知道很麻煩了。這部份會有專章來討論Extension。
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Extension | IN | Element | Optional Extensions Element + Rule: Must have either extensions or value[x], not both Elements defined in Ancestors: id, extension | |
url | 1..1 | uri | identifies the meaning of the extension | |
value[x] | 0..1 | * | Value of extension |
Meta
所有的Resource(已命名化的類別)都會繼承自Resource父類別(透過DomainResource),其中有個meta Element的Type就是Meta。
這邊要補充一下,還有另一組Data Type叫Metadata Type,包含有ContactDetail、Contributor、DataRequirement、RelatedArtifact、UsageContext、ParameterDefinition、Expression與TriggerDefinition。這個是不同的東西。
這邊要補充一下,還有另一組Data Type叫Metadata Type,包含有ContactDetail、Contributor、DataRequirement、RelatedArtifact、UsageContext、ParameterDefinition、Expression與TriggerDefinition。這個是不同的東西。
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Meta | ΣN | Element | Metadata about a resource Elements defined in Ancestors: id, extension | |
versionId | Σ | 0..1 | id | Version specific identifier |
lastUpdated | Σ | 0..1 | instant | When the resource version last changed |
source | Σ | 0..1 | uri | Identifies where the resource comes from |
profile | Σ | 0..* | canonical(StructureDefinition) | Profiles this resource claims to conform to |
security | Σ | 0..* | Coding | Security Labels applied to this resource SecurityLabels (Extensible) |
tag | Σ | 0..* | Coding | Tags applied to this resource Common Tags (Example) |
- Meta.versionId: id [0..1]
用來管控版本。每當對Resource有進行編修時,就會給一個新的versionId。FHIR接受全域唯一或者本地唯一的編碼。注意,並不是所有的Server都會支援,更不可期望,versionId的順序性跟版本先後有關。
- Meta.lastUpdated: instant [0..1]
最近異動時間
- Meta.source: uri [0..1]
講這又有點頭痛,他跟Security有關,又要一系列。HL7 FHIR是對外提供Content服務的機制,但這個Content會有原始來源,也許是某個EMR System所管理的Document Repository.
- Meta.profile: canonical(StructureDefinition) [0..1]
講這個也很頭痛,這是有關實作計劃書(profiling)的一塊,這也要一系列討論。總之,FHIR乍聽、乍看之下好像很簡單,很容易。但是,身為一個標準,他就必須保持最高的一致性。(國內的HL7 FHIR專家,似乎還沒察覺這塊重要性。不好意思,我總是喜歡得罪人)
- Meta.security: Coding(SecurityLabels) [0..1]
這塊屬於Security Label的一環。
- Meta.tag: Coding(Common Tags) [0..1]
使用Common Tags Value Set。只有一個值actionable。
Narrative、xhtml
其實這兩個是同一件事情,解決Human Readable的問題。這個需要用一篇來談。
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Narrative | N | Element | Human-readable summary of the resource (essential clinical and business information) Elements defined in Ancestors: id, extension | |
status | 1..1 | code | generated | extensions | additional | empty NarrativeStatus (Required) | |
div | I | 1..1 | xhtml | Limited xhtml content + Rule: The narrative SHALL contain only the basic html formatting elements and attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes + Rule: The narrative SHALL have some non-whitespace content |
- Narrative.status: code(NarrativeStatus) [1..1]
這個跟實作很有關係。在推動CDA R2時,就有這個問題。Level2的結構,到底跟Level3是什麼關係。可時,國內無能力搞Level3,所以,這個問題就不存在。
NarrativeStatus(Value Set)的四個值,剛好都來自
http://hl7.org/fhir/narrative-status (Code System)。
Code | Display | Definition |
generated | Generated | Narrative的全部內容是來自Resource的主要Element |
extensions | Extensions | Narrative的全部內容是來自Resource的主要Element之外,還包含了extension的部分。 |
additional | Additional | 在Narrative的內容,並非全部來自結構化資料(來自Element),所以,得靠人工檢查內容。 |
empty | Empty | 就算Narrative有內容,也不是給Human閱讀用。 |
- Narrative.div: xhtml [1..1]
Human Readable的部分採用HTML 4.0的標準規範,但不包含<HTML>、<Head>與<Body>,是直接用<DIV>給打包起來。也就是說,他不是一個頁面,他是一個Component(如果你用SPA的概念來看的話)。或者他是一個Partial View(用ASP.NET MVC的概念來看的話)。一些特殊用途的機制盡量不用,他只是很單純用HTML的語法來呈現Human Readable的部分。
Reference
參照機制也是HL7 FHIR中非常重要的機制,他有好幾種實作方式,的確有點複雜,需要一篇來仔細說明之。
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Reference | ΣIN | Element | A reference from one resource to another + Rule: SHALL have a contained resource if a local reference is provided Elements defined in Ancestors: id, extension | |
reference | ΣI | 0..1 | string | Literal reference, Relative, internal or absolute URL |
type | Σ | 0..1 | uri | Type the reference refers to (e.g. "Patient") ResourceType (Extensible) |
identifier | Σ | 0..1 | Identifier | Logical reference, when literal reference is not known |
display | Σ | 0..1 | string |
Text alternative for the resource
|
其中reference,identifier與display三者必須要有一個有值。
- Reference.reference: string [0..1]
外部資源的參照路徑。從實作角度,他可以提供絕對路徑與相對路徑。使用相對路徑就一定得存取同一台HL7 FHIR Server的資料。
相對:
<subject>
<reference value="Patient/034AB16" />
</subject>
絕對:{
"profile" : {
"reference" : "http://fhir.hl7.org/svc/StructureDefinition/c8973a22-2b5b-4e76-9c66-00639c99e61b"
}
}
<subject> <reference value="Patient/034AB16" /> </subject>
- Reference.type: uli [0..1]
type是強化reference。弄個範例瞧瞧。這是某個Resource有subject這個Element,然後他的Type是Reference。這個Reference同時使用了reference與uli。
"subject": {
"reference" : "http://someserver/some-path",
"type" : "Patient"
}
上面的式子,其實等於單獨reference的URL然後再加上Patient。
所以,這兩個合併使用要注意。若你的refencece是:http://hl7.org/fhir/StructureDefinition/ ,而type又加了個Patient,那最後產生的URL會是:http://hl7.org/fhir/StructureDefinition/Patient。這樣子就不對了。
- Reference.identifier: Identifier [0..1]
有時候需要參照的資料並不是在HL7 FHIR Server上,那就得要明確的指出資料之所在。而且這個指稱的ID,是業務流程辨識碼(business identifier,外部系統定義的),並非資源辨識碼(resource idnetifier,Server給的)。
- Reference.display: string [0..1]
這個只是用來簡單描述所參照的資源是什麼,並不是把所參照的資源內容搬過來(這是contained要做的事)。
"subject": { "reference" : "http://someserver/some-path", "type" : "Patient" }
Dosage
這個有點麻煩,雖然是放在這兒,但是他是屬於被人崁入的Data Type(他繼承於BackboneElement)。他是屬於Level 4的Medications Module的內容。會用到他的Resource有:ActivityDefinition, MedicationDispense, MedicationKnowledge, MedicationRequest 與 MedicationStatement
這邊就不多作解釋。
這邊就不多作解釋。
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Dosage | ΣTU | BackBoneElement | How the medication is/was taken or should be taken Elements defined in Ancestors: id, extension, modifierExtension | |
sequence | Σ | 0..1 | integer | The order of the dosage instructions |
text | Σ | 0..1 | string | Free text dosage instructions e.g. SIG |
additionalInstruction | Σ | 0..* | CodeableConcept | Supplemental instruction or warnings to the patient - e.g. "with meals", "may cause drowsiness" SNOMED CT Additional Dosage Instructions (Example) |
patientInstruction | Σ | 0..1 | string | Patient or consumer oriented instructions |
timing | Σ | 0..1 | Timing | When medication should be administered |
asNeeded[x] | Σ | 0..1 | Take "as needed" (for x) SNOMED CT Medication As Needed Reason Codes (Example) | |
asNeededBoolean | boolean | |||
asNeededCodeableConcept | CodeableConcept | |||
site | Σ | 0..1 | CodeableConcept | Body site to administer to SNOMED CT Anatomical Structure for Administration Site Codes (Example) |
route | Σ | 0..1 | CodeableConcept | How drug should enter body SNOMED CT Route Codes (Example) |
method | Σ | 0..1 | CodeableConcept | Technique for administering medication SNOMED CT Administration Method Codes (Example) |
doseAndRate | Σ | 0..* | Element | Amount of medication administered |
type | Σ | 0..1 | CodeableConcept | The kind of dose or rate specified DoseAndRateType (Example) |
dose[x] | Σ | 0..1 | Amount of medication per dose | |
doseRange | Range | |||
doseQuantity | SimpleQuantity | |||
rate[x] | Σ | 0..1 | Amount of medication per unit of time | |
rateRatio | Ratio | |||
rateRange | Range | |||
rateQuantity | SimpleQuantity | |||
maxDosePerPeriod | Σ | 0..1 | Ratio | Upper limit on medication per unit of time |
maxDosePerAdministration | Σ | 0..1 | SimpleQuantity | Upper limit on medication per administration |
maxDosePerLifetime | Σ | 0..1 | SimpleQuantity | Upper limit on medication per lifetime of the patient |
ElementDefinition
這個用來定義Element或者Extension。從製造業的角度,這個叫做工作母機,專門來製造各種Element之用。而這個傢伙只用在 StructureDefinition(這個Resource 被歸類在Conformance)。這個非常複雜,一定得專篇介紹。