1 //------------------------------------------------------------------------------
2 // <copyright file="XmlSchemaParticle.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
5 // <owner current="true" primary="true">[....]</owner>
6 //------------------------------------------------------------------------------
8 namespace System.Xml.Schema {
10 using System.Xml.Serialization;
12 /// <include file='doc\XmlSchemaParticle.uex' path='docs/doc[@for="XmlSchemaParticle"]/*' />
14 /// <para>[To be supplied.]</para>
16 public abstract class XmlSchemaParticle : XmlSchemaAnnotated {
23 decimal minOccurs = decimal.One;
24 decimal maxOccurs = decimal.One;
25 Occurs flags = Occurs.None;
27 /// <include file='doc\XmlSchemaParticle.uex' path='docs/doc[@for="XmlSchemaParticle.MinOccursString"]/*' />
29 /// <para>[To be supplied.]</para>
31 [XmlAttribute("minOccurs")]
32 public string MinOccursString {
34 return (flags & Occurs.Min) == 0 ? null : XmlConvert.ToString(minOccurs);
38 minOccurs = decimal.One;
42 minOccurs = XmlConvert.ToInteger(value);
43 if (minOccurs < decimal.Zero) {
44 throw new XmlSchemaException(Res.Sch_MinOccursInvalidXsd, string.Empty);
51 /// <include file='doc\XmlSchemaParticle.uex' path='docs/doc[@for="XmlSchemaParticle.MaxOccursString"]/*' />
53 /// <para>[To be supplied.]</para>
55 [XmlAttribute("maxOccurs")]
56 public string MaxOccursString {
58 return (flags & Occurs.Max) == 0 ? null : (maxOccurs == decimal.MaxValue) ? "unbounded" : XmlConvert.ToString(maxOccurs);
62 maxOccurs = decimal.One;
66 if (value == "unbounded") {
67 maxOccurs = decimal.MaxValue;
70 maxOccurs = XmlConvert.ToInteger(value);
71 if (maxOccurs < decimal.Zero) {
72 throw new XmlSchemaException(Res.Sch_MaxOccursInvalidXsd, string.Empty);
74 else if (maxOccurs == decimal.Zero && (flags & Occurs.Min) == 0) {
75 minOccurs = decimal.Zero;
83 /// <include file='doc\XmlSchemaParticle.uex' path='docs/doc[@for="XmlSchemaParticle.MinOccurs"]/*' />
85 /// <para>[To be supplied.]</para>
88 public decimal MinOccurs {
89 get { return minOccurs; }
91 if (value < decimal.Zero || value != decimal.Truncate(value)) {
92 throw new XmlSchemaException(Res.Sch_MinOccursInvalidXsd, string.Empty);
99 /// <include file='doc\XmlSchemaParticle.uex' path='docs/doc[@for="XmlSchemaParticle.MaxOccurs"]/*' />
101 /// <para>[To be supplied.]</para>
104 public decimal MaxOccurs {
105 get { return maxOccurs; }
107 if (value < decimal.Zero || value != decimal.Truncate(value)) {
108 throw new XmlSchemaException(Res.Sch_MaxOccursInvalidXsd, string.Empty);
111 if (maxOccurs == decimal.Zero && (flags & Occurs.Min) == 0) {
112 minOccurs = decimal.Zero;
118 internal virtual bool IsEmpty {
119 get { return maxOccurs == decimal.Zero; }
122 internal bool IsMultipleOccurrence {
123 get { return maxOccurs > decimal.One; }
126 internal virtual string NameString {
132 internal XmlQualifiedName GetQualifiedName() {
133 XmlSchemaElement elem = this as XmlSchemaElement;
135 return elem.QualifiedName;
138 XmlSchemaAny any = this as XmlSchemaAny;
140 string ns = any.Namespace;
147 return new XmlQualifiedName("*", ns.Length == 0 ? "##any" : ns);
150 return XmlQualifiedName.Empty; //If ever called on other particles
153 class EmptyParticle : XmlSchemaParticle {
154 internal override bool IsEmpty {
159 internal static readonly XmlSchemaParticle Empty = new EmptyParticle();