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); }