/// <summary> /// Load the particle constraint from the specified data in binary database. /// </summary> /// <param name="sdbSchemaTpye">The data in binary database.</param> /// <returns>The particle constraint in ParticleConstraint.</returns> private ParticleConstraint BuildParticleConstraint(SdbSchemaType sdbSchemaTpye) { Debug.Assert(sdbSchemaTpye != null); if (sdbSchemaTpye.IsCompositeType) { var particleConstraint = BuildParticleConstraint(sdbSchemaTpye.ParticleIndex); Debug.Assert(particleConstraint.ParticleType == ParticleType.All || particleConstraint.ParticleType == ParticleType.Any || particleConstraint.ParticleType == ParticleType.Choice || particleConstraint.ParticleType == ParticleType.Sequence || particleConstraint.ParticleType == ParticleType.Group); // <xsd:group ref="..." /> is valid under <xsd:complexType> Debug.Assert(particleConstraint.ElementId == SdbData.InvalidId); return(particleConstraint); } return(null); }
/// <summary> /// Load the attribute constraints and simple type constraint for attributes for the schema type. /// </summary> /// <param name="sdbSchemaTpye"></param> /// <returns></returns> private AttributeConstraint[] BuildAttributeConstraint(SdbSchemaType sdbSchemaTpye) { Debug.Assert(sdbSchemaTpye != null); if (sdbSchemaTpye.AttributesCount > 0) { int count = sdbSchemaTpye.AttributesCount; var attributeConstraints = new AttributeConstraint[count]; SdbIndex sdbIndex = sdbSchemaTpye.StartIndexOfAttributes; for (int i = 0; i < count; i++) { var sdbAttributeData = this.SdbAttributes[sdbIndex + i]; // then load the simple type constraint for this attribute var simpleTypeIndex = sdbAttributeData.SimpleTypeIndex; var simpleTypeConstraint = this.SimpleTypeRestrictions[simpleTypeIndex]; attributeConstraints[i] = new AttributeConstraint(sdbAttributeData.AttributeUse, simpleTypeConstraint, (FileFormatVersions)(sdbAttributeData.FileFormatVersion)); } return(attributeConstraints); } return(null); }