private bool IsValidRestriction(XmlSchemaParticle derivedParticle, XmlSchemaParticle baseParticle) {
if (derivedParticle == baseParticle) {
return true;
}
else if (derivedParticle == null || derivedParticle == XmlSchemaParticle.Empty) {
return IsParticleEmptiable(baseParticle);
}
else if (baseParticle == null || baseParticle == XmlSchemaParticle.Empty) {
return false;
}
if (baseParticle is XmlSchemaElement) {
if (derivedParticle is XmlSchemaElement) {
return IsElementFromElement((XmlSchemaElement)derivedParticle, (XmlSchemaElement)baseParticle);
}
else {
return false;
}
}
else if (baseParticle is XmlSchemaAny) {
if (derivedParticle is XmlSchemaElement) {
return IsElementFromAny((XmlSchemaElement)derivedParticle, (XmlSchemaAny)baseParticle);
}
else if (derivedParticle is XmlSchemaAny) {
return IsAnyFromAny((XmlSchemaAny)derivedParticle, (XmlSchemaAny)baseParticle);
}
else {
return IsGroupBaseFromAny((XmlSchemaGroupBase)derivedParticle, (XmlSchemaAny)baseParticle);
}
}
else if (baseParticle is XmlSchemaAll) {
if (derivedParticle is XmlSchemaElement) {
return IsElementFromGroupBase((XmlSchemaElement)derivedParticle, (XmlSchemaGroupBase)baseParticle, true);
}
else if (derivedParticle is XmlSchemaAll) {
return IsGroupBaseFromGroupBase((XmlSchemaGroupBase)derivedParticle, (XmlSchemaGroupBase)baseParticle, true);
}
else if (derivedParticle is XmlSchemaSequence) {
return IsSequenceFromAll((XmlSchemaSequence)derivedParticle, (XmlSchemaAll)baseParticle);
}
}
else if (baseParticle is XmlSchemaChoice ) {
if (derivedParticle is XmlSchemaElement) {
return IsElementFromGroupBase((XmlSchemaElement)derivedParticle, (XmlSchemaGroupBase)baseParticle, false);
}
else if (derivedParticle is XmlSchemaChoice) {
return IsGroupBaseFromGroupBase((XmlSchemaGroupBase)derivedParticle, (XmlSchemaGroupBase)baseParticle, false);
}
else if (derivedParticle is XmlSchemaSequence) {
return IsSequenceFromChoice((XmlSchemaSequence)derivedParticle, (XmlSchemaChoice)baseParticle);
}
}
else if (baseParticle is XmlSchemaSequence) {
if (derivedParticle is XmlSchemaElement) {
return IsElementFromGroupBase((XmlSchemaElement)derivedParticle, (XmlSchemaGroupBase)baseParticle, true);
}
else if (derivedParticle is XmlSchemaSequence) {
return IsGroupBaseFromGroupBase((XmlSchemaGroupBase)derivedParticle, (XmlSchemaGroupBase)baseParticle, true);
}
}
else {
Debug.Assert(false);
}
return false;
}