Change validator so root resource id is not in the same space as all other ids
This commit is contained in:
parent
3e49000188
commit
7400263b86
|
@ -695,10 +695,10 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
||||||
|
|
||||||
long t = System.nanoTime();
|
long t = System.nanoTime();
|
||||||
if (profiles == null || profiles.isEmpty()) {
|
if (profiles == null || profiles.isEmpty()) {
|
||||||
validateResource(new ValidatorHostContext(appContext, element), errors, element, element, null, resourceIdRule, new NodeStack(context, element, validationLanguage));
|
validateResource(new ValidatorHostContext(appContext, element), errors, element, element, null, resourceIdRule, new NodeStack(context, element, validationLanguage).resetIds());
|
||||||
} else {
|
} else {
|
||||||
for (StructureDefinition defn : profiles) {
|
for (StructureDefinition defn : profiles) {
|
||||||
validateResource(new ValidatorHostContext(appContext, element), errors, element, element, defn, resourceIdRule, new NodeStack(context, element, validationLanguage));
|
validateResource(new ValidatorHostContext(appContext, element), errors, element, element, defn, resourceIdRule, new NodeStack(context, element, validationLanguage).resetIds());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (hintAboutNonMustSupport) {
|
if (hintAboutNonMustSupport) {
|
||||||
|
@ -3953,7 +3953,9 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
||||||
if (stack.getIds().containsKey(id) && stack.getIds().get(id) != element) {
|
if (stack.getIds().containsKey(id) && stack.getIds().get(id) != element) {
|
||||||
rule(errors, IssueType.BUSINESSRULE, element.line(), element.col(), stack.getLiteralPath(), false, I18nConstants.DUPLICATE_ID, id);
|
rule(errors, IssueType.BUSINESSRULE, element.line(), element.col(), stack.getLiteralPath(), false, I18nConstants.DUPLICATE_ID, id);
|
||||||
}
|
}
|
||||||
stack.getIds().put(id, element);
|
if (!stack.isResetPoint()) {
|
||||||
|
stack.getIds().put(id, element);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (definition.getPath().equals("StructureDefinition.snapshot")) {
|
if (definition.getPath().equals("StructureDefinition.snapshot")) {
|
||||||
// work around a known issue in the spec, that idsa are duplicated in snapshot and differential
|
// work around a known issue in the spec, that idsa are duplicated in snapshot and differential
|
||||||
|
|
|
@ -26,6 +26,7 @@ public class NodeStack {
|
||||||
private ElementDefinition type;
|
private ElementDefinition type;
|
||||||
private String workingLang;
|
private String workingLang;
|
||||||
private Map<String, Element> ids;
|
private Map<String, Element> ids;
|
||||||
|
private boolean resetPoint = false;
|
||||||
|
|
||||||
public NodeStack(IWorkerContext context) {
|
public NodeStack(IWorkerContext context) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
@ -147,6 +148,7 @@ public class NodeStack {
|
||||||
|
|
||||||
public NodeStack resetIds() {
|
public NodeStack resetIds() {
|
||||||
ids = new HashMap<>();
|
ids = new HashMap<>();
|
||||||
|
resetPoint = true;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public Map<String, Element> getIds() {
|
public Map<String, Element> getIds() {
|
||||||
|
@ -178,5 +180,9 @@ public class NodeStack {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isResetPoint() {
|
||||||
|
return resetPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
2
pom.xml
2
pom.xml
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<hapi_fhir_version>4.2.0</hapi_fhir_version>
|
<hapi_fhir_version>4.2.0</hapi_fhir_version>
|
||||||
<validator_test_case_version>1.1.4-SNAPSHOT</validator_test_case_version>
|
<validator_test_case_version>1.1.5-SNAPSHOT</validator_test_case_version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<artifactId>org.hl7.fhir.core</artifactId>
|
<artifactId>org.hl7.fhir.core</artifactId>
|
||||||
|
|
Loading…
Reference in New Issue