@startuml Note as n1 This model belongs to FHIR r4 as of 2016 end note class Element class PrimitiveDataType { value: string } class ComplexDataType class Resource { id: string implicitRule: string language: string validate() meta() meta_add() meta_delete() } class Meta { versionId: string lastUpdated: Date profile: string security: string tag: string } class BackboneElement class Extension { url: uri value: string } class DomainResource { text: string } Element <|-- PrimitiveDataType Element <|-- ComplexDataType Element <|-- Resource Element <|-- Meta Element <|-- BackboneElement Element <|-- Extension Element *-- "0..*" Extension #red BackboneElement *-- "0..*" Extension #red: modifierExtension Resource <|-- DomainResource Resource *-- "0..1" Meta: hasMeta DomainResource *-- "0..*" Resource: contained DomainResource *-- "0..*" Extension: modifierExtension class Bundle { sigantuer: string } class Encounter { identifier: string status: string everything() } class Patient { identifier: string name: string telecom: string gender: string everything() } Bundle *-- "0..*" BackboneElement: link DomainResource <|-- Patient DomainResource <|-- Encounter DomainResource <|-- Bundle Encounter --> "0..1" Patient ComplexDataType --> "0..*" PrimitiveDataType: use class boolean class base64Binary class time class string PrimitiveDataType <|-- boolean PrimitiveDataType <|-- base64Binary PrimitiveDataType <|-- time PrimitiveDataType <|-- string class Coding { system: string version: string code: string display: string userSelected: string } class Ratio { numerator: double denominator: double } class Quantity { value: string comparator: string unit: string system: string code: string } ComplexDataType *-- "0..*" ComplexDataType: has ComplexDataType <|-- Coding ComplexDataType <|-- Ratio ComplexDataType <|-- Quantity @enduml