FoundationThis page is part of the FHIR Specification v6.0.0-ballot2: Release 6 Ballot (2nd Draft) (see Ballot Notes). The current version is 5.0.0. For a full list of available versions, see the Directory of published versions 
| FHIR Infrastructure Work Group | Maturity Level: N/A | Standards Status: Informative | Compartments: No defined compartments |
ShEx statement for testscript
PREFIX fhir: <http://hl7.org/fhir/>
PREFIX fhirvs: <http://hl7.org/fhir/ValueSet/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
IMPORT <id.shex>
IMPORT <uri.shex>
IMPORT <url.shex>
IMPORT <code.shex>
IMPORT <string.shex>
IMPORT <Coding.shex>
IMPORT <boolean.shex>
IMPORT <integer.shex>
IMPORT <dateTime.shex>
IMPORT <markdown.shex>
IMPORT <Resource.shex>
IMPORT <canonical.shex>
IMPORT <Reference.shex>
IMPORT <Identifier.shex>
IMPORT <UsageContext.shex>
IMPORT <ContactDetail.shex>
IMPORT <DomainResource.shex>
IMPORT <CodeableConcept.shex>
IMPORT <BackboneElement.shex>
start=@<TestScript> AND {fhir:nodeRole [fhir:treeRoot]}
# Describes a set of tests
<TestScript> EXTENDS @<DomainResource> CLOSED {
a [fhir:TestScript]?;
fhir:nodeRole [fhir:treeRoot]?;
fhir:url @<uri>?; # Canonical identifier for this test
# script, represented as a URI
# (globally unique)
fhir:identifier @<OneOrMore_Identifier>?; # Additional identifier for the test
# script
fhir:version @<string>?; # Business version of the test script
fhir:versionAlgorithm @<string> OR
@<Coding> ?; # How to compare versions
fhir:name @<string>; # Name for this test script
# (computer friendly)
fhir:title @<string>?; # Name for this test script (human
# friendly)
fhir:status @<code> AND
{fhir:v @fhirvs:publication-status}; # draft | active | retired | unknown
fhir:experimental @<boolean>?; # For testing purposes, not real
# usage
fhir:date @<dateTime>?; # Date last changed
fhir:publisher @<string>?; # Name of the publisher/steward
# (organization or individual)
fhir:contact @<OneOrMore_ContactDetail>?; # Contact details for the publisher
fhir:description @<markdown>?; # Natural language description of
# the test script
fhir:useContext @<OneOrMore_UsageContext>?; # The context that the content is
# intended to support
fhir:jurisdiction @<OneOrMore_CodeableConcept>?; # Intended jurisdiction for test
# script (if applicable)
fhir:purpose @<markdown>?; # Why this test script is defined
fhir:copyright @<markdown>?; # Use and/or publishing restrictions
fhir:copyrightLabel @<string>?; # Copyright holder and year(s)
fhir:origin @<OneOrMore_TestScript.origin>?; # An abstract server representing a
# client or sender in a message
# exchange
fhir:destination @<OneOrMore_TestScript.destination>?; # An abstract server representing a
# destination or receiver in a
# message exchange
fhir:metadata @<TestScript.metadata>?; # Required capability that is
# assumed to function correctly on
# the FHIR server being tested
fhir:scope @<OneOrMore_TestScript.scope>?; # Indication of the artifact(s) that
# are tested by this test case
fhir:fixture @<OneOrMore_TestScript.fixture>?; # Fixture in the test script - by
# reference (uri)
fhir:profile @<OneOrMore_canonical>?; # Reference of the validation profile
fhir:variable @<OneOrMore_TestScript.variable>?; # Placeholder for evaluated elements
fhir:setup @<TestScript.setup>?; # A series of required setup
# operations before tests are
# executed
fhir:test @<OneOrMore_TestScript.test>?; # A test in this script
fhir:teardown @<TestScript.teardown>?; # A series of required clean up steps
fhir:common @<OneOrMore_TestScript.common>?; # A common collection of actions in
# this script
}
# Fixture in the test script - by reference (uri)
<TestScript.fixture> EXTENDS @<BackboneElement> CLOSED {
fhir:autocreate @<boolean>; # Whether or not to implicitly
# create the fixture during setup
fhir:autodelete @<boolean>; # Whether or not to implicitly
# delete the fixture during teardown
fhir:resource @<Reference> AND {fhir:link
@<Resource> ? }?; # Reference of the resource
}
# A setup common or operation or assert to perform
<TestScript.setup.action> EXTENDS @<BackboneElement> CLOSED {
fhir:common @<TestScript.setup.action.common>?; # Links or references to common
# collection(s) of actions
fhir:operation @<TestScript.setup.action.operation>?; # The setup operation to perform
fhir:assert @<TestScript.setup.action.assert>?; # The assertion to perform
}
# Parameter(s) to convey input values to the identified common collection of actions
<TestScript.setup.action.common.parameter> EXTENDS @<BackboneElement> CLOSED {
fhir:name @<string>; # Name of the parameter from the
# identified common collection of
# actions
fhir:value @<string>; # Value to assign to the parameter
# from the identified common
# collection of actions
}
# A test operation or assert to perform
<TestScript.test.action> EXTENDS @<BackboneElement> CLOSED {
fhir:common @<TestScript.setup.action.common>?; # Links or references to common
# collection(s) of actions
fhir:operation @<TestScript.setup.action.operation>?; # The setup operation to perform
fhir:assert @<TestScript.setup.action.assert>?; # The setup assertion to perform
}
# Required capability that is assumed to function correctly on the FHIR server being tested
<TestScript.metadata> EXTENDS @<BackboneElement> CLOSED {
fhir:link @<OneOrMore_TestScript.metadata.link>?; # Links to the FHIR specification
fhir:capability @<OneOrMore_TestScript.metadata.capability>; # Capabilities that are assumed to
# function correctly on the FHIR
# server being tested
}
# Placeholder for evaluated elements
<TestScript.variable> EXTENDS @<BackboneElement> CLOSED {
fhir:name @<string>; # Descriptive name for this variable
fhir:defaultValue @<string>?; # Default, hard-coded, or
# user-defined value for this
# variable
fhir:description @<string>?; # Natural language description of
# the variable
fhir:expression @<string>?; # The FHIRPath expression against
# the fixture body
fhir:headerField @<string>?; # HTTP header field name for source
fhir:hint @<string>?; # Hint help text for default value
# to enter
fhir:path @<string>?; # XPath or JSONPath against the
# fixture body
fhir:sourceId @<id>?; # Fixture Id of source expression or
# headerField within this variable
}
# The setup operation to perform
<TestScript.setup.action.operation> EXTENDS @<BackboneElement> CLOSED {
fhir:type @<Coding>?; # The operation code type that will
# be executed
fhir:resource @<uri>?; # Resource type
fhir:label @<string>?; # Tracking/logging operation label
fhir:description @<string>?; # Tracking/reporting operation
# description
fhir:accept @<code> AND
{fhir:v @fhirvs:mimetypes}?; # Mime type to accept in the payload
# of the response, with charset etc
fhir:contentType @<code> AND
{fhir:v @fhirvs:mimetypes}?; # Mime type of the request payload
# contents, with charset etc
fhir:destination @<integer>?; # Server responding to the request
fhir:encodeRequestUrl @<boolean>; # Whether or not to send the request
# url in encoded format
fhir:method @<code> AND
{fhir:v @fhirvs:http-operations}?; # delete | get | options | patch |
# post | put | head
fhir:origin @<integer>?; # Server initiating the request
fhir:params @<string>?; # Explicitly defined path parameters
fhir:requestHeader @<OneOrMore_TestScript.setup.action.operation.requestHeader>?; # Each operation can have one or
# more header elements
fhir:requestId @<id>?; # Fixture Id of mapped request
fhir:responseId @<id>?; # Fixture Id of mapped response
fhir:sourceId @<id>?; # Fixture Id of body for PUT and
# POST requests
fhir:targetId @<id>?; # Id of fixture used for extracting
# the [id], [type], and [vid] for
# GET requests
fhir:url @<string>?; # Request URL
}
# A test in this script
<TestScript.test> EXTENDS @<BackboneElement> CLOSED {
fhir:name @<string>?; # Tracking/logging name of this test
fhir:description @<string>?; # Tracking/reporting short
# description of the test
fhir:action @<OneOrMore_TestScript.test.action>?; # A test operation or assert to
# perform
}
# A series of required clean up steps
<TestScript.teardown> EXTENDS @<BackboneElement> CLOSED {
fhir:action @<OneOrMore_TestScript.teardown.action>; # One or more teardown operations to
# perform
}
# A common collection of actions in this script
<TestScript.common> EXTENDS @<BackboneElement> CLOSED {
fhir:key @<id>; # Key that identifies this common
# collection of actions
fhir:name @<string>?; # Tracking/logging name of this
# common collection of actions
fhir:description @<string>?; # Tracking/reporting short
# description of this common
# collection of actions
fhir:parameter @<OneOrMore_TestScript.common.parameter>?; # Parameter(s) to convey input
# values to this common collection
# of actions in this script
fhir:action @<OneOrMore_TestScript.common.action>; # A common operation or assert that
# can be re-used in this script
}
# An abstract server representing a client or sender in a message exchange
<TestScript.origin> EXTENDS @<BackboneElement> CLOSED {
fhir:index @<integer>; # The index of the abstract origin
# server starting at 1
fhir:profile @<Coding>; # FHIR-Client | FHIR-SDC-FormFiller
fhir:url @<url>?; # The url path of the origin server
}
# Links or references to common collection(s) of actions
<TestScript.setup.action.common> EXTENDS @<BackboneElement> CLOSED {
fhir:testScript @<canonical>?; # Canonical reference to the common
# TestScript instance
fhir:keyRef @<id>; # Common key reference that
# identifies the common collection
# of actions to perform
fhir:parameter @<OneOrMore_TestScript.setup.action.common.parameter>?; # Parameter(s) to convey input
# values to the identified common
# collection of actions
}
# Indication of the artifact(s) that are tested by this test case
<TestScript.scope> EXTENDS @<BackboneElement> CLOSED {
fhir:artifact @<canonical>; # The specific conformance artifact
# being tested
fhir:conformance @<CodeableConcept>?; # required | optional | strict
fhir:phase @<CodeableConcept>?; # unit | integration | production
}
# The assertion to perform
<TestScript.setup.action.assert> EXTENDS @<BackboneElement> CLOSED {
fhir:label @<string>?; # Tracking/logging assertion label
fhir:description @<string>?; # Tracking/reporting assertion
# description
fhir:direction @<code> AND
{fhir:v @fhirvs:assert-direction-codes}?; # response | request
fhir:compareToSourceId @<string>?; # Id of the source fixture to be
# evaluated
fhir:compareToSourceExpression @<string>?; # The FHIRPath expression to
# evaluate against the source
# fixture
fhir:compareToSourcePath @<string>?; # XPath or JSONPath expression to
# evaluate against the source
# fixture
fhir:contentType @<code> AND
{fhir:v @fhirvs:mimetypes}?; # Mime type to compare against the
# 'Content-Type' header
fhir:defaultManualCompletion @<code> AND
{fhir:v @fhirvs:assert-manual-completion-codes}?; # fail | pass | skip | stop
fhir:expression @<string>?; # The FHIRPath expression to be
# evaluated
fhir:headerField @<string>?; # HTTP header field name
fhir:minimumId @<string>?; # Fixture Id of minimum content
# resource
fhir:navigationLinks @<boolean>?; # Perform validation on navigation
# links?
fhir:operator @<code> AND
{fhir:v @fhirvs:assert-operator-codes}?; # equals | notEquals | in | notIn |
# greaterThan | lessThan | empty |
# notEmpty | contains | notContains
# | eval | manualEval
fhir:path @<string>?; # XPath or JSONPath expression
fhir:requestMethod @<code> AND
{fhir:v @fhirvs:http-operations}?; # delete | get | options | patch |
# post | put | head
fhir:requestURL @<string>?; # Request URL comparison value
fhir:resource @<uri>?; # Resource type
fhir:response @<code> AND
{fhir:v @fhirvs:assert-response-code-types}?; # continue | switchingProtocols |
# okay | created | accepted |
# nonAuthoritativeInformation |
# noContent | resetContent |
# partialContent | multipleChoices |
# movedPermanently | found |
# seeOther | notModified | useProxy
# | temporaryRedirect |
# permanentRedirect | badRequest |
# unauthorized | paymentRequired |
# forbidden | notFound |
# methodNotAllowed | notAcceptable |
# proxyAuthenticationRequired |
# requestTimeout | conflict | gone |
# lengthRequired |
# preconditionFailed |
# contentTooLarge | uriTooLong |
# unsupportedMediaType |
# rangeNotSatisfiable |
# expectationFailed |
# misdirectedRequest |
# unprocessableContent |
# upgradeRequired |
# internalServerError |
# notImplemented | badGateway |
# serviceUnavailable |
# gatewayTimeout |
# httpVersionNotSupported
fhir:responseCode @<string>?; # HTTP response code to test
fhir:sourceId @<id>?; # Fixture Id of source expression or
# headerField
fhir:stopTestOnFail @<boolean>; # If this assert fails, will the
# current test execution stop?
fhir:validateProfileId @<id>?; # Profile Id of validation profile
# reference
fhir:value @<string>?; # The value to compare to
fhir:warningOnly @<boolean>; # Will this assert produce a warning
# only on error?
fhir:requirement @<OneOrMore_TestScript.setup.action.assert.requirement>?; # Links or references to the testing
# requirements
}
# One or more teardown operations to perform
<TestScript.teardown.action> EXTENDS @<BackboneElement> CLOSED {
fhir:common @<TestScript.setup.action.common>?; # Links or references to common
# collection(s) of actions
fhir:operation @<TestScript.setup.action.operation>; # The teardown operation to perform
}
# Parameter(s) to convey input values to this common collection of actions in this script
<TestScript.common.parameter> EXTENDS @<BackboneElement> CLOSED {
fhir:name @<string>?; # Tracking/logging name of this
# parameter to be used in this
# common collection of actions
fhir:description @<string>?; # Tracking/reporting short
# description of this parameter to
# be used this common collection of
# actions
}
# A common operation or assert that can be re-used in this script
<TestScript.common.action> EXTENDS @<BackboneElement> CLOSED {
fhir:operation @<TestScript.setup.action.operation>?; # The common operation that can be
# re-used in this script
fhir:assert @<TestScript.setup.action.assert>?; # The common assertion to perform
}
# Links to the FHIR specification
<TestScript.metadata.link> EXTENDS @<BackboneElement> CLOSED {
fhir:url @<uri>; # URL to the specification
fhir:description @<string>?; # Short description
}
# Each operation can have one or more header elements
<TestScript.setup.action.operation.requestHeader> EXTENDS @<BackboneElement> CLOSED {
fhir:field @<string>; # HTTP header field name
fhir:value @<string>; # HTTP headerfield value
}
# An abstract server representing a destination or receiver in a message exchange
<TestScript.destination> EXTENDS @<BackboneElement> CLOSED {
fhir:index @<integer>; # The index of the abstract
# destination server starting at 1
fhir:profile @<Coding>; # FHIR-Server | FHIR-SDC-FormManager
# | FHIR-SDC-FormReceiver |
# FHIR-SDC-FormProcessor
fhir:url @<url>?; # The url path of the destination
# server
}
# Links or references to the testing requirements
<TestScript.setup.action.assert.requirement> EXTENDS @<BackboneElement> CLOSED {
fhir:reference @<canonical>; # Canonical reference to the
# Requirements instance
fhir:key @<id>; # Requirements statement key
# identifier
}
# Capabilities that are assumed to function correctly on the FHIR server being tested
<TestScript.metadata.capability> EXTENDS @<BackboneElement> CLOSED {
fhir:required @<boolean>; # Are the capabilities required?
fhir:validated @<boolean>; # Are the capabilities validated?
fhir:description @<string>?; # The expected capabilities of the
# server
fhir:origin @<OneOrMore_integer>?; # Which origin server these
# requirements apply to
fhir:destination @<integer>?; # Which server these requirements
# apply to
fhir:link @<OneOrMore_uri>?; # Links to the FHIR specification
fhir:capabilities @<canonical>; # Required Capability Statement
}
# A series of required setup operations before tests are executed
<TestScript.setup> EXTENDS @<BackboneElement> CLOSED {
fhir:action @<OneOrMore_TestScript.setup.action>?; # A setup common or operation or
# assert to perform
}
#---------------------- Cardinality Types (OneOrMore) -------------------
<OneOrMore_Identifier> CLOSED {
rdf:first @<Identifier> ;
rdf:rest [rdf:nil] OR @<OneOrMore_Identifier>
}
<OneOrMore_ContactDetail> CLOSED {
rdf:first @<ContactDetail> ;
rdf:rest [rdf:nil] OR @<OneOrMore_ContactDetail>
}
<OneOrMore_UsageContext> CLOSED {
rdf:first @<UsageContext> ;
rdf:rest [rdf:nil] OR @<OneOrMore_UsageContext>
}
<OneOrMore_CodeableConcept> CLOSED {
rdf:first @<CodeableConcept> ;
rdf:rest [rdf:nil] OR @<OneOrMore_CodeableConcept>
}
<OneOrMore_TestScript.origin> CLOSED {
rdf:first @<TestScript.origin> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.origin>
}
<OneOrMore_TestScript.destination> CLOSED {
rdf:first @<TestScript.destination> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.destination>
}
<OneOrMore_TestScript.scope> CLOSED {
rdf:first @<TestScript.scope> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.scope>
}
<OneOrMore_TestScript.fixture> CLOSED {
rdf:first @<TestScript.fixture> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.fixture>
}
<OneOrMore_canonical> CLOSED {
rdf:first @<canonical> ;
rdf:rest [rdf:nil] OR @<OneOrMore_canonical>
}
<OneOrMore_TestScript.variable> CLOSED {
rdf:first @<TestScript.variable> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.variable>
}
<OneOrMore_TestScript.test> CLOSED {
rdf:first @<TestScript.test> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.test>
}
<OneOrMore_TestScript.common> CLOSED {
rdf:first @<TestScript.common> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.common>
}
<OneOrMore_TestScript.metadata.link> CLOSED {
rdf:first @<TestScript.metadata.link> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.metadata.link>
}
<OneOrMore_TestScript.metadata.capability> CLOSED {
rdf:first @<TestScript.metadata.capability> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.metadata.capability>
}
<OneOrMore_TestScript.setup.action.operation.requestHeader> CLOSED {
rdf:first @<TestScript.setup.action.operation.requestHeader> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.setup.action.operation.requestHeader>
}
<OneOrMore_TestScript.test.action> CLOSED {
rdf:first @<TestScript.test.action> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.test.action>
}
<OneOrMore_TestScript.teardown.action> CLOSED {
rdf:first @<TestScript.teardown.action> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.teardown.action>
}
<OneOrMore_TestScript.common.parameter> CLOSED {
rdf:first @<TestScript.common.parameter> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.common.parameter>
}
<OneOrMore_TestScript.common.action> CLOSED {
rdf:first @<TestScript.common.action> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.common.action>
}
<OneOrMore_TestScript.setup.action.common.parameter> CLOSED {
rdf:first @<TestScript.setup.action.common.parameter> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.setup.action.common.parameter>
}
<OneOrMore_TestScript.setup.action.assert.requirement> CLOSED {
rdf:first @<TestScript.setup.action.assert.requirement> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.setup.action.assert.requirement>
}
<OneOrMore_integer> CLOSED {
rdf:first @<integer> ;
rdf:rest [rdf:nil] OR @<OneOrMore_integer>
}
<OneOrMore_uri> CLOSED {
rdf:first @<uri> ;
rdf:rest [rdf:nil] OR @<OneOrMore_uri>
}
<OneOrMore_TestScript.setup.action> CLOSED {
rdf:first @<TestScript.setup.action> ;
rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.setup.action>
}
#---------------------- Value Sets ------------------------
# The type of direction to use for assertion.
fhirvs:assert-direction-codes ["response" "request"]
# The type of manual completion to use for assertion.
fhirvs:assert-manual-completion-codes ["fail" "pass" "skip" "stop"]
# The type of operator to use for assertion.
fhirvs:assert-operator-codes ["equals" "notEquals" "in" "notIn" "greaterThan" "lessThan" "empty" "notEmpty" "contains" "notContains" "eval" "manualEval"]
# The type of response code to use for assertion.
fhirvs:assert-response-code-types ["continue" "switchingProtocols" "okay" "created" "accepted" "nonAuthoritativeInformation" "noContent" "resetContent" "partialContent" "multipleChoices" "movedPermanently" "found" "seeOther" "notModified" "useProxy" "temporaryRedirect" "permanentRedirect" "badRequest" "unauthorized" "paymentRequired" "forbidden" "notFound" "methodNotAllowed" "notAcceptable" "proxyAuthenticationRequired" "requestTimeout" "conflict" "gone" "lengthRequired" "preconditionFailed" "contentTooLarge" "uriTooLong" "unsupportedMediaType" "rangeNotSatisfiable" "expectationFailed" "misdirectedRequest" "unprocessableContent" "upgradeRequired" "internalServerError" "notImplemented" "badGateway" "serviceUnavailable" "gatewayTimeout" "httpVersionNotSupported"]
# The allowable request method or HTTP operation codes.
fhirvs:http-operations ["delete" "get" "options" "patch" "post" "put" "head"]
# This value set includes all possible codes from BCP-13 (see http://tools.ietf.org/html/bcp13)
fhirvs:mimetypes xsd:string #EXTERNAL
# The lifecycle status of an artifact.
fhirvs:publication-status ["draft" "active" "retired" "unknown"]
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.
FHIR ®© HL7.org 2011+. FHIR R6 hl7.fhir.core#6.0.0-ballot2 generated on Mon, Aug 12, 2024 16:59+0800.
Links: Search |
Version History |
Contents |
Glossary |
QA |
Compare to R5 |
|
Propose a change