private void PreprocessLocalElement(XmlSchemaElement element) {
if (element.Name != null) { // name
ValidateNameAttribute(element);
PreprocessElementContent(element);
element.SetQualifiedName(new XmlQualifiedName(element.Name, (element.Form == XmlSchemaForm.Qualified || (element.Form == XmlSchemaForm.None && this.elementFormDefault == XmlSchemaForm.Qualified))? this.targetNamespace : null));
}
else { // ref
PreprocessAnnotation(element); //Check annotation child for ref and set parent
if (element.RefName.IsEmpty) {
SendValidationEvent(Res.Sch_ElementNameRef, element);
}
else {
ValidateQNameAttribute(element, "ref", element.RefName);
}
if (!element.SchemaTypeName.IsEmpty ||
element.HasAbstractAttribute ||
element.Block != XmlSchemaDerivationMethod.None ||
element.SchemaType != null ||
element.HasConstraints ||
element.DefaultValue != null ||
element.Form != XmlSchemaForm.None ||
element.FixedValue != null ||
element.HasNillableAttribute) {
SendValidationEvent(Res.Sch_InvalidElementRef, element);
}
if (element.DefaultValue != null && element.FixedValue != null) {
SendValidationEvent(Res.Sch_DefaultFixedAttributes, element);
}
element.SetQualifiedName(element.RefName);
}
if (element.MinOccurs > element.MaxOccurs) {
element.MinOccurs = decimal.Zero;
SendValidationEvent(Res.Sch_MinGtMax, element);
}
if(element.HasAbstractAttribute) {
SendValidationEvent(Res.Sch_ForbiddenAttribute, "abstract", element);
}
if (element.Final != XmlSchemaDerivationMethod.None) {
SendValidationEvent(Res.Sch_ForbiddenAttribute, "final", element);
}
if (!element.SubstitutionGroup.IsEmpty) {
SendValidationEvent(Res.Sch_ForbiddenAttribute, "substitutionGroup", element);
}
ValidateIdAttribute(element);
}