示例#1
0
        internal void ElementsToTypes()
        {
            bool isRoot            = false;
            int  rootElementsCount = schemas.GlobalElements.Count;

            foreach (XmlSchemaElement elem in schemas.GlobalElements.Values)
            {
                SymbolEntry   symbol       = symbolTable.AddElement(elem);
                XmlSchemaType schemaType   = elem.ElementSchemaType;
                string        xsdNamespace = elem.QualifiedName.Namespace;

                ClrTypeInfo      typeInfo    = null;
                XmlSchemaElement headElement = null;
                if (!elem.SubstitutionGroup.IsEmpty)
                {
                    headElement = (XmlSchemaElement)schemas.GlobalElements[elem.SubstitutionGroup];
                }
                if (schemaType.IsGlobal())
                { //Global elem with global type, generate wrapper class for the element
                    bool hasBaseContentType      = headElement != null && headElement.ElementSchemaType == schemaType;
                    ClrWrapperTypeInfo wtypeInfo = new ClrWrapperTypeInfo(hasBaseContentType);
                    ClrTypeReference   typeDef   = BuildTypeReference(schemaType, schemaType.QualifiedName, false, true);
                    //Save the fixed/default value of the element
                    wtypeInfo.InnerType = typeDef;
                    typeInfo            = wtypeInfo;
                    typeInfo.baseType   = headElement; //If element is member of substitutionGroup, add derivation step
                }
                else
                {
                    ClrContentTypeInfo ctypeInfo = new ClrContentTypeInfo();
                    localSymbolTable.Init(symbol.identifierName);
                    ctypeInfo.baseType = headElement; //If element is member of substitutionGroup, add derivation step
                    BuildProperties(elem, schemaType, ctypeInfo);
                    BuildNestedTypes(ctypeInfo);
                    typeInfo = ctypeInfo;
                }
                if (!isRoot)
                {
                    if (rootElementsCount == 1 || CheckUnhandledAttributes(elem))
                    {
                        typeInfo.IsRoot = true;
                        isRoot          = true;
                    }
                }
                typeInfo.IsSubstitutionHead = IsSubstitutionGroupHead(elem) != null;
                typeInfo.IsAbstract         = elem.IsAbstract;
                typeInfo.clrtypeName        = symbol.identifierName;
                typeInfo.clrtypeNs          = symbol.clrNamespace;
                typeInfo.schemaName         = symbol.symbolName;
                typeInfo.schemaNs           = xsdNamespace;

                typeInfo.typeOrigin = SchemaOrigin.Element;

                BuildAnnotationInformation(typeInfo, schemaType);
                binding.Types.Add(typeInfo);
            }
        }
        internal void ElementsToTypes()
        {
            bool isRoot            = false;
            int  rootElementsCount = this.schemas.GlobalElements.Count;

            foreach (XmlSchemaElement elem in this.schemas.GlobalElements.Values)
            {
                SymbolEntry      symbol       = this.symbolTable.AddElement(elem);
                XmlSchemaType    schemaType   = elem.ElementSchemaType;
                string           xsdNamespace = elem.QualifiedName.Namespace;
                ClrTypeInfo      typeInfo     = null;
                XmlSchemaElement headElement  = null;
                if (!elem.SubstitutionGroup.IsEmpty)
                {
                    headElement = (XmlSchemaElement)this.schemas.GlobalElements[elem.SubstitutionGroup];
                }
                if (!schemaType.IsGlobal())
                {
                    ClrContentTypeInfo ctypeInfo = new ClrContentTypeInfo();
                    this.localSymbolTable.Init(symbol.identifierName);
                    ctypeInfo.baseType = headElement;
                    this.BuildProperties(elem, schemaType, ctypeInfo);
                    this.BuildNestedTypes(ctypeInfo);
                    typeInfo = ctypeInfo;
                }
                else
                {
                    ClrWrapperTypeInfo wtypeInfo = new ClrWrapperTypeInfo((headElement == null ? false : headElement.ElementSchemaType == schemaType));
                    ClrTypeReference   typeDef   = this.BuildTypeReference(schemaType, schemaType.QualifiedName, false, true);
                    wtypeInfo.InnerType = typeDef;
                    typeInfo            = wtypeInfo;
                    typeInfo.baseType   = headElement;
                }
                if (!isRoot)
                {
                    if ((rootElementsCount == 1 ? true : this.CheckUnhandledAttributes(elem)))
                    {
                        typeInfo.IsRoot = true;
                        isRoot          = true;
                    }
                }
                typeInfo.IsSubstitutionHead = this.IsSubstitutionGroupHead(elem) != null;
                typeInfo.IsAbstract         = elem.IsAbstract;
                typeInfo.clrtypeName        = symbol.identifierName;
                typeInfo.clrtypeNs          = symbol.clrNamespace;
                typeInfo.schemaName         = symbol.symbolName;
                typeInfo.schemaNs           = xsdNamespace;
                typeInfo.typeOrigin         = SchemaOrigin.Element;
                this.BuildAnnotationInformation(typeInfo, schemaType);
                this.binding.Types.Add(typeInfo);
            }
        }
示例#3
0
 internal void SetFixedDefaultValue(ClrWrapperTypeInfo typeInfo)
 {
     this.FixedValue = typeInfo.FixedValue;
     this.DefaultValue = typeInfo.DefaultValue;
 }
        internal void ElementsToTypes()
        {
            bool isRoot = false;
            int rootElementsCount = schemas.GlobalElements.Count;
            foreach (XmlSchemaElement elem in schemas.GlobalElements.Values)
            {
                SymbolEntry symbol = symbolTable.AddElement(elem);
                XmlSchemaType schemaType = elem.ElementSchemaType;
                string xsdNamespace = elem.QualifiedName.Namespace;

                ClrTypeInfo typeInfo = null;
                XmlSchemaElement headElement = null;

                if (!elem.SubstitutionGroup.IsEmpty)
                {
                    headElement =
                        (XmlSchemaElement)schemas.GlobalElements[
                            elem.SubstitutionGroup];
                }

                if (schemaType.IsGlobal())
                {
                    //Global elem with global type, generate wrapper class for the element
                    bool hasBaseContentType =
                        headElement != null &&
                        headElement.ElementSchemaType == schemaType;
                    ClrWrapperTypeInfo wtypeInfo = new ClrWrapperTypeInfo(
                        hasBaseContentType);
                    ClrTypeReference typeDef = BuildTypeReference(
                        schemaType, schemaType.QualifiedName, false, true);
                    //Save the fixed/default value of the element
                    wtypeInfo.InnerType = typeDef;
                    typeInfo = wtypeInfo;
                    //If element is member of substitutionGroup, add derivation step
                    typeInfo.baseType = headElement;
                }
                else
                {
                    ClrContentTypeInfo ctypeInfo = new ClrContentTypeInfo();
                    localSymbolTable.Init(symbol.identifierName);
                    // If element is member of substitutionGroup, add derivation step
                    ctypeInfo.baseType = headElement;
                    BuildProperties(elem, schemaType, ctypeInfo);
                    BuildNestedTypes(ctypeInfo);
                    typeInfo = ctypeInfo;
                }

                if (!isRoot)
                {
                    if (rootElementsCount == 1 || CheckUnhandledAttributes(elem))
                    {
                        typeInfo.IsRoot = true;
                        isRoot = true;
                    }
                }

                typeInfo.IsSubstitutionHead = IsSubstitutionGroupHead(elem) != null;
                typeInfo.IsAbstract = elem.IsAbstract;
                typeInfo.clrtypeName = symbol.identifierName;
                typeInfo.clrtypeNs = symbol.clrNamespace;
                typeInfo.schemaName = symbol.symbolName;
                typeInfo.schemaNs = xsdNamespace;

                typeInfo.typeOrigin = SchemaOrigin.Element;

                BuildAnnotationInformation(typeInfo, schemaType);
                binding.Types.Add(typeInfo);
            }
        }
 internal void SetFixedDefaultValue(ClrWrapperTypeInfo typeInfo)
 {
     this.FixedValue   = typeInfo.FixedValue;
     this.DefaultValue = typeInfo.DefaultValue;
 }