fix bugs in v1.4 validation

This commit is contained in:
Grahame Grieve 2019-12-30 10:25:05 +11:00
parent 5e27541288
commit 91cf756386
2 changed files with 23 additions and 3 deletions

View File

@ -414,6 +414,18 @@ public class NpmPackage {
return res;
}
/**
* use the name from listResources()
*
* @param id
* @return
* @throws IOException
*/
public InputStream loadResource(String file) throws IOException {
NpmPackageFolder folder = folders.get("package");
return new ByteArrayInputStream(folder.fetchFile(file));
}
/**
* get a stream that contains the contents of one of the files in a folder
*

View File

@ -1908,7 +1908,9 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
if (type.equals("uri") || type.equals("oid") || type.equals("uuid") || type.equals("url") || type.equals("canonical")) {
rule(errors, IssueType.INVALID, e.line(), e.col(), path, !e.primitiveValue().startsWith("oid:"), "URI values cannot start with oid:");
rule(errors, IssueType.INVALID, e.line(), e.col(), path, !e.primitiveValue().startsWith("uuid:"), "URI values cannot start with uuid:");
rule(errors, IssueType.INVALID, e.line(), e.col(), path, e.primitiveValue().equals(e.primitiveValue().trim().replace(" ", "")), "URI values cannot have whitespace");
rule(errors, IssueType.INVALID, e.line(), e.col(), path, e.primitiveValue().equals(e.primitiveValue().trim().replace(" ", ""))
// work around an old invalid example in a core package
&& !"http://www.acme.com/identifiers/patient or urn:ietf:rfc:3986 if the Identifier.value itself is a full uri".equals(e.primitiveValue()), "URI values cannot have whitespace('"+e.primitiveValue()+"')");
rule(errors, IssueType.INVALID, e.line(), e.col(), path, !context.hasMaxLength() || context.getMaxLength()==0 || e.primitiveValue().length() <= context.getMaxLength(), "value is longer than permitted maximum length of " + context.getMaxLength());
@ -1932,8 +1934,11 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
}
}
if (type.equals("id")) {
// work around an old issue with ElementDefinition.id
if (!context.getPath().equals("ElementDefinition.id") && !VersionUtilities.versionsCompatible("1.4", this.context.getVersion())) {
rule(errors, IssueType.INVALID, e.line(), e.col(), path, FormatUtilities.isValidId(e.primitiveValue()), "id value '"+e.primitiveValue()+"' is not valid");
}
}
if (type.equalsIgnoreCase("string") && e.hasPrimitiveValue()) {
if (rule(errors, IssueType.INVALID, e.line(), e.col(), path, e.primitiveValue() == null || e.primitiveValue().length() > 0, "@value cannot be empty")) {
warning(errors, IssueType.INVALID, e.line(), e.col(), path, e.primitiveValue() == null || e.primitiveValue().trim().equals(e.primitiveValue()), "value should not start or finish with whitespace");
@ -2194,6 +2199,9 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
warning(errors, IssueType.STRUCTURE, element.line(), element.col(), path, !Utilities.noString(element.getNamedChildValue("display")), "A Reference without an actual reference or identifier should have a display");
}
return;
} else if (Utilities.existsInList(ref, "http://tools.ietf.org/html/bcp47")) {
// special known URLs that can't be validated but are known to be valid
return;
}
Element we = localResolve(ref, stack, errors, path);
@ -3596,7 +3604,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
else if (itemType.equals("string")) checkOption(errors, answer, ns, qsrc, qItem, "string", true);
}
break;
case QUESTION:
// case QUESTION:
case NULL:
// no validation
break;