@startuml package "FHIR R5: Option 2" #ccc { class "ActorDefinition" as ad { description purpose type } class "Requirements" as req { description purpose } class "Statement" as s { conformance requirement } class "ElementDefinition" as ed { condition mustHaveValue valueAlternatives mustSupport isSummary binding } class "StructureDefinition" as sd { } class "Obligation Set" as o { id documentation usage filter filterDocumentation process } class "Obligation Details" as o2 { conformance_verb activity dataExpectation } class "Link" as l { } note right of l The link class binds obligation sets to individual elements, thus preventing updates to the profile, and keeps both separated. end note ad <-- ad: derived from req <-- req: derived from req -up-> ad : actor req *-left- "0..*" s s <-- s : derived from sd *-right- "0..*" ed o -right-> ad o *-left- "1..*" o2 sd *.right. o note on link The obligation is optionally contained in the profile. end note ed <-right- l note on link Each element points to individual obligations by id. end note l -down-> o } @enduml