<?xml version="1.0" encoding="UTF-8"?> | |
<sch:schema xmlns:sch="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2"> | |
<sch:ns prefix="f" uri="http://hl7.org/fhir"/> | |
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/> | |
<!-- | |
This file contains just the constraints for the resource Binary | |
It is provided for documentation purposes. When actually validating, | |
always use fhir-invariants.sch (because of the way containment works) | |
Alternatively you can use this file to build a smaller version of | |
fhir-invariants.sch (the contents are identical; only include those | |
resources relevant to your implementation). | |
--> | |
<sch:pattern> | |
<sch:title>Global</sch:title> | |
<sch:rule context="f:extension"> | |
<sch:assert test="exists(f:extension)!=exists(f:*[starts-with(local-name(.), 'value')])">ext-1: Must have either extensions or value[x], not both</sch:assert> | |
</sch:rule> | |
<sch:rule context="f:modifierExtension"> | |
<sch:assert test="exists(f:extension)!=exists(f:*[starts-with(local-name(.), 'value')])">ext-1: Must have either extensions or value[x], not both</sch:assert> | |
</sch:rule> | |
</sch:pattern> | |
<sch:pattern> | |
<sch:title>Global 1</sch:title> | |
<sch:rule context="f:*"> | |
<sch:assert test="@value|f:*|h:div">global-1: All FHIR elements must have a @value or children</sch:assert> | |
</sch:rule> | |
</sch:pattern> | |
<sch:pattern> | |
<sch:title>Binary</sch:title> | |
<sch:rule context="f:Binary/f:securityContext"> | |
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::*[self::f:entry or self::f:parameter]/f:resource/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">ref-1: SHALL have a contained resource if a local reference is provided</sch:assert> | |
</sch:rule> | |
<sch:rule context="f:Binary/f:securityContext/f:identifier/f:period"> | |
<sch:assert test="not(exists(f:start/@value)) or not(exists(f:end/@value)) or (xs:dateTime(f:start/@value) <= xs:dateTime(f:end/@value))">per-1: If present, start SHALL have a lower value than end</sch:assert> | |
</sch:rule> | |
<sch:rule context="f:Binary/f:securityContext/f:identifier/f:assigner"> | |
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::*[self::f:entry or self::f:parameter]/f:resource/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">ref-1: SHALL have a contained resource if a local reference is provided</sch:assert> | |
</sch:rule> | |
</sch:pattern> | |
</sch:schema> |