| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- //
- // System.Xml.Schema.XmlSchemaCollection.cs
- //
- // Authors:
- // Dwivedi, Ajay kumar [email protected]
- // Atsushi Enomoto [email protected]
- //
- //
- // Permission is hereby granted, free of charge, to any person obtaining
- // a copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to
- // permit persons to whom the Software is furnished to do so, subject to
- // the following conditions:
- //
- // The above copyright notice and this permission notice shall be
- // included in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- //
- using System;
- using System.Collections;
- using System.Xml;
- namespace System.Xml.Schema
- {
- /// <summary>
- /// Summary description for XmlSchemaCollection.
- ///
- /// It is just a wrapper for XmlSchemaSet (unlike MS.NET, our
- /// XmlSchemaCollection is originally designed to be conformant to
- /// W3C specification).
- /// </summary>
- #if NET_2_0
- [Obsolete ("Use XmlSchemaSet.")]
- #endif
- public sealed class XmlSchemaCollection : ICollection, IEnumerable
- {
- //private fields
- private XmlSchemaSet schemaSet;
- public XmlSchemaCollection ()
- : this (new NameTable ())
- {
- }
- public XmlSchemaCollection (XmlNameTable nameTable)
- : this (new XmlSchemaSet (nameTable))
- {
- }
- internal XmlSchemaCollection (XmlSchemaSet schemaSet)
- {
- this.schemaSet = schemaSet;
- }
- //properties
- internal XmlSchemaSet SchemaSet {
- get { return schemaSet; }
- }
- public int Count {
- get { return schemaSet.Count; }
- }
- public XmlNameTable NameTable {
- get { return schemaSet.NameTable; }
- }
- public XmlSchema this [ string ns ] {
- get {
- ICollection col = schemaSet.Schemas (ns);
- if (col == null)
- return null;
- IEnumerator e = col.GetEnumerator ();
- if (e.MoveNext ())
- return (XmlSchema) e.Current;
- else
- return null;
- }
- }
- // Events
- public event ValidationEventHandler ValidationEventHandler;
- // Methods
- public XmlSchema Add (string ns, XmlReader reader)
- {
- return Add (ns, reader, new XmlUrlResolver ());
- }
- #if NET_1_1
- public XmlSchema Add (string ns, XmlReader reader, XmlResolver resolver)
- #else
- internal XmlSchema Add (string ns, XmlReader reader, XmlResolver resolver)
- #endif
- {
- XmlSchema schema = XmlSchema.Read (reader, ValidationEventHandler);
- schema.Compile (ValidationEventHandler, schemaSet, resolver);
- lock (schemaSet) {
- return schemaSet.Add (schema);
- }
- }
- public XmlSchema Add (string ns, string uri)
- {
- lock (schemaSet) {
- return schemaSet.Add (ns, uri);
- }
- }
- public XmlSchema Add (XmlSchema schema)
- {
- return Add (schema, new XmlUrlResolver ());
- }
- public XmlSchema Add (XmlSchema schema, XmlResolver resolver)
- {
- if (schema == null)
- throw new ArgumentNullException ("schema");
- // XmlSchemaCollection.Add() compiles, while XmlSchemaSet.Add() does not
- if (!schema.IsCompiled)
- schema.Compile (ValidationEventHandler, schemaSet, resolver);
- // compilation error -> returns null (and don't add to the collection).
- if (!schema.IsCompiled)
- return null;
- lock (schemaSet) {
- // consider imported schemas.
- schemaSet.Add (schema.Schemas);
- return schema;
- }
- }
- private string GetSafeNs (string ns)
- {
- return ns != null ? ns : String.Empty;
- }
- public void Add (XmlSchemaCollection schema)
- {
- if (schema == null)
- throw new ArgumentNullException ("schema");
- lock (schemaSet) {
- schemaSet.Add (schema.schemaSet);
- }
- }
- public bool Contains (string ns)
- {
- lock (schemaSet) {
- return schemaSet.Contains (ns);
- }
- }
- public bool Contains (XmlSchema schema)
- {
- lock (schemaSet) {
- return schemaSet.Contains (schema);
- }
- }
- public void CopyTo (XmlSchema[] array, int index)
- {
- lock (schemaSet) {
- schemaSet.CopyTo (array, index);
- }
- }
- public XmlSchemaCollectionEnumerator GetEnumerator ()
- {
- return new XmlSchemaCollectionEnumerator (this);
- }
- // interface Methods
- void ICollection.CopyTo (Array array, int index)
- {
- lock (schemaSet) {
- schemaSet.CopyTo (array, index);
- }
- }
- bool ICollection.IsSynchronized
- {
- get { return true; } // always
- }
- IEnumerator IEnumerable.GetEnumerator ()
- {
- return this.GetEnumerator ();
- }
- Object ICollection.SyncRoot
- {
- get { return this; }
- }
- internal void OnValidationError (object o, ValidationEventArgs e)
- {
- if (ValidationEventHandler != null)
- ValidationEventHandler (o, e);
- else if (e.Severity == XmlSeverityType.Error)
- throw e.Exception;
- }
- }
- }
|