private static XmlSchemaComplexType CreateAnyType(XmlSchemaContentProcessing processContents) { XmlSchemaComplexType type = new XmlSchemaComplexType(); type.SetQualifiedName(DatatypeImplementation.QnAnyType); XmlSchemaAny item = new XmlSchemaAny { MinOccurs = 0M, MaxOccurs = 79228162514264337593543950335M, ProcessContents = processContents }; item.BuildNamespaceList(null); XmlSchemaSequence sequence = new XmlSchemaSequence(); sequence.Items.Add(item); type.SetContentTypeParticle(sequence); type.SetContentType(XmlSchemaContentType.Mixed); type.ElementDecl = SchemaElementDecl.CreateAnyTypeElementDecl(); type.ElementDecl.SchemaType = type; ParticleContentValidator validator = new ParticleContentValidator(XmlSchemaContentType.Mixed); validator.Start(); validator.OpenGroup(); validator.AddNamespaceList(item.NamespaceList, item); validator.AddStar(); validator.CloseGroup(); ContentValidator validator2 = validator.Finish(true); type.ElementDecl.ContentValidator = validator2; XmlSchemaAnyAttribute attribute = new XmlSchemaAnyAttribute { ProcessContents = processContents }; attribute.BuildNamespaceList(null); type.SetAttributeWildcard(attribute); type.ElementDecl.AnyAttribute = attribute; return type; }
private void BuildParticleContentModel(ParticleContentValidator contentValidator, XmlSchemaParticle particle) { if (particle is XmlSchemaElement) { XmlSchemaElement element = (XmlSchemaElement) particle; contentValidator.AddName(element.QualifiedName, element); } else if (particle is XmlSchemaAny) { XmlSchemaAny any = (XmlSchemaAny) particle; contentValidator.AddNamespaceList(any.NamespaceList, any); } else if (particle is XmlSchemaGroupBase) { XmlSchemaObjectCollection items = ((XmlSchemaGroupBase) particle).Items; bool flag = particle is XmlSchemaChoice; contentValidator.OpenGroup(); bool flag2 = true; for (int i = 0; i < items.Count; i++) { XmlSchemaParticle particle2 = (XmlSchemaParticle) items[i]; if (flag2) { flag2 = false; } else if (flag) { contentValidator.AddChoice(); } else { contentValidator.AddSequence(); } this.BuildParticleContentModel(contentValidator, particle2); } contentValidator.CloseGroup(); } if ((particle.MinOccurs != 1M) || (particle.MaxOccurs != 1M)) { if ((particle.MinOccurs == 0M) && (particle.MaxOccurs == 1M)) { contentValidator.AddQMark(); } else if ((particle.MinOccurs == 0M) && (particle.MaxOccurs == 79228162514264337593543950335M)) { contentValidator.AddStar(); } else if ((particle.MinOccurs == 1M) && (particle.MaxOccurs == 79228162514264337593543950335M)) { contentValidator.AddPlus(); } else { contentValidator.AddLeafRange(particle.MinOccurs, particle.MaxOccurs); } } }
private static XmlSchemaComplexType CreateAnyType(XmlSchemaContentProcessing processContents) { XmlSchemaComplexType localAnyType = new XmlSchemaComplexType(); localAnyType.SetQualifiedName(DatatypeImplementation.QnAnyType); XmlSchemaAny anyElement = new XmlSchemaAny(); anyElement.MinOccurs = decimal.Zero; anyElement.MaxOccurs = decimal.MaxValue; anyElement.ProcessContents = processContents; anyElement.BuildNamespaceList(null); XmlSchemaSequence seq = new XmlSchemaSequence(); seq.Items.Add(anyElement); localAnyType.SetContentTypeParticle(seq); localAnyType.SetContentType(XmlSchemaContentType.Mixed); localAnyType.ElementDecl = SchemaElementDecl.CreateAnyTypeElementDecl(); localAnyType.ElementDecl.SchemaType = localAnyType; //Create contentValidator for Any ParticleContentValidator contentValidator = new ParticleContentValidator(XmlSchemaContentType.Mixed); contentValidator.Start(); contentValidator.OpenGroup(); contentValidator.AddNamespaceList(anyElement.NamespaceList !, anyElement); contentValidator.AddStar(); contentValidator.CloseGroup(); ContentValidator anyContentValidator = contentValidator.Finish(true); localAnyType.ElementDecl.ContentValidator = anyContentValidator; XmlSchemaAnyAttribute anyAttribute = new XmlSchemaAnyAttribute(); anyAttribute.ProcessContents = processContents; anyAttribute.BuildNamespaceList(null); localAnyType.SetAttributeWildcard(anyAttribute); localAnyType.ElementDecl.AnyAttribute = anyAttribute; return(localAnyType); }
private static XmlSchemaComplexType CreateAnyType(XmlSchemaContentProcessing processContents) { XmlSchemaComplexType localAnyType = new XmlSchemaComplexType(); localAnyType.SetQualifiedName(DatatypeImplementation.QnAnyType); XmlSchemaAny anyElement = new XmlSchemaAny(); anyElement.MinOccurs = decimal.Zero; anyElement.MaxOccurs = decimal.MaxValue; anyElement.ProcessContents = processContents; anyElement.BuildNamespaceList(null); XmlSchemaSequence seq = new XmlSchemaSequence(); seq.Items.Add(anyElement); localAnyType.SetContentTypeParticle(seq); localAnyType.SetContentType(XmlSchemaContentType.Mixed); localAnyType.ElementDecl = SchemaElementDecl.CreateAnyTypeElementDecl(); localAnyType.ElementDecl.SchemaType = localAnyType; //Create contentValidator for Any ParticleContentValidator contentValidator = new ParticleContentValidator(XmlSchemaContentType.Mixed); contentValidator.Start(); contentValidator.OpenGroup(); contentValidator.AddNamespaceList(anyElement.NamespaceList, anyElement); contentValidator.AddStar(); contentValidator.CloseGroup(); ContentValidator anyContentValidator = contentValidator.Finish(true); localAnyType.ElementDecl.ContentValidator = anyContentValidator; XmlSchemaAnyAttribute anyAttribute = new XmlSchemaAnyAttribute(); anyAttribute.ProcessContents = processContents; anyAttribute.BuildNamespaceList(null); localAnyType.SetAttributeWildcard(anyAttribute); localAnyType.ElementDecl.AnyAttribute = anyAttribute; return localAnyType; }
private void ParseElementMixedContent(ParticleContentValidator pcv, int startParenEntityId) { bool hasNames = false; int connectorEntityId = -1; int contentEntityId = _currentEntityId; for (;;) { switch (GetToken(false)) { case Token.RightParen: pcv.CloseGroup(); if (_validate && _currentEntityId != startParenEntityId) { SendValidationEvent(_curPos, XmlSeverityType.Error, SR.Sch_ParEntityRefNesting, string.Empty); } if (GetToken(false) == Token.Star && hasNames) { pcv.AddStar(); } else if (hasNames) { ThrowUnexpectedToken(_curPos, "*"); } return; case Token.Or: if (!hasNames) { hasNames = true; } else { pcv.AddChoice(); } if (_validate) { connectorEntityId = _currentEntityId; if (contentEntityId < connectorEntityId) { // entity repl.text starting with connector SendValidationEvent(_curPos, XmlSeverityType.Error, SR.Sch_ParEntityRefNesting, string.Empty); } } if (GetToken(false) != Token.QName) { goto default; } XmlQualifiedName name = GetNameQualified(true); if (pcv.Exists(name) && _validate) { SendValidationEvent(XmlSeverityType.Error, SR.Sch_DupElement, name.ToString()); } pcv.AddName(name, null); if (_validate) { contentEntityId = _currentEntityId; if (contentEntityId < connectorEntityId) { // entity repl.text ending with connector SendValidationEvent(_curPos, XmlSeverityType.Error, SR.Sch_ParEntityRefNesting, string.Empty); } } continue; default: OnUnexpectedError(); break; } } }
private void ParseHowMany(ParticleContentValidator pcv) { switch (GetToken(false)) { case Token.Star: pcv.AddStar(); return; case Token.QMark: pcv.AddQMark(); return; case Token.Plus: pcv.AddPlus(); return; default: return; } }
private static void HandleMinMax(ParticleContentValidator pContent, uint cMin, uint cMax) { if (pContent != null) { if (cMax == uint.MaxValue) { if (cMin == 0) pContent.AddStar(); // minOccurs="0" and maxOccurs="infinite" else pContent.AddPlus(); // minOccurs="1" and maxOccurs="infinite" } else if (cMin == 0) { // minOccurs="0" and maxOccurs="1") pContent.AddQMark(); } } }
private bool BuildParticleContentModel(ParticleContentValidator contentValidator, XmlSchemaParticle particle) { bool hasWildCard = false; if (particle is XmlSchemaElement) { XmlSchemaElement element = (XmlSchemaElement)particle; contentValidator.AddName(element.QualifiedName, element); } else if (particle is XmlSchemaAny) { hasWildCard = true; XmlSchemaAny any = (XmlSchemaAny)particle; contentValidator.AddNamespaceList(any.NamespaceList, any); } else if (particle is XmlSchemaGroupBase) { XmlSchemaObjectCollection particles = ((XmlSchemaGroupBase)particle).Items; bool isChoice = particle is XmlSchemaChoice; contentValidator.OpenGroup(); bool first = true; for (int i = 0; i < particles.Count; ++i) { Debug.Assert(!((XmlSchemaParticle)particles[i]).IsEmpty); if (first) { first = false; } else if (isChoice) { contentValidator.AddChoice(); } else { contentValidator.AddSequence(); } hasWildCard = BuildParticleContentModel(contentValidator, (XmlSchemaParticle)particles[i]); } contentValidator.CloseGroup(); } else { Debug.Assert(false); } if (particle.MinOccurs == decimal.One && particle.MaxOccurs == decimal.One) { // nothing } else if (particle.MinOccurs == decimal.Zero && particle.MaxOccurs == decimal.One) { contentValidator.AddQMark(); } else if (particle.MinOccurs == decimal.Zero && particle.MaxOccurs == decimal.MaxValue) { contentValidator.AddStar(); } else if (particle.MinOccurs == decimal.One && particle.MaxOccurs == decimal.MaxValue) { contentValidator.AddPlus(); } else { contentValidator.AddLeafRange(particle.MinOccurs, particle.MaxOccurs); } return hasWildCard; }
private async Task ParseHowManyAsync( ParticleContentValidator pcv ) { switch ( await GetTokenAsync( false ).ConfigureAwait(false) ) { case Token.Star: pcv.AddStar(); return; case Token.QMark: pcv.AddQMark(); return; case Token.Plus: pcv.AddPlus(); return; default: return; } }
private static void HandleMinMax(ParticleContentValidator pContent, uint cMin, uint cMax) { if (pContent != null) { if (cMax == uint.MaxValue) { if (cMin == 0) { pContent.AddStar(); } else { pContent.AddPlus(); } } else if (cMin == 0) { pContent.AddQMark(); } } }
private void BuildParticleContentModel(ParticleContentValidator contentValidator, XmlSchemaParticle particle) { if (particle is XmlSchemaElement) { XmlSchemaElement element = (XmlSchemaElement)particle; contentValidator.AddName(element.QualifiedName, element); } else if (particle is XmlSchemaAny) { XmlSchemaAny any = (XmlSchemaAny)particle; contentValidator.AddNamespaceList(any.NamespaceList, any); } else if (particle is XmlSchemaGroupBase) { XmlSchemaObjectCollection particles = ((XmlSchemaGroupBase)particle).Items; bool isChoice = particle is XmlSchemaChoice; contentValidator.OpenGroup(); bool first = true; foreach (XmlSchemaParticle p in particles) { Debug.Assert(!p.IsEmpty); if (first) { first = false; } else if (isChoice) { contentValidator.AddChoice(); } else { contentValidator.AddSequence(); } BuildParticleContentModel(contentValidator, p); } contentValidator.CloseGroup(); } else { Debug.Assert(false); } if (particle.MinOccurs == decimal.One && particle.MaxOccurs == decimal.One) { // nothing } else if (particle.MinOccurs == decimal.Zero && particle.MaxOccurs == decimal.One) { contentValidator.AddQMark(); } else if (particle.MinOccurs == decimal.Zero && particle.MaxOccurs == decimal.MaxValue) { contentValidator.AddStar(); } else if (particle.MinOccurs == decimal.One && particle.MaxOccurs == decimal.MaxValue) { contentValidator.AddPlus(); } else { contentValidator.AddLeafRange(particle.MinOccurs, particle.MaxOccurs); } }