internal override XmlSchemaParticle GetOptimizedParticle(bool isTop) { if (OptimizedParticle != null) { return(OptimizedParticle); } if (Items.Count == 0 || ValidatedMaxOccurs == 0) { OptimizedParticle = XmlSchemaParticle.Empty; return(OptimizedParticle); } else if (Items.Count == 1) { if (ValidatedMinOccurs == 1 && ValidatedMaxOccurs == 1) { XmlSchemaSequence seq = new XmlSchemaSequence(); this.CopyInfo(seq); XmlSchemaParticle p = (XmlSchemaParticle)Items [0]; p = p.GetOptimizedParticle(false); if (p == XmlSchemaParticle.Empty) { OptimizedParticle = p; } else { seq.Items.Add(p); seq.CompiledItems.Add(p); seq.Compile(null, schema); OptimizedParticle = seq; } return(OptimizedParticle); } } XmlSchemaAll all = new XmlSchemaAll(); CopyInfo(all); CopyOptimizedItems(all); OptimizedParticle = all; all.ComputeEmptiable(); return(OptimizedParticle); }
internal override XmlSchemaParticle GetOptimizedParticle(bool isTop) { if (this.OptimizedParticle != null) { return(this.OptimizedParticle); } if (this.Items.Count == 0 || base.ValidatedMaxOccurs == 0m) { this.OptimizedParticle = XmlSchemaParticle.Empty; return(this.OptimizedParticle); } if (this.Items.Count == 1 && base.ValidatedMinOccurs == 1m && base.ValidatedMaxOccurs == 1m) { XmlSchemaSequence xmlSchemaSequence = new XmlSchemaSequence(); this.CopyInfo(xmlSchemaSequence); XmlSchemaParticle xmlSchemaParticle = (XmlSchemaParticle)this.Items[0]; xmlSchemaParticle = xmlSchemaParticle.GetOptimizedParticle(false); if (xmlSchemaParticle == XmlSchemaParticle.Empty) { this.OptimizedParticle = xmlSchemaParticle; } else { xmlSchemaSequence.Items.Add(xmlSchemaParticle); xmlSchemaSequence.CompiledItems.Add(xmlSchemaParticle); xmlSchemaSequence.Compile(null, this.schema); this.OptimizedParticle = xmlSchemaSequence; } return(this.OptimizedParticle); } XmlSchemaAll xmlSchemaAll = new XmlSchemaAll(); this.CopyInfo(xmlSchemaAll); base.CopyOptimizedItems(xmlSchemaAll); this.OptimizedParticle = xmlSchemaAll; xmlSchemaAll.ComputeEmptiable(); return(this.OptimizedParticle); }
private void CollectContentTypeFromComplexExtension (ValidationEventHandler h, XmlSchema schema) { XmlSchemaComplexContentExtension cce = (XmlSchemaComplexContentExtension) ContentModel.Content; XmlSchemaComplexType baseComplexType = this.BaseXmlSchemaType as XmlSchemaComplexType; if (baseComplexType != null) baseComplexType.CollectSchemaComponent (h ,schema); // It must exist, but consider validation error case. if (BaseSchemaTypeName == XmlSchemaComplexType.AnyTypeName) baseComplexType = XmlSchemaComplexType.AnyType; // On error case, it simple reject any contents if (baseComplexType == null) { validatableParticle = XmlSchemaParticle.Empty; resolvedContentType = XmlSchemaContentType.Empty; return; } // 3.4.2 complex content {content type} if (cce.Particle == null || cce.Particle == XmlSchemaParticle.Empty) { // - 2.1 if (baseComplexType == null) { // Basically it is an error. Considering ValidationEventHandler. validatableParticle = XmlSchemaParticle.Empty; resolvedContentType = XmlSchemaContentType.Empty; } else { validatableParticle = baseComplexType.ValidatableParticle; resolvedContentType = baseComplexType.resolvedContentType; // Bug #501814 if (resolvedContentType == XmlSchemaContentType.Empty) resolvedContentType = GetComplexContentType (contentModel); } } else if (baseComplexType.validatableParticle == XmlSchemaParticle.Empty || baseComplexType == XmlSchemaComplexType.AnyType) { // - 2.2 validatableParticle = cce.Particle; resolvedContentType = GetComplexContentType (contentModel); } else { // - 2.3 : create a new sequences that merges both contents. XmlSchemaSequence seq = new XmlSchemaSequence (); this.CopyInfo (seq); seq.Items.Add (baseComplexType.validatableParticle); seq.Items.Add (cce.Particle); seq.Compile (h, schema); seq.Validate (h, schema); validatableParticle = seq; resolvedContentType = GetComplexContentType (contentModel); } if (validatableParticle == null) validatableParticle = XmlSchemaParticle.Empty; }
internal override XmlSchemaParticle GetOptimizedParticle (bool isTop) { if (OptimizedParticle != null) return OptimizedParticle; if (Items.Count == 0 || ValidatedMaxOccurs == 0) { OptimizedParticle = XmlSchemaParticle.Empty; return OptimizedParticle; } else if (Items.Count == 1) { if (ValidatedMinOccurs == 1 && ValidatedMaxOccurs == 1) { XmlSchemaSequence seq = new XmlSchemaSequence (); this.CopyInfo (seq); XmlSchemaParticle p = (XmlSchemaParticle) Items [0]; p = p.GetOptimizedParticle (false); if (p == XmlSchemaParticle.Empty) OptimizedParticle = p; else { seq.Items.Add (p); seq.CompiledItems.Add (p); seq.Compile (null, schema); OptimizedParticle = seq; } return OptimizedParticle; } } XmlSchemaAll all = new XmlSchemaAll (); CopyInfo (all); CopyOptimizedItems (all); OptimizedParticle = all; all.ComputeEmptiable (); return OptimizedParticle; }