5 // Copyright 2007 Novell (http://www.novell.com)
7 // Permission is hereby granted, free of charge, to any person obtaining
8 // a copy of this software and associated documentation files (the
9 // "Software"), to deal in the Software without restriction, including
10 // without limitation the rights to use, copy, modify, merge, publish,
11 // distribute, sublicense, and/or sell copies of the Software, and to
12 // permit persons to whom the Software is furnished to do so, subject to
13 // the following conditions:
15 // The above copyright notice and this permission notice shall be
16 // included in all copies or substantial portions of the Software.
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 using System.Xml.Linq;
33 namespace System.Xml.Schema
35 public static class Extensions
37 public static IXmlSchemaInfo GetSchemaInfo (this XAttribute source)
39 return source.Annotation<IXmlSchemaInfo> ();
42 public static IXmlSchemaInfo GetSchemaInfo (this XElement source)
44 return source.Annotation<IXmlSchemaInfo> ();
47 public static void Validate (this XAttribute source, XmlSchemaObject partialValidationType, XmlSchemaSet schemas, ValidationEventHandler validationEventHandler)
49 Validate (source, partialValidationType, schemas, validationEventHandler, false);
52 public static void Validate (this XAttribute source, XmlSchemaObject partialValidationType, XmlSchemaSet schemas, ValidationEventHandler validationEventHandler, bool addSchemaInfo)
55 throw new ArgumentNullException ("source");
57 throw new ArgumentNullException ("schemas");
58 var nsmgr = new XmlNamespaceManager (new NameTable ());
59 var v = new XmlSchemaValidator (nsmgr.NameTable, schemas, nsmgr, XmlSchemaValidationFlags.None);
60 if (validationEventHandler != null)
61 v.ValidationEventHandler += validationEventHandler;
62 if (partialValidationType != null)
63 v.Initialize (partialValidationType);
66 var xi = addSchemaInfo ? new XmlSchemaInfo () : null;
67 v.ValidateAttribute (source.Name.LocalName, source.Name.NamespaceName, source.Value, xi);
70 public static void Validate (this XDocument source, XmlSchemaSet schemas, ValidationEventHandler validationEventHandler)
72 Validate (source, schemas, validationEventHandler, false);
75 public static void Validate (this XDocument source, XmlSchemaSet schemas, ValidationEventHandler validationEventHandler, bool addSchemaInfo)
78 throw new ArgumentNullException ("source");
80 throw new ArgumentNullException ("schemas");
81 var xrs = new XmlReaderSettings () { ValidationType = ValidationType.Schema };
82 xrs.Schemas = schemas;
83 xrs.ValidationEventHandler += validationEventHandler;
84 var xsource = new XNodeReader (source);
85 var xr = XmlReader.Create (xsource, xrs);
88 if (xr.NodeType == XmlNodeType.Element) {
89 xsource.CurrentNode.AddAnnotation (xr.SchemaInfo);
90 while (xr.MoveToNextAttribute ())
91 if (xr.NamespaceURI != XUtil.XmlnsNamespace)
92 xsource.GetCurrentAttribute ().AddAnnotation (xr.SchemaInfo);
100 public static void Validate (this XElement source, XmlSchemaObject partialValidationType, XmlSchemaSet schemas, ValidationEventHandler validationEventHandler)
102 throw new NotImplementedException ();
106 public static void Validate (this XElement source, XmlSchemaObject partialValidationType, XmlSchemaSet schemas, ValidationEventHandler validationEventHandler, bool addSchemaInfo)
108 throw new NotImplementedException ();