internal void TypesToTypes() { foreach (XmlSchemaType st in schemas.GlobalTypes.Values) { XmlSchemaSimpleType simpleType = st as XmlSchemaSimpleType; if (simpleType != null) { SymbolEntry symbol = symbolTable.AddType(simpleType); string xsdNamespace = simpleType.QualifiedName.Namespace; ClrSimpleTypeInfo typeInfo = ClrSimpleTypeInfo .CreateSimpleTypeInfo(simpleType); //Create corresponding simple type info objects typeInfo.IsAbstract = false; typeInfo.clrtypeName = symbol.identifierName; typeInfo.clrtypeNs = symbol.clrNamespace; typeInfo.schemaName = symbol.symbolName; typeInfo.schemaNs = xsdNamespace; typeInfo.typeOrigin = SchemaOrigin.Fragment; BuildAnnotationInformation(typeInfo, st); binding.Types.Add(typeInfo); } else { XmlSchemaComplexType ct = st as XmlSchemaComplexType; if (ct != null && ct.TypeCode != XmlTypeCode.Item) { SymbolEntry symbol = symbolTable.AddType(ct); string xsdNamespace = ct.QualifiedName.Namespace; localSymbolTable.Init(symbol.identifierName); ClrContentTypeInfo typeInfo = new ClrContentTypeInfo(); typeInfo.IsAbstract = ct.IsAbstract; typeInfo.IsSealed = ct.IsFinal(); typeInfo.clrtypeName = symbol.identifierName; typeInfo.clrtypeNs = symbol.clrNamespace; typeInfo.schemaName = symbol.symbolName; typeInfo.schemaNs = xsdNamespace; typeInfo.typeOrigin = SchemaOrigin.Fragment; typeInfo.baseType = BaseType(ct); BuildProperties(null, ct, typeInfo); BuildNestedTypes(typeInfo); BuildAnnotationInformation(typeInfo, ct); binding.Types.Add(typeInfo); } } } }
internal void AddSimpleType(XmlQualifiedName name, XmlSchemaSimpleType simpleType) { SymbolEntry symbol = this.symbolTable.AddType(name, simpleType); string xsdNamespace = simpleType.QualifiedName.Namespace; ClrSimpleTypeInfo typeInfo = ClrSimpleTypeInfo.CreateSimpleTypeInfo(simpleType); typeInfo.IsAbstract = false; typeInfo.clrtypeName = symbol.identifierName; typeInfo.clrtypeNs = symbol.clrNamespace; typeInfo.schemaName = symbol.symbolName; typeInfo.schemaNs = xsdNamespace; typeInfo.typeOrigin = SchemaOrigin.Fragment; this.BuildAnnotationInformation(typeInfo, simpleType); this.binding.Types.Add(typeInfo); }
private void BuildNestedTypes(ClrContentTypeInfo typeInfo) { List <AnonymousType> anonymousTypes = localSymbolTable.GetAnonymousTypes(); foreach (AnonymousType at in anonymousTypes) { XmlQualifiedName qname = null; XmlSchemaComplexType complexType = null; XmlSchemaElement elem = at.parentElement; if (elem == null) { //case 1: "dummy" type for text content in a complex type, with restrictions complexType = at.wrappingType; qname = complexType.QualifiedName; } else { //case 2: anonymous type can also be nested under an element qname = elem.QualifiedName; complexType = elem.ElementSchemaType as XmlSchemaComplexType; } if (complexType != null) { if (complexType.GetContentType() == XmlSchemaContentType.TextOnly && complexType.IsDerivedByRestriction()) { //In this case, we take care of the content/text part only. No nesting types exist. ClrSimpleTypeInfo nestedTypeInfo = ClrSimpleTypeInfo .CreateSimpleTypeInfo( complexType); //Generate its "simple type" version to save restrictions nestedTypeInfo.clrtypeName = at.identifier; nestedTypeInfo.clrtypeNs = configSettings.GetClrNamespace(qname.Namespace); nestedTypeInfo.schemaName = qname.Name; nestedTypeInfo.schemaNs = qname.Namespace; nestedTypeInfo.typeOrigin = SchemaOrigin.Fragment; nestedTypeInfo.IsNested = true; BuildAnnotationInformation(nestedTypeInfo, complexType); typeInfo.NestedTypes.Add(nestedTypeInfo); } else { ClrContentTypeInfo nestedTypeInfo = new ClrContentTypeInfo() { Parent = typeInfo }; localSymbolTable.Init(at.identifier); nestedTypeInfo.clrtypeName = at.identifier; nestedTypeInfo.clrtypeNs = configSettings.GetClrNamespace(qname.Namespace); nestedTypeInfo.schemaName = qname.Name; nestedTypeInfo.schemaNs = qname.Namespace; nestedTypeInfo.typeOrigin = SchemaOrigin.Fragment; nestedTypeInfo.IsNested = true; nestedTypeInfo.baseType = BaseType(complexType); BuildProperties(elem, complexType, nestedTypeInfo); BuildNestedTypes(nestedTypeInfo); BuildAnnotationInformation(nestedTypeInfo, complexType); typeInfo.NestedTypes.Add(nestedTypeInfo); } } //Also handle simple types XmlSchemaSimpleType simpleType = null; if (elem != null) { simpleType = elem.ElementSchemaType as XmlSchemaSimpleType; } if (simpleType != null) { ClrSimpleTypeInfo nestedTypeInfo = ClrSimpleTypeInfo.CreateSimpleTypeInfo(simpleType); nestedTypeInfo.clrtypeName = at.identifier; nestedTypeInfo.clrtypeNs = configSettings.GetClrNamespace(qname.Namespace); nestedTypeInfo.schemaName = qname.Name; nestedTypeInfo.schemaNs = qname.Namespace; nestedTypeInfo.typeOrigin = SchemaOrigin.Fragment; nestedTypeInfo.IsNested = true; BuildAnnotationInformation(nestedTypeInfo, simpleType); typeInfo.NestedTypes.Add(nestedTypeInfo); } } }
private void BuildNestedTypes(ClrContentTypeInfo typeInfo) { ClrSimpleTypeInfo clrSimpleTypeInfo; foreach (AnonymousType at in this.localSymbolTable.GetAnonymousTypes()) { XmlQualifiedName qname = null; XmlSchemaComplexType complexType = null; XmlSchemaElement elem = at.parentElement; if (elem != null) { qname = elem.QualifiedName; complexType = elem.ElementSchemaType as XmlSchemaComplexType; } else { complexType = at.wrappingType; qname = complexType.QualifiedName; } if (complexType != null) { if ((complexType.GetContentType() != XmlSchemaContentType.TextOnly ? true : !complexType.IsDerivedByRestriction())) { ClrContentTypeInfo clrContentTypeInfo = new ClrContentTypeInfo(); this.localSymbolTable.Init(at.identifier); clrContentTypeInfo.clrtypeName = at.identifier; clrContentTypeInfo.clrtypeNs = this.configSettings.GetClrNamespace(qname.Namespace); clrContentTypeInfo.schemaName = qname.Name; clrContentTypeInfo.schemaNs = qname.Namespace; clrContentTypeInfo.typeOrigin = SchemaOrigin.Fragment; clrContentTypeInfo.IsNested = true; clrContentTypeInfo.baseType = this.BaseType(complexType); this.BuildProperties(elem, complexType, clrContentTypeInfo); this.BuildNestedTypes(clrContentTypeInfo); this.BuildAnnotationInformation(clrContentTypeInfo, complexType); typeInfo.NestedTypes.Add(clrContentTypeInfo); } else { clrSimpleTypeInfo = ClrSimpleTypeInfo.CreateSimpleTypeInfo(complexType); clrSimpleTypeInfo.clrtypeName = at.identifier; clrSimpleTypeInfo.clrtypeNs = this.configSettings.GetClrNamespace(qname.Namespace); clrSimpleTypeInfo.schemaName = qname.Name; clrSimpleTypeInfo.schemaNs = qname.Namespace; clrSimpleTypeInfo.typeOrigin = SchemaOrigin.Fragment; clrSimpleTypeInfo.IsNested = true; this.BuildAnnotationInformation(clrSimpleTypeInfo, complexType); typeInfo.NestedTypes.Add(clrSimpleTypeInfo); } } XmlSchemaSimpleType simpleType = null; if (elem != null) { simpleType = elem.ElementSchemaType as XmlSchemaSimpleType; } if (simpleType != null) { clrSimpleTypeInfo = ClrSimpleTypeInfo.CreateSimpleTypeInfo(simpleType); clrSimpleTypeInfo.clrtypeName = at.identifier; clrSimpleTypeInfo.clrtypeNs = this.configSettings.GetClrNamespace(qname.Namespace); clrSimpleTypeInfo.schemaName = qname.Name; clrSimpleTypeInfo.schemaNs = qname.Namespace; clrSimpleTypeInfo.typeOrigin = SchemaOrigin.Fragment; clrSimpleTypeInfo.IsNested = true; this.BuildAnnotationInformation(clrSimpleTypeInfo, simpleType); typeInfo.NestedTypes.Add(clrSimpleTypeInfo); } } }