The Labs \ Source Viewer \ SSCLI \ System.Xml.Schema \ SchemaElementDecl

  1. //------------------------------------------------------------------------------
  2. // <copyright file="SchemaElementDecl.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. // <owner current="true" primary="true">priyal</owner>
  15. //------------------------------------------------------------------------------
  16. namespace System.Xml.Schema
  17. {
  18.    
  19.     using System;
  20.     using System.Collections;
  21.     using System.Diagnostics;
  22.    
  23.     internal sealed class SchemaElementDecl : SchemaDeclBase
  24.     {
  25.         ContentValidator contentValidator;
  26.         Hashtable attdefs = new Hashtable();
  27.         Hashtable prohibitedAttributes = new Hashtable();
  28.         ArrayList tmpDefaultAttdefs;
  29.         SchemaAttDef[] defaultAttdefs;
  30.         bool isAbstract = false;
  31.         bool isNillable = false;
  32.         XmlSchemaDerivationMethod block;
  33.         bool isIdDeclared;
  34.         bool isNotationDeclared;
  35.         bool hasRequiredAttribute = false;
  36.         bool hasNonCDataAttribute = false;
  37.         XmlSchemaAnyAttribute anyAttribute;
  38.         CompiledIdentityConstraint[] constraints;
  39.         XmlSchemaElement schemaElement;
  40.        
  41.         public static readonly SchemaElementDecl Empty = new SchemaElementDecl();
  42.        
  43.         public SchemaElementDecl()
  44.         {
  45.         }
  46.        
  47.         public SchemaElementDecl(XmlSchemaDatatype dtype)
  48.         {
  49.             Datatype = dtype;
  50.             contentValidator = ContentValidator.TextOnly;
  51.         }
  52.        
  53.         public SchemaElementDecl(XmlQualifiedName name, string prefix, SchemaType schemaType) : base(name, prefix)
  54.         {
  55.         }
  56.        
  57.         public static SchemaElementDecl CreateAnyTypeElementDecl()
  58.         {
  59.             SchemaElementDecl anyTypeElementDecl = new SchemaElementDecl();
  60.             anyTypeElementDecl.Datatype = DatatypeImplementation.AnySimpleType.Datatype;
  61.             return anyTypeElementDecl;
  62.         }
  63.        
  64.        
  65.         public SchemaElementDecl Clone()
  66.         {
  67.             return (SchemaElementDecl)MemberwiseClone();
  68.         }
  69.        
  70.         public bool IsAbstract {
  71.             get { return isAbstract; }
  72.             set { isAbstract = value; }
  73.         }
  74.        
  75.         public bool IsNillable {
  76.             get { return isNillable; }
  77.             set { isNillable = value; }
  78.         }
  79.        
  80.         public XmlSchemaDerivationMethod Block {
  81.             get { return block; }
  82.             set { block = value; }
  83.         }
  84.        
  85.         public bool IsIdDeclared {
  86.             get { return isIdDeclared; }
  87.             set { isIdDeclared = value; }
  88.         }
  89.        
  90.         public bool IsNotationDeclared {
  91.             get { return isNotationDeclared; }
  92.             set { isNotationDeclared = value; }
  93.         }
  94.        
  95.         public bool HasDefaultAttribute {
  96.             get { return defaultAttdefs != null; }
  97.         }
  98.        
  99.         public bool HasRequiredAttribute {
  100.             get { return hasRequiredAttribute; }
  101.             set { hasRequiredAttribute = value; }
  102.         }
  103.        
  104.         public bool HasNonCDataAttribute {
  105.             get { return hasNonCDataAttribute; }
  106.             set { hasNonCDataAttribute = value; }
  107.         }
  108.        
  109.         public ContentValidator ContentValidator {
  110.             get { return contentValidator; }
  111.             set { contentValidator = value; }
  112.         }
  113.        
  114.         public XmlSchemaAnyAttribute AnyAttribute {
  115.             get { return anyAttribute; }
  116.             set { anyAttribute = value; }
  117.         }
  118.        
  119.         public CompiledIdentityConstraint[] Constraints {
  120.             get { return constraints; }
  121.             set { constraints = value; }
  122.         }
  123.        
  124.         public XmlSchemaElement SchemaElement {
  125.             get { return schemaElement; }
  126.             set { schemaElement = value; }
  127.         }
  128.         // add a new SchemaAttDef to the SchemaElementDecl
  129.         public void AddAttDef(SchemaAttDef attdef)
  130.         {
  131.             attdefs.Add(attdef.Name, attdef);
  132.             if (attdef.Presence == SchemaDeclBase.Use.Required || attdef.Presence == SchemaDeclBase.Use.RequiredFixed) {
  133.                 hasRequiredAttribute = true;
  134.             }
  135.             if (attdef.Presence == SchemaDeclBase.Use.Default || attdef.Presence == SchemaDeclBase.Use.Fixed) {
  136.                 //Not adding RequiredFixed here
  137.                 if (tmpDefaultAttdefs == null) {
  138.                     tmpDefaultAttdefs = new ArrayList();
  139.                 }
  140.                 tmpDefaultAttdefs.Add(attdef);
  141.             }
  142.         }
  143.        
  144.         public void EndAddAttDef()
  145.         {
  146.             if (tmpDefaultAttdefs != null) {
  147.                 defaultAttdefs = (SchemaAttDef[])tmpDefaultAttdefs.ToArray(typeof(SchemaAttDef));
  148.                 tmpDefaultAttdefs = null;
  149.             }
  150.         }
  151.        
  152. /*
  153.         * Retrieves the attribute definition of the named attribute.
  154.         * @param name  The name of the attribute.
  155.         * @return  an attribute definition object; returns null if it is not found.
  156.         */       
  157.         public SchemaAttDef GetAttDef(XmlQualifiedName qname)
  158.         {
  159.             return (SchemaAttDef)attdefs[qname];
  160.         }
  161.        
  162.         public Hashtable AttDefs {
  163.             get { return attdefs; }
  164.         }
  165.        
  166.         public SchemaAttDef[] DefaultAttDefs {
  167.             get { return defaultAttdefs; }
  168.         }
  169.        
  170.         public Hashtable ProhibitedAttributes {
  171.             get { return prohibitedAttributes; }
  172.         }
  173.        
  174.         public void CheckAttributes(Hashtable presence, bool standalone)
  175.         {
  176.             foreach (SchemaAttDef attdef in attdefs.Values) {
  177.                 if (presence[attdef.Name] == null) {
  178.                     if (attdef.Presence == SchemaDeclBase.Use.Required) {
  179.                         throw new XmlSchemaException(Res.Sch_MissRequiredAttribute, attdef.Name.ToString());
  180.                     }
  181.                     else if (standalone && attdef.IsDeclaredInExternal && (attdef.Presence == SchemaDeclBase.Use.Default || attdef.Presence == SchemaDeclBase.Use.Fixed)) {
  182.                         throw new XmlSchemaException(Res.Sch_StandAlone, string.Empty);
  183.                     }
  184.                 }
  185.             }
  186.         }
  187.     }
  188. }

Developer Fusion