STU 3 Ballot

This page is part of the FHIR Specification (v1.6.0: STU 3 Ballot 4). 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

Bundle.shex

Raw ShEx

ShEx statement for bundle

PREFIX fhir: <http://hl7.org/fhir/> 
PREFIX fhirvs: <http://hl7.org/fhir/ValueSet/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
BASE <http://hl7.org/fhir/shape/>

start=<Bundle> AND {fhir:nodeRole [fhir:treeRoot]}


# Contains a collection of resources
<Bundle> CLOSED {
    a [fhir:Bundle];
    fhir:nodeRole [fhir:treeRoot]?;
    fhir:Resource.id @<id>?;                # Logical id of this artifact
    fhir:Resource.meta @<Meta>?;            # Metadata about the resource
    fhir:Resource.implicitRules @<uri>?;    # A set of rules under which this 
                                            # content was created 
    fhir:Resource.language @<code>?;        # Language of the resource content
    fhir:Bundle.type @<code> AND
    	{fhir:value @fhirvs:bundle-type};  # document | message | transaction | 
                                            # transaction-response | batch | 
                                            # batch-response | history | 
                                            # searchset | collection 
    fhir:Bundle.total @<unsignedInt>?;      # If search, the total number of 
                                            # matches 
    fhir:Bundle.link @<Bundle.link>*;       # Links related to this Bundle
    fhir:Bundle.entry @<Bundle.entry>*;     # Entry in the bundle - will have a 
                                            # resource, or information 
    fhir:Bundle.signature @<Signature>?;    # Digital Signature
    fhir:index xsd:integer?                 # Relative position in a list
}

# Entry in the bundle - will have a resource, or information
<Bundle.entry> CLOSED {
    fhir:Element.id @<string>?;             # xml:id (or equivalent in JSON)
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:modifierExtension @<Extension>*;   # Extensions that cannot be ignored
    fhir:Bundle.entry.link @<Bundle.link>*;  # Links related to this entry
    fhir:Bundle.entry.fullUrl @<uri>?;      # Absolute URL for resource (server 
                                            # address, or UUID/OID) 
    fhir:Bundle.entry.resource @<Resource>?;  # A resource in the bundle
    fhir:Bundle.entry.search @<Bundle.entry.search>?;  # Search related information
    fhir:Bundle.entry.request @<Bundle.entry.request>?;  # Transaction Related Information
    fhir:Bundle.entry.response @<Bundle.entry.response>?;  # Transaction Related Information
    fhir:index xsd:integer?                 # Relative position in a list
}

# Links related to this Bundle
<Bundle.link> CLOSED {
    fhir:Element.id @<string>?;             # xml:id (or equivalent in JSON)
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:modifierExtension @<Extension>*;   # Extensions that cannot be ignored
    fhir:Bundle.link.relation @<string>;    # http://www.iana.org/assignments/-
                                            # link-relations/link-relations.xh-
                                            # tml 
    fhir:Bundle.link.url @<uri>;            # Reference details for the link
    fhir:index xsd:integer?                 # Relative position in a list
}

# Transaction Related Information
<Bundle.entry.request> CLOSED {
    fhir:Element.id @<string>?;             # xml:id (or equivalent in JSON)
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:modifierExtension @<Extension>*;   # Extensions that cannot be ignored
    fhir:Bundle.entry.request.method @<code> AND
    	{fhir:value @fhirvs:http-verb};  # GET | POST | PUT | DELETE
    fhir:Bundle.entry.request.url @<uri>;   # URL for HTTP equivalent of this 
                                            # entry 
    fhir:Bundle.entry.request.ifNoneMatch @<string>?;  # For managing cache currency
    fhir:Bundle.entry.request.ifModifiedSince @<instant>?;  # For managing update contention
    fhir:Bundle.entry.request.ifMatch @<string>?;  # For managing update contention
    fhir:Bundle.entry.request.ifNoneExist @<string>?;  # For conditional creates
    fhir:index xsd:integer?                 # Relative position in a list
}

# Search related information
<Bundle.entry.search> CLOSED {
    fhir:Element.id @<string>?;             # xml:id (or equivalent in JSON)
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:modifierExtension @<Extension>*;   # Extensions that cannot be ignored
    fhir:Bundle.entry.search.mode @<code> AND
    	{fhir:value @fhirvs:search-entry-mode}?;  # match | include | outcome - why 
                                            # this is in the result set 
    fhir:Bundle.entry.search.score @<decimal>?;  # Search ranking (between 0 and 1)
    fhir:index xsd:integer?                 # Relative position in a list
}

# Transaction Related Information
<Bundle.entry.response> CLOSED {
    fhir:Element.id @<string>?;             # xml:id (or equivalent in JSON)
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:modifierExtension @<Extension>*;   # Extensions that cannot be ignored
    fhir:Bundle.entry.response.status @<string>;  # Status response code (text 
                                            # optional) 
    fhir:Bundle.entry.response.location @<uri>?;  # The location, if the operation 
                                            # returns a location 
    fhir:Bundle.entry.response.etag @<string>?;  # The etag for the resource (if 
                                            # relevant) 
    fhir:Bundle.entry.response.lastModified @<instant>?;  # Server's date time modified
    fhir:Bundle.entry.response.outcome @<Resource>?;  # OperationOutcome with hints and 
                                            # warnings (for batch/transaction) 
    fhir:index xsd:integer?                 # Relative position in a list
}

#---------------------- Data Types -------------------

<Extension> {fhir:extension @<Extension>*;
    fhir:index xsd:integer?
}

# Metadata about a resource
<Meta> CLOSED {
    fhir:Element.id @<string>?;             # xml:id (or equivalent in JSON)
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:Meta.versionId @<id>?;             # Version specific identifier
    fhir:Meta.lastUpdated @<instant>?;      # When the resource version last 
                                            # changed 
    fhir:Meta.profile @<uri>*;              # Profiles this resource claims to 
                                            # conform to 
    fhir:Meta.security @<Coding>*;          # Security Labels applied to this 
                                            # resource 
    fhir:Meta.tag @<Coding>*;               # Tags applied to this resource
    fhir:index xsd:integer?                 # Relative position in a list
}

# Primitive Type code
<code> CLOSED {
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:value xsd:string?;                 # Primitive value for code
    fhir:index xsd:integer?                 # Relative position in a list
}

# Primitive Type string
<string> CLOSED {
    fhir:id @<id>?;                         # xml:id (or equivalent in JSON)
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:value xsd:string MAXLENGTH 1048576?;  # Primitive value for string
    fhir:index xsd:integer?                 # Relative position in a list
}

# A digital Signature - XML DigSig, JWT, Graphical image of signature, etc.
<Signature> CLOSED {
    fhir:Element.id @<string>?;             # xml:id (or equivalent in JSON)
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:Signature.type @<Coding>+;         # Indication of the reason the 
                                            # entity signed the object(s) 
    fhir:Signature.when @<instant>;         # When the signature was created
    (                                       # Who signed
        fhir:Signature.whoUri @<uri>  |
        fhir:Signature.whoReference @<PractitionerReference>  |
        fhir:Signature.whoReference @<RelatedPersonReference>  |
        fhir:Signature.whoReference @<PatientReference>  |
        fhir:Signature.whoReference @<DeviceReference>  |
        fhir:Signature.whoReference @<OrganizationReference> 
    );
    (                                       # The party represented
        fhir:Signature.onBehalfOfUri @<uri>  |
        fhir:Signature.onBehalfOfReference @<PractitionerReference>  |
        fhir:Signature.onBehalfOfReference @<RelatedPersonReference>  |
        fhir:Signature.onBehalfOfReference @<PatientReference>  |
        fhir:Signature.onBehalfOfReference @<DeviceReference>  |
        fhir:Signature.onBehalfOfReference @<OrganizationReference> 
    )?;
    fhir:Signature.contentType @<code>?;    # The technical format of the 
                                            # signature 
    fhir:Signature.blob @<base64Binary>?;   # The actual signature content (XML 
                                            # DigSig. JWT, picture, etc.) 
    fhir:index xsd:integer?                 # Relative position in a list
}

# Primitive Type unsignedInt
<unsignedInt> CLOSED {
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:value xsd:nonNegativeInteger?;     # Primitive value for unsignedInt
    fhir:index xsd:integer?                 # Relative position in a list
}

# Base Resource
<Resource> {a .+;
    fhir:Resource.id @<id>?;                # Logical id of this artifact
    fhir:Resource.meta @<Meta>?;            # Metadata about the resource
    fhir:Resource.implicitRules @<uri>?;    # A set of rules under which this 
                                            # content was created 
    fhir:Resource.language @<code>?;        # Language of the resource content
    fhir:index xsd:integer?
}

# Primitive Type id
<id> CLOSED {
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:value xsd:string?;                 # Primitive value for id
    fhir:index xsd:integer?                 # Relative position in a list
}

# Primitive Type decimal
<decimal> CLOSED {
    fhir:id @<id>?;                         # xml:id (or equivalent in JSON)
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:value xsd:decimal?;                # Primitive value for decimal
    fhir:index xsd:integer?                 # Relative position in a list
}

# Primitive Type uri
<uri> CLOSED {
    fhir:id @<id>?;                         # xml:id (or equivalent in JSON)
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:value xsd:string?;                 # Primitive value for uri
    fhir:index xsd:integer?                 # Relative position in a list
}

# Primitive Type instant
<instant> CLOSED {
    fhir:id @<id>?;                         # xml:id (or equivalent in JSON)
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:value xsd:dateTime?;               # Primitive value for instant
    fhir:index xsd:integer?                 # Relative position in a list
}

# A reference to a code defined by a terminology system
<Coding> CLOSED {
    fhir:concept IRI?;
    fhir:Element.id @<string>?;             # xml:id (or equivalent in JSON)
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:Coding.system @<uri>?;             # Identity of the terminology system
    fhir:Coding.version @<string>?;         # Version of the system - if relevant
    fhir:Coding.code @<code>?;              # Symbol in syntax defined by the 
                                            # system 
    fhir:Coding.display @<string>?;         # Representation defined by the 
                                            # system 
    fhir:Coding.userSelected @<boolean>?;   # If this coding was chosen directly 
                                            # by the user 
    fhir:index xsd:integer?                 # Relative position in a list
}

# Primitive Type base64Binary
<base64Binary> CLOSED {
    fhir:id @<id>?;                         # xml:id (or equivalent in JSON)
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:value xsd:base64Binary?;           # Primitive value for base64Binary
    fhir:index xsd:integer?                 # Relative position in a list
}

# Primitive Type boolean
<boolean> CLOSED {
    fhir:id @<id>?;                         # xml:id (or equivalent in JSON)
    fhir:extension @<Extension>*;           # Additional Content defined by 
                                            # implementations 
    fhir:value xsd:boolean?;                # Primitive value for boolean
    fhir:index xsd:integer?                 # Relative position in a list
}

#---------------------- Reference Types -------------------

<PractitionerReference> CLOSED {
    fhir:Element.id @<id>?;
    fhir:extension @<Extension>*;
    fhir:link @<Practitioner> OR CLOSED {a fhir:Practitioner}?;
    fhir:Reference.reference @<string>?;
    fhir:Reference.display @<string>?;
    fhir:index xsd:integer?
}

<OrganizationReference> CLOSED {
    fhir:Element.id @<id>?;
    fhir:extension @<Extension>*;
    fhir:link @<Organization> OR CLOSED {a fhir:Organization}?;
    fhir:Reference.reference @<string>?;
    fhir:Reference.display @<string>?;
    fhir:index xsd:integer?
}

<DeviceReference> CLOSED {
    fhir:Element.id @<id>?;
    fhir:extension @<Extension>*;
    fhir:link @<Device> OR CLOSED {a fhir:Device}?;
    fhir:Reference.reference @<string>?;
    fhir:Reference.display @<string>?;
    fhir:index xsd:integer?
}

<PatientReference> CLOSED {
    fhir:Element.id @<id>?;
    fhir:extension @<Extension>*;
    fhir:link @<Patient> OR CLOSED {a fhir:Patient}?;
    fhir:Reference.reference @<string>?;
    fhir:Reference.display @<string>?;
    fhir:index xsd:integer?
}

<RelatedPersonReference> CLOSED {
    fhir:Element.id @<id>?;
    fhir:extension @<Extension>*;
    fhir:link @<RelatedPerson> OR CLOSED {a fhir:RelatedPerson}?;
    fhir:Reference.reference @<string>?;
    fhir:Reference.display @<string>?;
    fhir:index xsd:integer?
}

#---------------------- Value Sets ------------------------

# HTTP verbs (in the HTTP command line).
@fhirvs:http-verb = ["GET" "POST" "PUT" "DELETE"]

# Indicates the purpose of a bundle - how it was intended to be used.
@fhirvs:bundle-type = ["document" "message" "transaction" "transaction-response" "batch" "batch-response" "history" "searchset" "collection"]

# Why an entry is in the result set - whether it's included as a match or because of an _include requirement.
@fhirvs:search-entry-mode = ["match" "include" "outcome"]

Usage note: every effort has been made to ensure that the ShEx files are correct and useful, but they are not a normative part of the specification.