Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Xml / System / Xml / schema / XmlSchemaCollection.cs / 1305376 / XmlSchemaCollection.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- namespace System.Xml.Schema { using System; using System.Threading; using System.Collections; using System.Xml.Schema; using System.Runtime.Versioning; ////// /// [Obsolete("Use System.Xml.Schema.XmlSchemaSet for schema compilation and validation. http://go.microsoft.com/fwlink/?linkid=14202")] public sealed class XmlSchemaCollection: ICollection { private Hashtable collection; private XmlNameTable nameTable; private SchemaNames schemaNames; private ReaderWriterLock wLock; private int timeout = Timeout.Infinite; private bool isThreadSafe = true; private ValidationEventHandler validationEventHandler = null; private XmlResolver xmlResolver = null; ///The XmlSchemaCollection contains a set of namespace URI's. /// Each namespace also have an associated private data cache /// corresponding to the XML-Data Schema or W3C XML Schema. /// The XmlSchemaCollection will able to load XSD and XDR schemas, /// and compile them into an internal "cooked schema representation". /// The Validate method then uses this internal representation for /// efficient runtime validation of any given subtree. ////// /// public XmlSchemaCollection() : this(new NameTable()) { } ///Construct a new empty schema collection. ////// /// public XmlSchemaCollection(XmlNameTable nametable) { if (nametable == null) { throw new ArgumentNullException("nametable"); } nameTable = nametable; collection = Hashtable.Synchronized(new Hashtable()); xmlResolver = new XmlUrlResolver(); isThreadSafe = true; if (isThreadSafe) { wLock = new ReaderWriterLock(); } } ///Construct a new empty schema collection with associated XmlNameTable. /// The XmlNameTable is used when loading schemas ////// /// public int Count { get { return collection.Count;} } ///Returns the number of namespaces defined in this collection /// (whether or not there is an actual schema associated with those namespaces or not). ////// /// public XmlNameTable NameTable { get { return nameTable;} } ///The default XmlNameTable used by the XmlSchemaCollection when loading new schemas. ///public event ValidationEventHandler ValidationEventHandler { add { validationEventHandler += value; } remove { validationEventHandler -= value; } } internal XmlResolver XmlResolver { set { xmlResolver = value; } } /// /// /// [ResourceConsumption(ResourceScope.Machine)] [ResourceExposure(ResourceScope.Machine)] public XmlSchema Add(string ns, string uri) { if (uri == null || uri.Length == 0) throw new ArgumentNullException("uri"); XmlTextReader reader = new XmlTextReader(uri, nameTable); reader.XmlResolver = xmlResolver; XmlSchema schema = null; try { schema = Add(ns, reader, xmlResolver); while(reader.Read());// wellformness check } finally { reader.Close(); } return schema; } ///Add the schema located by the given URL into the schema collection. /// If the given schema references other namespaces, the schemas for those other /// namespaces are NOT automatically loaded. ///public XmlSchema Add(String ns, XmlReader reader) { return Add(ns, reader, xmlResolver); } /// /// /// public XmlSchema Add(String ns, XmlReader reader, XmlResolver resolver) { if (reader == null) throw new ArgumentNullException("reader"); XmlNameTable readerNameTable = reader.NameTable; SchemaInfo schemaInfo = new SchemaInfo(); Parser parser = new Parser(SchemaType.None, readerNameTable, GetSchemaNames(readerNameTable), validationEventHandler); parser.XmlResolver = resolver; SchemaType schemaType; try { schemaType = parser.Parse(reader, ns); } catch (XmlSchemaException e) { SendValidationEvent(e); return null; } if (schemaType == SchemaType.XSD) { schemaInfo.SchemaType = SchemaType.XSD; return Add(ns, schemaInfo, parser.XmlSchema, true, resolver); } else { SchemaInfo xdrSchema = parser.XdrSchema; return Add(ns, parser.XdrSchema, null, true, resolver); } } ///Add the given schema into the schema collection. /// If the given schema references other namespaces, the schemas for those /// other namespaces are NOT automatically loaded. ////// /// public XmlSchema Add(XmlSchema schema) { return Add(schema, xmlResolver); } ///[To be supplied.] ///public XmlSchema Add(XmlSchema schema, XmlResolver resolver) { if (schema == null) throw new ArgumentNullException("schema"); SchemaInfo schemaInfo = new SchemaInfo(); schemaInfo.SchemaType = SchemaType.XSD; return Add(schema.TargetNamespace, schemaInfo, schema, true, resolver); } /// /// /// public void Add(XmlSchemaCollection schema) { if (schema == null) throw new ArgumentNullException("schema"); if (this == schema) return; IDictionaryEnumerator enumerator = schema.collection.GetEnumerator(); while (enumerator.MoveNext()) { XmlSchemaCollectionNode node = (XmlSchemaCollectionNode) enumerator.Value; Add(node.NamespaceURI, node); } } ///Adds all the namespaces defined in the given collection /// (including their associated schemas) to this collection. ////// /// public XmlSchema this[string ns] { get { XmlSchemaCollectionNode node = (XmlSchemaCollectionNode)collection[(ns != null) ? ns: string.Empty]; return (node != null) ? node.Schema : null; } } ///Looks up the schema by it's associated namespace URI ////// /// public bool Contains(XmlSchema schema) { if (schema == null) { throw new ArgumentNullException("schema"); } return this[schema.TargetNamespace] != null; } ///[To be supplied.] ///public bool Contains(string ns) { return collection[(ns != null) ? ns : string.Empty] != null; } /// /// /// /// Get a IEnumerator of the XmlSchemaCollection. /// IEnumerator IEnumerable.GetEnumerator() { return new XmlSchemaCollectionEnumerator(collection); } ///public XmlSchemaCollectionEnumerator GetEnumerator() { return new XmlSchemaCollectionEnumerator(collection); } /// /// void ICollection.CopyTo(Array array, int index) { if (array == null) throw new ArgumentNullException("array"); if (index < 0) throw new ArgumentOutOfRangeException("index"); for (XmlSchemaCollectionEnumerator e = this.GetEnumerator(); e.MoveNext();) { if (index == array.Length && array.IsFixedSize) { throw new ArgumentOutOfRangeException("index"); } array.SetValue(e.Current, index++); } } /// /// /// public void CopyTo(XmlSchema[] array, int index) { if (array == null) throw new ArgumentNullException("array"); if (index < 0) throw new ArgumentOutOfRangeException("index"); for (XmlSchemaCollectionEnumerator e = this.GetEnumerator(); e.MoveNext();) { XmlSchema schema = e.Current; if (schema != null) { if (index == array.Length) { throw new ArgumentOutOfRangeException("index"); } array[index++] = e.Current; } } } ///[To be supplied.] ////// bool ICollection.IsSynchronized { get { return true; } } /// /// object ICollection.SyncRoot { get { return this; } } /// /// int ICollection.Count { get { return collection.Count; } } internal SchemaInfo GetSchemaInfo(string ns) { XmlSchemaCollectionNode node = (XmlSchemaCollectionNode)collection[(ns != null) ? ns : string.Empty]; return (node != null) ? node.SchemaInfo : null; } internal SchemaNames GetSchemaNames(XmlNameTable nt) { if (nameTable != nt) { return new SchemaNames(nt); } else { if (schemaNames == null) { schemaNames = new SchemaNames( nameTable ); } return schemaNames; } } internal XmlSchema Add(string ns, SchemaInfo schemaInfo, XmlSchema schema, bool compile) { return Add(ns, schemaInfo, schema, compile, xmlResolver); } private XmlSchema Add(string ns, SchemaInfo schemaInfo, XmlSchema schema, bool compile, XmlResolver resolver) { int errorCount = 0; if (schema != null) { if (schema.ErrorCount == 0 && compile) { if (!schema.CompileSchema(this, resolver, schemaInfo, ns, validationEventHandler, nameTable, true)) { errorCount = 1; } ns = schema.TargetNamespace == null ? string.Empty : schema.TargetNamespace; } errorCount += schema.ErrorCount; } else { errorCount += schemaInfo.ErrorCount; //ns = ns == null? string.Empty : NameTable.Add(ns); ns = NameTable.Add(ns); //Added without checking for ns == null, since XDR cannot have null namespace } if (errorCount == 0) { XmlSchemaCollectionNode node = new XmlSchemaCollectionNode(); node.NamespaceURI = ns; node.SchemaInfo = schemaInfo; node.Schema = schema; Add(ns, node); return schema; } return null; } private void Add(string ns, XmlSchemaCollectionNode node) { if (isThreadSafe) wLock.AcquireWriterLock(timeout); try { if (collection[ns] != null) collection.Remove(ns); collection.Add(ns, node); } finally { if (isThreadSafe) wLock.ReleaseWriterLock(); } } private void SendValidationEvent(XmlSchemaException e) { if (validationEventHandler != null) { validationEventHandler(this, new ValidationEventArgs(e)); } else { throw e; } } internal ValidationEventHandler EventHandler { get { return validationEventHandler; } set { validationEventHandler = value; } } }; internal sealed class XmlSchemaCollectionNode { private String namespaceUri; private SchemaInfo schemaInfo; private XmlSchema schema; internal String NamespaceURI { get { return namespaceUri;} set { namespaceUri = value;} } internal SchemaInfo SchemaInfo { get { return schemaInfo;} set { schemaInfo = value;} } internal XmlSchema Schema { get { return schema;} set { schema = value;} } } /// /// /// public sealed class XmlSchemaCollectionEnumerator: IEnumerator { private IDictionaryEnumerator enumerator; internal XmlSchemaCollectionEnumerator( Hashtable collection ) { enumerator = collection.GetEnumerator(); } ///[To be supplied.] ////// void IEnumerator.Reset() { enumerator.Reset(); } /// /// bool IEnumerator.MoveNext() { return enumerator.MoveNext(); } /// /// /// public bool MoveNext() { return enumerator.MoveNext(); } ///[To be supplied.] ////// object IEnumerator.Current { get { return this.Current; } } /// /// /// public XmlSchema Current { get { XmlSchemaCollectionNode n = (XmlSchemaCollectionNode)enumerator.Value; if (n != null) return n.Schema; else return null; } } internal XmlSchemaCollectionNode CurrentNode { get { XmlSchemaCollectionNode n = (XmlSchemaCollectionNode)enumerator.Value; return n; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //[To be supplied.] ///// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- namespace System.Xml.Schema { using System; using System.Threading; using System.Collections; using System.Xml.Schema; using System.Runtime.Versioning; ////// /// [Obsolete("Use System.Xml.Schema.XmlSchemaSet for schema compilation and validation. http://go.microsoft.com/fwlink/?linkid=14202")] public sealed class XmlSchemaCollection: ICollection { private Hashtable collection; private XmlNameTable nameTable; private SchemaNames schemaNames; private ReaderWriterLock wLock; private int timeout = Timeout.Infinite; private bool isThreadSafe = true; private ValidationEventHandler validationEventHandler = null; private XmlResolver xmlResolver = null; ///The XmlSchemaCollection contains a set of namespace URI's. /// Each namespace also have an associated private data cache /// corresponding to the XML-Data Schema or W3C XML Schema. /// The XmlSchemaCollection will able to load XSD and XDR schemas, /// and compile them into an internal "cooked schema representation". /// The Validate method then uses this internal representation for /// efficient runtime validation of any given subtree. ////// /// public XmlSchemaCollection() : this(new NameTable()) { } ///Construct a new empty schema collection. ////// /// public XmlSchemaCollection(XmlNameTable nametable) { if (nametable == null) { throw new ArgumentNullException("nametable"); } nameTable = nametable; collection = Hashtable.Synchronized(new Hashtable()); xmlResolver = new XmlUrlResolver(); isThreadSafe = true; if (isThreadSafe) { wLock = new ReaderWriterLock(); } } ///Construct a new empty schema collection with associated XmlNameTable. /// The XmlNameTable is used when loading schemas ////// /// public int Count { get { return collection.Count;} } ///Returns the number of namespaces defined in this collection /// (whether or not there is an actual schema associated with those namespaces or not). ////// /// public XmlNameTable NameTable { get { return nameTable;} } ///The default XmlNameTable used by the XmlSchemaCollection when loading new schemas. ///public event ValidationEventHandler ValidationEventHandler { add { validationEventHandler += value; } remove { validationEventHandler -= value; } } internal XmlResolver XmlResolver { set { xmlResolver = value; } } /// /// /// [ResourceConsumption(ResourceScope.Machine)] [ResourceExposure(ResourceScope.Machine)] public XmlSchema Add(string ns, string uri) { if (uri == null || uri.Length == 0) throw new ArgumentNullException("uri"); XmlTextReader reader = new XmlTextReader(uri, nameTable); reader.XmlResolver = xmlResolver; XmlSchema schema = null; try { schema = Add(ns, reader, xmlResolver); while(reader.Read());// wellformness check } finally { reader.Close(); } return schema; } ///Add the schema located by the given URL into the schema collection. /// If the given schema references other namespaces, the schemas for those other /// namespaces are NOT automatically loaded. ///public XmlSchema Add(String ns, XmlReader reader) { return Add(ns, reader, xmlResolver); } /// /// /// public XmlSchema Add(String ns, XmlReader reader, XmlResolver resolver) { if (reader == null) throw new ArgumentNullException("reader"); XmlNameTable readerNameTable = reader.NameTable; SchemaInfo schemaInfo = new SchemaInfo(); Parser parser = new Parser(SchemaType.None, readerNameTable, GetSchemaNames(readerNameTable), validationEventHandler); parser.XmlResolver = resolver; SchemaType schemaType; try { schemaType = parser.Parse(reader, ns); } catch (XmlSchemaException e) { SendValidationEvent(e); return null; } if (schemaType == SchemaType.XSD) { schemaInfo.SchemaType = SchemaType.XSD; return Add(ns, schemaInfo, parser.XmlSchema, true, resolver); } else { SchemaInfo xdrSchema = parser.XdrSchema; return Add(ns, parser.XdrSchema, null, true, resolver); } } ///Add the given schema into the schema collection. /// If the given schema references other namespaces, the schemas for those /// other namespaces are NOT automatically loaded. ////// /// public XmlSchema Add(XmlSchema schema) { return Add(schema, xmlResolver); } ///[To be supplied.] ///public XmlSchema Add(XmlSchema schema, XmlResolver resolver) { if (schema == null) throw new ArgumentNullException("schema"); SchemaInfo schemaInfo = new SchemaInfo(); schemaInfo.SchemaType = SchemaType.XSD; return Add(schema.TargetNamespace, schemaInfo, schema, true, resolver); } /// /// /// public void Add(XmlSchemaCollection schema) { if (schema == null) throw new ArgumentNullException("schema"); if (this == schema) return; IDictionaryEnumerator enumerator = schema.collection.GetEnumerator(); while (enumerator.MoveNext()) { XmlSchemaCollectionNode node = (XmlSchemaCollectionNode) enumerator.Value; Add(node.NamespaceURI, node); } } ///Adds all the namespaces defined in the given collection /// (including their associated schemas) to this collection. ////// /// public XmlSchema this[string ns] { get { XmlSchemaCollectionNode node = (XmlSchemaCollectionNode)collection[(ns != null) ? ns: string.Empty]; return (node != null) ? node.Schema : null; } } ///Looks up the schema by it's associated namespace URI ////// /// public bool Contains(XmlSchema schema) { if (schema == null) { throw new ArgumentNullException("schema"); } return this[schema.TargetNamespace] != null; } ///[To be supplied.] ///public bool Contains(string ns) { return collection[(ns != null) ? ns : string.Empty] != null; } /// /// /// /// Get a IEnumerator of the XmlSchemaCollection. /// IEnumerator IEnumerable.GetEnumerator() { return new XmlSchemaCollectionEnumerator(collection); } ///public XmlSchemaCollectionEnumerator GetEnumerator() { return new XmlSchemaCollectionEnumerator(collection); } /// /// void ICollection.CopyTo(Array array, int index) { if (array == null) throw new ArgumentNullException("array"); if (index < 0) throw new ArgumentOutOfRangeException("index"); for (XmlSchemaCollectionEnumerator e = this.GetEnumerator(); e.MoveNext();) { if (index == array.Length && array.IsFixedSize) { throw new ArgumentOutOfRangeException("index"); } array.SetValue(e.Current, index++); } } /// /// /// public void CopyTo(XmlSchema[] array, int index) { if (array == null) throw new ArgumentNullException("array"); if (index < 0) throw new ArgumentOutOfRangeException("index"); for (XmlSchemaCollectionEnumerator e = this.GetEnumerator(); e.MoveNext();) { XmlSchema schema = e.Current; if (schema != null) { if (index == array.Length) { throw new ArgumentOutOfRangeException("index"); } array[index++] = e.Current; } } } ///[To be supplied.] ////// bool ICollection.IsSynchronized { get { return true; } } /// /// object ICollection.SyncRoot { get { return this; } } /// /// int ICollection.Count { get { return collection.Count; } } internal SchemaInfo GetSchemaInfo(string ns) { XmlSchemaCollectionNode node = (XmlSchemaCollectionNode)collection[(ns != null) ? ns : string.Empty]; return (node != null) ? node.SchemaInfo : null; } internal SchemaNames GetSchemaNames(XmlNameTable nt) { if (nameTable != nt) { return new SchemaNames(nt); } else { if (schemaNames == null) { schemaNames = new SchemaNames( nameTable ); } return schemaNames; } } internal XmlSchema Add(string ns, SchemaInfo schemaInfo, XmlSchema schema, bool compile) { return Add(ns, schemaInfo, schema, compile, xmlResolver); } private XmlSchema Add(string ns, SchemaInfo schemaInfo, XmlSchema schema, bool compile, XmlResolver resolver) { int errorCount = 0; if (schema != null) { if (schema.ErrorCount == 0 && compile) { if (!schema.CompileSchema(this, resolver, schemaInfo, ns, validationEventHandler, nameTable, true)) { errorCount = 1; } ns = schema.TargetNamespace == null ? string.Empty : schema.TargetNamespace; } errorCount += schema.ErrorCount; } else { errorCount += schemaInfo.ErrorCount; //ns = ns == null? string.Empty : NameTable.Add(ns); ns = NameTable.Add(ns); //Added without checking for ns == null, since XDR cannot have null namespace } if (errorCount == 0) { XmlSchemaCollectionNode node = new XmlSchemaCollectionNode(); node.NamespaceURI = ns; node.SchemaInfo = schemaInfo; node.Schema = schema; Add(ns, node); return schema; } return null; } private void Add(string ns, XmlSchemaCollectionNode node) { if (isThreadSafe) wLock.AcquireWriterLock(timeout); try { if (collection[ns] != null) collection.Remove(ns); collection.Add(ns, node); } finally { if (isThreadSafe) wLock.ReleaseWriterLock(); } } private void SendValidationEvent(XmlSchemaException e) { if (validationEventHandler != null) { validationEventHandler(this, new ValidationEventArgs(e)); } else { throw e; } } internal ValidationEventHandler EventHandler { get { return validationEventHandler; } set { validationEventHandler = value; } } }; internal sealed class XmlSchemaCollectionNode { private String namespaceUri; private SchemaInfo schemaInfo; private XmlSchema schema; internal String NamespaceURI { get { return namespaceUri;} set { namespaceUri = value;} } internal SchemaInfo SchemaInfo { get { return schemaInfo;} set { schemaInfo = value;} } internal XmlSchema Schema { get { return schema;} set { schema = value;} } } /// /// /// public sealed class XmlSchemaCollectionEnumerator: IEnumerator { private IDictionaryEnumerator enumerator; internal XmlSchemaCollectionEnumerator( Hashtable collection ) { enumerator = collection.GetEnumerator(); } ///[To be supplied.] ////// void IEnumerator.Reset() { enumerator.Reset(); } /// /// bool IEnumerator.MoveNext() { return enumerator.MoveNext(); } /// /// /// public bool MoveNext() { return enumerator.MoveNext(); } ///[To be supplied.] ////// object IEnumerator.Current { get { return this.Current; } } /// /// /// public XmlSchema Current { get { XmlSchemaCollectionNode n = (XmlSchemaCollectionNode)enumerator.Value; if (n != null) return n.Schema; else return null; } } internal XmlSchemaCollectionNode CurrentNode { get { XmlSchemaCollectionNode n = (XmlSchemaCollectionNode)enumerator.Value; return n; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.[To be supplied.] ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WebControlsSection.cs
- SafeMILHandle.cs
- Application.cs
- ControlCollection.cs
- FlowLayoutPanel.cs
- AssemblyName.cs
- NamespaceTable.cs
- TemplatedEditableDesignerRegion.cs
- SpellerHighlightLayer.cs
- XmlHierarchicalDataSourceView.cs
- TableLayout.cs
- CompoundFileDeflateTransform.cs
- GridViewColumn.cs
- DesignerWidgets.cs
- ControlBuilderAttribute.cs
- Opcode.cs
- DocumentPage.cs
- PageEventArgs.cs
- NonBatchDirectoryCompiler.cs
- PageTheme.cs
- RenderData.cs
- ViewDesigner.cs
- ClaimTypeRequirement.cs
- RowsCopiedEventArgs.cs
- DataGridViewColumn.cs
- TransformPattern.cs
- SystemNetHelpers.cs
- _LocalDataStoreMgr.cs
- Constraint.cs
- ContractMethodInfo.cs
- VScrollProperties.cs
- documentation.cs
- DataColumnChangeEvent.cs
- TextPenaltyModule.cs
- XmlDocumentSerializer.cs
- SqlDataSource.cs
- HttpChannelFactory.cs
- EnvironmentPermission.cs
- WsdlParser.cs
- UpdatePanelTrigger.cs
- TcpAppDomainProtocolHandler.cs
- ResourceLoader.cs
- MessageQueue.cs
- SafeCryptContextHandle.cs
- CompilationSection.cs
- CacheOutputQuery.cs
- SvcMapFile.cs
- XmlLinkedNode.cs
- RuleSetCollection.cs
- PersonalizationState.cs
- FontStyles.cs
- Base64Encoder.cs
- RectangleGeometry.cs
- ObjectQuery.cs
- DNS.cs
- RecipientServiceModelSecurityTokenRequirement.cs
- RequestTimeoutManager.cs
- SecUtil.cs
- SqlDataRecord.cs
- DesignerResources.cs
- StateChangeEvent.cs
- DirtyTextRange.cs
- HttpException.cs
- GridProviderWrapper.cs
- XPathDocumentIterator.cs
- ControlPropertyNameConverter.cs
- InternalsVisibleToAttribute.cs
- DbgUtil.cs
- _DigestClient.cs
- TypeContext.cs
- TextServicesDisplayAttribute.cs
- TdsValueSetter.cs
- LongValidatorAttribute.cs
- HiddenField.cs
- OleDbConnection.cs
- DocobjHost.cs
- PeerToPeerException.cs
- NonVisualControlAttribute.cs
- PermissionRequestEvidence.cs
- InkCanvasSelectionAdorner.cs
- ProcessHostConfigUtils.cs
- TemplateBindingExtension.cs
- HtmlEncodedRawTextWriter.cs
- NavigateUrlConverter.cs
- DbgCompiler.cs
- VirtualPathUtility.cs
- GroupBox.cs
- MarshalByValueComponent.cs
- CallTemplateAction.cs
- AuthorizationRule.cs
- MemberAccessException.cs
- ManualResetEvent.cs
- Slider.cs
- TypeLibraryHelper.cs
- CLSCompliantAttribute.cs
- fixedPageContentExtractor.cs
- PenThreadPool.cs
- CodeTypeReferenceCollection.cs
- MouseEvent.cs
- Simplifier.cs