This page is part of the FHIR Specification (v5.0.0: R5 - STU). This is the current published version in it's permanent home (it will always be available at this URL). For a full list of available versions, see the Directory of published versions . Page versions: R5 R4B R4 R3
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 <Requirements.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 } # Links or references to the testing requirements <TestScript.setup.action.assert.requirement> EXTENDS @<BackboneElement> CLOSED { fhir:link @<uri> OR (@<canonical> AND {fhir:link @<Requirements> }) ?; # Link or reference to the testing # requirement } # 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 } # A series of required setup operations before tests are executed <TestScript.setup> EXTENDS @<BackboneElement> CLOSED { fhir:action @<OneOrMore_TestScript.setup.action>; # A setup operation or assert to # perform } # 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 } # 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 series of required clean up steps <TestScript.teardown> EXTENDS @<BackboneElement> CLOSED { fhir:action @<OneOrMore_TestScript.teardown.action>; # One or more teardown operations 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 } # One or more teardown operations to perform <TestScript.teardown.action> EXTENDS @<BackboneElement> CLOSED { fhir:operation @<TestScript.setup.action.operation>; # The teardown operation to perform } # 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 } # 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 } # 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 } # 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 } # 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 } # 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 } # A setup operation or assert to perform <TestScript.setup.action> EXTENDS @<BackboneElement> CLOSED { fhir:operation @<TestScript.setup.action.operation>?; # The setup operation to perform fhir:assert @<TestScript.setup.action.assert>?; # The assertion to perform } # 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 } # 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 } # A test operation or assert to perform <TestScript.test.action> EXTENDS @<BackboneElement> CLOSED { fhir:operation @<TestScript.setup.action.operation>?; # The setup operation to perform fhir:assert @<TestScript.setup.action.assert>?; # The setup assertion 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.setup.action> CLOSED { rdf:first @<TestScript.setup.action> ; rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.setup.action> } <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.operation.requestHeader> CLOSED { rdf:first @<TestScript.setup.action.operation.requestHeader> ; rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.setup.action.operation.requestHeader> } <OneOrMore_TestScript.teardown.action> CLOSED { rdf:first @<TestScript.teardown.action> ; rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.teardown.action> } <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_TestScript.test.action> CLOSED { rdf:first @<TestScript.test.action> ; rdf:rest [rdf:nil] OR @<OneOrMore_TestScript.test.action> } <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> } #---------------------- 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 R5 hl7.fhir.core#5.0.0 generated on Sun, Mar 26, 2023 15:26+1100.
Links: Search |
Version History |
Contents |
Glossary |
QA |
Compare to R4 |
Compare to R4B |
|
Propose a change