Wiki
Clone wikibest-practice / JoL Header - schematron
#!XML <!-- Abstract patterns --> <iso:pattern abstract="true" id="pattern.IITypeStrict"> <iso:rule context="$path"> <iso:assert test="(urn1:extension)">In $path extension must be given.</iso:assert> </iso:rule> </iso:pattern> <iso:pattern abstract="true" id="pattern.CVType"> <iso:rule context="$path"> <iso:assert test="count(urn1:code) + count(urn1:originalText) = 1"> In $path, either code or originalText must be given.</iso:assert> </iso:rule> <iso:rule context="$path/urn1:code"> <iso:assert test="count(../urn1:codeSystem) + count(../urn1:displayName) = 2"> In $path if <iso:name/> is given, codeSystem and displayName must be given.</iso:assert> <iso:assert test="count(../urn1:originalText)= 0"> In $path if <iso:name/> is given, originalText must not be given.</iso:assert> </iso:rule> <iso:rule context="$path/urn1:codeSystem"> <iso:assert test="count(../urn1:code) + count(../urn1:displayName) = 2"> In $path if <iso:name/> is given, code and displayName must be given.</iso:assert> <iso:assert test="count(../urn1:originalText)= 0"> In $path if <iso:name/> is given, originalText must not be given.</iso:assert> <iso:assert test="matches(.,'^[0-2](\.([0-9])+)+$')"> Element 'codeSystem' must be an OID for the current codeSystem.</iso:assert> </iso:rule> <iso:rule context="$path/urn1:displayName"> <iso:assert test="count(../urn1:code) + count(../urn1:codeSystem) = 2"> In $path if <iso:name/> is given, code and codeSystem must be given.</iso:assert> <iso:assert test="count(../urn1:originalText)= 0"> In $path if <iso:name/> is given, originalText must not be given.</iso:assert> </iso:rule> <iso:rule context="$path/urn1:originalText"> <iso:assert test="count(../urn1:code) + count(../urn1:codeSystem) + count(../urn1:displayName) = 0"> In $path if <iso:name/> is given, code, codeSystem and displayName must not be given.</iso:assert> </iso:rule> </iso:pattern> <!-- Concrete rules implementing abstract patterns --> <!-- Strict II types --> <iso:pattern id="Verify_accessControlHeader.accountableHealthcareProvider.IIType" is-a="pattern.IITypeStrict"> <iso:param name="path" value="urn1:accessControlHeader/urn1:accountableHealthcareProvider" /> </iso:pattern> <iso:pattern id="Verify_accessControlHeader.accountableCareUnit.IIType" is-a="pattern.IITypeStrict"> <iso:param name="path" value="urn1:accessControlHeader/urn1:accountableCareUnit" /> </iso:pattern> <iso:pattern id="Verify_accessControlHeader.originalPatientId.IIType" is-a="pattern.IITypeStrict"> <iso:param name="path" value="urn1:accessControlHeader/urn1:originalPatientId" /> </iso:pattern> <iso:pattern id="Verify_header.sourceSystemId.IIType" is-a="pattern.IITypeStrict"> <iso:param name="path" value="urn1:header/urn1:sourceSystemId" /> </iso:pattern> <iso:pattern id="Verify_author.id.IIType" is-a="pattern.IITypeStrict"> <iso:param name="path" value="urn1:author/urn1:id" /> </iso:pattern> <iso:pattern id="Verify_signature.id.IIType" is-a="pattern.IITypeStrict"> <iso:param name="path" value="urn1:signature/urn1:id" /> </iso:pattern> <!-- CV types --> <iso:pattern id="Verify_author.byRole.CVType" is-a="pattern.CVType"> <iso:param name="path" value="urn1:author/urn1:byRole" /> </iso:pattern> <iso:pattern id="Verify_signature.byRole.CVType" is-a="pattern.CVType"> <iso:param name="path" value="urn1:signature/urn1:byRole" /> </iso:pattern> <!-- Concrete rules --> <iso:pattern id="Concrete rules"> <iso:rule id="Verify_accessControlHeader.accountableHealthcareProvider.root" context="urn1:accessControlHeader/urn1:accountableHealthcareProvider"> <iso:assert test="urn1:root/text()='1.2.752.129.2.1.4.1' or urn1:root/text()='1.2.752.29.4.3'"> Only allowed value in element accessControlHeader/accountableHealthcareProvider/root is "1.2.752.129.2.1.4.1" and "1.2.752.29.4.3". </iso:assert> </iso:rule> <iso:rule id="Verify_accessControlHeader.accountableCareUnit.root" context="urn1:accessControlHeader/urn1:accountableCareUnit"> <iso:assert test="urn1:root/text()='1.2.752.129.2.1.4.1'"> Only allowed value in element accessControlHeader/accountableCareUnit/root is "1.2.752.129.2.1.4.1". </iso:assert> </iso:rule> <iso:rule id="Verify_accessControlHeader.author.id.root" context="urn1:accessControlHeader/urn1:author/urn1:id"> <iso:assert test="urn1:root/text()='1.2.752.129.2.1.4.1'"> Only allowed value in element accessControlHeader/author/id/root is "1.2.752.129.2.1.4.1". </iso:assert> </iso:rule> <iso:rule id="Verify_accessControlHeader.author.byRole.codeSystem" context="urn1:accessControlHeader/urn1:author/urn1:byRole"> <iso:assert test="urn1:codeSystem/text()='1.2.752.129.2.2.1.4'"> Only allowed value in element accessControlHeader/author/byRole/codeSystem is "1.2.752.129.2.2.1.4". </iso:assert> </iso:rule> <iso:rule id="Verify_accessControlHeader.signature.id.root" context="urn1:accessControlHeader/urn1:signature/urn1:id"> <iso:assert test="urn1:root/text()='1.2.752.129.2.1.4.1'"> Only allowed value in element accessControlHeader/signature/id/root is "1.2.752.129.2.1.4.1". </iso:assert> </iso:rule> <iso:rule id="Verify_accessControlHeader.signature.byRole.codeSystem" context="urn1:accessControlHeader/urn1:signature/urn1:byRole"> <iso:assert test="urn1:codeSystem/text()='1.2.752.129.2.2.1.4'"> Only allowed value in element accessControlHeader/signature/byRole/codeSystem is "1.2.752.129.2.2.1.4". </iso:assert> </iso:rule> <iso:rule id="Verify non-empty elements" context="soapenv:body//*"> <iso:assert test="normalize-space(.)">Element <iso:name /> is included but empty. All elements included in the response must have valid values.</iso:assert> </iso:rule> <!-- Concrete rule based on naming of the contract --> <!-- TODO: Change "NameOfResponse" and "nameOfRespondingObject" to correspond to the naming of the contract --> <iso:rule id="Verify unique record id:s" context="urn:NameOfResponse"> <let name="recordIdPath" value="urn:nameOfRespondingObject/urn1:header/urn1:record/urn1:id"/> <iso:assert test="count($recordIdPath) = count(distinct-values($recordIdPath))">Each record must have a unique id.</iso:assert> </iso:rule> </iso:pattern>
Updated