public static SchemaAttribute CreateComplexAttribute(
     string name,
     string description,
     List <SchemaAttribute> subAttributes,
     string type              = Common.Constants.SchemaAttributeTypes.String,
     bool multiValued         = false,
     bool required            = false,
     bool caseExact           = false,
     string mutability        = Common.Constants.SchemaAttributeMutability.ReadWrite,
     string returned          = Common.Constants.SchemaAttributeReturned.Default,
     string uniqueness        = Common.Constants.SchemaAttributeUniqueness.None,
     string[] referenceTypes  = null,
     string[] canonicalValues = null,
     bool isCommon            = false)
 {
     return(new SchemaAttribute
     {
         Id = Guid.NewGuid().ToString(),
         Name = name,
         MultiValued = multiValued,
         Description = description,
         Required = required,
         CaseExact = caseExact,
         Mutability = mutability,
         Returned = returned,
         Uniqueness = uniqueness,
         ReferenceTypes = MappingExtensions.ConcatList(referenceTypes),
         CanonicalValues = MappingExtensions.ConcatList(canonicalValues),
         Children = subAttributes,
         IsCommon = isCommon,
         Type = Common.Constants.SchemaAttributeTypes.Complex
     });
 }