1 //---------------------------------------------------------------------
2 // <copyright file="XmlSchemaResource.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
8 //---------------------------------------------------------------------
9 using System.Diagnostics;
10 using System.Data.Mapping;
11 using System.Data.Metadata.Edm;
12 using System.Collections.Generic;
14 namespace System.Data.EntityModel.SchemaObjectModel
16 internal struct XmlSchemaResource
18 private static XmlSchemaResource[] EmptyImportList = new XmlSchemaResource[0];
19 public XmlSchemaResource(string namespaceUri, string resourceName, XmlSchemaResource[] importedSchemas)
21 Debug.Assert(!string.IsNullOrEmpty(namespaceUri), "namespaceUri is null or empty");
22 Debug.Assert(!string.IsNullOrEmpty(resourceName), "resourceName is null or empty");
23 Debug.Assert(importedSchemas != null, "importedSchemas is null");
24 NamespaceUri = namespaceUri;
25 ResourceName = resourceName;
26 ImportedSchemas = importedSchemas;
28 public XmlSchemaResource(string namespaceUri, string resourceName)
30 Debug.Assert(!string.IsNullOrEmpty(namespaceUri), "namespaceUri is null or empty");
31 Debug.Assert(!string.IsNullOrEmpty(resourceName), "resourceName is null or empty");
32 NamespaceUri = namespaceUri;
33 ResourceName = resourceName;
34 ImportedSchemas = EmptyImportList;
36 internal string NamespaceUri;
37 internal string ResourceName;
38 internal XmlSchemaResource[] ImportedSchemas;
42 /// Builds a dictionary from XmlNamespace to XmlSchemaResource of both C and S space schemas
44 /// <returns>The built XmlNamespace to XmlSchemaResource dictionary.</returns>
45 internal static Dictionary<string, XmlSchemaResource> GetMetadataSchemaResourceMap(double schemaVersion)
47 Dictionary<string, XmlSchemaResource> schemaResourceMap = new Dictionary<string, XmlSchemaResource>(StringComparer.Ordinal);
48 AddEdmSchemaResourceMapEntries(schemaResourceMap, schemaVersion);
49 AddStoreSchemaResourceMapEntries(schemaResourceMap, schemaVersion);
50 return schemaResourceMap;
54 /// Adds Store schema resource entries to the given XmlNamespace to XmlSchemaResoure map
56 /// <param name="schemaResourceMap">The XmlNamespace to XmlSchemaResource map to add entries to.</param>
57 internal static void AddStoreSchemaResourceMapEntries(Dictionary<string, XmlSchemaResource> schemaResourceMap, double schemaVersion)
59 XmlSchemaResource[] ssdlImports = { new XmlSchemaResource(XmlConstants.EntityStoreSchemaGeneratorNamespace, "System.Data.Resources.EntityStoreSchemaGenerator.xsd") };
61 XmlSchemaResource ssdlSchema = new XmlSchemaResource(XmlConstants.TargetNamespace_1, "System.Data.Resources.SSDLSchema.xsd", ssdlImports);
62 schemaResourceMap.Add(ssdlSchema.NamespaceUri, ssdlSchema);
64 if (schemaVersion >= XmlConstants.StoreVersionForV2)
66 XmlSchemaResource ssdlSchema2 = new XmlSchemaResource(XmlConstants.TargetNamespace_2, "System.Data.Resources.SSDLSchema_2.xsd", ssdlImports);
67 schemaResourceMap.Add(ssdlSchema2.NamespaceUri, ssdlSchema2);
70 if (schemaVersion >= XmlConstants.StoreVersionForV3)
72 Debug.Assert(XmlConstants.SchemaVersionLatest == XmlConstants.StoreVersionForV3, "Did you add a new schema version");
74 XmlSchemaResource ssdlSchema3 = new XmlSchemaResource(XmlConstants.TargetNamespace_3, "System.Data.Resources.SSDLSchema_3.xsd", ssdlImports);
75 schemaResourceMap.Add(ssdlSchema3.NamespaceUri, ssdlSchema3);
78 XmlSchemaResource providerManifest = new XmlSchemaResource(XmlConstants.ProviderManifestNamespace, "System.Data.Resources.ProviderServices.ProviderManifest.xsd");
79 schemaResourceMap.Add(providerManifest.NamespaceUri, providerManifest);
83 /// Adds Mapping schema resource entries to the given XmlNamespace to XmlSchemaResoure map
85 /// <param name="schemaResourceMap">The XmlNamespace to XmlSchemaResource map to add entries to.</param>
86 internal static void AddMappingSchemaResourceMapEntries(Dictionary<string, XmlSchemaResource> schemaResourceMap, double schemaVersion)
88 XmlSchemaResource msl1 = new XmlSchemaResource(StorageMslConstructs.NamespaceUriV1, StorageMslConstructs.ResourceXsdNameV1);
89 schemaResourceMap.Add(msl1.NamespaceUri, msl1);
91 if (schemaVersion >= XmlConstants.EdmVersionForV2)
93 XmlSchemaResource msl2 = new XmlSchemaResource(StorageMslConstructs.NamespaceUriV2, StorageMslConstructs.ResourceXsdNameV2);
94 schemaResourceMap.Add(msl2.NamespaceUri, msl2);
97 if (schemaVersion >= XmlConstants.EdmVersionForV3)
99 Debug.Assert(XmlConstants.SchemaVersionLatest == XmlConstants.EdmVersionForV3, "Did you add a new schema version");
100 XmlSchemaResource msl3 = new XmlSchemaResource(StorageMslConstructs.NamespaceUriV3, StorageMslConstructs.ResourceXsdNameV3);
101 schemaResourceMap.Add(msl3.NamespaceUri, msl3);
106 /// Adds Edm schema resource entries to the given XmlNamespace to XmlSchemaResoure map,
107 /// when calling from SomSchemaSetHelper.ComputeSchemaSet(), all the imported xsd will be included
109 /// <param name="schemaResourceMap">The XmlNamespace to XmlSchemaResource map to add entries to.</param>
110 internal static void AddEdmSchemaResourceMapEntries(Dictionary<string, XmlSchemaResource> schemaResourceMap, double schemaVersion)
112 XmlSchemaResource[] csdlImports = { new XmlSchemaResource(XmlConstants.CodeGenerationSchemaNamespace, "System.Data.Resources.CodeGenerationSchema.xsd") };
114 XmlSchemaResource[] csdl2Imports = {
115 new XmlSchemaResource(XmlConstants.CodeGenerationSchemaNamespace, "System.Data.Resources.CodeGenerationSchema.xsd"),
116 new XmlSchemaResource(XmlConstants.AnnotationNamespace, "System.Data.Resources.AnnotationSchema.xsd") };
118 XmlSchemaResource[] csdl3Imports = {
119 new XmlSchemaResource(XmlConstants.CodeGenerationSchemaNamespace, "System.Data.Resources.CodeGenerationSchema.xsd"),
120 new XmlSchemaResource(XmlConstants.AnnotationNamespace, "System.Data.Resources.AnnotationSchema.xsd") };
122 XmlSchemaResource csdlSchema_1 = new XmlSchemaResource(XmlConstants.ModelNamespace_1, "System.Data.Resources.CSDLSchema_1.xsd", csdlImports);
123 schemaResourceMap.Add(csdlSchema_1.NamespaceUri, csdlSchema_1);
125 XmlSchemaResource csdlSchema_1_1 = new XmlSchemaResource(XmlConstants.ModelNamespace_1_1, "System.Data.Resources.CSDLSchema_1_1.xsd", csdlImports);
126 schemaResourceMap.Add(csdlSchema_1_1.NamespaceUri, csdlSchema_1_1);
128 if (schemaVersion >= XmlConstants.EdmVersionForV2)
130 XmlSchemaResource csdlSchema_2 = new XmlSchemaResource(XmlConstants.ModelNamespace_2, "System.Data.Resources.CSDLSchema_2.xsd", csdl2Imports);
131 schemaResourceMap.Add(csdlSchema_2.NamespaceUri, csdlSchema_2);
134 if (schemaVersion >= XmlConstants.EdmVersionForV3)
136 Debug.Assert(XmlConstants.SchemaVersionLatest == XmlConstants.EdmVersionForV3, "Did you add a new schema version");
138 XmlSchemaResource csdlSchema_3 = new XmlSchemaResource(XmlConstants.ModelNamespace_3, "System.Data.Resources.CSDLSchema_3.xsd", csdl3Imports);
139 schemaResourceMap.Add(csdlSchema_3.NamespaceUri, csdlSchema_3);