mirror of
https://github.com/hapifhir/hapi-fhir.git
synced 2025-03-09 14:33:32 +00:00
Sync to latest version of DSTU2
This commit is contained in:
parent
c7558c7780
commit
0c8f50737f
@ -42,6 +42,7 @@
|
||||
<link>http://jamesagnew.github.io/hapi-fhir/apidocs/</link>
|
||||
<link>https://docs.oracle.com/javaee/7/api/</link>
|
||||
</links>
|
||||
<additionalparam>-Xdoclint:none</additionalparam>
|
||||
</configuration>
|
||||
</reportSet>
|
||||
</reportSets>
|
||||
@ -64,6 +65,7 @@
|
||||
<linksource>true</linksource>
|
||||
<verbose>false</verbose>
|
||||
<debug>false</debug>
|
||||
<additionalparam>-Xdoclint:none</additionalparam>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
|
@ -94,7 +94,7 @@
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<version>${maven_assembly_plugin_version}</version>
|
||||
<version>2.5.3</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
@ -104,8 +104,8 @@
|
||||
<configuration>
|
||||
<attach>true</attach>
|
||||
<descriptors>
|
||||
<descriptor>${project.basedir}/src/assembly/android-sources.xml</descriptor>
|
||||
<descriptor>${project.basedir}/src/assembly/android-javadoc.xml</descriptor>
|
||||
<descriptor>/Users/t3903uhn/git/hapi-fhir/hapi-fhir-android/src/assembly/android-sources.xml</descriptor>
|
||||
<descriptor>/Users/t3903uhn/git/hapi-fhir/hapi-fhir-android/src/assembly/android-javadoc.xml</descriptor>
|
||||
</descriptors>
|
||||
</configuration>
|
||||
</execution>
|
||||
|
@ -20,7 +20,7 @@ package ca.uhn.fhir.context;
|
||||
* #L%
|
||||
*/
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.*;
|
||||
import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
@ -78,7 +78,7 @@ import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
|
||||
import ca.uhn.fhir.model.base.composite.BaseContainedDt;
|
||||
import ca.uhn.fhir.model.base.composite.BaseNarrativeDt;
|
||||
import ca.uhn.fhir.model.base.composite.BaseResourceReferenceDt;
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
import ca.uhn.fhir.model.primitive.BoundCodeDt;
|
||||
import ca.uhn.fhir.model.primitive.ICodedDatatype;
|
||||
import ca.uhn.fhir.model.primitive.XhtmlDt;
|
||||
@ -681,11 +681,11 @@ class ModelScanner {
|
||||
for (Field nextField : theClass.getFields()) {
|
||||
SearchParamDefinition searchParam = pullAnnotation(nextField, SearchParamDefinition.class);
|
||||
if (searchParam != null) {
|
||||
SearchParamTypeEnum paramType = SearchParamTypeEnum.valueOf(searchParam.type().toUpperCase());
|
||||
RestSearchParameterType paramType = RestSearchParameterType.valueOf(searchParam.type().toUpperCase());
|
||||
if (paramType == null) {
|
||||
throw new ConfigurationException("Search param " + searchParam.name() + " has an invalid type: " + searchParam.type());
|
||||
}
|
||||
if (paramType == SearchParamTypeEnum.COMPOSITE) {
|
||||
if (paramType == RestSearchParameterType.COMPOSITE) {
|
||||
compositeFields.put(nextField, searchParam);
|
||||
continue;
|
||||
}
|
||||
@ -708,7 +708,7 @@ class ModelScanner {
|
||||
compositeOf.add(param);
|
||||
}
|
||||
|
||||
RuntimeSearchParam param = new RuntimeSearchParam(searchParam.name(), searchParam.description(), searchParam.path(), SearchParamTypeEnum.COMPOSITE, compositeOf);
|
||||
RuntimeSearchParam param = new RuntimeSearchParam(searchParam.name(), searchParam.description(), searchParam.path(), RestSearchParameterType.COMPOSITE, compositeOf);
|
||||
theResourceDef.addSearchParam(param);
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
@ -31,15 +31,15 @@ public class RuntimeSearchParam {
|
||||
|
||||
private String myDescription;
|
||||
private String myName;
|
||||
private SearchParamTypeEnum myParamType;
|
||||
private RestSearchParameterType myParamType;
|
||||
private String myPath;
|
||||
private List<RuntimeSearchParam> myCompositeOf;
|
||||
|
||||
public RuntimeSearchParam(String theName, String theDescription, String thePath, SearchParamTypeEnum theParamType) {
|
||||
public RuntimeSearchParam(String theName, String theDescription, String thePath, RestSearchParameterType theParamType) {
|
||||
this(theName, theDescription, thePath, theParamType, null);
|
||||
}
|
||||
|
||||
public RuntimeSearchParam(String theName, String theDescription, String thePath, SearchParamTypeEnum theParamType, List<RuntimeSearchParam> theCompositeOf) {
|
||||
public RuntimeSearchParam(String theName, String theDescription, String thePath, RestSearchParameterType theParamType, List<RuntimeSearchParam> theCompositeOf) {
|
||||
super();
|
||||
myName = theName;
|
||||
myDescription = theDescription;
|
||||
@ -60,7 +60,7 @@ public class RuntimeSearchParam {
|
||||
return myName;
|
||||
}
|
||||
|
||||
public SearchParamTypeEnum getParamType() {
|
||||
public RestSearchParameterType getParamType() {
|
||||
return myParamType;
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,6 @@ import java.util.List;
|
||||
import ca.uhn.fhir.model.api.BaseIdentifiableElement;
|
||||
import ca.uhn.fhir.model.api.IResource;
|
||||
import ca.uhn.fhir.model.api.IResourceBlock;
|
||||
import ca.uhn.fhir.model.base.composite.BaseCodingDt;
|
||||
import ca.uhn.fhir.model.primitive.CodeDt;
|
||||
import ca.uhn.fhir.model.primitive.StringDt;
|
||||
|
||||
@ -43,8 +42,6 @@ public interface BaseOperationOutcome extends IResource {
|
||||
|
||||
public abstract StringDt getDetailsElement();
|
||||
|
||||
public abstract BaseCodingDt getType();
|
||||
|
||||
public abstract BaseIssue addLocation(String theString);
|
||||
|
||||
public abstract BaseIssue setDetails(String theString);
|
||||
|
@ -26,7 +26,7 @@ import java.util.Map;
|
||||
|
||||
import ca.uhn.fhir.model.api.IValueSetEnumBinder;
|
||||
|
||||
public enum SearchParamTypeEnum {
|
||||
public enum RestSearchParameterType {
|
||||
|
||||
/**
|
||||
* Code Value: <b>number</b>
|
||||
@ -77,6 +77,13 @@ public enum SearchParamTypeEnum {
|
||||
*/
|
||||
QUANTITY("quantity", "http://hl7.org/fhir/search-param-type"),
|
||||
|
||||
/**
|
||||
* Code Value: <b>quantity</b>
|
||||
*
|
||||
* A search parameter that searches on a quantity.
|
||||
*/
|
||||
URI("uri", "http://hl7.org/fhir/search-param-type"),
|
||||
|
||||
;
|
||||
|
||||
/**
|
||||
@ -91,18 +98,18 @@ public enum SearchParamTypeEnum {
|
||||
*/
|
||||
public static final String VALUESET_NAME = "SearchParamType";
|
||||
|
||||
private static Map<String, SearchParamTypeEnum> CODE_TO_ENUM = new HashMap<String, SearchParamTypeEnum>();
|
||||
private static Map<String, Map<String, SearchParamTypeEnum>> SYSTEM_TO_CODE_TO_ENUM = new HashMap<String, Map<String, SearchParamTypeEnum>>();
|
||||
private static Map<String, RestSearchParameterType> CODE_TO_ENUM = new HashMap<String, RestSearchParameterType>();
|
||||
private static Map<String, Map<String, RestSearchParameterType>> SYSTEM_TO_CODE_TO_ENUM = new HashMap<String, Map<String, RestSearchParameterType>>();
|
||||
|
||||
private final String myCode;
|
||||
private final String mySystem;
|
||||
|
||||
static {
|
||||
for (SearchParamTypeEnum next : SearchParamTypeEnum.values()) {
|
||||
for (RestSearchParameterType next : RestSearchParameterType.values()) {
|
||||
CODE_TO_ENUM.put(next.getCode(), next);
|
||||
|
||||
if (!SYSTEM_TO_CODE_TO_ENUM.containsKey(next.getSystem())) {
|
||||
SYSTEM_TO_CODE_TO_ENUM.put(next.getSystem(), new HashMap<String, SearchParamTypeEnum>());
|
||||
SYSTEM_TO_CODE_TO_ENUM.put(next.getSystem(), new HashMap<String, RestSearchParameterType>());
|
||||
}
|
||||
SYSTEM_TO_CODE_TO_ENUM.get(next.getSystem()).put(next.getCode(), next);
|
||||
}
|
||||
@ -125,33 +132,33 @@ public enum SearchParamTypeEnum {
|
||||
/**
|
||||
* Returns the enumerated value associated with this code
|
||||
*/
|
||||
public SearchParamTypeEnum forCode(String theCode) {
|
||||
SearchParamTypeEnum retVal = CODE_TO_ENUM.get(theCode);
|
||||
public RestSearchParameterType forCode(String theCode) {
|
||||
RestSearchParameterType retVal = CODE_TO_ENUM.get(theCode);
|
||||
return retVal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts codes to their respective enumerated values
|
||||
*/
|
||||
public static final IValueSetEnumBinder<SearchParamTypeEnum> VALUESET_BINDER = new IValueSetEnumBinder<SearchParamTypeEnum>() {
|
||||
public static final IValueSetEnumBinder<RestSearchParameterType> VALUESET_BINDER = new IValueSetEnumBinder<RestSearchParameterType>() {
|
||||
@Override
|
||||
public String toCodeString(SearchParamTypeEnum theEnum) {
|
||||
public String toCodeString(RestSearchParameterType theEnum) {
|
||||
return theEnum.getCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toSystemString(SearchParamTypeEnum theEnum) {
|
||||
public String toSystemString(RestSearchParameterType theEnum) {
|
||||
return theEnum.getSystem();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SearchParamTypeEnum fromCodeString(String theCodeString) {
|
||||
public RestSearchParameterType fromCodeString(String theCodeString) {
|
||||
return CODE_TO_ENUM.get(theCodeString);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SearchParamTypeEnum fromCodeString(String theCodeString, String theSystemString) {
|
||||
Map<String, SearchParamTypeEnum> map = SYSTEM_TO_CODE_TO_ENUM.get(theSystemString);
|
||||
public RestSearchParameterType fromCodeString(String theCodeString, String theSystemString) {
|
||||
Map<String, RestSearchParameterType> map = SYSTEM_TO_CODE_TO_ENUM.get(theSystemString);
|
||||
if (map == null) {
|
||||
return null;
|
||||
}
|
||||
@ -163,7 +170,7 @@ public enum SearchParamTypeEnum {
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
SearchParamTypeEnum(String theCode, String theSystem) {
|
||||
RestSearchParameterType(String theCode, String theSystem) {
|
||||
myCode = theCode;
|
||||
mySystem = theSystem;
|
||||
}
|
||||
|
@ -1,5 +1,25 @@
|
||||
package ca.uhn.fhir.rest.api;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
* HAPI FHIR - Core Library
|
||||
* %%
|
||||
* Copyright (C) 2014 - 2015 University Health Network
|
||||
* %%
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
public enum RequestTypeEnum {
|
||||
DELETE, GET, OPTIONS, POST, PUT
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,103 @@
|
||||
package ca.uhn.fhir.rest.gclient;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
* HAPI FHIR - Core Library
|
||||
* %%
|
||||
* Copyright (C) 2014 - 2015 University Health Network
|
||||
* %%
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import ca.uhn.fhir.model.primitive.StringDt;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class UriClientParam implements IParam {
|
||||
|
||||
//TODO: handle :above and :below
|
||||
|
||||
private final String myParamName;
|
||||
|
||||
public UriClientParam(String theParamName) {
|
||||
myParamName = theParamName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getParamName() {
|
||||
return myParamName;
|
||||
}
|
||||
|
||||
/**
|
||||
* The string matches the given value (servers will often, but are not required to) implement this as a left match, meaning that a value of "smi" would match "smi" and "smith".
|
||||
*/
|
||||
public IUriMatch matches(String theValue) {
|
||||
return new UriMatches();
|
||||
}
|
||||
|
||||
|
||||
public interface IUriMatch {
|
||||
|
||||
/**
|
||||
* Requests that resources be returned which match the given value
|
||||
*/
|
||||
ICriterion<UriClientParam> value(String theValue);
|
||||
|
||||
/**
|
||||
* Requests that resources be returned which match ANY of the given values (this is an OR search). Note that to specify an AND search, simply add a subsequent {@link IQuery#where(ICriterion)
|
||||
* where} criteria with the same parameter.
|
||||
*/
|
||||
ICriterion<UriClientParam> values(List<String> theValues);
|
||||
|
||||
/**
|
||||
* Requests that resources be returned which match the given value
|
||||
*/
|
||||
ICriterion<UriClientParam> value(StringDt theValue);
|
||||
|
||||
/**
|
||||
* Requests that resources be returned which match ANY of the given values (this is an OR search). Note that to specify an AND search, simply add a subsequent {@link IQuery#where(ICriterion)
|
||||
* where} criteria with the same parameter.
|
||||
*/
|
||||
ICriterion<?> values(String... theValues);
|
||||
|
||||
}
|
||||
|
||||
private class UriMatches implements IUriMatch {
|
||||
@Override
|
||||
public ICriterion<UriClientParam> value(String theValue) {
|
||||
return new StringCriterion<UriClientParam>(getParamName(), theValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICriterion<UriClientParam> value(StringDt theValue) {
|
||||
return new StringCriterion<UriClientParam>(getParamName(), theValue.getValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICriterion<UriClientParam> values(List<String> theValue) {
|
||||
return new StringCriterion<UriClientParam>(getParamName(), theValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ICriterion<?> values(String... theValues) {
|
||||
return new StringCriterion<UriClientParam>(getParamName(), Arrays.asList(theValues));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -32,7 +32,7 @@ import ca.uhn.fhir.context.ConfigurationException;
|
||||
import ca.uhn.fhir.context.FhirContext;
|
||||
import ca.uhn.fhir.model.api.Include;
|
||||
import ca.uhn.fhir.model.api.PathSpecification;
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
import ca.uhn.fhir.rest.annotation.IncludeParam;
|
||||
import ca.uhn.fhir.rest.param.BaseQueryParameter;
|
||||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||
@ -99,7 +99,7 @@ class IncludeParameter extends BaseQueryParameter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public SearchParamTypeEnum getParamType() {
|
||||
public RestSearchParameterType getParamType() {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,7 @@ import ca.uhn.fhir.model.api.IQueryParameterType;
|
||||
import ca.uhn.fhir.model.api.IResource;
|
||||
import ca.uhn.fhir.model.base.composite.BaseIdentifierDt;
|
||||
import ca.uhn.fhir.model.base.composite.BaseQuantityDt;
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
import ca.uhn.fhir.model.primitive.StringDt;
|
||||
import ca.uhn.fhir.rest.annotation.OptionalParam;
|
||||
import ca.uhn.fhir.rest.param.BaseQueryParameter;
|
||||
@ -66,6 +66,9 @@ import ca.uhn.fhir.rest.param.StringParam;
|
||||
import ca.uhn.fhir.rest.param.TokenAndListParam;
|
||||
import ca.uhn.fhir.rest.param.TokenOrListParam;
|
||||
import ca.uhn.fhir.rest.param.TokenParam;
|
||||
import ca.uhn.fhir.rest.param.UriAndListParam;
|
||||
import ca.uhn.fhir.rest.param.UriOrListParam;
|
||||
import ca.uhn.fhir.rest.param.UriParam;
|
||||
import ca.uhn.fhir.rest.server.Constants;
|
||||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||
@ -78,50 +81,56 @@ import ca.uhn.fhir.util.CollectionUtil;
|
||||
public class SearchParameter extends BaseQueryParameter {
|
||||
|
||||
private static final String EMPTY_STRING = "";
|
||||
private static HashMap<SearchParamTypeEnum, Set<String>> ourParamQualifiers;
|
||||
private static HashMap<Class<?>, SearchParamTypeEnum> ourParamTypes;
|
||||
private static HashMap<RestSearchParameterType, Set<String>> ourParamQualifiers;
|
||||
private static HashMap<Class<?>, RestSearchParameterType> ourParamTypes;
|
||||
static final String QUALIFIER_ANY_TYPE = ":*";
|
||||
|
||||
static {
|
||||
ourParamTypes = new HashMap<Class<?>, SearchParamTypeEnum>();
|
||||
ourParamQualifiers = new HashMap<SearchParamTypeEnum, Set<String>>();
|
||||
ourParamTypes = new HashMap<Class<?>, RestSearchParameterType>();
|
||||
ourParamQualifiers = new HashMap<RestSearchParameterType, Set<String>>();
|
||||
|
||||
ourParamTypes.put(StringParam.class, SearchParamTypeEnum.STRING);
|
||||
ourParamTypes.put(StringOrListParam.class, SearchParamTypeEnum.STRING);
|
||||
ourParamTypes.put(StringAndListParam.class, SearchParamTypeEnum.STRING);
|
||||
ourParamQualifiers.put(SearchParamTypeEnum.STRING, CollectionUtil.newSet(Constants.PARAMQUALIFIER_STRING_EXACT, Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
|
||||
ourParamTypes.put(StringParam.class, RestSearchParameterType.STRING);
|
||||
ourParamTypes.put(StringOrListParam.class, RestSearchParameterType.STRING);
|
||||
ourParamTypes.put(StringAndListParam.class, RestSearchParameterType.STRING);
|
||||
ourParamQualifiers.put(RestSearchParameterType.STRING, CollectionUtil.newSet(Constants.PARAMQUALIFIER_STRING_EXACT, Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
|
||||
|
||||
ourParamTypes.put(TokenParam.class, SearchParamTypeEnum.TOKEN);
|
||||
ourParamTypes.put(TokenOrListParam.class, SearchParamTypeEnum.TOKEN);
|
||||
ourParamTypes.put(TokenAndListParam.class, SearchParamTypeEnum.TOKEN);
|
||||
ourParamQualifiers.put(SearchParamTypeEnum.TOKEN, CollectionUtil.newSet(Constants.PARAMQUALIFIER_TOKEN_TEXT, Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
|
||||
ourParamTypes.put(UriParam.class, RestSearchParameterType.URI);
|
||||
ourParamTypes.put(UriOrListParam.class, RestSearchParameterType.URI);
|
||||
ourParamTypes.put(UriAndListParam.class, RestSearchParameterType.URI);
|
||||
// TODO: are these right for URI?
|
||||
ourParamQualifiers.put(RestSearchParameterType.URI, CollectionUtil.newSet(Constants.PARAMQUALIFIER_STRING_EXACT, Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
|
||||
|
||||
ourParamTypes.put(DateParam.class, SearchParamTypeEnum.DATE);
|
||||
ourParamTypes.put(DateOrListParam.class, SearchParamTypeEnum.DATE);
|
||||
ourParamTypes.put(DateAndListParam.class, SearchParamTypeEnum.DATE);
|
||||
ourParamTypes.put(DateRangeParam.class, SearchParamTypeEnum.DATE);
|
||||
ourParamQualifiers.put(SearchParamTypeEnum.DATE, CollectionUtil.newSet(Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
|
||||
ourParamTypes.put(TokenParam.class, RestSearchParameterType.TOKEN);
|
||||
ourParamTypes.put(TokenOrListParam.class, RestSearchParameterType.TOKEN);
|
||||
ourParamTypes.put(TokenAndListParam.class, RestSearchParameterType.TOKEN);
|
||||
ourParamQualifiers.put(RestSearchParameterType.TOKEN, CollectionUtil.newSet(Constants.PARAMQUALIFIER_TOKEN_TEXT, Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
|
||||
|
||||
ourParamTypes.put(QuantityParam.class, SearchParamTypeEnum.QUANTITY);
|
||||
ourParamTypes.put(QuantityOrListParam.class, SearchParamTypeEnum.QUANTITY);
|
||||
ourParamTypes.put(QuantityAndListParam.class, SearchParamTypeEnum.QUANTITY);
|
||||
ourParamQualifiers.put(SearchParamTypeEnum.QUANTITY, CollectionUtil.newSet(Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
|
||||
ourParamTypes.put(DateParam.class, RestSearchParameterType.DATE);
|
||||
ourParamTypes.put(DateOrListParam.class, RestSearchParameterType.DATE);
|
||||
ourParamTypes.put(DateAndListParam.class, RestSearchParameterType.DATE);
|
||||
ourParamTypes.put(DateRangeParam.class, RestSearchParameterType.DATE);
|
||||
ourParamQualifiers.put(RestSearchParameterType.DATE, CollectionUtil.newSet(Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
|
||||
|
||||
ourParamTypes.put(NumberParam.class, SearchParamTypeEnum.NUMBER);
|
||||
ourParamTypes.put(NumberOrListParam.class, SearchParamTypeEnum.NUMBER);
|
||||
ourParamTypes.put(NumberAndListParam.class, SearchParamTypeEnum.NUMBER);
|
||||
ourParamQualifiers.put(SearchParamTypeEnum.NUMBER, CollectionUtil.newSet(Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
|
||||
ourParamTypes.put(QuantityParam.class, RestSearchParameterType.QUANTITY);
|
||||
ourParamTypes.put(QuantityOrListParam.class, RestSearchParameterType.QUANTITY);
|
||||
ourParamTypes.put(QuantityAndListParam.class, RestSearchParameterType.QUANTITY);
|
||||
ourParamQualifiers.put(RestSearchParameterType.QUANTITY, CollectionUtil.newSet(Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
|
||||
|
||||
ourParamTypes.put(ReferenceParam.class, SearchParamTypeEnum.REFERENCE);
|
||||
ourParamTypes.put(ReferenceOrListParam.class, SearchParamTypeEnum.REFERENCE);
|
||||
ourParamTypes.put(ReferenceAndListParam.class, SearchParamTypeEnum.REFERENCE);
|
||||
ourParamTypes.put(NumberParam.class, RestSearchParameterType.NUMBER);
|
||||
ourParamTypes.put(NumberOrListParam.class, RestSearchParameterType.NUMBER);
|
||||
ourParamTypes.put(NumberAndListParam.class, RestSearchParameterType.NUMBER);
|
||||
ourParamQualifiers.put(RestSearchParameterType.NUMBER, CollectionUtil.newSet(Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
|
||||
|
||||
ourParamTypes.put(ReferenceParam.class, RestSearchParameterType.REFERENCE);
|
||||
ourParamTypes.put(ReferenceOrListParam.class, RestSearchParameterType.REFERENCE);
|
||||
ourParamTypes.put(ReferenceAndListParam.class, RestSearchParameterType.REFERENCE);
|
||||
// --vvvv-- no empty because that gets added from OptionalParam#chainWhitelist
|
||||
ourParamQualifiers.put(SearchParamTypeEnum.REFERENCE, CollectionUtil.newSet(Constants.PARAMQUALIFIER_MISSING));
|
||||
ourParamQualifiers.put(RestSearchParameterType.REFERENCE, CollectionUtil.newSet(Constants.PARAMQUALIFIER_MISSING));
|
||||
|
||||
ourParamTypes.put(CompositeParam.class, SearchParamTypeEnum.COMPOSITE);
|
||||
ourParamTypes.put(CompositeOrListParam.class, SearchParamTypeEnum.COMPOSITE);
|
||||
ourParamTypes.put(CompositeAndListParam.class, SearchParamTypeEnum.COMPOSITE);
|
||||
ourParamQualifiers.put(SearchParamTypeEnum.COMPOSITE, CollectionUtil.newSet(Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
|
||||
ourParamTypes.put(CompositeParam.class, RestSearchParameterType.COMPOSITE);
|
||||
ourParamTypes.put(CompositeOrListParam.class, RestSearchParameterType.COMPOSITE);
|
||||
ourParamTypes.put(CompositeAndListParam.class, RestSearchParameterType.COMPOSITE);
|
||||
ourParamQualifiers.put(RestSearchParameterType.COMPOSITE, CollectionUtil.newSet(Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
|
||||
}
|
||||
|
||||
private List<Class<? extends IQueryParameterType>> myCompositeTypes;
|
||||
@ -129,7 +138,7 @@ public class SearchParameter extends BaseQueryParameter {
|
||||
private String myDescription;
|
||||
private String myName;
|
||||
private IParamBinder myParamBinder;
|
||||
private SearchParamTypeEnum myParamType;
|
||||
private RestSearchParameterType myParamType;
|
||||
private Set<String> myQualifierBlacklist;
|
||||
private Set<String> myQualifierWhitelist;
|
||||
private boolean myRequired;
|
||||
@ -179,7 +188,7 @@ public class SearchParameter extends BaseQueryParameter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public SearchParamTypeEnum getParamType() {
|
||||
public RestSearchParameterType getParamType() {
|
||||
return myParamType;
|
||||
}
|
||||
|
||||
@ -274,12 +283,12 @@ public class SearchParameter extends BaseQueryParameter {
|
||||
myParamBinder = new QueryParameterAndBinder((Class<? extends IQueryParameterAnd<?>>) type, myCompositeTypes);
|
||||
} else if (String.class.equals(type)) {
|
||||
myParamBinder = new StringBinder();
|
||||
myParamType = SearchParamTypeEnum.STRING;
|
||||
myParamType = RestSearchParameterType.STRING;
|
||||
} else {
|
||||
throw new ConfigurationException("Unsupported data type for parameter: " + type.getCanonicalName());
|
||||
}
|
||||
|
||||
SearchParamTypeEnum typeEnum = ourParamTypes.get(type);
|
||||
RestSearchParameterType typeEnum = ourParamTypes.get(type);
|
||||
if (typeEnum != null) {
|
||||
Set<String> builtInQualifiers = ourParamQualifiers.get(typeEnum);
|
||||
if (builtInQualifiers != null) {
|
||||
@ -301,15 +310,15 @@ public class SearchParameter extends BaseQueryParameter {
|
||||
if (myParamType != null) {
|
||||
// ok
|
||||
} else if (StringDt.class.isAssignableFrom(type)) {
|
||||
myParamType = SearchParamTypeEnum.STRING;
|
||||
myParamType = RestSearchParameterType.STRING;
|
||||
} else if (QualifiedDateParam.class.isAssignableFrom(type)) {
|
||||
myParamType = SearchParamTypeEnum.DATE;
|
||||
myParamType = RestSearchParameterType.DATE;
|
||||
} else if (BaseIdentifierDt.class.isAssignableFrom(type)) {
|
||||
myParamType = SearchParamTypeEnum.TOKEN;
|
||||
myParamType = RestSearchParameterType.TOKEN;
|
||||
} else if (BaseQuantityDt.class.isAssignableFrom(type)) {
|
||||
myParamType = SearchParamTypeEnum.QUANTITY;
|
||||
myParamType = RestSearchParameterType.QUANTITY;
|
||||
} else if (ReferenceParam.class.isAssignableFrom(type)) {
|
||||
myParamType = SearchParamTypeEnum.REFERENCE;
|
||||
myParamType = RestSearchParameterType.REFERENCE;
|
||||
} else {
|
||||
throw new ConfigurationException("Unknown search parameter type: " + type);
|
||||
}
|
||||
|
@ -25,7 +25,7 @@ import java.util.List;
|
||||
|
||||
import ca.uhn.fhir.model.api.IQueryParameterAnd;
|
||||
import ca.uhn.fhir.model.api.IQueryParameterOr;
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
import ca.uhn.fhir.rest.method.QualifiedParamList;
|
||||
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||
|
||||
@ -47,7 +47,7 @@ public abstract class BaseAndListParam<T extends IQueryParameterOr<?>> implement
|
||||
}
|
||||
}
|
||||
|
||||
public abstract SearchParamTypeEnum getSearchParamType();
|
||||
public abstract RestSearchParameterType getSearchParamType();
|
||||
|
||||
abstract T newInstance();
|
||||
|
||||
|
@ -31,7 +31,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.hl7.fhir.instance.model.IBaseResource;
|
||||
|
||||
import ca.uhn.fhir.context.FhirContext;
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
import ca.uhn.fhir.rest.method.IParameter;
|
||||
import ca.uhn.fhir.rest.method.QualifiedParamList;
|
||||
import ca.uhn.fhir.rest.method.Request;
|
||||
@ -49,7 +49,7 @@ public abstract class BaseQueryParameter implements IParameter {
|
||||
|
||||
public abstract String getName();
|
||||
|
||||
public abstract SearchParamTypeEnum getParamType();
|
||||
public abstract RestSearchParameterType getParamType();
|
||||
|
||||
/**
|
||||
* Returns null if blacklist is "none"
|
||||
|
@ -1,7 +1,7 @@
|
||||
package ca.uhn.fhir.rest.param;
|
||||
|
||||
import ca.uhn.fhir.model.api.IQueryParameterType;
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
@ -41,8 +41,8 @@ public class CompositeAndListParam<A extends IQueryParameterType, B extends IQue
|
||||
}
|
||||
|
||||
@Override
|
||||
public SearchParamTypeEnum getSearchParamType() {
|
||||
return SearchParamTypeEnum.COMPOSITE;
|
||||
public RestSearchParameterType getSearchParamType() {
|
||||
return RestSearchParameterType.COMPOSITE;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package ca.uhn.fhir.rest.param;
|
||||
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
@ -31,8 +31,8 @@ public class DateAndListParam extends BaseAndListParam<DateOrListParam> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public SearchParamTypeEnum getSearchParamType() {
|
||||
return SearchParamTypeEnum.DATE;
|
||||
public RestSearchParameterType getSearchParamType() {
|
||||
return RestSearchParameterType.DATE;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
package ca.uhn.fhir.rest.param;
|
||||
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
@ -31,8 +31,8 @@ public class NumberAndListParam extends BaseAndListParam<NumberOrListParam> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public SearchParamTypeEnum getSearchParamType() {
|
||||
return SearchParamTypeEnum.NUMBER;
|
||||
public RestSearchParameterType getSearchParamType() {
|
||||
return RestSearchParameterType.NUMBER;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
package ca.uhn.fhir.rest.param;
|
||||
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
@ -31,8 +31,8 @@ public class QuantityAndListParam extends BaseAndListParam<QuantityOrListParam>
|
||||
}
|
||||
|
||||
@Override
|
||||
public SearchParamTypeEnum getSearchParamType() {
|
||||
return SearchParamTypeEnum.QUANTITY;
|
||||
public RestSearchParameterType getSearchParamType() {
|
||||
return RestSearchParameterType.QUANTITY;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
package ca.uhn.fhir.rest.param;
|
||||
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
@ -31,8 +31,8 @@ public class ReferenceAndListParam extends BaseAndListParam<ReferenceOrListParam
|
||||
}
|
||||
|
||||
@Override
|
||||
public SearchParamTypeEnum getSearchParamType() {
|
||||
return SearchParamTypeEnum.REFERENCE;
|
||||
public RestSearchParameterType getSearchParamType() {
|
||||
return RestSearchParameterType.REFERENCE;
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
package ca.uhn.fhir.rest.param;
|
||||
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
@ -31,8 +31,8 @@ public class StringAndListParam extends BaseAndListParam<StringOrListParam> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public SearchParamTypeEnum getSearchParamType() {
|
||||
return SearchParamTypeEnum.STRING;
|
||||
public RestSearchParameterType getSearchParamType() {
|
||||
return RestSearchParameterType.STRING;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
package ca.uhn.fhir.rest.param;
|
||||
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
@ -31,8 +31,8 @@ public class TokenAndListParam extends BaseAndListParam<TokenOrListParam> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public SearchParamTypeEnum getSearchParamType() {
|
||||
return SearchParamTypeEnum.TOKEN;
|
||||
public RestSearchParameterType getSearchParamType() {
|
||||
return RestSearchParameterType.TOKEN;
|
||||
}
|
||||
|
||||
|
||||
|
@ -0,0 +1,38 @@
|
||||
package ca.uhn.fhir.rest.param;
|
||||
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
* HAPI FHIR - Core Library
|
||||
* %%
|
||||
* Copyright (C) 2014 - 2015 University Health Network
|
||||
* %%
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
|
||||
public class UriAndListParam extends BaseAndListParam<UriOrListParam> {
|
||||
|
||||
@Override
|
||||
UriOrListParam newInstance() {
|
||||
return new UriOrListParam();
|
||||
}
|
||||
|
||||
@Override
|
||||
public RestSearchParameterType getSearchParamType() {
|
||||
return RestSearchParameterType.URI;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package ca.uhn.fhir.rest.param;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
* HAPI FHIR - Core Library
|
||||
* %%
|
||||
* Copyright (C) 2014 - 2015 University Health Network
|
||||
* %%
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
|
||||
public class UriOrListParam extends BaseOrListParam<UriParam> {
|
||||
|
||||
@Override
|
||||
UriParam newInstance() {
|
||||
return new UriParam();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
package ca.uhn.fhir.rest.param;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
* HAPI FHIR - Core Library
|
||||
* %%
|
||||
* Copyright (C) 2014 - 2015 University Health Network
|
||||
* %%
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.defaultString;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||
|
||||
import ca.uhn.fhir.model.api.IQueryParameterType;
|
||||
import ca.uhn.fhir.model.primitive.StringDt;
|
||||
import ca.uhn.fhir.model.primitive.UriDt;
|
||||
|
||||
public class UriParam extends BaseParam implements IQueryParameterType {
|
||||
|
||||
private String myValue;
|
||||
|
||||
public UriParam() {
|
||||
}
|
||||
|
||||
public UriParam(String theValue) {
|
||||
setValue(theValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getQueryParameterQualifier() {
|
||||
if (getMissing() != null) {
|
||||
return super.getQueryParameterQualifier();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return myValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getValueAsQueryToken() {
|
||||
return ParameterUtil.escape(myValue);
|
||||
}
|
||||
|
||||
public String getValueNotNull() {
|
||||
return defaultString(myValue);
|
||||
}
|
||||
|
||||
public boolean isEmpty() {
|
||||
return StringUtils.isEmpty(myValue);
|
||||
}
|
||||
|
||||
public void setValue(String theValue) {
|
||||
myValue = theValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValueAsQueryToken(String theQualifier, String theValue) {
|
||||
myValue = ParameterUtil.unescape(theValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
ToStringBuilder builder = new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE);
|
||||
builder.append("value", getValue());
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
public StringDt getValueAsStringDt() {
|
||||
return new StringDt(myValue);
|
||||
}
|
||||
|
||||
public UriDt getValueAsUriDt() {
|
||||
return new UriDt(myValue);
|
||||
}
|
||||
|
||||
}
|
@ -46,6 +46,7 @@ import org.xml.sax.SAXParseException;
|
||||
|
||||
import ca.uhn.fhir.context.ConfigurationException;
|
||||
import ca.uhn.fhir.context.FhirContext;
|
||||
import ca.uhn.fhir.context.FhirVersionEnum;
|
||||
import ca.uhn.fhir.model.api.Bundle;
|
||||
import ca.uhn.fhir.model.api.IResource;
|
||||
import ca.uhn.fhir.model.base.resource.BaseOperationOutcome.BaseIssue;
|
||||
@ -146,7 +147,11 @@ class SchemaBaseValidator implements IValidator {
|
||||
|
||||
@Override
|
||||
public void validateBundle(ValidationContext<Bundle> theContext) {
|
||||
doValidate(theContext, "fhir-atom-single.xsd");
|
||||
if (myCtx.getVersion().getVersion().isNewerThan(FhirVersionEnum.DSTU1)) {
|
||||
doValidate(theContext, "fhir-single.xsd");
|
||||
} else {
|
||||
doValidate(theContext, "fhir-atom-single.xsd");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -90,7 +90,7 @@ import ca.uhn.fhir.model.api.Tag;
|
||||
import ca.uhn.fhir.model.api.TagList;
|
||||
import ca.uhn.fhir.model.base.composite.BaseCodingDt;
|
||||
import ca.uhn.fhir.model.base.composite.BaseResourceReferenceDt;
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
import ca.uhn.fhir.model.dstu2.composite.MetaDt;
|
||||
import ca.uhn.fhir.model.primitive.IdDt;
|
||||
import ca.uhn.fhir.model.primitive.InstantDt;
|
||||
@ -160,7 +160,7 @@ public abstract class BaseFhirDao implements IDao {
|
||||
|
||||
RuntimeResourceDefinition def = getContext().getResourceDefinition(theResource);
|
||||
for (RuntimeSearchParam nextSpDef : def.getSearchParams()) {
|
||||
if (nextSpDef.getParamType() != SearchParamTypeEnum.REFERENCE) {
|
||||
if (nextSpDef.getParamType() != RestSearchParameterType.REFERENCE) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -96,7 +96,7 @@ import ca.uhn.fhir.model.base.composite.BaseResourceReferenceDt;
|
||||
import ca.uhn.fhir.model.dstu.resource.OperationOutcome;
|
||||
import ca.uhn.fhir.model.dstu.valueset.IssueSeverityEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.QuantityCompararatorEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
import ca.uhn.fhir.model.dstu2.composite.CodingDt;
|
||||
import ca.uhn.fhir.model.dstu2.composite.MetaDt;
|
||||
import ca.uhn.fhir.model.primitive.IdDt;
|
||||
@ -1150,7 +1150,7 @@ public abstract class BaseFhirResourceDao<T extends IResource> extends BaseFhirD
|
||||
if (sp == null) {
|
||||
throw new ConfigurationException("Unknown search param on resource[" + myResourceName + "] for secondary key[" + mySecondaryPrimaryKeyParamName + "]");
|
||||
}
|
||||
if (sp.getParamType() != SearchParamTypeEnum.TOKEN) {
|
||||
if (sp.getParamType() != RestSearchParameterType.TOKEN) {
|
||||
throw new ConfigurationException("Search param on resource[" + myResourceName + "] for secondary key[" + mySecondaryPrimaryKeyParamName
|
||||
+ "] is not a token type, only token is supported");
|
||||
}
|
||||
|
@ -1,5 +1,25 @@
|
||||
package ca.uhn.fhir.jpa.dao;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
* HAPI FHIR JPA Server
|
||||
* %%
|
||||
* Copyright (C) 2014 - 2015 University Health Network
|
||||
* %%
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
@ -1,5 +1,25 @@
|
||||
package ca.uhn.fhir.jpa.dao;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
* HAPI FHIR JPA Server
|
||||
* %%
|
||||
* Copyright (C) 2014 - 2015 University Health Network
|
||||
* %%
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
@ -20,7 +20,8 @@ package ca.uhn.fhir.jpa.dao;
|
||||
* #L%
|
||||
*/
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.*;
|
||||
import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
@ -58,7 +59,7 @@ import ca.uhn.fhir.model.dstu.composite.HumanNameDt;
|
||||
import ca.uhn.fhir.model.dstu.composite.IdentifierDt;
|
||||
import ca.uhn.fhir.model.dstu.composite.PeriodDt;
|
||||
import ca.uhn.fhir.model.dstu.composite.QuantityDt;
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
import ca.uhn.fhir.model.primitive.BaseDateTimeDt;
|
||||
import ca.uhn.fhir.model.primitive.IntegerDt;
|
||||
import ca.uhn.fhir.model.primitive.StringDt;
|
||||
@ -76,7 +77,7 @@ class SearchParamExtractorDstu1 extends BaseSearchParamExtractor implements ISea
|
||||
|
||||
RuntimeResourceDefinition def = getContext().getResourceDefinition(theResource);
|
||||
for (RuntimeSearchParam nextSpDef : def.getSearchParams()) {
|
||||
if (nextSpDef.getParamType() != SearchParamTypeEnum.DATE) {
|
||||
if (nextSpDef.getParamType() != RestSearchParameterType.DATE) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -133,7 +134,7 @@ class SearchParamExtractorDstu1 extends BaseSearchParamExtractor implements ISea
|
||||
|
||||
RuntimeResourceDefinition def = getContext().getResourceDefinition(theResource);
|
||||
for (RuntimeSearchParam nextSpDef : def.getSearchParams()) {
|
||||
if (nextSpDef.getParamType() != SearchParamTypeEnum.NUMBER) {
|
||||
if (nextSpDef.getParamType() != RestSearchParameterType.NUMBER) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -230,7 +231,7 @@ class SearchParamExtractorDstu1 extends BaseSearchParamExtractor implements ISea
|
||||
|
||||
RuntimeResourceDefinition def = getContext().getResourceDefinition(theResource);
|
||||
for (RuntimeSearchParam nextSpDef : def.getSearchParams()) {
|
||||
if (nextSpDef.getParamType() != SearchParamTypeEnum.QUANTITY) {
|
||||
if (nextSpDef.getParamType() != RestSearchParameterType.QUANTITY) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -280,7 +281,7 @@ class SearchParamExtractorDstu1 extends BaseSearchParamExtractor implements ISea
|
||||
|
||||
RuntimeResourceDefinition def = getContext().getResourceDefinition(theResource);
|
||||
for (RuntimeSearchParam nextSpDef : def.getSearchParams()) {
|
||||
if (nextSpDef.getParamType() != SearchParamTypeEnum.STRING) {
|
||||
if (nextSpDef.getParamType() != RestSearchParameterType.STRING) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -368,7 +369,7 @@ class SearchParamExtractorDstu1 extends BaseSearchParamExtractor implements ISea
|
||||
|
||||
RuntimeResourceDefinition def = getContext().getResourceDefinition(theResource);
|
||||
for (RuntimeSearchParam nextSpDef : def.getSearchParams()) {
|
||||
if (nextSpDef.getParamType() != SearchParamTypeEnum.TOKEN) {
|
||||
if (nextSpDef.getParamType() != RestSearchParameterType.TOKEN) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -49,7 +49,7 @@ import ca.uhn.fhir.model.api.IDatatype;
|
||||
import ca.uhn.fhir.model.api.IPrimitiveDatatype;
|
||||
import ca.uhn.fhir.model.api.IResource;
|
||||
import ca.uhn.fhir.model.base.composite.BaseHumanNameDt;
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
import ca.uhn.fhir.model.dstu2.composite.AddressDt;
|
||||
import ca.uhn.fhir.model.dstu2.composite.CodeableConceptDt;
|
||||
import ca.uhn.fhir.model.dstu2.composite.CodingDt;
|
||||
@ -59,6 +59,8 @@ import ca.uhn.fhir.model.dstu2.composite.HumanNameDt;
|
||||
import ca.uhn.fhir.model.dstu2.composite.IdentifierDt;
|
||||
import ca.uhn.fhir.model.dstu2.composite.PeriodDt;
|
||||
import ca.uhn.fhir.model.dstu2.composite.QuantityDt;
|
||||
import ca.uhn.fhir.model.dstu2.resource.Patient;
|
||||
import ca.uhn.fhir.model.dstu2.resource.Patient.Communication;
|
||||
import ca.uhn.fhir.model.primitive.BaseDateTimeDt;
|
||||
import ca.uhn.fhir.model.primitive.IntegerDt;
|
||||
import ca.uhn.fhir.model.primitive.StringDt;
|
||||
@ -82,7 +84,7 @@ class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implements ISea
|
||||
|
||||
RuntimeResourceDefinition def = getContext().getResourceDefinition(theResource);
|
||||
for (RuntimeSearchParam nextSpDef : def.getSearchParams()) {
|
||||
if (nextSpDef.getParamType() != SearchParamTypeEnum.DATE) {
|
||||
if (nextSpDef.getParamType() != RestSearchParameterType.DATE) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -145,7 +147,7 @@ class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implements ISea
|
||||
|
||||
RuntimeResourceDefinition def = getContext().getResourceDefinition(theResource);
|
||||
for (RuntimeSearchParam nextSpDef : def.getSearchParams()) {
|
||||
if (nextSpDef.getParamType() != SearchParamTypeEnum.NUMBER) {
|
||||
if (nextSpDef.getParamType() != RestSearchParameterType.NUMBER) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -248,7 +250,7 @@ class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implements ISea
|
||||
|
||||
RuntimeResourceDefinition def = getContext().getResourceDefinition(theResource);
|
||||
for (RuntimeSearchParam nextSpDef : def.getSearchParams()) {
|
||||
if (nextSpDef.getParamType() != SearchParamTypeEnum.QUANTITY) {
|
||||
if (nextSpDef.getParamType() != RestSearchParameterType.QUANTITY) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -304,7 +306,7 @@ class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implements ISea
|
||||
|
||||
RuntimeResourceDefinition def = getContext().getResourceDefinition(theResource);
|
||||
for (RuntimeSearchParam nextSpDef : def.getSearchParams()) {
|
||||
if (nextSpDef.getParamType() != SearchParamTypeEnum.STRING) {
|
||||
if (nextSpDef.getParamType() != RestSearchParameterType.STRING) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -398,7 +400,7 @@ class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implements ISea
|
||||
|
||||
RuntimeResourceDefinition def = getContext().getResourceDefinition(theResource);
|
||||
for (RuntimeSearchParam nextSpDef : def.getSearchParams()) {
|
||||
if (nextSpDef.getParamType() != SearchParamTypeEnum.TOKEN) {
|
||||
if (nextSpDef.getParamType() != RestSearchParameterType.TOKEN) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -416,6 +418,13 @@ class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implements ISea
|
||||
List<String> codes = new ArrayList<String>();
|
||||
|
||||
for (Object nextObject : extractValues(nextPath, theResource)) {
|
||||
|
||||
// Patient:language
|
||||
if (nextObject instanceof Patient.Communication) {
|
||||
Communication nextValue = (Patient.Communication) nextObject;
|
||||
nextObject= nextValue.getLanguage();
|
||||
}
|
||||
|
||||
if (nextObject instanceof IdentifierDt) {
|
||||
IdentifierDt nextValue = (IdentifierDt) nextObject;
|
||||
if (nextValue.isEmpty()) {
|
||||
|
@ -1,5 +1,25 @@
|
||||
package ca.uhn.fhir.jpa.entity;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
* HAPI FHIR JPA Server
|
||||
* %%
|
||||
* Copyright (C) 2014 - 2015 University Health Network
|
||||
* %%
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
public enum TagTypeEnum {
|
||||
|
||||
/*
|
||||
|
@ -1,5 +1,25 @@
|
||||
package ca.uhn.fhir.jpa.provider;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
* HAPI FHIR JPA Server
|
||||
* %%
|
||||
* Copyright (C) 2014 - 2015 University Health Network
|
||||
* %%
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
@ -1,5 +1,25 @@
|
||||
package ca.uhn.fhir.jpa.provider;
|
||||
|
||||
/*
|
||||
* #%L
|
||||
* HAPI FHIR JPA Server
|
||||
* %%
|
||||
* Copyright (C) 2014 - 2015 University Health Network
|
||||
* %%
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* #L%
|
||||
*/
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
@ -863,7 +863,7 @@ public class FhirResourceDaoDstu2Test {
|
||||
map.add(Organization.SP_NAME, new StringParam("X"+methodName+"X"));
|
||||
map.setRevIncludes(Collections.singleton(Patient.INCLUDE_ORGANIZATION));
|
||||
IBundleProvider resultsP = ourOrganizationDao.search(map);
|
||||
assertEquals(1, resultsP.size());
|
||||
assertEquals(2, resultsP.size());
|
||||
List<IResource> results = resultsP.getResources(0, resultsP.size());
|
||||
assertEquals(2, results.size());
|
||||
assertEquals(Organization.class, results.get(0).getClass());
|
||||
@ -1539,7 +1539,7 @@ public class FhirResourceDaoDstu2Test {
|
||||
Patient patient = new Patient();
|
||||
patient.addIdentifier().setSystem("urn:system").setValue("testSearchTokenParam001");
|
||||
patient.addName().addFamily("Tester").addGiven("testSearchTokenParam1");
|
||||
patient.addCommunication().setText("testSearchTokenParamComText").addCoding().setCode("testSearchTokenParamCode").setSystem("testSearchTokenParamSystem")
|
||||
patient.addCommunication().getLanguage().setText("testSearchTokenParamComText").addCoding().setCode("testSearchTokenParamCode").setSystem("testSearchTokenParamSystem")
|
||||
.setDisplay("testSearchTokenParamDisplay");
|
||||
ourPatientDao.create(patient);
|
||||
|
||||
|
@ -237,7 +237,7 @@ public class ServerConformanceProvider implements IServerConformanceProvider<Con
|
||||
// param.addChain(chain);
|
||||
// }
|
||||
param.setDocumentation(nextParamDescription);
|
||||
param.setType(nextParameter.getParamType());
|
||||
param.getTypeElement().setValue(nextParameter.getParamType().getCode());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -302,7 +302,7 @@ public class ServerConformanceProvider implements IServerConformanceProvider<Con
|
||||
// param.addChain(chain);
|
||||
// }
|
||||
param.setDocumentation(nextParamDescription);
|
||||
param.setType(nextParameter.getParamType());
|
||||
param.getTypeElement().setValue(nextParameter.getParamType().getCode());
|
||||
for (Class<? extends IResource> nextTarget : nextParameter.getDeclaredTypes()) {
|
||||
RuntimeResourceDefinition targetDef = myRestfulServer.getFhirContext().getResourceDefinition(nextTarget);
|
||||
if (targetDef != null) {
|
||||
|
@ -8,7 +8,7 @@ import org.junit.Test;
|
||||
|
||||
import ca.uhn.fhir.model.api.IResource;
|
||||
import ca.uhn.fhir.model.dstu.resource.Patient;
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.reflect.ClassPath;
|
||||
@ -30,7 +30,7 @@ public class NameChanges {
|
||||
|
||||
RuntimeResourceDefinition def = ctx.getResourceDefinition((Class<? extends IResource>) Class.forName(classInfo.getName()));
|
||||
for (RuntimeSearchParam nextParam : def.getSearchParams()) {
|
||||
if (nextParam.getParamType() == SearchParamTypeEnum.COMPOSITE) {
|
||||
if (nextParam.getParamType() == RestSearchParameterType.COMPOSITE) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ import ca.uhn.fhir.model.api.Bundle;
|
||||
import ca.uhn.fhir.model.api.IResource;
|
||||
import ca.uhn.fhir.model.dstu.resource.Conformance;
|
||||
import ca.uhn.fhir.model.dstu.resource.Patient;
|
||||
import ca.uhn.fhir.model.dstu.valueset.SearchParamTypeEnum;
|
||||
import ca.uhn.fhir.model.dstu.valueset.RestSearchParameterType;
|
||||
import ca.uhn.fhir.narrative.DefaultThymeleafNarrativeGenerator;
|
||||
import ca.uhn.fhir.rest.annotation.Search;
|
||||
import ca.uhn.fhir.rest.param.StringAndListParam;
|
||||
@ -173,8 +173,8 @@ public class DynamicSearchTest {
|
||||
@Override
|
||||
public List<RuntimeSearchParam> getSearchParameters() {
|
||||
ArrayList<RuntimeSearchParam> retVal = new ArrayList<RuntimeSearchParam>();
|
||||
retVal.add(new RuntimeSearchParam("param1", "This is the first parameter", "Patient.param1", SearchParamTypeEnum.STRING));
|
||||
retVal.add(new RuntimeSearchParam("param2", "This is the second parameter", "Patient.param2", SearchParamTypeEnum.DATE));
|
||||
retVal.add(new RuntimeSearchParam("param1", "This is the first parameter", "Patient.param1", RestSearchParameterType.STRING));
|
||||
retVal.add(new RuntimeSearchParam("param2", "This is the second parameter", "Patient.param2", RestSearchParameterType.DATE));
|
||||
return retVal;
|
||||
}
|
||||
|
||||
|
@ -238,6 +238,8 @@
|
||||
<baseResourceName>StatusRequest</baseResourceName>
|
||||
<baseResourceName>Person</baseResourceName>
|
||||
<baseResourceName>ProcedureRequest</baseResourceName>
|
||||
<baseResourceName>ProcessRequest</baseResourceName>
|
||||
<baseResourceName>Claim</baseResourceName>
|
||||
<baseResourceName>VisionClaim</baseResourceName>
|
||||
<baseResourceName>DeviceMetric</baseResourceName>
|
||||
<baseResourceName>Organization</baseResourceName>
|
||||
|
@ -1,52 +1,75 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Alert
|
||||
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:*">
|
||||
<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>Alert</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Alert/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Alert/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Alert">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Alert/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Alert/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Alert/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Alert/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Alert/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Alert/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Alert/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Alert/f:category">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Alert/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Alert/f:category/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Alert/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Alert/f:category/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Alert/f:category">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Alert/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Alert/f:category/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Alert/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Alert/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
<sch:rule context="f:Alert/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Alert/f:note">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Alert/f:note/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,82 +1,93 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource AllergyIntolerance
|
||||
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:*">
|
||||
<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>AllergyIntolerance</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:recorder">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:substance">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:recorder">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:substance/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:substance/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:reporter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:event/f:substance">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:substance">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:event/f:substance/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:substance/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:event/f:substance/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:event/f:substance">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:event/f:manifestation">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:event/f:substance/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:event/f:manifestation/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:event/f:manifestation">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:event/f:manifestation/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:event/f:manifestation/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:event/f:duration">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:event/f:duration">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:event/f:exposureRoute">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:event/f:exposureRoute">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:event/f:exposureRoute/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:AllergyIntolerance/f:event/f:exposureRoute/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AllergyIntolerance/f:event/f:exposureRoute/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,79 +1,84 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Appointment
|
||||
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:*">
|
||||
<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>Appointment</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Appointment">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Appointment/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Appointment/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Appointment/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Appointment/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Appointment/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Appointment/f:reason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Appointment/f:reason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:reason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Appointment/f:reason/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:reason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Appointment/f:slot">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:slot">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Appointment/f:location">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:order">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Appointment/f:order">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:participant/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Appointment/f:participant/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:participant/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Appointment/f:participant/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Appointment/f:participant/f:actor">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Appointment/f:participant/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Appointment/f:participant/f:actor">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Appointment/f:lastModifiedBy">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,55 +1,69 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource AppointmentResponse
|
||||
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:*">
|
||||
<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>AppointmentResponse</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:AppointmentResponse/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:AppointmentResponse/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:AppointmentResponse">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:AppointmentResponse/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:AppointmentResponse/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:AppointmentResponse/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AppointmentResponse/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:AppointmentResponse/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AppointmentResponse/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:AppointmentResponse/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AppointmentResponse/f:appointment">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:AppointmentResponse/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AppointmentResponse/f:participantType">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:AppointmentResponse/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AppointmentResponse/f:participantType/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:AppointmentResponse/f:appointment">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AppointmentResponse/f:participantType/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:AppointmentResponse/f:participantType">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AppointmentResponse/f:individual">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:AppointmentResponse/f:participantType/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:AppointmentResponse/f:lastModifiedBy">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:AppointmentResponse/f:actor">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -0,0 +1,103 @@
|
||||
<?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 AuditEvent
|
||||
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:*">
|
||||
<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>AuditEvent</sch:title>
|
||||
<sch:rule context="f:AuditEvent/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:event/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:event/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:event/f:subtype">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:event/f:subtype/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:participant">
|
||||
<sch:assert test="exists(f:userId) != exists(f:reference)">sev-3: Either a userId or a reference, but not both</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:participant/f:role">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:participant/f:role/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:participant/f:reference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:participant/f:location">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:participant/f:media">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:source/f:type">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:object">
|
||||
<sch:assert test="exists(f:identifier) != exists(f:reference)">sev-2: Either an identifier or a reference, but not both</sch:assert>
|
||||
<sch:assert test="not(exists(f:name)) or not(exists(f:query))">sev-1: Either a name or a query (or both)</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:object/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:object/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:object/f:reference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:object/f:sensitivity">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:AuditEvent/f:object/f:sensitivity/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
@ -1,52 +1,69 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Basic
|
||||
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:*">
|
||||
<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>Basic</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Basic/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Basic/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Basic">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Basic/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Basic/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Basic/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Basic/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Basic/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Basic/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Basic/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Basic/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Basic/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Basic/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Basic/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Basic/f:code/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Basic/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Basic/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Basic/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Basic/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Basic/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
<sch:rule context="f:Basic/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,31 +1,28 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<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:*">
|
||||
<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:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Binary/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Binary/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -0,0 +1,93 @@
|
||||
<?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 BodySite
|
||||
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:*">
|
||||
<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>BodySite</sch:title>
|
||||
<sch:rule context="f:BodySite/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:specificLocation/f:name">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:specificLocation/f:name/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:specificLocation/f:side">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:specificLocation/f:side/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:specificLocation/f:anatomicalPlane">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:specificLocation/f:anatomicalPlane/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:relativeLocation/f:landmark">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:relativeLocation/f:landmark/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:relativeLocation/f:aspect">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:relativeLocation/f:aspect/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:relativeLocation/f:distance">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:BodySite/f:image">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">att-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
@ -1,52 +1,49 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Bundle
|
||||
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:*">
|
||||
<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>Bundle</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Bundle/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Bundle/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Bundle">
|
||||
<sch:assert test="not(f:entry/f:search) or (f:type/@value = 'searchset')">bdl-2: entry.search only when a search</sch:assert>
|
||||
<sch:assert test="not(f:total) or (f:type/@value = 'searchset') or (f:type/@value = 'history')">bdl-1: total only when a search or history</sch:assert>
|
||||
<sch:assert test="not(f:entry/f:transaction) or (f:type/@value = 'transaction') or (f:type/@value = 'history')">bdl-3: entry.transaction when (and only when) a transaction</sch:assert>
|
||||
<sch:assert test="not(f:entry/f:transactionResponse) or (f:type/@value = 'transaction-response')">bdl-4: entry.transactionResponse when (and only when) a transaction-response</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Bundle/f:entry">
|
||||
<sch:assert test="f:resource or f:transaction or f:transactionResponse">bdl-5: must be a resource unless there's a transaction or transaction response</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Bundle/f:entry/f:resource/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Bundle/f:entry/f:resource/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Bundle">
|
||||
<sch:assert test="not(f:entry/f:search) or (f:type/@value = 'transaction')">Inv-2: Search only when transaction</sch:assert>
|
||||
<sch:assert test="not(f:entry/f:status) or (f:type/@value = 'transaction') or (f:type/@value = 'search')">Inv-1: Status only when transaction or search</sch:assert>
|
||||
<sch:assert test="not(f:entry/f:status) or (f:type/@value = 'transaction') or (f:type/@value = 'history')">Inv-5: Status only when transaction or history</sch:assert>
|
||||
<sch:rule context="f:Bundle/f:entry/f:resource/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Bundle/f:entry">
|
||||
<sch:assert test="not(f:status) or f:resource">Inv-3: status only when resource</sch:assert>
|
||||
<sch:assert test="not(f:deleted) or not(f:resource)">Inv-4: deleted or resource (but not both)</sch:assert>
|
||||
<sch:rule context="f:Bundle/f:entry/f:resource/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Bundle/f:entry/f:resource/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Bundle/f:entry/f:resource/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Bundle/f:entry/f:resource/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Bundle/f:entry/f:resource/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,112 +1,129 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource CarePlan
|
||||
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:*">
|
||||
<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>CarePlan</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:CarePlan">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:concern">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:participant/f:role">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:participant/f:role/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:concern">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:participant/f:role/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:participant/f:role">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:participant/f:member">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:participant/f:role/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:goal/f:concern">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:participant/f:member">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:activity/f:actionResulting">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:goal/f:concern">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:activity/f:detail">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:activity/f:actionResulting">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:activity/f:simple">
|
||||
<sch:assert test="not(exists(f:detail)) or not(exists(f:simple))">Inv-3: Only provide a detail reference, or a simple detail summary</sch:assert>
|
||||
<sch:assert test="(f:category/@value=('supply')) = exists(f:quantity)">Inv-2: Quantity can only be specified if activity category is supply</sch:assert>
|
||||
<sch:assert test="(f:category/@value=('drug','diet')) = exists(f:dailyAmount)">Inv-1: DailyDose can only be specified if activity category is drug or food</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:activity/f:detail">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:activity/f:simple/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:activity/f:simple">
|
||||
<sch:assert test="(f:category/@value=('drug','diet')) = exists(f:dailyAmount)">cpl-1: DailyDose can only be specified if activity category is drug or food</sch:assert>
|
||||
<sch:assert test="(f:category/@value=('supply')) = exists(f:quantity)">cpl-2: Quantity can only be specified if activity category is supply</sch:assert>
|
||||
<sch:assert test="not(exists(f:detail)) or not(exists(f:simple))">cpl-3: Only provide a detail reference, or a simple detail summary</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:activity/f:simple/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:activity/f:simple/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:activity/f:simple/f:code/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:activity/f:simple/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:activity/f:simple/f:scheduledTiming">
|
||||
<sch:assert test="not(exists(f:repeat)) or count(f:event) < 2">Inv-1: There can only be a repeat element if there is none or one event</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:activity/f:simple/f:scheduledTiming/f:repeat">
|
||||
<sch:assert test="not(exists(f:frequency)) or not(exists(f:when))">tim-3: Either frequency or when can exist, not both</sch:assert>
|
||||
<sch:assert test="not(exists(f:duration)) or exists(f:durationUnits)">tim-1: if there's a duration, there needs to be duration units</sch:assert>
|
||||
<sch:assert test="not(exists(f:period)) or exists(f:periodUnits)">tim-2: if there's a period, there needs to be duration units</sch:assert>
|
||||
<sch:assert test="not(exists(f:periodMax)) or exists(period)">tim-6: If there's a periodMax, there must be a period</sch:assert>
|
||||
<sch:assert test="not(exists(f:durationMax)) or exists(duration)">tim-7: If there's a durationMax, there must be a duration</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:activity/f:simple/f:scheduledTiming/f:event">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:activity/f:simple/f:scheduledTiming/f:repeat/f:bounds">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:activity/f:simple/f:scheduledTiming/f:repeat">
|
||||
<sch:assert test="not(exists(f:count) and exists(f:end))">Inv-3: At most, only one of count or end can be present</sch:assert>
|
||||
<sch:assert test="exists(f:frequency) != exists(f:when)">Inv-2: Either frequency or when SHALL be present, but not both</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:activity/f:simple/f:scheduledTiming/f:repeat/f:duration">
|
||||
<sch:assert test="@value >= 0 or not(@value)">tim-4: duration SHALL be a non-negative value</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:activity/f:simple/f:scheduledTiming/f:repeat/f:duration">
|
||||
<sch:assert test="@value > 0 or not(@value)">Inv-4: duration SHALL be a positive value</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:activity/f:simple/f:scheduledTiming/f:repeat/f:period">
|
||||
<sch:assert test="@value >= 0 or not(@value)">tim-5: period SHALL be a non-negative value</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:activity/f:simple/f:scheduledPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:activity/f:simple/f:scheduledPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:activity/f:simple/f:location">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:activity/f:simple/f:location">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:activity/f:simple/f:performer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:activity/f:simple/f:performer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:activity/f:simple/f:product">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:activity/f:simple/f:product">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:activity/f:simple/f:dailyAmount">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:activity/f:simple/f:dailyAmount">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan/f:activity/f:simple/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:CarePlan/f:activity/f:simple/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,64 +1,81 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource CarePlan2
|
||||
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:*">
|
||||
<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>CarePlan2</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:CarePlan2/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:CarePlan2/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:CarePlan2">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan2/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:CarePlan2/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan2/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan2/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:CarePlan2/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan2/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan2/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan2/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan2/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan2/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:CarePlan2/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan2/f:concern">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan2/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan2/f:participant/f:role">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:CarePlan2/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan2/f:participant/f:role/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:CarePlan2/f:concern">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan2/f:participant/f:role/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan2/f:participant/f:role">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan2/f:participant/f:member">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan2/f:participant/f:role/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan2/f:goal">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan2/f:participant/f:member">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CarePlan2/f:activity">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CarePlan2/f:goal">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
<sch:rule context="f:CarePlan2/f:activity">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -0,0 +1,213 @@
|
||||
<?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 Claim
|
||||
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:*">
|
||||
<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>Claim</sch:title>
|
||||
<sch:rule context="f:Claim/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:ruleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:originalRuleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:target">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:provider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:organization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:priority">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:fundsReserve">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:enterer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:facility">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:prescription">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:originalPrescription">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:payee/f:type">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:payee/f:provider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:payee/f:organization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:payee/f:person">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:referral">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:diagnosis/f:diagnosis">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:condition">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:coverage/f:coverage">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:coverage/f:relationship">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:coverage/f:claimResponse">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:coverage/f:originalRuleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:exception">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:accidentType">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:interventionException">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:type">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:provider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:service">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:unitPrice">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:net">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:udi">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:bodySite">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:subSite">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:modifier">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:detail/f:type">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:detail/f:service">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:detail/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:detail/f:unitPrice">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:detail/f:net">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:detail/f:udi">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:detail/f:subDetail/f:type">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:detail/f:subDetail/f:service">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:detail/f:subDetail/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:detail/f:subDetail/f:unitPrice">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:detail/f:subDetail/f:net">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:detail/f:subDetail/f:udi">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:item/f:prosthesis/f:priorMaterial">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:additionalMaterials">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:missingTeeth/f:tooth">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Claim/f:missingTeeth/f:reason">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
@ -1,181 +1,168 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource ClaimResponse
|
||||
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:*">
|
||||
<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>ClaimResponse</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:request">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:ruleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:ruleset/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:request">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:originalRuleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:ruleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:originalRuleset/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:originalRuleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:organization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:organization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:requestProvider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:requestProvider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:requestOrganization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:requestOrganization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:payeeType">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:payeeType">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:payeeType/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:item/f:adjudication/f:code">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:item/f:adjudication/f:code">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:item/f:adjudication/f:amount">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:item/f:adjudication/f:code/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:item/f:detail/f:adjudication/f:code">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:item/f:adjudication/f:amount">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:item/f:detail/f:adjudication/f:amount">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:item/f:detail/f:adjudication/f:code">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:item/f:detail/f:subDetail/f:adjudication/f:code">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:item/f:detail/f:adjudication/f:code/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:item/f:detail/f:subDetail/f:adjudication/f:amount">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:item/f:detail/f:adjudication/f:amount">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:addItem/f:service">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:item/f:detail/f:subdetail/f:adjudication/f:code">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:addItem/f:fee">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:item/f:detail/f:subdetail/f:adjudication/f:code/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:addItem/f:adjudication/f:code">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:item/f:detail/f:subdetail/f:adjudication/f:amount">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:addItem/f:adjudication/f:amount">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:additem/f:service">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:addItem/f:detail/f:service">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:additem/f:service/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:addItem/f:detail/f:fee">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:additem/f:fee">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:addItem/f:detail/f:adjudication/f:code">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:additem/f:adjudication/f:code">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:addItem/f:detail/f:adjudication/f:amount">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:additem/f:adjudication/f:code/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:error/f:code">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:additem/f:adjudication/f:amount">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:totalCost">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:additem/f:detail/f:service">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:unallocDeductable">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:additem/f:detail/f:service/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:totalBenefit">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:additem/f:detail/f:fee">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:paymentAdjustment">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:additem/f:detail/f:adjudication/f:code">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:paymentAdjustmentReason">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:additem/f:detail/f:adjudication/f:code/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:paymentAmount">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:additem/f:detail/f:adjudication/f:amount">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:paymentRef/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:error/f:code">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:paymentRef/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:error/f:code/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:reserved">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:totalCost">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:form">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:unallocDeductable">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:note/f:type">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:totalBenefit">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:coverage/f:coverage">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:paymentAdjustment">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:coverage/f:relationship">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:paymentAdjustmentReason">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:coverage/f:claimResponse">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:paymentAdjustmentReason/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ClaimResponse/f:coverage/f:originalRuleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:paymentAmount">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:paymentRef/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:paymentRef/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:reserved">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:reserved/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:form">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:form/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:note/f:type">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ClaimResponse/f:note/f:type/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -0,0 +1,105 @@
|
||||
<?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 ClinicalImpression
|
||||
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:*">
|
||||
<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>ClinicalImpression</sch:title>
|
||||
<sch:rule context="f:ClinicalImpression/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:assessor">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:previous">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:problem">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:triggerCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:triggerCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:triggerReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:investigations/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:investigations/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:investigations/f:item">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:finding/f:item">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:finding/f:item/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:resolved">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:resolved/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:ruledOut/f:item">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:ruledOut/f:item/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:plan">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ClinicalImpression/f:action">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
@ -1,82 +1,93 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Communication
|
||||
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:*">
|
||||
<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>Communication</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Communication/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Communication/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Communication">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Communication/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Communication/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Communication/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Communication/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Communication/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:category">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Communication/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:category/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Communication/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:category/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Communication/f:category">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:sender">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Communication/f:category/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:recipient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Communication/f:sender">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:payload/f:contentAttachment">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">Inv-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
<sch:rule context="f:Communication/f:recipient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:payload/f:contentReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Communication/f:payload/f:contentAttachment">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">att-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:medium">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Communication/f:payload/f:contentReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:medium/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Communication/f:medium">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:medium/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Communication/f:medium/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Communication/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:reason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Communication/f:reason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:reason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Communication/f:reason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:reason/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Communication/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Communication/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,94 +1,102 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource CommunicationRequest
|
||||
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:*">
|
||||
<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>CommunicationRequest</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:category">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:category/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:category/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:category">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:sender">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:category/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:recipient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:sender">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:payload/f:contentAttachment">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">Inv-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:recipient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:payload/f:contentReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:payload/f:contentAttachment">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">att-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:medium">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:payload/f:contentReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:medium/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:medium">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:medium/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:medium/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:requester">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:requester">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:reason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:reason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:reason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:reason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:reason/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:priority">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:priority">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:CommunicationRequest/f:priority/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:priority/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:CommunicationRequest/f:priority/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,107 +1,108 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Composition
|
||||
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:*">
|
||||
<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>Composition</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Composition/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Composition/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Composition">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Composition/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Composition/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Composition/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Composition/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Composition/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Composition/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Composition/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Composition/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:class">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Composition/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:class/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Composition/f:class">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:class/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Composition/f:class/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:confidentiality">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Composition/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:confidentiality/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Composition/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Composition/f:attester/f:party">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Composition/f:custodian">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:attester/f:party">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Composition/f:event/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:custodian">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Composition/f:event/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:event/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Composition/f:event/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:event/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Composition/f:event/f:detail">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:event/f:code/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Composition/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:event/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Composition/f:section">
|
||||
<sch:assert test="(exists(f:content) and not(exists(f:section))) or (exists(f:section) and not(exists(f:content)))">cmp-1: A section must have either subsections or content</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:event/f:detail">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Composition/f:section/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Composition/f:section/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:section">
|
||||
<sch:assert test="(exists(f:content) and not(exists(f:section))) or (exists(f:section) and not(exists(f:content)))">Inv-2: A section must have either subsections or content</sch:assert>
|
||||
<sch:assert test="not(exists(f:code)) or not(exists(f:content))">Inv-1: A section can only have a code if it has no content</sch:assert>
|
||||
<sch:rule context="f:Composition/f:section/f:content">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:section/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:section/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:section/f:code/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Composition/f:section/f:content">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,46 +1,78 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource ConceptMap
|
||||
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:*">
|
||||
<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>ConceptMap</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:ConceptMap/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:ConceptMap/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ConceptMap">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ConceptMap/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ConceptMap/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ConceptMap/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ConceptMap/f:telecom">
|
||||
<sch:assert test="not(exists(f:value)) or exists(f:system)">Inv-2: A system is required if a value is provided.</sch:assert>
|
||||
<sch:rule context="f:ConceptMap/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ConceptMap/f:telecom/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:ConceptMap/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ConceptMap/f:sourceReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ConceptMap/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ConceptMap/f:targetReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ConceptMap/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ConceptMap/f:element/f:map">
|
||||
<sch:assert test="exists(f:comments) or ((f:equivalence/@value != 'narrower') and (f:equivalence/@value != 'inexact'))">Inv-1: If the map is narrower or inexact, there SHALL be some comments</sch:assert>
|
||||
<sch:rule context="f:ConceptMap/f:useContext">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
<sch:rule context="f:ConceptMap/f:useContext/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ConceptMap/f:contact/f:telecom">
|
||||
<sch:assert test="not(exists(f:value)) or exists(f:system)">cpt-2: A system is required if a value is provided.</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ConceptMap/f:contact/f:telecom/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ConceptMap/f:sourceReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ConceptMap/f:targetReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:ConceptMap/f:element/f:map">
|
||||
<sch:assert test="exists(f:comments) or ((f:equivalence/@value != 'narrower') and (f:equivalence/@value != 'inexact'))">cmd-1: If the map is narrower or inexact, there SHALL be some comments</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,160 +1,173 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Condition
|
||||
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:*">
|
||||
<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>Condition</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Condition/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Condition/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Condition">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Condition/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Condition/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:asserter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Condition/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Condition/f:asserter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:code/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:category">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Condition/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:category/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Condition/f:category">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:category/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:category/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:certainty">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Condition/f:severity">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:certainty/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Condition/f:severity/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:certainty/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:onsetAge">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:severity">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Condition/f:onsetPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:severity/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Condition/f:onsetRange">
|
||||
<sch:assert test="not(exists(f:low/f:value/@value)) or not(exists(f:high/f:value/@value)) or (number(f:low/f:value/@value) <= number(f:high/f:value/@value))">rng-2: If present, low SHALL have a lower value than high</sch:assert>
|
||||
<sch:assert test="not(exists(f:low/f:comparator) or exists(f:high/f:comparator))">rng-3: Quantity values cannot have a comparator when used in a Range</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:severity/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:onsetRange/f:low">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:onsetAge">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:Condition/f:onsetRange/f:high">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:abatementAge">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:Condition/f:abatementAge">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:stage">
|
||||
<sch:assert test="exists(f:summary) or exists(f:assessment)">Inv-1: Stage SHALL have summary or assessment</sch:assert>
|
||||
<sch:rule context="f:Condition/f:abatementPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:stage/f:summary">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Condition/f:abatementRange">
|
||||
<sch:assert test="not(exists(f:low/f:value/@value)) or not(exists(f:high/f:value/@value)) or (number(f:low/f:value/@value) <= number(f:high/f:value/@value))">rng-2: If present, low SHALL have a lower value than high</sch:assert>
|
||||
<sch:assert test="not(exists(f:low/f:comparator) or exists(f:high/f:comparator))">rng-3: Quantity values cannot have a comparator when used in a Range</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:stage/f:summary/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Condition/f:abatementRange/f:low">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:stage/f:summary/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:abatementRange/f:high">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:stage/f:assessment">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:stage">
|
||||
<sch:assert test="exists(f:summary) or exists(f:assessment)">con-1: Stage SHALL have summary or assessment</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:evidence">
|
||||
<sch:assert test="exists(f:code) or exists(f:detail)">Inv-2: evidence SHALL have code or details</sch:assert>
|
||||
<sch:rule context="f:Condition/f:stage/f:summary">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:evidence/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Condition/f:stage/f:summary/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:evidence/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Condition/f:stage/f:assessment">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:evidence/f:code/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:evidence">
|
||||
<sch:assert test="exists(f:code) or exists(f:detail)">con-2: evidence SHALL have code or details</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:evidence/f:detail">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:evidence/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:location">
|
||||
<sch:assert test="exists(f:code) or exists(f:detail)">Inv-3: location SHALL have code or details</sch:assert>
|
||||
<sch:rule context="f:Condition/f:evidence/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:location/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Condition/f:evidence/f:detail">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:location/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Condition/f:location">
|
||||
<sch:assert test="exists(f:code) or exists(f:detail)">con-3: location SHALL have code or details</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:location/f:code/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:location/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:dueTo">
|
||||
<sch:assert test="exists(f:code) != exists(f:target)">Inv-4: Relationship SHALL have either a code or a target</sch:assert>
|
||||
<sch:rule context="f:Condition/f:location/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:dueTo/f:codeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Condition/f:dueTo">
|
||||
<sch:assert test="exists(f:code) != exists(f:target)">con-4: Relationship SHALL have either a code or a target</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:dueTo/f:codeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Condition/f:dueTo/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:dueTo/f:codeableConcept/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:dueTo/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:dueTo/f:target">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:dueTo/f:target">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:occurredFollowing">
|
||||
<sch:assert test="exists(f:code) != exists(f:target)">Inv-5: Relationship SHALL have either a code or a target</sch:assert>
|
||||
<sch:rule context="f:Condition/f:occurredFollowing">
|
||||
<sch:assert test="exists(f:code) != exists(f:target)">con-5: Relationship SHALL have either a code or a target</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:occurredFollowing/f:codeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Condition/f:occurredFollowing/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:occurredFollowing/f:codeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Condition/f:occurredFollowing/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:occurredFollowing/f:codeableConcept/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Condition/f:occurredFollowing/f:target">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Condition/f:occurredFollowing/f:target">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,96 +1,107 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Conformance
|
||||
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:*">
|
||||
<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>Conformance</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Conformance">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance">
|
||||
<sch:assert test="count(f:software | f:implementation | f:description) > 0">Inv-2: A Conformance statement SHALL have at least one of description, software, or implementation</sch:assert>
|
||||
<sch:assert test="exists(f:rest) or exists(f:messaging) or exists(f:document)">Inv-1: A Conformance statement SHALL have at least one of rest, messaging or document</sch:assert>
|
||||
<sch:assert test="count(f:document[f:mode='producer'])=count(distinct-values(f:document[f:mode='producer']/f:profile/@value)) and count(f:document[f:mode='consumer'])=count(distinct-values(f:document[f:mode='consumer']/f:profile/@value))">Inv-7: The set of documents must be unique by the combination of profile & mode</sch:assert>
|
||||
<sch:assert test="count(f:messaging/f:endpoint)=count(distinct-values(f:messaging/f:endpoint/@value))">Inv-5: The set of end points listed for messaging must be unique</sch:assert>
|
||||
<sch:assert test="count(f:messaging)<=1 or not(f:messaging[not(f:endpoint)])">Inv-4: If there is more than one messaging element, endpoint must be specified for each one</sch:assert>
|
||||
<sch:assert test="count(f:rest)=count(distinct-values(f:rest/f:mode/@value))">Inv-8: There can only be one REST declaration per mode</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:telecom">
|
||||
<sch:assert test="not(exists(f:value)) or exists(f:system)">Inv-2: A system is required if a value is provided.</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:telecom/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Conformance">
|
||||
<sch:assert test="exists(f:rest) or exists(f:messaging) or exists(f:document)">cnf-1: A Conformance statement SHALL have at least one of rest, messaging or document</sch:assert>
|
||||
<sch:assert test="count(f:software | f:implementation | f:description) > 0">cnf-2: A Conformance statement SHALL have at least one of description, software, or implementation</sch:assert>
|
||||
<sch:assert test="count(f:messaging)<=1 or not(f:messaging[not(f:endpoint)])">cnf-4: If there is more than one messaging element, endpoint must be specified for each one</sch:assert>
|
||||
<sch:assert test="count(f:messaging/f:endpoint)=count(distinct-values(f:messaging/f:endpoint/@value))">cnf-5: The set of end points listed for messaging must be unique</sch:assert>
|
||||
<sch:assert test="count(f:document[f:mode='producer'])=count(distinct-values(f:document[f:mode='producer']/f:profile/@value)) and count(f:document[f:mode='consumer'])=count(distinct-values(f:document[f:mode='consumer']/f:profile/@value))">cnf-7: The set of documents must be unique by the combination of profile & mode</sch:assert>
|
||||
<sch:assert test="count(f:rest)=count(distinct-values(f:rest/f:mode/@value))">cnf-8: There can only be one REST declaration per mode</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:profile">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:contact/f:telecom">
|
||||
<sch:assert test="not(exists(f:value)) or exists(f:system)">cpt-2: A system is required if a value is provided.</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:rest">
|
||||
<sch:assert test="count(f:query)=count(distinct-values(f:query/f:name/@value))">Inv-10: A given query can only be described once per RESTful mode</sch:assert>
|
||||
<sch:assert test="count(f:resource)=count(distinct-values(f:resource/f:type/@value))">Inv-9: A given resource can only be described once per RESTful mode</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:contact/f:telecom/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:rest/f:security/f:service">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:profile">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:rest/f:security/f:service/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:rest">
|
||||
<sch:assert test="count(f:query)=count(distinct-values(f:query/f:name/@value))">cnf-10: A given query can only be described once per RESTful mode</sch:assert>
|
||||
<sch:assert test="count(f:resource)=count(distinct-values(f:resource/f:type/@value))">cnf-9: A given resource can only be described once per RESTful mode</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:rest/f:security/f:service/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:rest/f:security/f:service">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:rest/f:resource">
|
||||
<sch:assert test="count(f:operation)=count(distinct-values(f:operation/f:code/@value))">Inv-11: Operation codes must be unique in the context of a resource</sch:assert>
|
||||
<sch:assert test="count(f:searchParam)=count(distinct-values(f:searchParam/f:name/@value))">Inv-12: Search parameter names must be unique in the context of a resource</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:rest/f:security/f:service/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:rest/f:resource/f:profile">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:rest/f:resource">
|
||||
<sch:assert test="count(f:searchParam)=count(distinct-values(f:searchParam/f:name/@value))">cnf-12: Search parameter names must be unique in the context of a resource</sch:assert>
|
||||
<sch:assert test="count(f:operation)=count(distinct-values(f:operation/f:code/@value))">cnf-11: Operation codes must be unique in the context of a resource</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:rest/f:operation/f:definition">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:rest/f:resource/f:profile">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:messaging">
|
||||
<sch:assert test="exists(f:endpoint) = exists(parent::f:Conformance/f:implementation)">Inv-3: Messaging end point is required (and is only permitted) when statement is for an implementation</sch:assert>
|
||||
<sch:assert test="count(f:event[f:mode='sender'])=count(distinct-values(f:event[f:mode='sender']/f:code/@value)) and count(f:event[f:mode='receiver'])=count(distinct-values(f:event[f:mode='receiver']/f:code/@value))">Inv-6: The set of events per messaging endpoint must be unique by the combination of code & mode</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:rest/f:operation/f:definition">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:messaging/f:event/f:code">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:messaging">
|
||||
<sch:assert test="exists(f:endpoint) = exists(parent::f:Conformance/f:implementation)">cnf-3: Messaging end point is required (and is only permitted) when statement is for an implementation</sch:assert>
|
||||
<sch:assert test="count(f:event[f:mode='sender'])=count(distinct-values(f:event[f:mode='sender']/f:code/@value)) and count(f:event[f:mode='receiver'])=count(distinct-values(f:event[f:mode='receiver']/f:code/@value))">cnf-6: The set of events per messaging endpoint must be unique by the combination of code & mode</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:messaging/f:event/f:code/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:messaging/f:event/f:code">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:messaging/f:event/f:protocol">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:messaging/f:event/f:protocol">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:messaging/f:event/f:protocol/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:messaging/f:event/f:request">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:messaging/f:event/f:request">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:messaging/f:event/f:response">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:messaging/f:event/f:response">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Conformance/f:document/f:profile">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Conformance/f:document/f:profile">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,151 +1,225 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Contract
|
||||
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:*">
|
||||
<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>Contract</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Contract/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Contract/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Contract">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Contract/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Contract/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:authority">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:domain">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:applies">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Contract/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Contract/f:authority">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:domain">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:subtype">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Contract/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:subtype/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Contract/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:subtype/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:subType">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:applies">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Contract/f:subType/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:Contract/f:action">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:unitPrice">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:Contract/f:action/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:net">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:Contract/f:actionReason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:actionReason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:grantor">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:actor/f:entity">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:grantee">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:actor/f:role">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:witness">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:actor/f:role/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:executor">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:valuedItem/f:entityCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:notary">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:valuedItem/f:entityCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:signer/f:type">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Contract/f:valuedItem/f:entityReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:signer/f:type/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:valuedItem/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:term/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Contract/f:valuedItem/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:term/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:valuedItem/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:term/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Contract/f:valuedItem/f:unitPrice">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:term/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Contract/f:valuedItem/f:net">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:term/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:signer/f:type">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:term/f:subtype">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Contract/f:signer/f:party">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:term/f:subtype/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Contract/f:term/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:term/f:subtype/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:term/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:term/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contract/f:term/f:applies">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:term/f:applies">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Contract/f:term/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:term/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:Contract/f:term/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:term/f:unitPrice">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:Contract/f:term/f:subType">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:term/f:net">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:Contract/f:term/f:subType/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:binding">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">Inv-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
<sch:rule context="f:Contract/f:term/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:friendly">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">Inv-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
<sch:rule context="f:Contract/f:term/f:action">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:legal">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">Inv-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
<sch:rule context="f:Contract/f:term/f:action/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contract/f:rule">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">Inv-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
<sch:rule context="f:Contract/f:term/f:actionReason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
<sch:rule context="f:Contract/f:term/f:actionReason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:term/f:actor/f:entity">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:term/f:actor/f:role">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:term/f:actor/f:role/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:term/f:valuedItem/f:entityCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:term/f:valuedItem/f:entityCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:term/f:valuedItem/f:entityReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:term/f:valuedItem/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:term/f:valuedItem/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:term/f:valuedItem/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:term/f:valuedItem/f:unitPrice">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:term/f:valuedItem/f:net">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:bindingAttachment">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">att-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:bindingReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:friendly/f:contentAttachment">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">att-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:friendly/f:contentReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:legal/f:contentAttachment">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">att-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:legal/f:contentReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:rule/f:contentAttachment">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">att-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Contract/f:rule/f:contentReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,67 +1,81 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Contraindication
|
||||
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:*">
|
||||
<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>Contraindication</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Contraindication">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contraindication/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contraindication/f:category">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contraindication/f:category/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contraindication/f:category/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:category">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contraindication/f:implicated">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:category/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contraindication/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:implicated">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contraindication/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contraindication/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contraindication/f:mitigation/f:action">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contraindication/f:mitigation/f:action/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:mitigation/f:action">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contraindication/f:mitigation/f:action/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:mitigation/f:action/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Contraindication/f:mitigation/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Contraindication/f:mitigation/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,61 +1,90 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Coverage
|
||||
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:*">
|
||||
<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>Coverage</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Coverage/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Coverage/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Coverage">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Coverage/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Coverage/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Coverage/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Coverage/f:issuer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Coverage/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Coverage/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Coverage/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Coverage/f:type">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Coverage/f:issuer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Coverage/f:type/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Coverage/f:bin/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Coverage/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Coverage/f:bin/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Coverage/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Coverage/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Coverage/f:subscriber">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Coverage/f:type">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Coverage/f:network/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Coverage/f:subscriberId/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Coverage/f:network/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Coverage/f:subscriberId/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Coverage/f:contract">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Coverage/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
<sch:rule context="f:Coverage/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Coverage/f:subscriber">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Coverage/f:network/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Coverage/f:network/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Coverage/f:contract">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,83 +1,103 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource DataElement
|
||||
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:*">
|
||||
<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>DataElement</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DataElement">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement">
|
||||
<sch:assert test="count(f:concept[f:primary[@value='true']|f:mapping/f:definitional[@value='true']])<=1">Inv-1: Can have a maximum of one definitional binding or primary concept</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement/f:telecom">
|
||||
<sch:assert test="not(exists(f:value)) or exists(f:system)">Inv-2: A system is required if a value is provided.</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement/f:telecom/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:useContext">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement/f:category">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:useContext/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement/f:category/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:contact/f:telecom">
|
||||
<sch:assert test="not(exists(f:value)) or exists(f:system)">cpt-2: A system is required if a value is provided.</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement/f:category/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:contact/f:telecom/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement/f:code">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:element">
|
||||
<sch:assert test="not(exists(for $type in f:type return $type/preceding-sibling::f:type[f:code/@value=$type/f:code/@value and f:profile/@value = $type/f:profile/@value]))">eld-13: Types must be unique by the combination of code and profile</sch:assert>
|
||||
<sch:assert test="count(f:constraint) = count(distinct-values(f:constraint/f:key/@value))">eld-14: Constraints must be unique by key</sch:assert>
|
||||
<sch:assert test="not(exists(f:binding)) or (count(f:type/f:code) = 0) or f:type/f:code/@value=('code','Coding','CodeableConcept','Quantity','Extension', 'string', 'uri')">eld-11: Binding can only be present for coded elements, string, and uri</sch:assert>
|
||||
<sch:assert test="not(exists(f:*[starts-with(local-name(.), 'pattern')])) or not(exists(f:*[starts-with(local-name(.), 'value')]))">eld-8: Pattern and value are mutually exclusive</sch:assert>
|
||||
<sch:assert test="count(f:constraint[f:name]) = count(distinct-values(f:constraint/f:name/@value))">eld-15: Constraint names must be unique.</sch:assert>
|
||||
<sch:assert test="not(exists(f:*[starts-with(local-name(.), 'fixed')])) or not(exists(f:meaningWhenMissing))">eld-16: default value and meaningWhenMissing are mutually exclusive</sch:assert>
|
||||
<sch:assert test="(not(f:max/@value) and not(f:min/@value)) or (f:max/@value = '*') or (f:max/@value >= f:min/@value)">eld-2: Min <= Max</sch:assert>
|
||||
<sch:assert test="not(exists(f:*[starts-with(local-name(.), 'pattern')])) or (count(f:type)=1 )">eld-7: Pattern may only be specified if there is one type</sch:assert>
|
||||
<sch:assert test="not(exists(f:*[starts-with(local-name(.), 'fixed')])) or (count(f:type)=1 )">eld-6: Fixed value may only be specified if there is one type</sch:assert>
|
||||
<sch:assert test="not(exists(f:nameReference) and exists(f:*[starts-with(local-name(.), 'value')]))">eld-5: Either a namereference or a fixed value (but not both) is permitted</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement/f:code/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:element/f:code">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement/f:unitsCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:element/f:slicing">
|
||||
<sch:assert test="(f:discriminator) or (f:definition)">eld-1: If there are no discriminators, there must be a definition</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement/f:unitsCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:element/f:max">
|
||||
<sch:assert test="@value='*' or (normalize-space(@value)!='' and normalize-space(translate(@value, '0123456789',''))='')">eld-3: Max SHALL be a number or "*"</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement/f:unitsCodeableConcept/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:element/f:type">
|
||||
<sch:assert test="not(exists(f:aggregation)) or exists(f:code[@value = 'Reference'])">eld-4: Aggregation may only be specified if one of the allowed types for the element is a resource</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement/f:unitsReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:element/f:binding">
|
||||
<sch:assert test="not(f:conformance/@value='example' and f:isExtensible/@value='false')">eld-9: Example value sets are always extensible</sch:assert>
|
||||
<sch:assert test="(exists(f:valueSetUri) or exists(f:valueSetReference)) or exists(f:description)">eld-10: provide either a reference or a description (or both)</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement/f:binding">
|
||||
<sch:assert test="(exists(f:valueSet)) or exists(f:description)">Inv-3: provide either a valueSet or a description (or both)</sch:assert>
|
||||
<sch:assert test="not(f:conformance/value='example' and f:isExtensible.value='false')">Inv-14: Example value sets are always extensible</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:element/f:binding/f:valueSetUri">
|
||||
<sch:assert test="starts-with(@value, 'http:') or starts-with(@value, 'https:')">eld-12: uri SHALL start with http:// or https://</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement/f:binding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DataElement/f:element/f:binding/f:valueSetReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DataElement/f:mapping">
|
||||
<sch:assert test="exists(f:uri) or exists(f:name)">Inv-26: Must have at a name or a uri (or both)</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,61 +1,78 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Device
|
||||
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:*">
|
||||
<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>Device</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Device/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Device/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Device">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Device/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Device/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Device/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Device/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Device/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Device/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Device/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Device/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Device/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Device/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Device/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Device/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Device/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Device/f:owner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Device/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Device/f:location">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Device/f:owner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Device/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Device/f:location">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Device/f:contact">
|
||||
<sch:assert test="not(exists(f:value)) or exists(f:system)">Inv-2: A system is required if a value is provided.</sch:assert>
|
||||
<sch:rule context="f:Device/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Device/f:contact/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Device/f:contact">
|
||||
<sch:assert test="not(exists(f:value)) or exists(f:system)">cpt-2: A system is required if a value is provided.</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
<sch:rule context="f:Device/f:contact/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,94 +1,99 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource DeviceComponent
|
||||
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:*">
|
||||
<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>DeviceComponent</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:source">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:parent">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:source">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:operationalStatus">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:parent">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:operationalStatus/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:operationalStatus">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:operationalStatus/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:operationalStatus/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:parameterGroup">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:parameterGroup">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:parameterGroup/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:parameterGroup/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:parameterGroup/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:productionSpecification/f:specType">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:productionSpecification/f:specType">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:productionSpecification/f:specType/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:productionSpecification/f:specType/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:productionSpecification/f:componentId/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:productionSpecification/f:specType/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:productionSpecification/f:componentId/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:productionSpecification/f:componentId/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:languageCode">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:productionSpecification/f:componentId/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceComponent/f:languageCode/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:languageCode">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:languageCode/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceComponent/f:languageCode/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,86 +1,91 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource DeviceMetric
|
||||
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:*">
|
||||
<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>DeviceMetric</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:unit">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:unit/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:unit">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:unit/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:unit/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:source">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:source">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:parent">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:parent">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:measurementMode/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:measurementPeriod/f:repeat">
|
||||
<sch:assert test="not(exists(f:frequency)) or not(exists(f:when))">tim-3: Either frequency or when can exist, not both</sch:assert>
|
||||
<sch:assert test="not(exists(f:duration)) or exists(f:durationUnits)">tim-1: if there's a duration, there needs to be duration units</sch:assert>
|
||||
<sch:assert test="not(exists(f:period)) or exists(f:periodUnits)">tim-2: if there's a period, there needs to be duration units</sch:assert>
|
||||
<sch:assert test="not(exists(f:periodMax)) or exists(period)">tim-6: If there's a periodMax, there must be a period</sch:assert>
|
||||
<sch:assert test="not(exists(f:durationMax)) or exists(duration)">tim-7: If there's a durationMax, there must be a duration</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:measurementMode/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:measurementPeriod/f:repeat/f:bounds">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:color/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:measurementPeriod/f:repeat/f:duration">
|
||||
<sch:assert test="@value >= 0 or not(@value)">tim-4: duration SHALL be a non-negative value</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:color/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceMetric/f:measurementPeriod/f:repeat/f:period">
|
||||
<sch:assert test="@value >= 0 or not(@value)">tim-5: period SHALL be a non-negative value</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:measurementPeriod">
|
||||
<sch:assert test="not(exists(f:repeat)) or count(f:event) < 2">Inv-1: There can only be a repeat element if there is none or one event</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:measurementPeriod/f:event">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:measurementPeriod/f:repeat">
|
||||
<sch:assert test="not(exists(f:count) and exists(f:end))">Inv-3: At most, only one of count or end can be present</sch:assert>
|
||||
<sch:assert test="exists(f:frequency) != exists(f:when)">Inv-2: Either frequency or when SHALL be present, but not both</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceMetric/f:measurementPeriod/f:repeat/f:duration">
|
||||
<sch:assert test="@value > 0 or not(@value)">Inv-4: duration SHALL be a positive value</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,89 +1,106 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource DeviceUseRequest
|
||||
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:*">
|
||||
<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>DeviceUseRequest</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:bodySite">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:bodySite/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:bodySite/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:bodySiteCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:device">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:bodySiteCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:bodySiteReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:device">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:indication">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:indication/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:indication/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:indication">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:prnReason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:indication/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:prnReason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:prnReason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:prnReason/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:prnReason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:timingTiming">
|
||||
<sch:assert test="not(exists(f:repeat)) or count(f:event) < 2">Inv-1: There can only be a repeat element if there is none or one event</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:timingTiming/f:repeat">
|
||||
<sch:assert test="not(exists(f:frequency)) or not(exists(f:when))">tim-3: Either frequency or when can exist, not both</sch:assert>
|
||||
<sch:assert test="not(exists(f:duration)) or exists(f:durationUnits)">tim-1: if there's a duration, there needs to be duration units</sch:assert>
|
||||
<sch:assert test="not(exists(f:period)) or exists(f:periodUnits)">tim-2: if there's a period, there needs to be duration units</sch:assert>
|
||||
<sch:assert test="not(exists(f:periodMax)) or exists(period)">tim-6: If there's a periodMax, there must be a period</sch:assert>
|
||||
<sch:assert test="not(exists(f:durationMax)) or exists(duration)">tim-7: If there's a durationMax, there must be a duration</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:timingTiming/f:event">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:timingTiming/f:repeat/f:bounds">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:timingTiming/f:repeat">
|
||||
<sch:assert test="not(exists(f:count) and exists(f:end))">Inv-3: At most, only one of count or end can be present</sch:assert>
|
||||
<sch:assert test="exists(f:frequency) != exists(f:when)">Inv-2: Either frequency or when SHALL be present, but not both</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:timingTiming/f:repeat/f:duration">
|
||||
<sch:assert test="@value >= 0 or not(@value)">tim-4: duration SHALL be a non-negative value</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:timingTiming/f:repeat/f:duration">
|
||||
<sch:assert test="@value > 0 or not(@value)">Inv-4: duration SHALL be a positive value</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:timingTiming/f:repeat/f:period">
|
||||
<sch:assert test="@value >= 0 or not(@value)">tim-5: period SHALL be a non-negative value</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseRequest/f:timingPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DeviceUseRequest/f:timingPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,80 +1,100 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource DeviceUseStatement
|
||||
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:*">
|
||||
<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>DeviceUseStatement</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseStatement/f:bodySite">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseStatement/f:bodySite/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseStatement/f:bodySite/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:bodySiteCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseStatement/f:whenUsed">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:bodySiteCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseStatement/f:device">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:bodySiteReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseStatement/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:whenUsed">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseStatement/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:device">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseStatement/f:indication">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseStatement/f:indication/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseStatement/f:indication/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:indication">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseStatement/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:indication/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseStatement/f:timingTiming">
|
||||
<sch:assert test="not(exists(f:repeat)) or count(f:event) < 2">Inv-1: There can only be a repeat element if there is none or one event</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseStatement/f:timingTiming/f:event">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:timingTiming/f:repeat">
|
||||
<sch:assert test="not(exists(f:frequency)) or not(exists(f:when))">tim-3: Either frequency or when can exist, not both</sch:assert>
|
||||
<sch:assert test="not(exists(f:duration)) or exists(f:durationUnits)">tim-1: if there's a duration, there needs to be duration units</sch:assert>
|
||||
<sch:assert test="not(exists(f:period)) or exists(f:periodUnits)">tim-2: if there's a period, there needs to be duration units</sch:assert>
|
||||
<sch:assert test="not(exists(f:periodMax)) or exists(period)">tim-6: If there's a periodMax, there must be a period</sch:assert>
|
||||
<sch:assert test="not(exists(f:durationMax)) or exists(duration)">tim-7: If there's a durationMax, there must be a duration</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseStatement/f:timingTiming/f:repeat">
|
||||
<sch:assert test="not(exists(f:count) and exists(f:end))">Inv-3: At most, only one of count or end can be present</sch:assert>
|
||||
<sch:assert test="exists(f:frequency) != exists(f:when)">Inv-2: Either frequency or when SHALL be present, but not both</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:timingTiming/f:repeat/f:bounds">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseStatement/f:timingTiming/f:repeat/f:duration">
|
||||
<sch:assert test="@value > 0 or not(@value)">Inv-4: duration SHALL be a positive value</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:timingTiming/f:repeat/f:duration">
|
||||
<sch:assert test="@value >= 0 or not(@value)">tim-4: duration SHALL be a non-negative value</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DeviceUseStatement/f:timingPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DeviceUseStatement/f:timingTiming/f:repeat/f:period">
|
||||
<sch:assert test="@value >= 0 or not(@value)">tim-5: period SHALL be a non-negative value</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
<sch:rule context="f:DeviceUseStatement/f:timingPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,85 +1,99 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource DiagnosticOrder
|
||||
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:*">
|
||||
<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>DiagnosticOrder</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:orderer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:orderer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:supportingInformation">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:specimen">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:event/f:description">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:supportingInformation">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:event/f:description/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:specimen">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:event/f:description/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:event/f:description">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:event/f:actor">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:event/f:description/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:item/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:event/f:actor">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:item/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:item/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:item/f:code/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:item/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:item/f:specimen">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:item/f:specimen">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:item/f:bodySite">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:item/f:bodySiteCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:item/f:bodySite/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:item/f:bodySiteCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticOrder/f:item/f:bodySite/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticOrder/f:item/f:bodySiteReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,91 +1,105 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource DiagnosticReport
|
||||
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:*">
|
||||
<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>DiagnosticReport</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:name">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:name/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:name/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:name">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:name/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:performer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:performer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:requestDetail">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:serviceCategory">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:serviceCategory/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:requestDetail">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:serviceCategory/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:serviceCategory">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:diagnosticPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:serviceCategory/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:specimen">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:diagnosticPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:result">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:specimen">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:imagingStudy">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:result">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:image/f:link">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:imagingStudy">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:codedDiagnosis">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:image/f:link">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:codedDiagnosis/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:codedDiagnosis">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:codedDiagnosis/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:codedDiagnosis/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DiagnosticReport/f:presentedForm">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">Inv-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
<sch:rule context="f:DiagnosticReport/f:presentedForm">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">att-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,76 +1,90 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource DocumentManifest
|
||||
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:*">
|
||||
<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>DocumentManifest</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentManifest/f:masterIdentifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentManifest/f:masterIdentifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentManifest/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:masterIdentifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentManifest/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:masterIdentifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentManifest/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentManifest/f:recipient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentManifest/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentManifest/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:recipient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentManifest/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentManifest/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentManifest/f:supercedes">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentManifest/f:confidentiality">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:content">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentManifest/f:confidentiality/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:related/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentManifest/f:confidentiality/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:related/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentManifest/f:content">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentManifest/f:related/f:ref">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,127 +1,138 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource DocumentReference
|
||||
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:*">
|
||||
<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>DocumentReference</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DocumentReference">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference">
|
||||
<sch:assert test="exists(f:location) or exists(f:service)">Inv-1: A location or a service (or both) SHALL be provided</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:masterIdentifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:masterIdentifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:masterIdentifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:masterIdentifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:class">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:class">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:class/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:class/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:class/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:custodian">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:custodian">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:authenticator">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:authenticator">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:docStatus">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:docStatus">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:docStatus/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:docStatus/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:relatesTo/f:target">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:docStatus/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:confidentiality">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:relatesTo/f:target">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:confidentiality/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:confidentiality">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:content">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">att-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:confidentiality/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:context/f:event">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:confidentiality/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:context/f:event/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:service/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:context/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:service/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:context/f:facilityType">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:service/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:context/f:facilityType/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:context/f:event">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:context/f:practiceSetting">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:context/f:event/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:context/f:practiceSetting/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:context/f:event/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:context/f:sourcePatientInfo">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:context/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:context/f:related/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:context/f:facilityType">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:context/f:related/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:context/f:facilityType/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:DocumentReference/f:context/f:related/f:ref">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DocumentReference/f:context/f:facilityType/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,58 +1,72 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource EligibilityRequest
|
||||
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:*">
|
||||
<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>EligibilityRequest</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:EligibilityRequest/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:EligibilityRequest/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EligibilityRequest">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityRequest/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EligibilityRequest/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityRequest/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityRequest/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:EligibilityRequest/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityRequest/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityRequest/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityRequest/f:ruleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EligibilityRequest/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityRequest/f:ruleset/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityRequest/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityRequest/f:originalRuleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EligibilityRequest/f:ruleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityRequest/f:originalRuleset/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityRequest/f:originalRuleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityRequest/f:target">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityRequest/f:target">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityRequest/f:provider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityRequest/f:provider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityRequest/f:organization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityRequest/f:organization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,61 +1,75 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource EligibilityResponse
|
||||
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:*">
|
||||
<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>EligibilityResponse</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:EligibilityResponse/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:EligibilityResponse/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EligibilityResponse">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityResponse/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EligibilityResponse/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityResponse/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityResponse/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:EligibilityResponse/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityResponse/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityResponse/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityResponse/f:request">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityResponse/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityResponse/f:ruleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EligibilityResponse/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityResponse/f:ruleset/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityResponse/f:request">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityResponse/f:originalRuleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EligibilityResponse/f:ruleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityResponse/f:originalRuleset/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityResponse/f:originalRuleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityResponse/f:organization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityResponse/f:organization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityResponse/f:requestProvider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityResponse/f:requestProvider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EligibilityResponse/f:requestOrganization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EligibilityResponse/f:requestOrganization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,172 +1,168 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Encounter
|
||||
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:*">
|
||||
<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>Encounter</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Encounter">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:statusHistory/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:statusHistory/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:episodeOfCare">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:participant/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:episodeOfCare">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:participant/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:incomingReferralRequest">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:participant/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:participant/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:participant/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:participant/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:participant/f:individual">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:participant/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:fulfills">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:participant/f:individual">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:fulfills">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:length">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:reason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:length">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:reason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:reason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:reason/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:reason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:indication">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:indication">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:priority">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:priority">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:priority/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:priority/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:priority/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:hospitalization/f:preAdmissionIdentifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:preAdmissionIdentifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:hospitalization/f:preAdmissionIdentifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:preAdmissionIdentifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:hospitalization/f:origin">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:origin">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:hospitalization/f:admitSource">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:admitSource">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:hospitalization/f:admitSource/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:admitSource/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:hospitalization/f:diet">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:admitSource/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:hospitalization/f:diet/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:diet">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:hospitalization/f:specialCourtesy">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:diet/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:hospitalization/f:specialCourtesy/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:diet/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:hospitalization/f:specialArrangement">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:specialCourtesy">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:hospitalization/f:specialArrangement/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:specialCourtesy/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:hospitalization/f:destination">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:specialCourtesy/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:hospitalization/f:dischargeDisposition">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:specialArrangement">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:hospitalization/f:dischargeDisposition/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:specialArrangement/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:hospitalization/f:dischargeDiagnosis">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:specialArrangement/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:location/f:location">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:destination">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:location/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:dischargeDisposition">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:serviceProvider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:dischargeDisposition/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Encounter/f:partOf">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:dischargeDisposition/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:hospitalization/f:dischargeDiagnosis">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:location/f:location">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:location/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:serviceProvider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Encounter/f:partOf">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,70 +1,81 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource EnrollmentRequest
|
||||
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:*">
|
||||
<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>EnrollmentRequest</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentRequest/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentRequest/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentRequest/f:ruleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentRequest/f:ruleset/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentRequest/f:originalRuleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:ruleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentRequest/f:originalRuleset/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:originalRuleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentRequest/f:target">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:target">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentRequest/f:provider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:provider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentRequest/f:organization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:organization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentRequest/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentRequest/f:coverage">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:coverage">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentRequest/f:relationship">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EnrollmentRequest/f:relationship">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentRequest/f:relationship/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,61 +1,75 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource EnrollmentResponse
|
||||
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:*">
|
||||
<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>EnrollmentResponse</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:EnrollmentResponse/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:EnrollmentResponse/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EnrollmentResponse">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentResponse/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EnrollmentResponse/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentResponse/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentResponse/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:EnrollmentResponse/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentResponse/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentResponse/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentResponse/f:request">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentResponse/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentResponse/f:ruleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EnrollmentResponse/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentResponse/f:ruleset/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentResponse/f:request">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentResponse/f:originalRuleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EnrollmentResponse/f:ruleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentResponse/f:originalRuleset/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentResponse/f:originalRuleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentResponse/f:organization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentResponse/f:organization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentResponse/f:requestProvider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentResponse/f:requestProvider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EnrollmentResponse/f:requestOrganization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EnrollmentResponse/f:requestOrganization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,82 +1,96 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource EpisodeOfCare
|
||||
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:*">
|
||||
<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>EpisodeOfCare</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:statusHistory/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:statusHistory/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:managingOrganization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:managingOrganization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:condition">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:referralRequest">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:condition">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:careManager">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:referralRequest">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:careTeam/f:member">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:careManager">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:careTeam/f:role">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:careTeam/f:member">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:careTeam/f:role/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:careTeam/f:role">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:careTeam/f:role/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:careTeam/f:role/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:EpisodeOfCare/f:careTeam/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:EpisodeOfCare/f:careTeam/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,61 +1,75 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource ExplanationOfBenefit
|
||||
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:*">
|
||||
<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>ExplanationOfBenefit</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:ExplanationOfBenefit/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:ExplanationOfBenefit/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ExplanationOfBenefit">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ExplanationOfBenefit/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ExplanationOfBenefit/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ExplanationOfBenefit/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ExplanationOfBenefit/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:ExplanationOfBenefit/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ExplanationOfBenefit/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ExplanationOfBenefit/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ExplanationOfBenefit/f:request">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ExplanationOfBenefit/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ExplanationOfBenefit/f:ruleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ExplanationOfBenefit/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ExplanationOfBenefit/f:ruleset/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ExplanationOfBenefit/f:request">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ExplanationOfBenefit/f:originalRuleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ExplanationOfBenefit/f:ruleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ExplanationOfBenefit/f:originalRuleset/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ExplanationOfBenefit/f:originalRuleset">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ExplanationOfBenefit/f:organization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ExplanationOfBenefit/f:organization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ExplanationOfBenefit/f:requestProvider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ExplanationOfBenefit/f:requestProvider">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ExplanationOfBenefit/f:requestOrganization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ExplanationOfBenefit/f:requestOrganization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,112 +1,123 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource FamilyHistory
|
||||
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:*">
|
||||
<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>FamilyHistory</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation">
|
||||
<sch:assert test="not (*[starts-with(local-name(.), 'age')] and *[starts-with(local-name(.), 'birth')])">Inv-1: Can have age[x] or birth[x], but not both</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:relationship">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:relationship/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation">
|
||||
<sch:assert test="not (*[starts-with(local-name(.), 'age')] and *[starts-with(local-name(.), 'birth')])">fhs-1: Can have age[x] or birth[x], but not both</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:relationship/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:relationship">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:bornPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:relationship/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:ageAge">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:bornPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:ageRange">
|
||||
<sch:assert test="not(exists(f:low/f:comparator) or exists(f:high/f:comparator))">Inv-3: Quantity values cannot have a comparator when used in a Range</sch:assert>
|
||||
<sch:assert test="not(exists(f:low/f:value/@value)) or not(exists(f:high/f:value/@value)) or (number(f:low/f:value/@value) <= number(f:high/f:value/@value))">Inv-2: If present, low SHALL have a lower value than high</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:ageAge">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:ageRange/f:low">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:ageRange">
|
||||
<sch:assert test="not(exists(f:low/f:value/@value)) or not(exists(f:high/f:value/@value)) or (number(f:low/f:value/@value) <= number(f:high/f:value/@value))">rng-2: If present, low SHALL have a lower value than high</sch:assert>
|
||||
<sch:assert test="not(exists(f:low/f:comparator) or exists(f:high/f:comparator))">rng-3: Quantity values cannot have a comparator when used in a Range</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:ageRange/f:high">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:ageRange/f:low">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:deceasedAge">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:ageRange/f:high">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:deceasedRange">
|
||||
<sch:assert test="not(exists(f:low/f:comparator) or exists(f:high/f:comparator))">Inv-3: Quantity values cannot have a comparator when used in a Range</sch:assert>
|
||||
<sch:assert test="not(exists(f:low/f:value/@value)) or not(exists(f:high/f:value/@value)) or (number(f:low/f:value/@value) <= number(f:high/f:value/@value))">Inv-2: If present, low SHALL have a lower value than high</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:deceasedAge">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:deceasedRange/f:low">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:deceasedRange">
|
||||
<sch:assert test="not(exists(f:low/f:value/@value)) or not(exists(f:high/f:value/@value)) or (number(f:low/f:value/@value) <= number(f:high/f:value/@value))">rng-2: If present, low SHALL have a lower value than high</sch:assert>
|
||||
<sch:assert test="not(exists(f:low/f:comparator) or exists(f:high/f:comparator))">rng-3: Quantity values cannot have a comparator when used in a Range</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:deceasedRange/f:high">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:deceasedRange/f:low">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:condition/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:deceasedRange/f:high">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:condition/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:condition/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:condition/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:condition/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:condition/f:outcome">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:condition/f:outcome">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:condition/f:outcome/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:condition/f:outcome/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:condition/f:outcome/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:condition/f:onsetAge">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:condition/f:onsetAge">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:condition/f:onsetRange">
|
||||
<sch:assert test="not(exists(f:low/f:value/@value)) or not(exists(f:high/f:value/@value)) or (number(f:low/f:value/@value) <= number(f:high/f:value/@value))">rng-2: If present, low SHALL have a lower value than high</sch:assert>
|
||||
<sch:assert test="not(exists(f:low/f:comparator) or exists(f:high/f:comparator))">rng-3: Quantity values cannot have a comparator when used in a Range</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:condition/f:onsetRange">
|
||||
<sch:assert test="not(exists(f:low/f:comparator) or exists(f:high/f:comparator))">Inv-3: Quantity values cannot have a comparator when used in a Range</sch:assert>
|
||||
<sch:assert test="not(exists(f:low/f:value/@value)) or not(exists(f:high/f:value/@value)) or (number(f:low/f:value/@value) <= number(f:high/f:value/@value))">Inv-2: If present, low SHALL have a lower value than high</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:condition/f:onsetRange/f:low">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:condition/f:onsetRange/f:low">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:FamilyHistory/f:relation/f:condition/f:onsetRange/f:high">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:FamilyHistory/f:relation/f:condition/f:onsetRange/f:high">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -26,21 +26,23 @@ Copyright (c) 2011+, HL7, Inc
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Generated on Sat, Feb 14, 2015 16:12-0500 for FHIR v0.4.0
|
||||
Generated on Tue, Mar 24, 2015 11:45+0000 for FHIR v0.4.0
|
||||
-->
|
||||
<xs:schema xmlns="http://hl7.org/fhir" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://hl7.org/fhir" elementFormDefault="qualified" version="0.4.0">
|
||||
<xs:include schemaLocation="alert.xsd"/>
|
||||
<xs:include schemaLocation="allergyintolerance.xsd"/>
|
||||
<xs:include schemaLocation="appointment.xsd"/>
|
||||
<xs:include schemaLocation="appointmentresponse.xsd"/>
|
||||
<xs:include schemaLocation="auditevent.xsd"/>
|
||||
<xs:include schemaLocation="basic.xsd"/>
|
||||
<xs:include schemaLocation="binary.xsd"/>
|
||||
<xs:include schemaLocation="bodysite.xsd"/>
|
||||
<xs:include schemaLocation="bundle.xsd"/>
|
||||
<xs:include schemaLocation="careplan.xsd"/>
|
||||
<xs:include schemaLocation="careplan2.xsd"/>
|
||||
<xs:include schemaLocation="claim.xsd"/>
|
||||
<xs:include schemaLocation="claimresponse.xsd"/>
|
||||
<xs:include schemaLocation="clinicalassessment.xsd"/>
|
||||
<xs:include schemaLocation="clinicalimpression.xsd"/>
|
||||
<xs:include schemaLocation="communication.xsd"/>
|
||||
<xs:include schemaLocation="communicationrequest.xsd"/>
|
||||
<xs:include schemaLocation="composition.xsd"/>
|
||||
@ -67,7 +69,6 @@ Copyright (c) 2011+, HL7, Inc
|
||||
<xs:include schemaLocation="enrollmentresponse.xsd"/>
|
||||
<xs:include schemaLocation="episodeofcare.xsd"/>
|
||||
<xs:include schemaLocation="explanationofbenefit.xsd"/>
|
||||
<xs:include schemaLocation="extensiondefinition.xsd"/>
|
||||
<xs:include schemaLocation="familyhistory.xsd"/>
|
||||
<xs:include schemaLocation="goal.xsd"/>
|
||||
<xs:include schemaLocation="group.xsd"/>
|
||||
@ -76,7 +77,6 @@ Copyright (c) 2011+, HL7, Inc
|
||||
<xs:include schemaLocation="imagingstudy.xsd"/>
|
||||
<xs:include schemaLocation="immunization.xsd"/>
|
||||
<xs:include schemaLocation="immunizationrecommendation.xsd"/>
|
||||
<xs:include schemaLocation="institutionalclaim.xsd"/>
|
||||
<xs:include schemaLocation="list.xsd"/>
|
||||
<xs:include schemaLocation="location.xsd"/>
|
||||
<xs:include schemaLocation="media.xsd"/>
|
||||
@ -91,7 +91,6 @@ Copyright (c) 2011+, HL7, Inc
|
||||
<xs:include schemaLocation="observation.xsd"/>
|
||||
<xs:include schemaLocation="operationdefinition.xsd"/>
|
||||
<xs:include schemaLocation="operationoutcome.xsd"/>
|
||||
<xs:include schemaLocation="oralhealthclaim.xsd"/>
|
||||
<xs:include schemaLocation="order.xsd"/>
|
||||
<xs:include schemaLocation="orderresponse.xsd"/>
|
||||
<xs:include schemaLocation="organization.xsd"/>
|
||||
@ -99,36 +98,28 @@ Copyright (c) 2011+, HL7, Inc
|
||||
<xs:include schemaLocation="patient.xsd"/>
|
||||
<xs:include schemaLocation="paymentnotice.xsd"/>
|
||||
<xs:include schemaLocation="paymentreconciliation.xsd"/>
|
||||
<xs:include schemaLocation="pendedrequest.xsd"/>
|
||||
<xs:include schemaLocation="person.xsd"/>
|
||||
<xs:include schemaLocation="pharmacyclaim.xsd"/>
|
||||
<xs:include schemaLocation="practitioner.xsd"/>
|
||||
<xs:include schemaLocation="procedure.xsd"/>
|
||||
<xs:include schemaLocation="procedurerequest.xsd"/>
|
||||
<xs:include schemaLocation="professionalclaim.xsd"/>
|
||||
<xs:include schemaLocation="profile.xsd"/>
|
||||
<xs:include schemaLocation="processrequest.xsd"/>
|
||||
<xs:include schemaLocation="processresponse.xsd"/>
|
||||
<xs:include schemaLocation="provenance.xsd"/>
|
||||
<xs:include schemaLocation="questionnaire.xsd"/>
|
||||
<xs:include schemaLocation="questionnaireanswers.xsd"/>
|
||||
<xs:include schemaLocation="readjudicate.xsd"/>
|
||||
<xs:include schemaLocation="referralrequest.xsd"/>
|
||||
<xs:include schemaLocation="relatedperson.xsd"/>
|
||||
<xs:include schemaLocation="reversal.xsd"/>
|
||||
<xs:include schemaLocation="riskassessment.xsd"/>
|
||||
<xs:include schemaLocation="schedule.xsd"/>
|
||||
<xs:include schemaLocation="searchparameter.xsd"/>
|
||||
<xs:include schemaLocation="securityevent.xsd"/>
|
||||
<xs:include schemaLocation="slot.xsd"/>
|
||||
<xs:include schemaLocation="specimen.xsd"/>
|
||||
<xs:include schemaLocation="statusrequest.xsd"/>
|
||||
<xs:include schemaLocation="statusresponse.xsd"/>
|
||||
<xs:include schemaLocation="structuredefinition.xsd"/>
|
||||
<xs:include schemaLocation="subscription.xsd"/>
|
||||
<xs:include schemaLocation="substance.xsd"/>
|
||||
<xs:include schemaLocation="supply.xsd"/>
|
||||
<xs:include schemaLocation="supportingdocumentation.xsd"/>
|
||||
<xs:include schemaLocation="valueset.xsd"/>
|
||||
<xs:include schemaLocation="visionclaim.xsd"/>
|
||||
<xs:include schemaLocation="visionprescription.xsd"/>
|
||||
|
||||
</xs:schema>
|
||||
|
@ -1,250 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Copyright (c) 2011+, HL7, Inc
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
* Neither the name of HL7 nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this software without specific
|
||||
prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Generated on Thu, Jan 8, 2015 07:22-0500 for FHIR v0.4.0
|
||||
-->
|
||||
<xs:schema xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns:osr="http://a9.com/-/opensearch/extensions/relevance/1.0/"
|
||||
xmlns:fhir="http://hl7.org/fhir" xmlns:at="http://purl.org/atompub/tombstones/1.0" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.w3.org/2005/Atom" elementFormDefault="qualified" attributeFormDefault="unqualified">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
This is a reduced form of the atom schema, that only supports the features profiled in the FHIR specification
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/>
|
||||
<xs:import namespace="http://hl7.org/fhir" schemaLocation="fhir-single.xsd"/>
|
||||
<xs:import namespace="http://purl.org/atompub/tombstones/1.0" schemaLocation="tombstone.xsd"/>
|
||||
<xs:import namespace="http://a9.com/-/spec/opensearch/1.1/" schemaLocation="opensearch.xsd"/>
|
||||
<xs:import namespace="http://a9.com/-/opensearch/extensions/relevance/1.0/" schemaLocation="opensearchscore.xsd"/>
|
||||
<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
|
||||
<xs:element name="feed" type="atom:FeedType"/>
|
||||
<xs:complexType name="TextType" mixed="true">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
The Atom text construct is defined in section 3.1 of the format spec.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:any namespace="http://www.w3.org/1999/xhtml" minOccurs="0"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="type">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:token">
|
||||
<xs:enumeration value="text"/>
|
||||
<xs:enumeration value="html"/>
|
||||
<xs:enumeration value="xhtml"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="PersonType">
|
||||
<xs:choice maxOccurs="unbounded">
|
||||
<xs:element name="name" type="xs:string"/>
|
||||
<xs:element name="uri" type="atom:UriType" minOccurs="0"/>
|
||||
</xs:choice>
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="FeedType">
|
||||
<xs:sequence>
|
||||
<xs:choice minOccurs="3" maxOccurs="unbounded">
|
||||
<xs:element name="title" type="atom:TextType"/>
|
||||
<xs:element name="updated" type="atom:DateTimeType"/>
|
||||
<xs:element name="id" type="atom:IdType"/>
|
||||
<xs:element name="link" type="atom:LinkType"/>
|
||||
<xs:element name="author" type="atom:PersonType" maxOccurs="unbounded"/>
|
||||
<xs:element name="category" type="atom:CategoryType" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="entry" type="atom:EntryType"/>
|
||||
<xs:element ref="at:deleted-entry"/>
|
||||
<xs:element ref="os:totalResults"/>
|
||||
<xs:element ref="osr:score"/>
|
||||
</xs:choice>
|
||||
<xs:element ref="ds:Signature" minOccurs="0" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="EntryType">
|
||||
<xs:choice maxOccurs="unbounded">
|
||||
<xs:element name="title" type="atom:TextType"/>
|
||||
<xs:element name="link" type="atom:LinkType"/>
|
||||
<xs:element name="id" type="atom:IdType"/>
|
||||
<xs:element name="updated" type="atom:DateTimeType"/>
|
||||
<xs:element name="published" type="atom:DateTimeType" minOccurs="0"/>
|
||||
<xs:element name="author" type="atom:PersonType" maxOccurs="unbounded"/>
|
||||
<xs:element name="category" type="atom:CategoryType" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="content" type="atom:ContentType" minOccurs="0"/>
|
||||
<xs:element name="summary" type="atom:TextType"/>
|
||||
</xs:choice>
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="CategoryType">
|
||||
<xs:attribute name="term" type="xs:anyURI" use="required"/>
|
||||
<xs:attribute name="scheme" type="xs:anyURI" use="required"/>
|
||||
<xs:attribute name="label" type="xs:string" use="optional"/>
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="ContentType" mixed="true">
|
||||
<xs:choice>
|
||||
<xs:element ref="fhir:Alert"/>
|
||||
<xs:element ref="fhir:AllergyIntolerance"/>
|
||||
<xs:element ref="fhir:Appointment"/>
|
||||
<xs:element ref="fhir:AppointmentResponse"/>
|
||||
<xs:element ref="fhir:Basic"/>
|
||||
<xs:element ref="fhir:Binary"/>
|
||||
<xs:element ref="fhir:Bundle"/>
|
||||
<xs:element ref="fhir:CarePlan"/>
|
||||
<xs:element ref="fhir:CarePlan2"/>
|
||||
<xs:element ref="fhir:ClaimResponse"/>
|
||||
<xs:element ref="fhir:ClinicalAssessment"/>
|
||||
<xs:element ref="fhir:Communication"/>
|
||||
<xs:element ref="fhir:CommunicationRequest"/>
|
||||
<xs:element ref="fhir:Composition"/>
|
||||
<xs:element ref="fhir:ConceptMap"/>
|
||||
<xs:element ref="fhir:Condition"/>
|
||||
<xs:element ref="fhir:Conformance"/>
|
||||
<xs:element ref="fhir:Contract"/>
|
||||
<xs:element ref="fhir:Contraindication"/>
|
||||
<xs:element ref="fhir:Coverage"/>
|
||||
<xs:element ref="fhir:DataElement"/>
|
||||
<xs:element ref="fhir:Device"/>
|
||||
<xs:element ref="fhir:DeviceComponent"/>
|
||||
<xs:element ref="fhir:DeviceMetric"/>
|
||||
<xs:element ref="fhir:DeviceUseRequest"/>
|
||||
<xs:element ref="fhir:DeviceUseStatement"/>
|
||||
<xs:element ref="fhir:DiagnosticOrder"/>
|
||||
<xs:element ref="fhir:DiagnosticReport"/>
|
||||
<xs:element ref="fhir:DocumentManifest"/>
|
||||
<xs:element ref="fhir:DocumentReference"/>
|
||||
<xs:element ref="fhir:EligibilityRequest"/>
|
||||
<xs:element ref="fhir:EligibilityResponse"/>
|
||||
<xs:element ref="fhir:Encounter"/>
|
||||
<xs:element ref="fhir:EnrollmentRequest"/>
|
||||
<xs:element ref="fhir:EnrollmentResponse"/>
|
||||
<xs:element ref="fhir:EpisodeOfCare"/>
|
||||
<xs:element ref="fhir:ExplanationOfBenefit"/>
|
||||
<xs:element ref="fhir:ExtensionDefinition"/>
|
||||
<xs:element ref="fhir:FamilyHistory"/>
|
||||
<xs:element ref="fhir:Goal"/>
|
||||
<xs:element ref="fhir:Group"/>
|
||||
<xs:element ref="fhir:HealthcareService"/>
|
||||
<xs:element ref="fhir:ImagingObjectSelection"/>
|
||||
<xs:element ref="fhir:ImagingStudy"/>
|
||||
<xs:element ref="fhir:Immunization"/>
|
||||
<xs:element ref="fhir:ImmunizationRecommendation"/>
|
||||
<xs:element ref="fhir:InstitutionalClaim"/>
|
||||
<xs:element ref="fhir:List"/>
|
||||
<xs:element ref="fhir:Location"/>
|
||||
<xs:element ref="fhir:Media"/>
|
||||
<xs:element ref="fhir:Medication"/>
|
||||
<xs:element ref="fhir:MedicationAdministration"/>
|
||||
<xs:element ref="fhir:MedicationDispense"/>
|
||||
<xs:element ref="fhir:MedicationPrescription"/>
|
||||
<xs:element ref="fhir:MedicationStatement"/>
|
||||
<xs:element ref="fhir:MessageHeader"/>
|
||||
<xs:element ref="fhir:NamingSystem"/>
|
||||
<xs:element ref="fhir:NutritionOrder"/>
|
||||
<xs:element ref="fhir:Observation"/>
|
||||
<xs:element ref="fhir:OperationDefinition"/>
|
||||
<xs:element ref="fhir:OperationOutcome"/>
|
||||
<xs:element ref="fhir:OralHealthClaim"/>
|
||||
<xs:element ref="fhir:Order"/>
|
||||
<xs:element ref="fhir:OrderResponse"/>
|
||||
<xs:element ref="fhir:Organization"/>
|
||||
<xs:element ref="fhir:Other"/>
|
||||
<xs:element ref="fhir:Patient"/>
|
||||
<xs:element ref="fhir:PaymentNotice"/>
|
||||
<xs:element ref="fhir:PaymentReconciliation"/>
|
||||
<xs:element ref="fhir:PendedRequest"/>
|
||||
<xs:element ref="fhir:Person"/>
|
||||
<xs:element ref="fhir:PharmacyClaim"/>
|
||||
<xs:element ref="fhir:Practitioner"/>
|
||||
<xs:element ref="fhir:Procedure"/>
|
||||
<xs:element ref="fhir:ProcedureRequest"/>
|
||||
<xs:element ref="fhir:ProfessionalClaim"/>
|
||||
<xs:element ref="fhir:Profile"/>
|
||||
<xs:element ref="fhir:Provenance"/>
|
||||
<xs:element ref="fhir:Questionnaire"/>
|
||||
<xs:element ref="fhir:QuestionnaireAnswers"/>
|
||||
<xs:element ref="fhir:Readjudicate"/>
|
||||
<xs:element ref="fhir:ReferralRequest"/>
|
||||
<xs:element ref="fhir:RelatedPerson"/>
|
||||
<xs:element ref="fhir:Reversal"/>
|
||||
<xs:element ref="fhir:RiskAssessment"/>
|
||||
<xs:element ref="fhir:Schedule"/>
|
||||
<xs:element ref="fhir:SearchParameter"/>
|
||||
<xs:element ref="fhir:SecurityEvent"/>
|
||||
<xs:element ref="fhir:Slot"/>
|
||||
<xs:element ref="fhir:Specimen"/>
|
||||
<xs:element ref="fhir:StatusRequest"/>
|
||||
<xs:element ref="fhir:StatusResponse"/>
|
||||
<xs:element ref="fhir:Subscription"/>
|
||||
<xs:element ref="fhir:Substance"/>
|
||||
<xs:element ref="fhir:Supply"/>
|
||||
<xs:element ref="fhir:SupportingDocumentation"/>
|
||||
<xs:element ref="fhir:ValueSet"/>
|
||||
<xs:element ref="fhir:VisionClaim"/>
|
||||
<xs:element ref="fhir:VisionPrescription"/>
|
||||
|
||||
</xs:choice>
|
||||
<xs:attribute name="type" type="xs:string"/>
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="UriType">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:anyURI">
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="LinkType" mixed="true">
|
||||
<xs:attribute name="href" type="xs:anyURI" use="required"/>
|
||||
<xs:attribute name="rel" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="type" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="hreflang" type="xs:NMTOKEN" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="length" type="xs:positiveInteger" use="optional"/>
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="IdType">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:anyURI">
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="DateTimeType">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:dateTime">
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
<xs:attributeGroup name="CommonAttributes">
|
||||
<xs:attribute ref="xml:base"/>
|
||||
<xs:attribute ref="xml:lang"/>
|
||||
</xs:attributeGroup>
|
||||
</xs:schema>
|
@ -1,250 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Copyright (c) 2011+, HL7, Inc
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
* Neither the name of HL7 nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this software without specific
|
||||
prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Generated on Thu, Jan 8, 2015 07:22-0500 for FHIR v0.4.0
|
||||
-->
|
||||
<xs:schema xmlns:atom="http://www.w3.org/2005/Atom" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:os="http://a9.com/-/spec/opensearch/1.1/" xmlns:osr="http://a9.com/-/opensearch/extensions/relevance/1.0/"
|
||||
xmlns:fhir="http://hl7.org/fhir" xmlns:at="http://purl.org/atompub/tombstones/1.0" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" targetNamespace="http://www.w3.org/2005/Atom" elementFormDefault="qualified" attributeFormDefault="unqualified">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
This is a reduced form of the atom schema, that only supports the features profiled in the FHIR specification
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/>
|
||||
<xs:import namespace="http://hl7.org/fhir" schemaLocation="fhir-all.xsd"/>
|
||||
<xs:import namespace="http://purl.org/atompub/tombstones/1.0" schemaLocation="tombstone.xsd"/>
|
||||
<xs:import namespace="http://a9.com/-/spec/opensearch/1.1/" schemaLocation="opensearch.xsd"/>
|
||||
<xs:import namespace="http://a9.com/-/opensearch/extensions/relevance/1.0/" schemaLocation="opensearchscore.xsd"/>
|
||||
<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd"/>
|
||||
<xs:element name="feed" type="atom:FeedType"/>
|
||||
<xs:complexType name="TextType" mixed="true">
|
||||
<xs:annotation>
|
||||
<xs:documentation>
|
||||
The Atom text construct is defined in section 3.1 of the format spec.
|
||||
</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:sequence>
|
||||
<xs:any namespace="http://www.w3.org/1999/xhtml" minOccurs="0"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="type">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:token">
|
||||
<xs:enumeration value="text"/>
|
||||
<xs:enumeration value="html"/>
|
||||
<xs:enumeration value="xhtml"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:attribute>
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="PersonType">
|
||||
<xs:choice maxOccurs="unbounded">
|
||||
<xs:element name="name" type="xs:string"/>
|
||||
<xs:element name="uri" type="atom:UriType" minOccurs="0"/>
|
||||
</xs:choice>
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="FeedType">
|
||||
<xs:sequence>
|
||||
<xs:choice minOccurs="3" maxOccurs="unbounded">
|
||||
<xs:element name="title" type="atom:TextType"/>
|
||||
<xs:element name="updated" type="atom:DateTimeType"/>
|
||||
<xs:element name="id" type="atom:IdType"/>
|
||||
<xs:element name="link" type="atom:LinkType"/>
|
||||
<xs:element name="author" type="atom:PersonType" maxOccurs="unbounded"/>
|
||||
<xs:element name="category" type="atom:CategoryType" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="entry" type="atom:EntryType"/>
|
||||
<xs:element ref="at:deleted-entry"/>
|
||||
<xs:element ref="os:totalResults"/>
|
||||
<xs:element ref="osr:score"/>
|
||||
</xs:choice>
|
||||
<xs:element ref="ds:Signature" minOccurs="0" maxOccurs="1"/>
|
||||
</xs:sequence>
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="EntryType">
|
||||
<xs:choice maxOccurs="unbounded">
|
||||
<xs:element name="title" type="atom:TextType"/>
|
||||
<xs:element name="link" type="atom:LinkType"/>
|
||||
<xs:element name="id" type="atom:IdType"/>
|
||||
<xs:element name="updated" type="atom:DateTimeType"/>
|
||||
<xs:element name="published" type="atom:DateTimeType" minOccurs="0"/>
|
||||
<xs:element name="author" type="atom:PersonType" maxOccurs="unbounded"/>
|
||||
<xs:element name="category" type="atom:CategoryType" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="content" type="atom:ContentType" minOccurs="0"/>
|
||||
<xs:element name="summary" type="atom:TextType"/>
|
||||
</xs:choice>
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="CategoryType">
|
||||
<xs:attribute name="term" type="xs:anyURI" use="required"/>
|
||||
<xs:attribute name="scheme" type="xs:anyURI" use="required"/>
|
||||
<xs:attribute name="label" type="xs:string" use="optional"/>
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="ContentType" mixed="true">
|
||||
<xs:choice>
|
||||
<xs:element ref="fhir:Alert"/>
|
||||
<xs:element ref="fhir:AllergyIntolerance"/>
|
||||
<xs:element ref="fhir:Appointment"/>
|
||||
<xs:element ref="fhir:AppointmentResponse"/>
|
||||
<xs:element ref="fhir:Basic"/>
|
||||
<xs:element ref="fhir:Binary"/>
|
||||
<xs:element ref="fhir:Bundle"/>
|
||||
<xs:element ref="fhir:CarePlan"/>
|
||||
<xs:element ref="fhir:CarePlan2"/>
|
||||
<xs:element ref="fhir:ClaimResponse"/>
|
||||
<xs:element ref="fhir:ClinicalAssessment"/>
|
||||
<xs:element ref="fhir:Communication"/>
|
||||
<xs:element ref="fhir:CommunicationRequest"/>
|
||||
<xs:element ref="fhir:Composition"/>
|
||||
<xs:element ref="fhir:ConceptMap"/>
|
||||
<xs:element ref="fhir:Condition"/>
|
||||
<xs:element ref="fhir:Conformance"/>
|
||||
<xs:element ref="fhir:Contract"/>
|
||||
<xs:element ref="fhir:Contraindication"/>
|
||||
<xs:element ref="fhir:Coverage"/>
|
||||
<xs:element ref="fhir:DataElement"/>
|
||||
<xs:element ref="fhir:Device"/>
|
||||
<xs:element ref="fhir:DeviceComponent"/>
|
||||
<xs:element ref="fhir:DeviceMetric"/>
|
||||
<xs:element ref="fhir:DeviceUseRequest"/>
|
||||
<xs:element ref="fhir:DeviceUseStatement"/>
|
||||
<xs:element ref="fhir:DiagnosticOrder"/>
|
||||
<xs:element ref="fhir:DiagnosticReport"/>
|
||||
<xs:element ref="fhir:DocumentManifest"/>
|
||||
<xs:element ref="fhir:DocumentReference"/>
|
||||
<xs:element ref="fhir:EligibilityRequest"/>
|
||||
<xs:element ref="fhir:EligibilityResponse"/>
|
||||
<xs:element ref="fhir:Encounter"/>
|
||||
<xs:element ref="fhir:EnrollmentRequest"/>
|
||||
<xs:element ref="fhir:EnrollmentResponse"/>
|
||||
<xs:element ref="fhir:EpisodeOfCare"/>
|
||||
<xs:element ref="fhir:ExplanationOfBenefit"/>
|
||||
<xs:element ref="fhir:ExtensionDefinition"/>
|
||||
<xs:element ref="fhir:FamilyHistory"/>
|
||||
<xs:element ref="fhir:Goal"/>
|
||||
<xs:element ref="fhir:Group"/>
|
||||
<xs:element ref="fhir:HealthcareService"/>
|
||||
<xs:element ref="fhir:ImagingObjectSelection"/>
|
||||
<xs:element ref="fhir:ImagingStudy"/>
|
||||
<xs:element ref="fhir:Immunization"/>
|
||||
<xs:element ref="fhir:ImmunizationRecommendation"/>
|
||||
<xs:element ref="fhir:InstitutionalClaim"/>
|
||||
<xs:element ref="fhir:List"/>
|
||||
<xs:element ref="fhir:Location"/>
|
||||
<xs:element ref="fhir:Media"/>
|
||||
<xs:element ref="fhir:Medication"/>
|
||||
<xs:element ref="fhir:MedicationAdministration"/>
|
||||
<xs:element ref="fhir:MedicationDispense"/>
|
||||
<xs:element ref="fhir:MedicationPrescription"/>
|
||||
<xs:element ref="fhir:MedicationStatement"/>
|
||||
<xs:element ref="fhir:MessageHeader"/>
|
||||
<xs:element ref="fhir:NamingSystem"/>
|
||||
<xs:element ref="fhir:NutritionOrder"/>
|
||||
<xs:element ref="fhir:Observation"/>
|
||||
<xs:element ref="fhir:OperationDefinition"/>
|
||||
<xs:element ref="fhir:OperationOutcome"/>
|
||||
<xs:element ref="fhir:OralHealthClaim"/>
|
||||
<xs:element ref="fhir:Order"/>
|
||||
<xs:element ref="fhir:OrderResponse"/>
|
||||
<xs:element ref="fhir:Organization"/>
|
||||
<xs:element ref="fhir:Other"/>
|
||||
<xs:element ref="fhir:Patient"/>
|
||||
<xs:element ref="fhir:PaymentNotice"/>
|
||||
<xs:element ref="fhir:PaymentReconciliation"/>
|
||||
<xs:element ref="fhir:PendedRequest"/>
|
||||
<xs:element ref="fhir:Person"/>
|
||||
<xs:element ref="fhir:PharmacyClaim"/>
|
||||
<xs:element ref="fhir:Practitioner"/>
|
||||
<xs:element ref="fhir:Procedure"/>
|
||||
<xs:element ref="fhir:ProcedureRequest"/>
|
||||
<xs:element ref="fhir:ProfessionalClaim"/>
|
||||
<xs:element ref="fhir:Profile"/>
|
||||
<xs:element ref="fhir:Provenance"/>
|
||||
<xs:element ref="fhir:Questionnaire"/>
|
||||
<xs:element ref="fhir:QuestionnaireAnswers"/>
|
||||
<xs:element ref="fhir:Readjudicate"/>
|
||||
<xs:element ref="fhir:ReferralRequest"/>
|
||||
<xs:element ref="fhir:RelatedPerson"/>
|
||||
<xs:element ref="fhir:Reversal"/>
|
||||
<xs:element ref="fhir:RiskAssessment"/>
|
||||
<xs:element ref="fhir:Schedule"/>
|
||||
<xs:element ref="fhir:SearchParameter"/>
|
||||
<xs:element ref="fhir:SecurityEvent"/>
|
||||
<xs:element ref="fhir:Slot"/>
|
||||
<xs:element ref="fhir:Specimen"/>
|
||||
<xs:element ref="fhir:StatusRequest"/>
|
||||
<xs:element ref="fhir:StatusResponse"/>
|
||||
<xs:element ref="fhir:Subscription"/>
|
||||
<xs:element ref="fhir:Substance"/>
|
||||
<xs:element ref="fhir:Supply"/>
|
||||
<xs:element ref="fhir:SupportingDocumentation"/>
|
||||
<xs:element ref="fhir:ValueSet"/>
|
||||
<xs:element ref="fhir:VisionClaim"/>
|
||||
<xs:element ref="fhir:VisionPrescription"/>
|
||||
|
||||
</xs:choice>
|
||||
<xs:attribute name="type" type="xs:string"/>
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="UriType">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:anyURI">
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="LinkType" mixed="true">
|
||||
<xs:attribute name="href" type="xs:anyURI" use="required"/>
|
||||
<xs:attribute name="rel" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="type" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="hreflang" type="xs:NMTOKEN" use="optional"/>
|
||||
<xs:attribute name="title" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="length" type="xs:positiveInteger" use="optional"/>
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="IdType">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:anyURI">
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="DateTimeType">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:dateTime">
|
||||
<xs:attributeGroup ref="atom:CommonAttributes"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
<xs:attributeGroup name="CommonAttributes">
|
||||
<xs:attribute ref="xml:base"/>
|
||||
<xs:attribute ref="xml:lang"/>
|
||||
</xs:attributeGroup>
|
||||
</xs:schema>
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,43 +1,63 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Goal
|
||||
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:*">
|
||||
<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>Goal</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Goal/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Goal/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Goal">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Goal/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Goal/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Goal/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Goal/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Goal/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Goal/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Goal/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Goal/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Goal/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Goal/f:concern">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Goal/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
<sch:rule context="f:Goal/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:Goal/f:concern">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,87 +1,98 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Group
|
||||
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:*">
|
||||
<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>Group</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Group/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Group/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Group">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Group/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Group/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Group/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group">
|
||||
<sch:assert test="f:actual/@value='true' or not(exists(f:member))">Inv-1: Can only have members if group is "actual"</sch:assert>
|
||||
<sch:assert test="not(f:quantity) or not(f:member) or not(f:quantity>count(f:member))">Inv-4: Can't have more members associated with the group than the value specified for "quantity"</sch:assert>
|
||||
<sch:rule context="f:Group/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Group/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Group">
|
||||
<sch:assert test="not(f:quantity) or not(f:member) or not(f:quantity>count(f:member))">grp-4: Can't have more members associated with the group than the value specified for "quantity"</sch:assert>
|
||||
<sch:assert test="f:actual/@value='true' or not(exists(f:member))">grp-1: Can only have members if group is "actual"</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Group/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Group/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:code/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Group/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:characteristic/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Group/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:characteristic/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Group/f:characteristic/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:characteristic/f:code/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Group/f:characteristic/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:characteristic/f:valueCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Group/f:characteristic/f:valueCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:characteristic/f:valueCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Group/f:characteristic/f:valueCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:characteristic/f:valueCodeableConcept/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Group/f:characteristic/f:valueQuantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:characteristic/f:valueQuantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:Group/f:characteristic/f:valueRange">
|
||||
<sch:assert test="not(exists(f:low/f:value/@value)) or not(exists(f:high/f:value/@value)) or (number(f:low/f:value/@value) <= number(f:high/f:value/@value))">rng-2: If present, low SHALL have a lower value than high</sch:assert>
|
||||
<sch:assert test="not(exists(f:low/f:comparator) or exists(f:high/f:comparator))">rng-3: Quantity values cannot have a comparator when used in a Range</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:characteristic/f:valueRange">
|
||||
<sch:assert test="not(exists(f:low/f:comparator) or exists(f:high/f:comparator))">Inv-3: Quantity values cannot have a comparator when used in a Range</sch:assert>
|
||||
<sch:assert test="not(exists(f:low/f:value/@value)) or not(exists(f:high/f:value/@value)) or (number(f:low/f:value/@value) <= number(f:high/f:value/@value))">Inv-2: If present, low SHALL have a lower value than high</sch:assert>
|
||||
<sch:rule context="f:Group/f:characteristic/f:valueRange/f:low">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:characteristic/f:valueRange/f:low">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:Group/f:characteristic/f:valueRange/f:high">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:characteristic/f:valueRange/f:high">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:Group/f:member">
|
||||
<sch:assert test="lower-case(f:type/@value)=parent::f:Group/f:type/@value or (f:type/@value='Patient' and parent::f:Group/f:type/@value=('animal','person'))">grp-3: Member resource types SHALL agree with group type</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:member">
|
||||
<sch:assert test="lower-case(f:type/@value)=parent::f:Group/f:type/@value or (f:type/@value='Patient' and parent::f:Group/f:type/@value=('animal','person'))">Inv-3: Member resource types SHALL agree with group type</sch:assert>
|
||||
<sch:rule context="f:Group/f:member">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Group/f:member">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,172 +1,150 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource HealthcareService
|
||||
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:*">
|
||||
<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>HealthcareService</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:HealthcareService">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:location">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:serviceCategory">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:serviceCategory/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:location">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:serviceCategory/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:serviceCategory">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:serviceType/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:serviceCategory/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:serviceType/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:serviceType/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:serviceType/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:serviceType/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:serviceType/f:specialty">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:serviceType/f:specialty">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:serviceType/f:specialty/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:serviceType/f:specialty/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:serviceType/f:specialty/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:freeProvisionCode">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:freeProvisionCode">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:freeProvisionCode/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:freeProvisionCode/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:eligibility">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:freeProvisionCode/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:eligibility/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:eligibility">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:appointmentRequired">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:eligibility/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:appointmentRequired/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:eligibility/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:availableTime/f:daysOfWeek">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:appointmentRequired">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:availableTime/f:daysOfWeek/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:appointmentRequired/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:contactPoint">
|
||||
<sch:assert test="not(exists(f:value)) or exists(f:system)">cpt-2: A system is required if a value is provided.</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:appointmentRequired/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:contactPoint/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:availableTime/f:daysOfWeek">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:characteristic">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:availableTime/f:daysOfWeek/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:characteristic/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:availableTime/f:daysOfWeek/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:referralMethod">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:contactPoint">
|
||||
<sch:assert test="not(exists(f:value)) or exists(f:system)">Inv-2: A system is required if a value is provided.</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:referralMethod/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:contactPoint/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:setting">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:characteristic">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:setting/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:characteristic/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:targetGroup">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:characteristic/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:targetGroup/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:referralMethod">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:coverageArea">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:referralMethod/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:coverageArea/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:referralMethod/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:catchmentArea">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:setting">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:catchmentArea/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:setting/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:serviceCode">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:setting/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:HealthcareService/f:serviceCode/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:targetGroup">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:targetGroup/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:targetGroup/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:coverageArea">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:coverageArea/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:coverageArea/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:catchmentArea">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:catchmentArea/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:catchmentArea/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:serviceCode">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:serviceCode/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:HealthcareService/f:serviceCode/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,49 +1,63 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource ImagingObjectSelection
|
||||
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:*">
|
||||
<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>ImagingObjectSelection</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:ImagingObjectSelection/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:ImagingObjectSelection/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ImagingObjectSelection">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImagingObjectSelection/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ImagingObjectSelection/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImagingObjectSelection/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingObjectSelection/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImagingObjectSelection/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingObjectSelection/f:title">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:ImagingObjectSelection/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingObjectSelection/f:title/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ImagingObjectSelection/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingObjectSelection/f:title/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImagingObjectSelection/f:title">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingObjectSelection/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImagingObjectSelection/f:title/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingObjectSelection/f:study/f:series/f:instance">
|
||||
<sch:assert test="f:retrieveAETitle or f:retrieveUrl">Inv-1: SHALL at least provide retrieve URL or retrieve AE Title</sch:assert>
|
||||
<sch:rule context="f:ImagingObjectSelection/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,70 +1,87 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource ImagingStudy
|
||||
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:*">
|
||||
<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>ImagingStudy</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingStudy/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingStudy/f:accession/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingStudy/f:accession/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingStudy/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:accession/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingStudy/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:accession/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingStudy/f:order">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingStudy/f:referrer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingStudy/f:procedure">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:order">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingStudy/f:procedure/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:referrer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingStudy/f:interpreter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:procedure">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingStudy/f:series/f:bodySite">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:interpreter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingStudy/f:series/f:bodySite/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:series/f:bodySite">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImagingStudy/f:series/f:instance/f:attachment">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImagingStudy/f:series/f:laterality">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
<sch:rule context="f:ImagingStudy/f:series/f:instance/f:content">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">att-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,133 +1,136 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Immunization
|
||||
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:*">
|
||||
<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>Immunization</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Immunization">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:vaccineType">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:vaccineType/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:vaccineType/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:vaccineType">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:vaccineType/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:performer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:requester">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:wasNotGiven">
|
||||
<sch:assert test="not(f:wasNotGiven/@value='false' and exists(f:explanation/f:reasonNotGiven))">imm-2: If immunization was administered (wasNotGiven=false) then explanation.reasonNotGiven SHALL be absent.</sch:assert>
|
||||
<sch:assert test="not(f:wasNotGiven/@value='true' and (count(f:reaction) > 0 or exists(f:explanation/reason)))">imm-1: If immunization was not administred (wasNotGiven=true) then there SHALL be no reaction nor explanation.reason present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:manufacturer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:performer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:location">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:requester">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:site">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:site/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:manufacturer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:site/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:location">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:route">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:site">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:route/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:site/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:route/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:route">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:doseQuantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:route/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:explanation/f:reason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:doseQuantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:explanation/f:reason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:explanation/f:reason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:explanation/f:reason/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:explanation/f:reason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:explanation/f:refusalReason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:explanation/f:reasonNotGiven">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:explanation/f:refusalReason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:explanation/f:reasonNotGiven/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:explanation/f:refusalReason/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:reaction/f:detail">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:reaction/f:detail">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:vaccinationProtocol/f:authority">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:vaccinationProtocol/f:authority">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:vaccinationProtocol/f:doseTarget">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:vaccinationProtocol/f:doseTarget">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:vaccinationProtocol/f:doseTarget/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:vaccinationProtocol/f:doseTarget/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:vaccinationProtocol/f:doseStatus">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:vaccinationProtocol/f:doseTarget/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:vaccinationProtocol/f:doseStatus/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:vaccinationProtocol/f:doseStatus">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:vaccinationProtocol/f:doseStatusReason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:vaccinationProtocol/f:doseStatus/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Immunization/f:vaccinationProtocol/f:doseStatusReason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:vaccinationProtocol/f:doseStatus/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:vaccinationProtocol/f:doseStatusReason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:vaccinationProtocol/f:doseStatusReason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Immunization/f:vaccinationProtocol/f:doseStatusReason/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,76 +1,87 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource ImmunizationRecommendation
|
||||
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:*">
|
||||
<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>ImmunizationRecommendation</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImmunizationRecommendation/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImmunizationRecommendation/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImmunizationRecommendation/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImmunizationRecommendation/f:recommendation/f:vaccineType">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImmunizationRecommendation/f:recommendation/f:vaccineType/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImmunizationRecommendation/f:recommendation/f:vaccineType/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:recommendation/f:vaccineType">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImmunizationRecommendation/f:recommendation/f:forecastStatus">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:recommendation/f:vaccineType/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImmunizationRecommendation/f:recommendation/f:forecastStatus/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:recommendation/f:forecastStatus">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImmunizationRecommendation/f:recommendation/f:forecastStatus/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:recommendation/f:forecastStatus/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImmunizationRecommendation/f:recommendation/f:dateCriterion/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:recommendation/f:dateCriterion/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImmunizationRecommendation/f:recommendation/f:dateCriterion/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:recommendation/f:dateCriterion/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImmunizationRecommendation/f:recommendation/f:dateCriterion/f:code/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:recommendation/f:protocol/f:authority">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImmunizationRecommendation/f:recommendation/f:protocol/f:authority">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:recommendation/f:supportingImmunization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImmunizationRecommendation/f:recommendation/f:supportingImmunization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:ImmunizationRecommendation/f:recommendation/f:supportingPatientInformation">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:ImmunizationRecommendation/f:recommendation/f:supportingPatientInformation">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,77 +1,94 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource List
|
||||
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:*">
|
||||
<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>List</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:List/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:List/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:List">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:List/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:List/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:List/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:List">
|
||||
<sch:assert test="(f:mode/@value = 'changes') or not(exists(f:entry/f:item/f:deleted))">Inv-2: The deleted flag can only be used if the mode of the list is "changes"</sch:assert>
|
||||
<sch:assert test="not(exists(f:emptyReason) and exists(f:entry))">Inv-1: A list can only have an emptyReason if it is empty</sch:assert>
|
||||
<sch:rule context="f:List/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:List/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:List/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:List/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:List">
|
||||
<sch:assert test="(f:mode/@value = 'changes') or not(exists(f:entry/f:item/f:deleted))">lst-2: The deleted flag can only be used if the mode of the list is "changes"</sch:assert>
|
||||
<sch:assert test="not(exists(f:emptyReason) and exists(f:entry))">lst-1: A list can only have an emptyReason if it is empty</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:List/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:List/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:List/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:List/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:List/f:code/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:List/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:List/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:List/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:List/f:source">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:List/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:List/f:entry/f:flag">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:List/f:source">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:List/f:entry/f:flag/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:List/f:orderedBy">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:List/f:entry/f:flag/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:List/f:orderedBy/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:List/f:entry/f:item">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:List/f:entry/f:flag">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:List/f:emptyReason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:List/f:entry/f:flag/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:List/f:emptyReason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:List/f:entry/f:item">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:List/f:emptyReason/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:List/f:emptyReason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
<sch:rule context="f:List/f:emptyReason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,70 +1,84 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Location
|
||||
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:*">
|
||||
<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>Location</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Location/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Location/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Location">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Location/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Location/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Location/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Location/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Location/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Location/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Location/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Location/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Location/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Location/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Location/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Location/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Location/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Location/f:telecom">
|
||||
<sch:assert test="not(exists(f:value)) or exists(f:system)">Inv-2: A system is required if a value is provided.</sch:assert>
|
||||
<sch:rule context="f:Location/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Location/f:telecom/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Location/f:telecom">
|
||||
<sch:assert test="not(exists(f:value)) or exists(f:system)">cpt-2: A system is required if a value is provided.</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Location/f:address/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Location/f:telecom/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Location/f:physicalType">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Location/f:address/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Location/f:physicalType/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Location/f:physicalType">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Location/f:physicalType/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Location/f:physicalType/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Location/f:managingOrganization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Location/f:managingOrganization">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Location/f:partOf">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Location/f:partOf">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,70 +1,84 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Media
|
||||
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:*">
|
||||
<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>Media</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Media/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Media/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Media">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Media/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Media/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Media/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Media">
|
||||
<sch:assert test="(f:type/@value='photo') or not(f:frames)">Inv-3: Frames can only be used for a photo</sch:assert>
|
||||
<sch:assert test="not(f:type/@value='audio') or not(f:width)">Inv-2: Width can only be used for a photo or video</sch:assert>
|
||||
<sch:assert test="not(f:type/@value='audio') or not(f:height)">Inv-1: Height can only be used for a photo or video</sch:assert>
|
||||
<sch:assert test="not(f:type/@value='photo') or not(f:length)">Inv-4: Length can only be used for an audio or a video</sch:assert>
|
||||
<sch:rule context="f:Media/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Media/f:subtype">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Media/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Media/f:subtype/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Media">
|
||||
<sch:assert test="not(f:type/@value='audio') or not(f:height)">mda-1: Height can only be used for a photo or video</sch:assert>
|
||||
<sch:assert test="not(f:type/@value='audio') or not(f:width)">mda-2: Width can only be used for a photo or video</sch:assert>
|
||||
<sch:assert test="not(f:type/@value='photo') or not(f:length)">mda-4: Length can only be used for an audio or a video</sch:assert>
|
||||
<sch:assert test="(f:type/@value='photo') or not(f:frames)">mda-3: Frames can only be used for a photo</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Media/f:subtype/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Media/f:subtype">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Media/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:Media/f:subtype/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Media/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Media/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Media/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Media/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Media/f:operator">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Media/f:subject">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Media/f:view">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Media/f:operator">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Media/f:view/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Media/f:view">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Media/f:view/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Media/f:view/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Media/f:content">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">Inv-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
<sch:rule context="f:Media/f:content">
|
||||
<sch:assert test="not(exists(f:data)) or exists(f:contentType)">att-1: It the Attachment has data, it SHALL have a contentType</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,79 +1,90 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource Medication
|
||||
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:*">
|
||||
<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>Medication</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:Medication/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:Medication/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Medication">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Medication/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Medication/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Medication/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Medication/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Medication/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Medication/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Medication/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Medication/f:code/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Medication/f:code">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Medication/f:manufacturer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Medication/f:code/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Medication/f:product/f:form">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Medication/f:manufacturer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Medication/f:product/f:form/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Medication/f:product/f:form">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Medication/f:product/f:form/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Medication/f:product/f:form/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Medication/f:product/f:ingredient/f:item">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Medication/f:product/f:ingredient/f:item">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Medication/f:product/f:ingredient/f:amount">
|
||||
<sch:assert test="count(f:numerator) = count(f:denominator)">Inv-1: numerator and denominator SHALL both be present, or both be absent</sch:assert>
|
||||
<sch:rule context="f:Medication/f:product/f:ingredient/f:amount">
|
||||
<sch:assert test="(count(f:numerator) = count(f:denominator)) and ((count(f:numerator) > 0) or (count(f:extension) > 0))">rat-1: numerator and denominator SHALL both be present, or both be absent. If both are absent, there SHALL be some extension present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Medication/f:product/f:ingredient/f:amount/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:Medication/f:product/f:ingredient/f:amount/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Medication/f:product/f:ingredient/f:amount/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:Medication/f:product/f:ingredient/f:amount/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Medication/f:package/f:container">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:Medication/f:package/f:container">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Medication/f:package/f:container/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:Medication/f:package/f:container/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Medication/f:package/f:container/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Medication/f:package/f:content/f:item">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Medication/f:package/f:content/f:item">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:Medication/f:package/f:content/f:amount">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:Medication/f:package/f:content/f:amount">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,133 +1,129 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource MedicationAdministration
|
||||
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:*">
|
||||
<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>MedicationAdministration</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration">
|
||||
<sch:assert test="not(exists(f:reasonNotGiven)) or f:wasNotGiven='true'">Inv-2: Reason not given is only permitted if wasNotGiven is true</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:practitioner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:practitioner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:prescription">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:reasonNotGiven">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:prescription">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:reasonNotGiven/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:reasonNotGiven">
|
||||
<sch:assert test="not(exists(f:reasonNotGiven) and f:wasNotGiven/@value='false')">mad-2: Reason not given is only permitted if wasNotGiven is true</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:reasonNotGiven/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:reasonNotGiven">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:effectiveTimePeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:reasonNotGiven/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:medication">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:reasonGiven">
|
||||
<sch:assert test="not(exists(f:reasonGiven) and f:wasNotGiven/@value='true')">mad-3: Reason given is only permitted if wasNotGiven is false</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:device">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:reasonGiven">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage">
|
||||
<sch:assert test="exists(f:quantity) or exists(f:rate)">Inv-1: SHALL have at least one of dosage.quantity and dosage.rate</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:reasonGiven/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:timingPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:effectiveTimePeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:asNeededCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:medication">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:asNeededCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:device">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:asNeededCodeableConcept/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:dosage">
|
||||
<sch:assert test="exists(f:quantity) or exists(f:rate)">mad-1: SHALL have at least one of dosage.quantity and dosage.rate</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:site">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:dosage/f:site">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:site/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:dosage/f:site/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:site/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:dosage/f:route">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:route">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:dosage/f:route/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:route/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:dosage/f:method">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:route/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:dosage/f:method/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:method">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:dosage/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:method/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:dosage/f:rate">
|
||||
<sch:assert test="(count(f:numerator) = count(f:denominator)) and ((count(f:numerator) > 0) or (count(f:extension) > 0))">rat-1: numerator and denominator SHALL both be present, or both be absent. If both are absent, there SHALL be some extension present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:method/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:dosage/f:rate/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationAdministration/f:dosage/f:rate/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:rate">
|
||||
<sch:assert test="count(f:numerator) = count(f:denominator)">Inv-1: numerator and denominator SHALL both be present, or both be absent</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:rate/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:rate/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:maxDosePerPeriod">
|
||||
<sch:assert test="count(f:numerator) = count(f:denominator)">Inv-1: numerator and denominator SHALL both be present, or both be absent</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:maxDosePerPeriod/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationAdministration/f:dosage/f:maxDosePerPeriod/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,179 +1,185 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource MedicationDispense
|
||||
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:*">
|
||||
<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>MedicationDispense</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense">
|
||||
<sch:assert test="not(exists(f:whenHandedOver/@value)) or not(exists(f:whenPrepared/@value)) or ( f:whenHandedOver/@value >= f:whenPrepared/@value)">mdd-1: whenHandedOver cannot be before whenPrepared</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispenser">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:authorizingPrescription">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense">
|
||||
<sch:assert test="not(exists(f:whenHandedOver/@value)) or not(exists(f:whenPrepared/@value)) or ( f:whenHandedOver/@value >= f:whenPrepared/@value)">Inv-1: whenHandedOver cannot be before whenPrepared</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dispenser">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:authorizingPrescription">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:daysSupply">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:medication">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:medication">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:destination">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:destination">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:receiver">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:receiver">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:additionalInstructions">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:additionalInstructions">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:additionalInstructions/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:additionalInstructions/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:additionalInstructions/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:schedulePeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:schedulePeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:scheduleTiming/f:repeat">
|
||||
<sch:assert test="not(exists(f:frequency)) or not(exists(f:when))">tim-3: Either frequency or when can exist, not both</sch:assert>
|
||||
<sch:assert test="not(exists(f:duration)) or exists(f:durationUnits)">tim-1: if there's a duration, there needs to be duration units</sch:assert>
|
||||
<sch:assert test="not(exists(f:period)) or exists(f:periodUnits)">tim-2: if there's a period, there needs to be duration units</sch:assert>
|
||||
<sch:assert test="not(exists(f:periodMax)) or exists(period)">tim-6: If there's a periodMax, there must be a period</sch:assert>
|
||||
<sch:assert test="not(exists(f:durationMax)) or exists(duration)">tim-7: If there's a durationMax, there must be a duration</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:scheduleTiming">
|
||||
<sch:assert test="not(exists(f:repeat)) or count(f:event) < 2">Inv-1: There can only be a repeat element if there is none or one event</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:scheduleTiming/f:repeat/f:bounds">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:scheduleTiming/f:event">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:scheduleTiming/f:repeat/f:duration">
|
||||
<sch:assert test="@value >= 0 or not(@value)">tim-4: duration SHALL be a non-negative value</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:scheduleTiming/f:repeat">
|
||||
<sch:assert test="not(exists(f:count) and exists(f:end))">Inv-3: At most, only one of count or end can be present</sch:assert>
|
||||
<sch:assert test="exists(f:frequency) != exists(f:when)">Inv-2: Either frequency or when SHALL be present, but not both</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:scheduleTiming/f:repeat/f:period">
|
||||
<sch:assert test="@value >= 0 or not(@value)">tim-5: period SHALL be a non-negative value</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:scheduleTiming/f:repeat/f:duration">
|
||||
<sch:assert test="@value > 0 or not(@value)">Inv-4: duration SHALL be a positive value</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:asNeededCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:asNeededCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:asNeededCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:asNeededCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:site">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:asNeededCodeableConcept/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:site/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:site">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:route">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:site/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:route/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:site/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:method">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:route">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:method/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:route/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:doseRange">
|
||||
<sch:assert test="not(exists(f:low/f:value/@value)) or not(exists(f:high/f:value/@value)) or (number(f:low/f:value/@value) <= number(f:high/f:value/@value))">rng-2: If present, low SHALL have a lower value than high</sch:assert>
|
||||
<sch:assert test="not(exists(f:low/f:comparator) or exists(f:high/f:comparator))">rng-3: Quantity values cannot have a comparator when used in a Range</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:route/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:doseRange/f:low">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:method">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:doseRange/f:high">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:method/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:doseQuantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:method/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:rate">
|
||||
<sch:assert test="(count(f:numerator) = count(f:denominator)) and ((count(f:numerator) > 0) or (count(f:extension) > 0))">rat-1: numerator and denominator SHALL both be present, or both be absent. If both are absent, there SHALL be some extension present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:rate/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:rate">
|
||||
<sch:assert test="count(f:numerator) = count(f:denominator)">Inv-1: numerator and denominator SHALL both be present, or both be absent</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:rate/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:rate/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:maxDosePerPeriod">
|
||||
<sch:assert test="(count(f:numerator) = count(f:denominator)) and ((count(f:numerator) > 0) or (count(f:extension) > 0))">rat-1: numerator and denominator SHALL both be present, or both be absent. If both are absent, there SHALL be some extension present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:rate/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:maxDosePerPeriod/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:maxDosePerPeriod">
|
||||
<sch:assert test="count(f:numerator) = count(f:denominator)">Inv-1: numerator and denominator SHALL both be present, or both be absent</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:dosageInstruction/f:maxDosePerPeriod/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:maxDosePerPeriod/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:substitution/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:dispense/f:dosage/f:maxDosePerPeriod/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:substitution/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:substitution/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:substitution/f:reason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:substitution/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:substitution/f:reason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:substitution/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationDispense/f:substitution/f:responsibleParty">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:substitution/f:reason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:substitution/f:reason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:substitution/f:reason/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationDispense/f:substitution/f:responsibleParty">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,173 +1,182 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource MedicationPrescription
|
||||
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:*">
|
||||
<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>MedicationPrescription</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:prescriber">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:reasonCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:prescriber">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:reasonCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:encounter">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:reasonCodeableConcept/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:reasonCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:reasonReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:reasonCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:medication">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:reasonReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:additionalInstructions">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:medication">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:additionalInstructions/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:additionalInstructions">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:additionalInstructions/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:additionalInstructions/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:scheduledPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:scheduledPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:scheduledTiming">
|
||||
<sch:assert test="not(exists(f:repeat)) or count(f:event) < 2">Inv-1: There can only be a repeat element if there is none or one event</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:scheduledTiming/f:repeat">
|
||||
<sch:assert test="not(exists(f:frequency)) or not(exists(f:when))">tim-3: Either frequency or when can exist, not both</sch:assert>
|
||||
<sch:assert test="not(exists(f:duration)) or exists(f:durationUnits)">tim-1: if there's a duration, there needs to be duration units</sch:assert>
|
||||
<sch:assert test="not(exists(f:period)) or exists(f:periodUnits)">tim-2: if there's a period, there needs to be duration units</sch:assert>
|
||||
<sch:assert test="not(exists(f:periodMax)) or exists(period)">tim-6: If there's a periodMax, there must be a period</sch:assert>
|
||||
<sch:assert test="not(exists(f:durationMax)) or exists(duration)">tim-7: If there's a durationMax, there must be a duration</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:scheduledTiming/f:event">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:scheduledTiming/f:repeat/f:bounds">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:scheduledTiming/f:repeat">
|
||||
<sch:assert test="not(exists(f:count) and exists(f:end))">Inv-3: At most, only one of count or end can be present</sch:assert>
|
||||
<sch:assert test="exists(f:frequency) != exists(f:when)">Inv-2: Either frequency or when SHALL be present, but not both</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:scheduledTiming/f:repeat/f:duration">
|
||||
<sch:assert test="@value >= 0 or not(@value)">tim-4: duration SHALL be a non-negative value</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:scheduledTiming/f:repeat/f:duration">
|
||||
<sch:assert test="@value > 0 or not(@value)">Inv-4: duration SHALL be a positive value</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:scheduledTiming/f:repeat/f:period">
|
||||
<sch:assert test="@value >= 0 or not(@value)">tim-5: period SHALL be a non-negative value</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:asNeededCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:asNeededCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:asNeededCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:asNeededCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:asNeededCodeableConcept/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:site">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:site">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:site/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:site/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:route">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:site/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:route/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:route">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:method">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:route/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:method/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:route/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:doseRange">
|
||||
<sch:assert test="not(exists(f:low/f:value/@value)) or not(exists(f:high/f:value/@value)) or (number(f:low/f:value/@value) <= number(f:high/f:value/@value))">rng-2: If present, low SHALL have a lower value than high</sch:assert>
|
||||
<sch:assert test="not(exists(f:low/f:comparator) or exists(f:high/f:comparator))">rng-3: Quantity values cannot have a comparator when used in a Range</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:method">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:doseRange/f:low">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:method/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:doseRange/f:high">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:method/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:doseQuantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:doseQuantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:rate">
|
||||
<sch:assert test="(count(f:numerator) = count(f:denominator)) and ((count(f:numerator) > 0) or (count(f:extension) > 0))">rat-1: numerator and denominator SHALL both be present, or both be absent. If both are absent, there SHALL be some extension present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:rate">
|
||||
<sch:assert test="count(f:numerator) = count(f:denominator)">Inv-1: numerator and denominator SHALL both be present, or both be absent</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:rate/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:rate/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:rate/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:rate/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:maxDosePerPeriod">
|
||||
<sch:assert test="(count(f:numerator) = count(f:denominator)) and ((count(f:numerator) > 0) or (count(f:extension) > 0))">rat-1: numerator and denominator SHALL both be present, or both be absent. If both are absent, there SHALL be some extension present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:maxDosePerPeriod">
|
||||
<sch:assert test="count(f:numerator) = count(f:denominator)">Inv-1: numerator and denominator SHALL both be present, or both be absent</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:maxDosePerPeriod/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:maxDosePerPeriod/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dosageInstruction/f:maxDosePerPeriod/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dosageInstruction/f:maxDosePerPeriod/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dispense/f:medication">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dispense/f:medication">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dispense/f:validityPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dispense/f:validityPeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dispense/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dispense/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:dispense/f:expectedSupplyDuration">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:dispense/f:expectedSupplyDuration">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:substitution/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:substitution/f:type">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:substitution/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:substitution/f:type/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:substitution/f:reason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:substitution/f:type/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationPrescription/f:substitution/f:reason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:substitution/f:reason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:substitution/f:reason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationPrescription/f:substitution/f:reason/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,131 +1,154 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource MedicationStatement
|
||||
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:*">
|
||||
<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>MedicationStatement</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement">
|
||||
<sch:assert test="not(exists(f:reasonNotGiven)) or f:wasNotGiven='true'">Inv-1: Reason not given is only permitted if wasNotGiven is true</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:identifier/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:identifier/f:assigner">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:reasonNotGiven">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:patient">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:reasonNotGiven/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:informationSource">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:reasonNotGiven/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:reasonNotGiven">
|
||||
<sch:assert test="not(exists(f:reasonNotGiven) and f:wasNotGiven/@value='false')">mst-1: Reason not given is only permitted if wasNotGiven is true</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:whenGiven">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:reasonNotGiven">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:medication">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:reasonNotGiven/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:device">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:reasonForUseCodeableConcept">
|
||||
<sch:assert test="not(exists(f:reasonForUse[x]) and f:wasNotGiven/@value='true')">mst-2: Reason for use is only permitted if wasNotGiven is false</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:schedule">
|
||||
<sch:assert test="not(exists(f:repeat)) or count(f:event) < 2">Inv-1: There can only be a repeat element if there is none or one event</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:reasonForUseCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:schedule/f:event">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:reasonForUseCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:schedule/f:repeat">
|
||||
<sch:assert test="not(exists(f:count) and exists(f:end))">Inv-3: At most, only one of count or end can be present</sch:assert>
|
||||
<sch:assert test="exists(f:frequency) != exists(f:when)">Inv-2: Either frequency or when SHALL be present, but not both</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:reasonForUseReference">
|
||||
<sch:assert test="not(exists(f:reasonForUse[x]) and f:wasNotGiven/@value='true')">mst-2: Reason for use is only permitted if wasNotGiven is false</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:schedule/f:repeat/f:duration">
|
||||
<sch:assert test="@value > 0 or not(@value)">Inv-4: duration SHALL be a positive value</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:reasonForUseReference">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:asNeededCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:effectivePeriod">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:asNeededCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:medication">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:asNeededCodeableConcept/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:schedule/f:repeat">
|
||||
<sch:assert test="not(exists(f:frequency)) or not(exists(f:when))">tim-3: Either frequency or when can exist, not both</sch:assert>
|
||||
<sch:assert test="not(exists(f:duration)) or exists(f:durationUnits)">tim-1: if there's a duration, there needs to be duration units</sch:assert>
|
||||
<sch:assert test="not(exists(f:period)) or exists(f:periodUnits)">tim-2: if there's a period, there needs to be duration units</sch:assert>
|
||||
<sch:assert test="not(exists(f:periodMax)) or exists(period)">tim-6: If there's a periodMax, there must be a period</sch:assert>
|
||||
<sch:assert test="not(exists(f:durationMax)) or exists(duration)">tim-7: If there's a durationMax, there must be a duration</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:site">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:schedule/f:repeat/f:bounds">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:site/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:schedule/f:repeat/f:duration">
|
||||
<sch:assert test="@value >= 0 or not(@value)">tim-4: duration SHALL be a non-negative value</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:site/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:schedule/f:repeat/f:period">
|
||||
<sch:assert test="@value >= 0 or not(@value)">tim-5: period SHALL be a non-negative value</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:route">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:asNeededCodeableConcept">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:route/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:asNeededCodeableConcept/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:route/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:site">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:method">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:site/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:method/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:route">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:method/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:route/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:method">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:rate">
|
||||
<sch:assert test="count(f:numerator) = count(f:denominator)">Inv-1: numerator and denominator SHALL both be present, or both be absent</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:method/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:rate/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:quantity">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:rate/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:rate">
|
||||
<sch:assert test="(count(f:numerator) = count(f:denominator)) and ((count(f:numerator) > 0) or (count(f:extension) > 0))">rat-1: numerator and denominator SHALL both be present, or both be absent. If both are absent, there SHALL be some extension present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:maxDosePerPeriod">
|
||||
<sch:assert test="count(f:numerator) = count(f:denominator)">Inv-1: numerator and denominator SHALL both be present, or both be absent</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:rate/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:maxDosePerPeriod/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:rate/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MedicationStatement/f:dosage/f:maxDosePerPeriod/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">Inv-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:maxDosePerPeriod">
|
||||
<sch:assert test="(count(f:numerator) = count(f:denominator)) and ((count(f:numerator) > 0) or (count(f:extension) > 0))">rat-1: numerator and denominator SHALL both be present, or both be absent. If both are absent, there SHALL be some extension present</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:maxDosePerPeriod/f:numerator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="f:MedicationStatement/f:dosage/f:maxDosePerPeriod/f:denominator">
|
||||
<sch:assert test="not(exists(f:code)) or exists(f:system)">qty-3: If a code for the units is present, the system SHALL also be present</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
@ -1,73 +1,87 @@
|
||||
<?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="a" uri="http://www.w3.org/2005/Atom"/>
|
||||
<sch:ns prefix="h" uri="http://www.w3.org/1999/xhtml"/>
|
||||
<!--
|
||||
This file contains just the constraints for the resource MessageHeader
|
||||
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:*">
|
||||
<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>MessageHeader</sch:title>
|
||||
<sch:rule context="/f:DomainResource">
|
||||
<sch:assert test="exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))])">Inv-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">Inv-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">Inv-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:text/f:div">
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">Inv-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">Inv-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">Inv-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MessageHeader">
|
||||
<sch:assert test="not(exists(f:contained/f:meta/f:versionId)) and not(exists(f:contained/f:meta/f:lastUpdated))">dom-4: If a resource is contained in another resource, it SHALL not have a meta.versionId or a meta.lastUpdated</sch:assert>
|
||||
<sch:assert test="not(exists(for $id in f:contained/*/@id return $id[not(ancestor::f:contained/parent::*/descendant::f:reference/@value=concat('#', $id))]))">dom-3: If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:contained)">dom-2: If the resource is contained in another resource, it SHALL not contain nested Resources</sch:assert>
|
||||
<sch:assert test="not(parent::f:contained and f:text)">dom-1: If the resource is contained in another resource, it SHALL not contain any narrative</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:security/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:text/f:div">
|
||||
<sch:assert test="descendant::text()[normalize-space(.)!=''] or descendant::h:img[@src]">txt-2: The narrative SHALL have some non-whitespace content</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*[not(local-name(.)=('a', 'abbr', 'acronym', 'b', 'big', 'blockquote', 'br', 'caption', 'cite', 'code', 'colgroup', 'dd', 'dfn', 'div', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p', 'pre', 'q', 'samp', 'small', 'span', 'strong', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'tt', 'ul', 'var'))])">txt-1: The narrative SHALL contain only the basic html formatting elements described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
<sch:assert test="not(descendant-or-self::*/@*[not(name(.)=('abbr', 'accesskey', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellhalign', 'cellpadding', 'cellspacing', 'cellvalign', 'char', 'charoff', 'charset', 'cite', 'class', 'colspan', 'compact', 'coords', 'dir', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'lang', 'longdesc', 'name', 'nowrap', 'rel', 'rev', 'rowspan', 'rules', 'scope', 'shape', 'span', 'src', 'start', 'style', 'summary', 'tabindex', 'title', 'type', 'valign', 'value', 'vspace', 'width'))])">txt-3: The narrative SHALL contain only the basic html formatting attributes described in chapters 7-11 (except section 4 of chapter 9) and 15 of the HTML 4.0 standard, <a> elements (either name or href), images and internally contained style attributes</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:DomainResource/f:contained/f:meta/f:tag/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MessageHeader/f:event">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:contained/f:meta/f:security">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MessageHeader/f:event/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:contained/f:meta/f:tag">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MessageHeader/f:response/f:details">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:event">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MessageHeader/f:source/f:contact">
|
||||
<sch:assert test="not(exists(f:value)) or exists(f:system)">Inv-2: A system is required if a value is provided.</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:response/f:details">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MessageHeader/f:source/f:contact/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">Inv-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:source/f:contact">
|
||||
<sch:assert test="not(exists(f:value)) or exists(f:system)">cpt-2: A system is required if a value is provided.</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MessageHeader/f:destination/f:target">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:source/f:contact/f:period">
|
||||
<sch:assert test="not(exists(f:start)) or not(exists(f:end)) or (f:start/@value <= f:end/@value)">per-1: If present, start SHALL have a lower value than end</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MessageHeader/f:enterer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:destination/f:target">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MessageHeader/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:enterer">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MessageHeader/f:receiver">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:author">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MessageHeader/f:responsible">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:receiver">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MessageHeader/f:reason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">Inv-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:responsible">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MessageHeader/f:reason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">Inv-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:reason">
|
||||
<sch:assert test="count(f:coding[f:primary/@value='true'])<=1">ccc-2: Only one coding in a set can be chosen directly by the user</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MessageHeader/f:reason/f:coding/f:valueSet">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:reason/f:coding">
|
||||
<sch:assert test="not (exists(f:valueSet) and exists(f:code)) or exists(f:system)">cod-1: If a valueSet is provided, a system URI Is required</sch:assert>
|
||||
</sch:rule>
|
||||
<sch:rule context="/f:MessageHeader/f:data">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::a:content/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')]|/f:*/f:contained/f:*[f:id/@value=substring-after(current()/f:reference/@value, '#')])">Inv-1: SHALL have a local reference if the resource is provided inline</sch:assert>
|
||||
<sch:rule context="f:MessageHeader/f:data">
|
||||
<sch:assert test="not(starts-with(f:reference/@value, '#')) or exists(ancestor::f:entry/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 local reference if the resource is provided inline</sch:assert>
|
||||
</sch:rule>
|
||||
</sch:pattern>
|
||||
</sch:pattern>
|
||||
</sch:schema>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user