public void PrimitiveChildMatching() { var boolean = _source.FindStructureDefinitionForCoreType(FHIRDefinedType.Boolean); var boolDefNav = ElementDefinitionNavigator.ForSnapshot(boolean); boolDefNav.MoveToFirstChild(); var data = ElementNode.Valued("active", true, FHIRDefinedType.Boolean.GetLiteral(), ElementNode.Node("extension", ElementNode.Valued("value", 4, "integer")), ElementNode.Node("nonExistant") ).ToNavigator(); var matches = ChildNameMatcher.Match(boolDefNav, data); Assert.AreEqual(1, matches.UnmatchedInstanceElements.Count); Assert.AreEqual(3, matches.Matches.Count()); // id, extension, value Assert.AreEqual(0, matches.Matches[0].InstanceElements.Count()); // id Assert.AreEqual(1, matches.Matches[1].InstanceElements.Count()); // extension Assert.AreEqual(1, matches.Matches[2].InstanceElements.Count()); // value Assert.AreEqual("extension", matches.Matches[1].InstanceElements.First().Name); Assert.AreEqual("extension", matches.Matches[1].Definition.PathName); Assert.AreEqual("active", matches.Matches[2].InstanceElements.First().Name); Assert.AreEqual("value", matches.Matches[2].Definition.PathName); }
internal static OperationOutcome ValidateChildConstraints(this Validator validator, ElementDefinitionNavigator definition, ScopedNode instance, bool allowAdditionalChildren) { var outcome = new OperationOutcome(); if (!definition.HasChildren) { return(outcome); } validator.Trace(outcome, "Start validation of inlined child constraints for '{0}'".FormatWith(definition.Path), Issue.PROCESSING_PROGRESS, instance); var matchResult = ChildNameMatcher.Match(definition, instance); if (matchResult.UnmatchedInstanceElements.Any() && !allowAdditionalChildren) { var elementList = String.Join(",", matchResult.UnmatchedInstanceElements.Select(e => "'" + e.Name + "'")); validator.Trace(outcome, $"Encountered unknown child elements {elementList} for definition '{definition.Path}'", Issue.CONTENT_ELEMENT_HAS_UNKNOWN_CHILDREN, instance); } //TODO: Give warnings for out-of order children. Really? That's an xml artifact, no such thing in Json! //(with the serializationrepresentationnav we could determine the source is xml and make order matter....) // Recursively validate my children foreach (var match in matchResult.Matches) { outcome.Add(validator.ValidateMatch(match, instance)); } return(outcome); }
public void NameMatching() { var data = ElementNode.Valued("active", true, FHIRDefinedType.Boolean.GetLiteral()).ToNavigator(); Assert.IsTrue(ChildNameMatcher.NameMatches("active", data)); Assert.IsTrue(ChildNameMatcher.NameMatches("activeBoolean", data)); Assert.IsFalse(ChildNameMatcher.NameMatches("activeDateTime", data)); Assert.IsTrue(ChildNameMatcher.NameMatches("active[x]", data)); Assert.IsFalse(ChildNameMatcher.NameMatches("activate", data)); }