This page is part of the FHIR Specification (v3.5.0: R4 Ballot #2). The current version which supercedes this version is 5.0.0. For a full list of available versions, see the Directory of published versions . Page versions: R5 R4B R4 R3 R2
FHIR Infrastructure Work Group | Maturity Level: 5 | Normative | Compartments: Not linked to any defined compartments |
Normative Candidate Note: This page is candidate normative content for R4 in the Infrastructure Package. Once normative, it will lose it's Maturity Level, and breaking changes will no longer be made.
A resource that represents the data of a single raw artifact as digital content accessible in its native format. A Binary resource can contain any content, whether text, image, pdf, zip archive, etc.
There are situations where it is useful or required to handle pure binary content using the same framework as other resources. Typically, this is when the binary content is referred to from other FHIR Resources. Using the same framework means that the existing servers, security arrangements, code libraries, etc. can handle additional related content. Typically, Binary resources are used for handling content such as:
A binary resource can contain any content, whether text, image, pdf, zip archive, etc. These resources are served in their native form on the rest interface, but can also be represented in XML, JSON, of other formats, such as when including these resources in a Bundle (used when it is convenient to include these in the response directly rather than leaving them by reference).
When a FHIR server finds it convenient to manage the content within the same overall REST framework
as the other resources, the Binary resource is generally used as the target in the
Attachment data type to reference content via the .url
element, such as in the DocumentReference and Media resources. Consequently, the Binary resource can
be a target wherever the Attachment data type is used such as in the DocumentReference resource.
The DocumentReference and Media resources
allow conveying binary content (via attachment) or pointing to one (as a Binary
or non-FHIR
URI) along with the metadata around that resource, and as such are searchable.
Binary resources do not support 'search'.
While CDA and PDF documents are conveyed as Binary (because they cannot be expressed natively in FHIR), FHIR Documents do not need to be similarly encoded and can be sent natively in FHIR using Bundle. However, in some situations FHIR Documents may be sent as a Binary if there is a need to treat them the same as other types of documents or binary files.
The Binary resource does not convey context of the file. If the context (information such as author, procedure, technique, etc.) should be conveyed, Media or DocumentReference resources are appropriate. The Binary resource may be used to convey actual binary file content conveyed by those resources.
The Media resource is preferred for handling images, but this is not possible when the content is already binary (e.g. in some uses of IHE XDS ).
This resource is referenced by EntryDefinition and ImplementationGuide
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Binary | N | Resource | Pure binary content defined by a format other than FHIR Elements defined in Ancestors: id, meta, implicitRules, language | |
contentType | Σ | 1..1 | code | MimeType of the binary content MimeType (Required) |
securityContext | Σ | 0..1 | Reference(Any) | Identifies another resource to use as proxy when enforcing access control |
data | 0..1 | base64Binary | The actual content | |
Documentation for this format |
UML Diagram (Legend)
XML Template
<Binary xmlns="http://hl7.org/fhir"> <!-- from Resource: id, meta, implicitRules, and language --> <contentType value="[code]"/><!-- 1..1 MimeType of the binary content --> <securityContext><!-- 0..1 Reference(Any) Identifies another resource to use as proxy when enforcing access control --></securityContext> <data value="[base64Binary]"/><!-- 0..1 The actual content --> </Binary>
JSON Template
{ "resourceType" : "Binary", // from Resource: id, meta, implicitRules, and language "contentType" : "<code>", // R! MimeType of the binary content "securityContext" : { Reference(Any) }, // Identifies another resource to use as proxy when enforcing access control "data" : "<base64Binary>" // The actual content }
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> . [ a fhir:Binary; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from Resource: .id, .meta, .implicitRules, and .language fhir:Binary.contentType [ code ]; # 1..1 MimeType of the binary content fhir:Binary.securityContext [ Reference(Any) ]; # 0..1 Identifies another resource to use as proxy when enforcing access control fhir:Binary.data [ base64Binary ]; # 0..1 The actual content ]
Changes since R3
Binary | |
Binary.data |
|
Binary.content |
|
See the Full Difference for further information
This analysis is available as XML or JSON.
See R3 <--> R4 Conversion Maps (status = 2 tests of which 2 fail to execute.)
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
Binary | N | Resource | Pure binary content defined by a format other than FHIR Elements defined in Ancestors: id, meta, implicitRules, language | |
contentType | Σ | 1..1 | code | MimeType of the binary content MimeType (Required) |
securityContext | Σ | 0..1 | Reference(Any) | Identifies another resource to use as proxy when enforcing access control |
data | 0..1 | base64Binary | The actual content | |
Documentation for this format |
XML Template
<Binary xmlns="http://hl7.org/fhir"> <!-- from Resource: id, meta, implicitRules, and language --> <contentType value="[code]"/><!-- 1..1 MimeType of the binary content --> <securityContext><!-- 0..1 Reference(Any) Identifies another resource to use as proxy when enforcing access control --></securityContext> <data value="[base64Binary]"/><!-- 0..1 The actual content --> </Binary>
JSON Template
{ "resourceType" : "Binary", // from Resource: id, meta, implicitRules, and language "contentType" : "<code>", // R! MimeType of the binary content "securityContext" : { Reference(Any) }, // Identifies another resource to use as proxy when enforcing access control "data" : "<base64Binary>" // The actual content }
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> . [ a fhir:Binary; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from Resource: .id, .meta, .implicitRules, and .language fhir:Binary.contentType [ code ]; # 1..1 MimeType of the binary content fhir:Binary.securityContext [ Reference(Any) ]; # 0..1 Identifies another resource to use as proxy when enforcing access control fhir:Binary.data [ base64Binary ]; # 0..1 The actual content ]
Changes since Release 3
Binary | |
Binary.data |
|
Binary.content |
|
See the Full Difference for further information
This analysis is available as XML or JSON.
See R3 <--> R4 Conversion Maps (status = 2 tests of which 2 fail to execute.)
See the Profiles & Extensions and the alternate definitions: Master Definition XML + JSON, XML Schema/Schematron + JSON Schema, ShEx (for Turtle) & the dependency analysis
Path | Definition | Type | Reference |
---|---|---|---|
Binary.contentType | The mime type of an attachment. Any valid mime type is allowed. | Required | Mime Types |
Binary.data
is optional because it is excluded when
a summary view of the Binary resource is requested (this can be useful
when the binary resource is part of a wider request e.g. a search
_include).
Otherwise, the data is not optional; a binary resource without any specified content it not useful.
Binary resources behave slightly differently from all other resources on the RESTful API:
Accept
header (e.g. "application/fhir+xml" or "application/fhir+json")
the binary resource is returned in the requested FHIR format. This applies even when the binary data itself has a FHIR mime typeAccept
header, then the content should be returned with the content type stated in the resource in the Content-Type
header.
E.g. if the content type in the resource is "application/pdf", then the content should be returned as a PDF directly. The _summary parameter does not apply in this case.
Binary
, including when the content type is "application/fhir+xml" or "application/fhir+json",
except for the special case where the content is actually a Binary
resource.
contentType
is vnd.xacml+json). However, servers might not always be able to interpret mime types correctly,
and clients SHOULD be prepared to receive either format.
Note that in the native binary representation, the normal resource metadata is not available directly, though some of it is replicated in the HTTP response headers. Specifically, the following elements of the resource have matching HTTP Headers:
Last-Modified
ETag header
Content-Type
X-Security-Context
- this is a FHIR specific extension, primarily intended to allow the security context for a Binary resource to be specified when it is posted in native form
Binary resources are not constrained to any list of safe content types (content types without active elements such as scripting or executable code), and therefore can be of any content type and encoding. Therefore, extra care needs to be taken to validate the content of the Binary resource against malicious or malformed content. For more details see Security of Narrative, since the security issues are similar.
Very often, the content of a Binary
resource is sensitive, and the server should apply
appropriate access control to the content. When the server itself generates the content,
it implicitly knows what access control to apply. When the client provides the binary to
the server itself, it uses the securityContext
element (or the matching
X-Security-Context
HTTP header) to inform the server that the Binary resource
should be treated as if it was the other resource. Typically, the other resource is a
DocumentReference or similar resource that refers directly to the Binary resource, but
that is not mandatory.
This specification makes no rules concerning advanced read functionality for the Binary resource, such as:
Servers are free to support these features, but they are not required.
This specification does not support searching on Binary resources.
The semantics of a PATCH operation on a Binary resource are not currently specified.