private void Prepare() { foreach (XmlSchemaElement element in this.schema.Elements.Values) { if (!element.SubstitutionGroup.IsEmpty) { XmlSchemaSubstitutionGroup substitutionGroup = (XmlSchemaSubstitutionGroup)this.examplars[element.SubstitutionGroup]; if (substitutionGroup == null) { substitutionGroup = new XmlSchemaSubstitutionGroupV1Compat(); substitutionGroup.Examplar = element.SubstitutionGroup; examplars.Add(element.SubstitutionGroup, substitutionGroup); } ArrayList members = substitutionGroup.Members; Debug.Assert(!members.Contains(element)); members.Add(element); } } }
private void Prepare() { foreach (XmlSchemaElement element in this.schema.Elements.Values) { if (!element.SubstitutionGroup.IsEmpty) { XmlSchemaSubstitutionGroup group = (XmlSchemaSubstitutionGroup) this.examplars[element.SubstitutionGroup]; if (group == null) { group = new XmlSchemaSubstitutionGroupV1Compat { Examplar = element.SubstitutionGroup }; this.examplars.Add(element.SubstitutionGroup, group); } group.Members.Add(element); } } }
private void CompileSubstitutionGroup(XmlSchemaSubstitutionGroupV1Compat substitutionGroup) { if (substitutionGroup.IsProcessing && (substitutionGroup.Members.Count > 0)) { base.SendValidationEvent("Sch_SubstitutionCircularRef", (XmlSchemaElement) substitutionGroup.Members[0]); } else { XmlSchemaElement item = (XmlSchemaElement) this.schema.Elements[substitutionGroup.Examplar]; if (!substitutionGroup.Members.Contains(item)) { substitutionGroup.IsProcessing = true; if (item != null) { if (item.FinalResolved == XmlSchemaDerivationMethod.All) { base.SendValidationEvent("Sch_InvalidExamplar", item); } for (int i = 0; i < substitutionGroup.Members.Count; i++) { XmlSchemaElement element2 = (XmlSchemaElement) substitutionGroup.Members[i]; XmlSchemaSubstitutionGroupV1Compat compat = (XmlSchemaSubstitutionGroupV1Compat) this.examplars[element2.QualifiedName]; if (compat != null) { this.CompileSubstitutionGroup(compat); for (int j = 0; j < compat.Choice.Items.Count; j++) { substitutionGroup.Choice.Items.Add(compat.Choice.Items[j]); } } else { substitutionGroup.Choice.Items.Add(element2); } } substitutionGroup.Choice.Items.Add(item); substitutionGroup.Members.Add(item); } else if (substitutionGroup.Members.Count > 0) { base.SendValidationEvent("Sch_NoExamplar", (XmlSchemaElement) substitutionGroup.Members[0]); } substitutionGroup.IsProcessing = false; } } }
private void CompileSubstitutionGroup(XmlSchemaSubstitutionGroupV1Compat substitutionGroup) { if (substitutionGroup.IsProcessing && substitutionGroup.Members.Count > 0) { SendValidationEvent(Res.Sch_SubstitutionCircularRef, (XmlSchemaElement)substitutionGroup.Members[0]); return; } XmlSchemaElement examplar = (XmlSchemaElement)this.schema.Elements[substitutionGroup.Examplar]; if (substitutionGroup.Members.Contains(examplar)) {// already checked return; } substitutionGroup.IsProcessing = true; if (examplar != null) { if (examplar.FinalResolved == XmlSchemaDerivationMethod.All) { SendValidationEvent(Res.Sch_InvalidExamplar, examplar); } for (int i = 0; i < substitutionGroup.Members.Count; ++i) { XmlSchemaElement element = (XmlSchemaElement)substitutionGroup.Members[i]; //Chain to other head's that are members of this head's substGroup XmlSchemaSubstitutionGroupV1Compat g = (XmlSchemaSubstitutionGroupV1Compat)examplars[element.QualifiedName]; if (g != null) { CompileSubstitutionGroup(g); for (int j = 0; j < g.Choice.Items.Count; ++j) { substitutionGroup.Choice.Items.Add(g.Choice.Items[j]); } } else { substitutionGroup.Choice.Items.Add(element); } } substitutionGroup.Choice.Items.Add(examplar); substitutionGroup.Members.Add(examplar); // Compiled mark } else if (substitutionGroup.Members.Count > 0) { SendValidationEvent(Res.Sch_NoExamplar, (XmlSchemaElement)substitutionGroup.Members[0]); } substitutionGroup.IsProcessing = false; }