internal virtual Exception CheckLexicalFacets(ref string parsedString, object value, NameTable nameTable, XNamespaceResolver resolver, SimpleTypeValidator type)
        {
            RestrictionFacets facets = type.RestrictionFacets;

            if (facets == null || !facets.HasLexicalFacets)
            {
                return(null);
            }

            RestrictionFlags    flags     = facets.Flags;
            XmlSchemaWhiteSpace wsPattern = XmlSchemaWhiteSpace.Collapse;


            if ((flags & RestrictionFlags.WhiteSpace) != 0)
            {
                if (facets.WhiteSpace == XmlSchemaWhiteSpace.Collapse)
                {
                    wsPattern = XmlSchemaWhiteSpace.Collapse;
                }
                else if (facets.WhiteSpace == XmlSchemaWhiteSpace.Preserve)
                {
                    wsPattern = XmlSchemaWhiteSpace.Preserve;
                }
            }


            return(CheckLexicalFacets(ref parsedString, type, facets.Patterns, wsPattern));
        }
 internal virtual Exception CheckLexicalFacets(ref string parsedString,
                                               SimpleTypeValidator type,
                                               ArrayList patterns,
                                               XmlSchemaWhiteSpace wsPattern)
 {
     CheckWhitespaceFacets(ref parsedString, type, wsPattern);
     return(CheckPatternFacets(patterns, parsedString));
 }
Esempio n. 3
0
        internal void CheckWhitespaceFacets(ref string s,
                                            SimpleTypeValidator type,
                                            XmlSchemaWhiteSpace wsPattern)
        {
            // before parsing, check whitespace facet
            RestrictionFacets restriction = type.RestrictionFacets;

            if (type.Variety == XmlSchemaDatatypeVariety.List)
            {
                s = s.Trim();
                return;
            }
            else if (type.Variety == XmlSchemaDatatypeVariety.Atomic)
            {
                XmlSchemaDatatype datatype = type.DataType;
                if (datatype.GetBuiltInWSFacet() == XmlSchemaWhiteSpace.Collapse)
                {
                    s = XmlComplianceUtil.NonCDataNormalize(s);
                }
                else if (datatype.GetBuiltInWSFacet() == XmlSchemaWhiteSpace.Replace)
                {
                    s = XmlComplianceUtil.CDataNormalize(s);
                }
                else if (restriction != null & (restriction.Flags & RestrictionFlags.WhiteSpace) != 0)
                {
                    //Restriction has whitespace facet specified
                    if (restriction.WhiteSpace == XmlSchemaWhiteSpace.Replace)
                    {
                        s = XmlComplianceUtil.CDataNormalize(s);
                    }
                    else if (restriction.WhiteSpace == XmlSchemaWhiteSpace.Collapse)
                    {
                        s = XmlComplianceUtil.NonCDataNormalize(s);
                    }
                }
            }

            return;
        }
Esempio n. 4
0
       public RestrictionFacets(RestrictionFlags flags,
                                object[] enumeration,
                                int fractionDigits,
                                int length,
                                object maxExclusive,
                                object maxInclusive,
                                int maxLength,
                                object minExclusive,
                                object minInclusive,
                                int minLength,
                                string[] patterns,
                                int totalDigits,
                                XmlSchemaWhiteSpace whiteSpace)
       {
            hasValueFacets = false;
            hasLexicalFacets = false;
           if ((flags & RestrictionFlags.Enumeration) != 0) {
               this.Enumeration = new ArrayList();
               foreach(object o in enumeration) {
                   this.Enumeration.Add(o);
               }
               hasValueFacets = true;
           }
           if ((flags & RestrictionFlags.FractionDigits) != 0) {
               this.FractionDigits = fractionDigits;
               hasValueFacets = true;
           }
           if ((flags & RestrictionFlags.Length) != 0) {
               this.Length = length;
               hasValueFacets = true;
           }
           if ((flags & RestrictionFlags.MaxExclusive) != 0) {
               this.MaxExclusive = maxExclusive;
               hasValueFacets = true;
           }
           if ((flags & RestrictionFlags.MaxInclusive) != 0) {
               this.MaxInclusive = maxInclusive;
               hasValueFacets = true;
           }
           if ((flags & RestrictionFlags.MaxLength) != 0) {
               this.MaxLength = maxLength;
               hasValueFacets = true;
           }
           if ((flags & RestrictionFlags.MinExclusive) != 0) {
               this.MinExclusive = minExclusive;
               hasValueFacets = true;
           }
           if ((flags & RestrictionFlags.MinInclusive) != 0) {
               this.MinInclusive = minInclusive;
               hasValueFacets = true;
           }
           if ((flags & RestrictionFlags.MinLength) != 0) {
               this.MinLength = minLength;
               hasValueFacets = true;
           }
           if ((flags & RestrictionFlags.Pattern) != 0) {
               CompilePatterns(patterns);
               hasLexicalFacets = true;
           }
           if ((flags & RestrictionFlags.TotalDigits) != 0) {
               this.TotalDigits = totalDigits;
               hasValueFacets = true;
           }
           if ((flags & RestrictionFlags.WhiteSpace) != 0) {
               hasLexicalFacets = true;
               this.WhiteSpace = whiteSpace;
           }

           this.Flags = flags;
           
       }
Esempio n. 5
0
        internal void CheckWhitespaceFacets(ref string s, 
                                            SimpleTypeValidator type,
                                            XmlSchemaWhiteSpace wsPattern)
        {
            // before parsing, check whitespace facet
            RestrictionFacets restriction = type.RestrictionFacets;

            if (type.Variety == XmlSchemaDatatypeVariety.List) {
                s = s.Trim();
                return;
            }
            else if (type.Variety == XmlSchemaDatatypeVariety.Atomic) {
                XmlSchemaDatatype datatype = type.DataType;
                if (datatype.GetBuiltInWSFacet() == XmlSchemaWhiteSpace.Collapse)
                    {
                        s = XmlComplianceUtil.NonCDataNormalize(s);
                    }
                    else if (datatype.GetBuiltInWSFacet() == XmlSchemaWhiteSpace.Replace)
                    {
                        s = XmlComplianceUtil.CDataNormalize(s);
                    }
                    else if (restriction != null & (restriction.Flags & RestrictionFlags.WhiteSpace) != 0)
                    { //Restriction has whitespace facet specified
                        if (restriction.WhiteSpace == XmlSchemaWhiteSpace.Replace)
                        {
                            s = XmlComplianceUtil.CDataNormalize(s);
                        }
                        else if (restriction.WhiteSpace == XmlSchemaWhiteSpace.Collapse)
                        {
                            s = XmlComplianceUtil.NonCDataNormalize(s);
                        }
                    }
            }
            return;
        }
Esempio n. 6
0
 internal virtual Exception CheckLexicalFacets(ref string parsedString, 
                                               SimpleTypeValidator type, 
                                               ArrayList patterns, 
                                               XmlSchemaWhiteSpace wsPattern)
 {
     CheckWhitespaceFacets(ref parsedString, type, wsPattern);
     return CheckPatternFacets(patterns, parsedString);
 }
Esempio n. 7
0
        public static CodeExpression CreateFacets(ClrSimpleTypeInfo type)
        {
            CompiledFacets facets = type.RestrictionFacets;

            CodeObjectCreateExpression createFacets = new CodeObjectCreateExpression();

            createFacets.CreateType = new CodeTypeReference(Constants.RestrictionFacets);

            RestrictionFlags flags = facets.Flags;

            if (flags == 0)
            {
                return(new CodePrimitiveExpression(null));
            }
            else
            {
                CodeCastExpression cast = new CodeCastExpression(new CodeTypeReference(Constants.RestrictionFlags),
                                                                 new CodePrimitiveExpression(
                                                                     System.Convert.ToInt32(flags, CultureInfo.InvariantCulture.NumberFormat)));
                createFacets.Parameters.Add(cast);
            }


            if ((flags & RestrictionFlags.Enumeration) != 0)
            {
                CodeArrayCreateExpression enums = new CodeArrayCreateExpression();
                enums.CreateType = new CodeTypeReference("System.Object");

                foreach (object o in facets.Enumeration)
                {
                    GetCreateValueExpression(o, type, enums.Initializers);
                }

                createFacets.Parameters.Add(enums);
            }
            else
            {
                createFacets.Parameters.Add(new CodePrimitiveExpression(null));
            }

            int fractionDigits = default(int);

            if ((flags & RestrictionFlags.FractionDigits) != 0)
            {
                fractionDigits = facets.FractionDigits;
            }

            createFacets.Parameters.Add(new CodePrimitiveExpression(fractionDigits));

            int length = default(int);

            if ((flags & RestrictionFlags.Length) != 0)
            {
                length = facets.Length;
            }

            createFacets.Parameters.Add(new CodePrimitiveExpression(length));

            object maxExclusive = default(object);

            if ((flags & RestrictionFlags.MaxExclusive) != 0)
            {
                maxExclusive = facets.MaxExclusive;
            }

            GetCreateValueExpression(maxExclusive, type, createFacets.Parameters);


            object maxInclusive = default(object);

            if ((flags & RestrictionFlags.MaxInclusive) != 0)
            {
                maxInclusive = facets.MaxInclusive;
            }

            GetCreateValueExpression(maxInclusive, type, createFacets.Parameters);


            int maxLength = default(int);

            if ((flags & RestrictionFlags.MaxLength) != 0)
            {
                maxLength = facets.MaxLength;
            }

            createFacets.Parameters.Add(new CodePrimitiveExpression(maxLength));

            object minExclusive = default(object);

            if ((flags & RestrictionFlags.MinExclusive) != 0)
            {
                minExclusive = facets.MinExclusive;
            }

            GetCreateValueExpression(minExclusive, type, createFacets.Parameters);


            object minInclusive = default(object);

            if ((flags & RestrictionFlags.MinInclusive) != 0)
            {
                minInclusive = facets.MinInclusive;
            }

            GetCreateValueExpression(minInclusive, type, createFacets.Parameters);


            int minLength = default(int);

            if ((flags & RestrictionFlags.MinLength) != 0)
            {
                minLength = facets.MinLength;
            }

            createFacets.Parameters.Add(new CodePrimitiveExpression(minLength));

            if ((flags & RestrictionFlags.Pattern) != 0)
            {
                CodeArrayCreateExpression patternStrs = new CodeArrayCreateExpression();
                patternStrs.CreateType = new CodeTypeReference(XTypedServices.typeOfString);

                foreach (object o in facets.Patterns)
                {
                    string str = o.ToString();
                    patternStrs.Initializers.Add(new CodePrimitiveExpression(str));
                }

                createFacets.Parameters.Add(patternStrs);
            }
            else
            {
                createFacets.Parameters.Add(new CodePrimitiveExpression(null));
            }

            int totalDigits = default(int);

            if ((flags & RestrictionFlags.TotalDigits) != 0)
            {
                totalDigits = facets.TotalDigits;
            }

            createFacets.Parameters.Add(new CodePrimitiveExpression(totalDigits));

            XmlSchemaWhiteSpace ws = facets.WhiteSpace;

            createFacets.Parameters.Add(
                CodeDomHelper.CreateFieldReference(Constants.XmlSchemaWhiteSpace, ws.ToString()));


            return(createFacets);
        }
Esempio n. 8
0
        public void compileFacets(XmlSchemaSimpleType simpleType)
        {
            XmlSchemaSimpleType type           = simpleType;
            XmlSchemaSimpleType enumSimpleType = null; //simpletype that has most restricted enums.

            flags = 0;
            while (type != null &&
                   !String.Equals(type.QualifiedName.Namespace, Constants.XSD, StringComparison.Ordinal))
            {
                XmlSchemaSimpleTypeRestriction simpleTypeRestriction = type.Content as XmlSchemaSimpleTypeRestriction;
                if (simpleTypeRestriction != null)
                {
                    foreach (XmlSchemaFacet facet in simpleTypeRestriction.Facets)
                    {
                        if (facet is XmlSchemaMinLengthFacet)
                        {
                            if ((flags & RestrictionFlags.MinLength) == 0)
                            {
                                minLength = XmlConvert.ToInt32(facet.Value);
                                flags    |= RestrictionFlags.MinLength;
                            }
                        }
                        else if (facet is XmlSchemaMaxLengthFacet)
                        {
                            if ((flags & RestrictionFlags.MaxLength) == 0)
                            {
                                maxLength = XmlConvert.ToInt32(facet.Value);
                                flags    |= RestrictionFlags.MaxLength;
                            }
                        }
                        else if (facet is XmlSchemaLengthFacet)
                        {
                            if ((flags & RestrictionFlags.Length) == 0)
                            {
                                length = XmlConvert.ToInt32(facet.Value);
                                flags |= RestrictionFlags.Length;
                            }
                        }
                        else if (facet is XmlSchemaEnumerationFacet)
                        {
                            if (enumSimpleType == null)
                            {
                                enumerations   = new ArrayList();
                                flags         |= RestrictionFlags.Enumeration;
                                enumSimpleType = type;
                            }
                            else if (enumSimpleType != type)
                            {
                                continue;
                            }

                            enumerations.Add(type.BaseXmlSchemaType.Datatype.ParseValue(facet.Value, null, null));
                        }
                        else if (facet is XmlSchemaPatternFacet)
                        {
                            if (patterns == null)
                            {
                                patterns = new ArrayList();
                                flags   |= RestrictionFlags.Pattern;
                            }

                            patterns.Add(facet.Value);
                        }
                        else if (facet is XmlSchemaMaxInclusiveFacet)
                        {
                            if ((flags & RestrictionFlags.MaxInclusive) == 0)
                            {
                                maxInclusive = type.BaseXmlSchemaType.Datatype.ParseValue(facet.Value, null, null);
                                flags       |= RestrictionFlags.MaxInclusive;
                            }
                        }
                        else if (facet is XmlSchemaMaxExclusiveFacet)
                        {
                            if ((flags & RestrictionFlags.MaxExclusive) == 0)
                            {
                                maxExclusive = type.BaseXmlSchemaType.Datatype.ParseValue(facet.Value, null, null);
                                flags       |= RestrictionFlags.MaxExclusive;
                            }
                        }
                        else if (facet is XmlSchemaMinExclusiveFacet)
                        {
                            if ((flags & RestrictionFlags.MinExclusive) == 0)
                            {
                                minExclusive = type.BaseXmlSchemaType.Datatype.ParseValue(facet.Value, null, null);
                                flags       |= RestrictionFlags.MinExclusive;
                            }
                        }
                        else if (facet is XmlSchemaMinInclusiveFacet)
                        {
                            if ((flags & RestrictionFlags.MinInclusive) == 0)
                            {
                                minInclusive = type.BaseXmlSchemaType.Datatype.ParseValue(facet.Value, null, null);
                                flags       |= RestrictionFlags.MinInclusive;
                            }
                        }
                        else if (facet is XmlSchemaFractionDigitsFacet)
                        {
                            if ((flags & RestrictionFlags.FractionDigits) == 0)
                            {
                                fractionDigits = XmlConvert.ToInt32(facet.Value);
                                flags         |= RestrictionFlags.FractionDigits;
                            }
                        }
                        else if (facet is XmlSchemaTotalDigitsFacet)
                        {
                            if ((flags & RestrictionFlags.TotalDigits) == 0)
                            {
                                totalDigits = XmlConvert.ToInt32(facet.Value);
                                flags      |= RestrictionFlags.TotalDigits;
                            }
                        }
                        else if (facet is XmlSchemaWhiteSpaceFacet)
                        {
                            if ((flags & RestrictionFlags.WhiteSpace) == 0)
                            {
                                if (facet.Value == "preserve")
                                {
                                    whiteSpace = XmlSchemaWhiteSpace.Preserve;
                                }
                                else if (facet.Value == "replace")
                                {
                                    whiteSpace = XmlSchemaWhiteSpace.Replace;
                                }
                                else if (facet.Value == "collapse")
                                {
                                    whiteSpace = XmlSchemaWhiteSpace.Collapse;
                                }

                                flags |= RestrictionFlags.WhiteSpace;
                            }
                        }
                        else
                        {
                            continue;
                        }
                    }
                }

                type = type.BaseXmlSchemaType as XmlSchemaSimpleType;
            }
        }
Esempio n. 9
0
 public CompiledFacets(XmlSchemaDatatype dt)
 {
     whiteSpace = dt.GetBuiltInWSFacet();
 }
 public RestrictionFacets(RestrictionFlags flags, object[] enumeration, int fractionDigits, int length, object maxExclusive, object maxInclusive, int maxLength, object minExclusive, object minInclusive, int minLength, string[] patterns, int totalDigits, XmlSchemaWhiteSpace whiteSpace)
 {
     this.hasValueFacets   = false;
     this.hasLexicalFacets = false;
     if ((int)(flags & RestrictionFlags.Enumeration) != 0)
     {
         this.Enumeration = new ArrayList();
         object[] objArray = enumeration;
         for (int i = 0; i < (int)objArray.Length; i++)
         {
             object o = objArray[i];
             this.Enumeration.Add(o);
         }
         this.hasValueFacets = true;
     }
     if ((int)(flags & RestrictionFlags.FractionDigits) != 0)
     {
         this.FractionDigits = fractionDigits;
         this.hasValueFacets = true;
     }
     if ((int)(flags & RestrictionFlags.Length) != 0)
     {
         this.Length         = length;
         this.hasValueFacets = true;
     }
     if ((int)(flags & RestrictionFlags.MaxExclusive) != 0)
     {
         this.MaxExclusive   = maxExclusive;
         this.hasValueFacets = true;
     }
     if ((int)(flags & RestrictionFlags.MaxInclusive) != 0)
     {
         this.MaxInclusive   = maxInclusive;
         this.hasValueFacets = true;
     }
     if ((int)(flags & RestrictionFlags.MaxLength) != 0)
     {
         this.MaxLength      = maxLength;
         this.hasValueFacets = true;
     }
     if ((int)(flags & RestrictionFlags.MinExclusive) != 0)
     {
         this.MinExclusive   = minExclusive;
         this.hasValueFacets = true;
     }
     if ((int)(flags & RestrictionFlags.MinInclusive) != 0)
     {
         this.MinInclusive   = minInclusive;
         this.hasValueFacets = true;
     }
     if ((int)(flags & RestrictionFlags.MinLength) != 0)
     {
         this.MinLength      = minLength;
         this.hasValueFacets = true;
     }
     if ((int)(flags & RestrictionFlags.Pattern) != 0)
     {
         this.CompilePatterns(patterns);
         this.hasLexicalFacets = true;
     }
     if ((int)(flags & RestrictionFlags.TotalDigits) != 0)
     {
         this.TotalDigits    = totalDigits;
         this.hasValueFacets = true;
     }
     if ((int)(flags & RestrictionFlags.WhiteSpace) != 0)
     {
         this.hasLexicalFacets = true;
         this.WhiteSpace       = whiteSpace;
     }
     this.Flags = flags;
 }
Esempio n. 11
0
 public CompiledFacets(XmlSchemaDatatype dt)
 {
     whiteSpace = dt.GetBuiltInWSFacet();
 }
Esempio n. 12
0
 public void compileFacets(XmlSchemaSimpleType simpleType)
 {
     XmlSchemaSimpleType type = simpleType;
     XmlSchemaSimpleType enumSimpleType = null; //simpletype that has most restricted enums.
     flags = 0;
     while (type != null && !String.Equals(type.QualifiedName.Namespace, Constants.XSD, StringComparison.Ordinal))
     {
         XmlSchemaSimpleTypeRestriction simpleTypeRestriction = type.Content as XmlSchemaSimpleTypeRestriction;
         if (simpleTypeRestriction != null)
         {
             foreach (XmlSchemaFacet facet in simpleTypeRestriction.Facets)
             {
                 if (facet is XmlSchemaMinLengthFacet)
                 {
                     if ((flags & RestrictionFlags.MinLength) == 0)
                     {
                         minLength = XmlConvert.ToInt32(facet.Value);
                         flags |= RestrictionFlags.MinLength;
                     }
                 }
                 else if (facet is XmlSchemaMaxLengthFacet)
                 {
                     if ((flags & RestrictionFlags.MaxLength) == 0)
                     {
                         maxLength = XmlConvert.ToInt32(facet.Value);
                         flags |= RestrictionFlags.MaxLength;
                     }
                 }
                 else if (facet is XmlSchemaLengthFacet)
                 {
                     if ((flags & RestrictionFlags.Length) == 0)
                     {
                         length = XmlConvert.ToInt32(facet.Value);
                         flags |= RestrictionFlags.Length;
                     }
                 }
                 else if (facet is XmlSchemaEnumerationFacet)
                 {
                     if (enumSimpleType == null)
                     {
                         enumerations = new ArrayList();
                         flags |= RestrictionFlags.Enumeration;
                         enumSimpleType = type;
                     }
                     else if (enumSimpleType != type)
                     {
                         continue;
                     }
                     enumerations.Add(type.BaseXmlSchemaType.Datatype.ParseValue(facet.Value, null, null));
                 }
                 else if (facet is XmlSchemaPatternFacet)
                 {
                     if (patterns == null)
                     {
                         patterns = new ArrayList();
                         flags |= RestrictionFlags.Pattern;
                     }
                     patterns.Add(facet.Value);
                 }
                 else if (facet is XmlSchemaMaxInclusiveFacet)
                 {
                     if ((flags & RestrictionFlags.MaxInclusive) == 0)
                     {
                         maxInclusive = type.BaseXmlSchemaType.Datatype.ParseValue(facet.Value, null, null);
                         flags |= RestrictionFlags.MaxInclusive;
                     }
                 }
                 else if (facet is XmlSchemaMaxExclusiveFacet)
                 {
                     if ((flags & RestrictionFlags.MaxExclusive) == 0)
                     {
                         maxExclusive = type.BaseXmlSchemaType.Datatype.ParseValue(facet.Value, null, null);
                         flags |= RestrictionFlags.MaxExclusive;
                     }
                 }
                 else if (facet is XmlSchemaMinExclusiveFacet)
                 {
                     if ((flags & RestrictionFlags.MinExclusive) == 0)
                     {
                         minExclusive = type.BaseXmlSchemaType.Datatype.ParseValue(facet.Value, null, null);
                         flags |= RestrictionFlags.MinExclusive;
                     }
                 }
                 else if (facet is XmlSchemaMinInclusiveFacet)
                 {
                     if ((flags & RestrictionFlags.MinInclusive) == 0)
                     {
                         minInclusive = type.BaseXmlSchemaType.Datatype.ParseValue(facet.Value, null, null);
                         flags |= RestrictionFlags.MinInclusive;
                     }
                 }
                 else if (facet is XmlSchemaFractionDigitsFacet)
                 {
                     if ((flags & RestrictionFlags.FractionDigits) == 0)
                     {
                         fractionDigits = XmlConvert.ToInt32(facet.Value);
                         flags |= RestrictionFlags.FractionDigits;
                     }
                 }
                 else if (facet is XmlSchemaTotalDigitsFacet)
                 {
                     if ((flags & RestrictionFlags.TotalDigits) == 0)
                     {
                         totalDigits = XmlConvert.ToInt32(facet.Value);
                         flags |= RestrictionFlags.TotalDigits;
                     }
                 }
                 else if (facet is XmlSchemaWhiteSpaceFacet)
                 {
                     if ((flags & RestrictionFlags.WhiteSpace) == 0)
                     {
                         if (facet.Value == "preserve")
                         {
                             whiteSpace = XmlSchemaWhiteSpace.Preserve;
                         }
                         else if (facet.Value == "replace")
                         {
                             whiteSpace = XmlSchemaWhiteSpace.Replace;
                         }
                         else if (facet.Value == "collapse")
                         {
                             whiteSpace = XmlSchemaWhiteSpace.Collapse;
                         }
                         flags |= RestrictionFlags.WhiteSpace;
                     }
                 }
                 else
                 {
                     continue;
                 }
             }
         }
         type = type.BaseXmlSchemaType as XmlSchemaSimpleType;
     }
 }
Esempio n. 13
0
        public RestrictionFacets(RestrictionFlags flags,
                                 object[] enumeration,
                                 int fractionDigits,
                                 int length,
                                 object maxExclusive,
                                 object maxInclusive,
                                 int maxLength,
                                 object minExclusive,
                                 object minInclusive,
                                 int minLength,
                                 string[] patterns,
                                 int totalDigits,
                                 XmlSchemaWhiteSpace whiteSpace)
        {
            hasValueFacets   = false;
            hasLexicalFacets = false;
            if ((flags & RestrictionFlags.Enumeration) != 0)
            {
                this.Enumeration = new ArrayList();
                foreach (object o in enumeration)
                {
                    this.Enumeration.Add(o);
                }

                hasValueFacets = true;
            }

            if ((flags & RestrictionFlags.FractionDigits) != 0)
            {
                this.FractionDigits = fractionDigits;
                hasValueFacets      = true;
            }

            if ((flags & RestrictionFlags.Length) != 0)
            {
                this.Length    = length;
                hasValueFacets = true;
            }

            if ((flags & RestrictionFlags.MaxExclusive) != 0)
            {
                this.MaxExclusive = maxExclusive;
                hasValueFacets    = true;
            }

            if ((flags & RestrictionFlags.MaxInclusive) != 0)
            {
                this.MaxInclusive = maxInclusive;
                hasValueFacets    = true;
            }

            if ((flags & RestrictionFlags.MaxLength) != 0)
            {
                this.MaxLength = maxLength;
                hasValueFacets = true;
            }

            if ((flags & RestrictionFlags.MinExclusive) != 0)
            {
                this.MinExclusive = minExclusive;
                hasValueFacets    = true;
            }

            if ((flags & RestrictionFlags.MinInclusive) != 0)
            {
                this.MinInclusive = minInclusive;
                hasValueFacets    = true;
            }

            if ((flags & RestrictionFlags.MinLength) != 0)
            {
                this.MinLength = minLength;
                hasValueFacets = true;
            }

            if ((flags & RestrictionFlags.Pattern) != 0)
            {
                CompilePatterns(patterns);
                hasLexicalFacets = true;
            }

            if ((flags & RestrictionFlags.TotalDigits) != 0)
            {
                this.TotalDigits = totalDigits;
                hasValueFacets   = true;
            }

            if ((flags & RestrictionFlags.WhiteSpace) != 0)
            {
                hasLexicalFacets = true;
                this.WhiteSpace  = whiteSpace;
            }

            this.Flags = flags;
        }