XmlSchemaValidator イベント
XmlSchemaValidator クラス
アセンブリ: System.Xml (system.xml.dll 内)


XmlSchemaValidator クラスには、プッシュ ベースの方法で XML スキーマについて XML データを検証するための、効率的でパフォーマンスの高い機構が用意されています。たとえば、XmlSchemaValidator クラスを使用すると、XML infoset を XML ドキュメントとしてシリアル化しないでそのまま検証し、次に、検証 XML リーダーを使用してドキュメントを再解析できます。XmlSchemaValidator クラスは、カスタム XML データ ソースに対する検証エンジンを構築するために使用したり、検証 XML ライタを構築するための方法として使用したりすることもできます。
XmlSchemaValidator クラスの詳細については、「XmlSchemaValidator のプッシュ ベースの検証」のトピックを参照してください。
![]() |
---|
既定では、XmlSchemaValidator オブジェクトの ProcessInlineSchema 検証フラグおよび ProcessSchemaLocation 検証フラグは設定されません。また既定では、XmlSchemaValidator オブジェクトの XmlResolver プロパティは、null 参照 (Visual Basic では Nothing) に設定されます。このため、インクルード要素、インポート要素、または再定義要素で参照される外部スキーマは既定では解決されません。 |

contosoBooks.xsd スキーマで contosoBooks.xml ファイルを検証する例を次に示します。この例では、XmlSerializer クラスを使用して contosoBooks.xml ファイルを逆シリアル化し、ノードの値を XmlSchemaValidator クラスのメソッドに渡します。
Imports System Imports System.Xml Imports System.Xml.Schema Imports System.Xml.Serialization Namespace Microsoft.Samples.Xml.Schema Class XmlSchemaValidatorExamples Shared Sub Main() ' The XML document to deserialize into the XmlSerializer object. Dim reader As XmlReader = XmlReader.Create("contosoBooks.xml") ' The XmlSerializer object. Dim serializer As XmlSerializer = New XmlSerializer(GetType(ContosoBooks)) Dim books As ContosoBooks = CType(serializer.Deserialize(reader), ContosoBooks) ' The XmlSchemaSet object containing the schema used to validate the XML document. Dim schemaSet As XmlSchemaSet = New XmlSchemaSet() schemaSet.Add("http://www.contoso.com/books", "contosoBooks.xsd") ' The XmlNamespaceManager object used to handle namespaces. Dim manager As XmlNamespaceManager = New XmlNamespaceManager(reader.NameTable) ' Assign a ValidationEventHandler to handle schema validation warnings and errors. Dim validator As XmlSchemaValidator = New XmlSchemaValidator(reader.NameTable, schemaSet, manager, XmlSchemaValidationFlags.None) 'validator.ValidationEventHandler += New ValidationEventHandler(SchemaValidationEventHandler) AddHandler validator.ValidationEventHandler, AddressOf SchemaValidationEventHandler ' Initialize the XmlSchemaValidator object. validator.Initialize() ' Validate the bookstore element, verify that all required attributes are present ' and prepare to validate child content. validator.ValidateElement("bookstore", "http://www.contoso.com/books", Nothing) validator.ValidateEndOfAttributes(Nothing) ' Get the next exptected element in the bookstore context. Dim particles() As XmlSchemaParticle = validator.GetExpectedParticles() Dim nextElement As XmlSchemaElement = particles(0) Console.WriteLine("Expected Element: '{0}'", nextElement.Name) For Each book As BookType In books.book ' Validate the book element. validator.ValidateElement("book", "http://www.contoso.com/books", Nothing) ' Get the exptected attributes for the book element. Console.Write(vbCrLf & "Expected attributes: ") Dim attributes() As XmlSchemaAttribute = validator.GetExpectedAttributes() For Each attribute As XmlSchemaAttribute In attributes Console.Write("'{0}' ", attribute.Name) Next Console.WriteLine() ' Validate the genre attribute and display it's post schema validation information. If Not book.Genre Is Nothing Then validator.ValidateAttribute("genre", "", book.Genre, schemaInfo) End If DisplaySchemaInfo() ' Validate the publicationdate attribute and display it's post schema validation information. If Not book.PublicationDate = Nothing Then validator.ValidateAttribute("publicationdate", "", dateTimeGetter(book.PublicationDate), schemaInfo) End If DisplaySchemaInfo() ' Validate the ISBN attribute and display it's post schema validation information. If Not book.Isbn Is Nothing Then validator.ValidateAttribute("ISBN", "", book.Isbn, schemaInfo) End If DisplaySchemaInfo() ' Verify that all required attributes of the book element are present ' and prepare to validate child content. validator.ValidateEndOfAttributes(Nothing) ' Validate the title element and it's content. validator.ValidateElement("title", "http://www.contoso.com/books", Nothing) validator.ValidateEndElement(Nothing, book.Title) ' Validate the author element, verify that all required attributes are present ' and prepare to validate child content. validator.ValidateElement("author", "http://www.contoso.com/books", Nothing) validator.ValidateEndOfAttributes(Nothing) If Not book.Author.Name Is Nothing Then ' Validate the name element and it's content. validator.ValidateElement("name", "http://www.contoso.com/books", Nothing) validator.ValidateEndElement(Nothing, book.Author.Name) End If If Not book.Author.FirstName Is Nothing Then ' Validate the first-name element and it's content. validator.ValidateElement("first-name", "http://www.contoso.com/books", Nothing) validator.ValidateEndElement(Nothing, book.Author.FirstName) End If If Not book.Author.LastName Is Nothing Then ' Validate the last-name element and it's content. validator.ValidateElement("last-name", "http://www.contoso.com/books", Nothing) validator.ValidateEndElement(Nothing, book.Author.LastName) End If ' Validate the content of the author element. validator.ValidateEndElement(Nothing) ' Validate the price element and it's content. validator.ValidateElement("price", "http://www.contoso.com/books", Nothing) validator.ValidateEndElement(Nothing, book.Price) ' Validate the content of the book element. validator.ValidateEndElement(Nothing) Next ' Validate the content of the bookstore element. validator.ValidateEndElement(Nothing) ' Close the XmlReader object. reader.Close() End Sub Shared schemaInfo As XmlSchemaInfo = New XmlSchemaInfo() Shared dateTimeGetterContent As Object Shared Function dateTimeGetterHandle() As Object Return dateTimeGetterContent End Function Shared Function dateTimeGetter(ByVal dateTime As DateTime) As XmlValueGetter dateTimeGetterContent = dateTime Return New XmlValueGetter(AddressOf dateTimeGetterHandle) End Function Shared Sub DisplaySchemaInfo() If Not schemaInfo.SchemaElement Is Nothing Then Console.WriteLine("Element '{0}' with type '{1}' is '{2}'", schemaInfo.SchemaElement.Name, schemaInfo.SchemaType, schemaInfo.Validity) ElseIf Not schemaInfo.SchemaAttribute Is Nothing Then Console.WriteLine("Attribute '{0}' with type '{1}' is '{2}'", schemaInfo.SchemaAttribute.Name, schemaInfo.SchemaType, schemaInfo.Validity) End If End Sub Shared Sub SchemaValidationEventHandler(ByVal sender As Object, ByVal e As ValidationEventArgs) Select Case e.Severity Case XmlSeverityType.Error Console.WriteLine(vbCrLf & "Error: {0}", e.Message) Exit Sub Case XmlSeverityType.Warning Console.WriteLine(vbCrLf & "Warning: {0}", e.Message) Exit Sub End Select End Sub End Class <XmlRootAttribute("bookstore", Namespace:="http://www.contoso.com/books", IsNullable:=False)> _ Public Class ContosoBooks <XmlElementAttribute("book")> _ Public book() As BookType End Class Public Class BookType <XmlAttributeAttribute("genre")> _ Public Genre As String <XmlAttributeAttribute("publicationdate", DataType:="date")> _ Public PublicationDate As DateTime <XmlAttributeAttribute("ISBN")> _ Public Isbn As String <XmlElementAttribute("title")> _ Public Title As String <XmlElementAttribute("author")> _ Public Author As BookAuthor <XmlElementAttribute("price")> _ Public Price As Decimal End Class Public Class BookAuthor <XmlElementAttribute("name")> _ Public Name As String <XmlElementAttribute("first-name")> _ Public FirstName As String <XmlElementAttribute("last-name")> _ Public LastName As String End Class End Namespace
using System; using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; namespace Microsoft.Samples.Xml.Schema { class XmlSchemaValidatorExamples { static void Main() { // The XML document to deserialize into the XmlSerializer object. XmlReader reader = XmlReader.Create("contosoBooks.xml"); // The XmlSerializer object. XmlSerializer serializer = new XmlSerializer(typeof(ContosoBooks)); ContosoBooks books = (ContosoBooks)serializer.Deserialize(reader); // The XmlSchemaSet object containing the schema used to validate the XML document. XmlSchemaSet schemaSet = new XmlSchemaSet(); schemaSet.Add("http://www.contoso.com/books", "contosoBooks.xsd"); // The XmlNamespaceManager object used to handle namespaces. XmlNamespaceManager manager = new XmlNamespaceManager(reader.NameTable); // Assign a ValidationEventHandler to handle schema validation warnings and errors. XmlSchemaValidator validator = new XmlSchemaValidator(reader.NameTable, schemaSet, manager, XmlSchemaValidationFlags.None); validator.ValidationEventHandler += new ValidationEventHandler(SchemaValidationEventHandler); // Initialize the XmlSchemaValidator object. validator.Initialize(); // Validate the bookstore element, verify that all required attributes are present // and prepare to validate child content. validator.ValidateElement("bookstore", "http://www.contoso.com/books", null); validator.ValidateEndOfAttributes(null); // Get the next exptected element in the bookstore context. XmlSchemaParticle[] particles = validator.GetExpectedParticles(); XmlSchemaElement nextElement = particles[0] as XmlSchemaElement; Console.WriteLine("Expected Element: '{0}'", nextElement.Name); foreach (BookType book in books.Book) { // Validate the book element. validator.ValidateElement("book", "http://www.contoso.com/books", null); // Get the exptected attributes for the book element. Console.Write("\nExpected attributes: "); XmlSchemaAttribute[] attributes = validator.GetExpectedAttributes(); foreach (XmlSchemaAttribute attribute in attributes) { Console.Write("'{0}' ", attribute.Name); } Console.WriteLine(); // Validate the genre attribute and display it's post schema validation information. if (book.Genre != null) { validator.ValidateAttribute("genre", "", book.Genre, schemaInfo); } DisplaySchemaInfo(); // Validate the publicationdate attribute and display it's post schema validation information. if (book.PublicationDate != null) { validator.ValidateAttribute("publicationdate", "", dateTimeGetter(book.PublicationDate), schemaInfo); } DisplaySchemaInfo(); // Validate the ISBN attribute and display it's post schema validation information. if (book.Isbn != null) { validator.ValidateAttribute("ISBN", "", book.Isbn, schemaInfo); } DisplaySchemaInfo(); // Verify that all required attributes of the book element are present // and prepare to validate child content. validator.ValidateEndOfAttributes(null); // Validate the title element and it's content. validator.ValidateElement("title", "http://www.contoso.com/books", null); validator.ValidateEndElement(null, book.Title); // Validate the author element, verify that all required attributes are present // and prepare to validate child content. validator.ValidateElement("author", "http://www.contoso.com/books", null); validator.ValidateEndOfAttributes(null); if (book.Author.Name != null) { // Validate the name element and it's content. validator.ValidateElement("name", "http://www.contoso.com/books", null); validator.ValidateEndElement(null, book.Author.Name); } if (book.Author.FirstName != null) { // Validate the first-name element and it's content. validator.ValidateElement("first-name", "http://www.contoso.com/books", null); validator.ValidateEndElement(null, book.Author.FirstName); } if (book.Author.LastName != null) { // Validate the last-name element and it's content. validator.ValidateElement("last-name", "http://www.contoso.com/books", null); validator.ValidateEndElement(null, book.Author.LastName); } // Validate the content of the author element. validator.ValidateEndElement(null); // Validate the price element and it's content. validator.ValidateElement("price", "http://www.contoso.com/books", null); validator.ValidateEndElement(null, book.Price); // Validate the content of the book element. validator.ValidateEndElement(null); } // Validate the content of the bookstore element. validator.ValidateEndElement(null); // Close the XmlReader object. reader.Close(); } static XmlSchemaInfo schemaInfo = new XmlSchemaInfo(); static object dateTimeGetterContent; static object dateTimeGetterHandle() { return dateTimeGetterContent; } static XmlValueGetter dateTimeGetter(DateTime dateTime) { dateTimeGetterContent = dateTime; return new XmlValueGetter(dateTimeGetterHandle); } static void DisplaySchemaInfo() { if (schemaInfo.SchemaElement != null) { Console.WriteLine("Element '{0}' with type '{1}' is '{2}'" , schemaInfo.SchemaElement.Name, schemaInfo.SchemaType, schemaInfo.Validity); } else if (schemaInfo.SchemaAttribute != null) { Console.WriteLine("Attribute '{0}' with type '{1}' is '{2}'" , schemaInfo.SchemaAttribute.Name, schemaInfo.SchemaType, schemaInfo.Validity); } } static void SchemaValidationEventHandler(object sender, ValidationEventArgs e) { switch (e.Severity) { case XmlSeverityType.Error: Console.WriteLine("\nError: {0}", e.Message); break; case XmlSeverityType.Warning: Console.WriteLine("\nWarning: {0}", e.Message); break; } } } [XmlRootAttribute("bookstore", Namespace = "http://www.contoso.com/books", IsNullable = false)] public class ContosoBooks { [XmlElementAttribute("book")] public BookType[] Book; } public class BookType { [XmlAttributeAttribute("genre")] public string Genre; [XmlAttributeAttribute("publicationdate", DataType = "date")] public DateTime PublicationDate; [XmlAttributeAttribute("ISBN")] public string Isbn; [XmlElementAttribute("title")] public string Title; [XmlElementAttribute("author")] public BookAuthor Author; [XmlElementAttribute("price")] public Decimal Price; } public class BookAuthor { [XmlElementAttribute("name")] public string Name; [XmlElementAttribute("first-name")] public string FirstName; [XmlElementAttribute("last-name")] public string LastName; } }
この例では、入力として、contosoBooks.xml というファイルを使用しています。
<bookstore xmlns="http://www.contoso.com/books"> <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0"> <title>The Autobiography of Benjamin Franklin</title> <author> <first-name>Benjamin</first-name> <last-name>Franklin</last-name> </author> <price>8.99</price> </book> <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2"> <title>The Confidence Man</title> <author> <first-name>Herman</first-name> <last-name>Melville</last-name> </author> <price>11.99</price> </book> <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6"> <title>The Gorgias</title> <author> <name>Plato</name> </author> <price>9.99</price> </book> </bookstore>
またこの例では、入力として、contosoBooks.xsd も使用しています。
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="bookstore"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="book"> <xs:complexType> <xs:sequence> <xs:element name="title" type="xs:string" /> <xs:element name="author"> <xs:complexType> <xs:sequence> <xs:element minOccurs="0" name="name" type="xs:string" /> <xs:element minOccurs="0" name="first-name" type="xs:string" /> <xs:element minOccurs="0" name="last-name" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="price" type="xs:decimal" /> </xs:sequence> <xs:attribute name="genre" type="xs:string" use="required" /> <xs:attribute name="publicationdate" type="xs:date" use="required" /> <xs:attribute name="ISBN" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

System.Xml.Schema.XmlSchemaValidator


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


XmlSchemaValidator コンストラクタ
アセンブリ: System.Xml (system.xml.dll 内)

Public Sub New ( _ nameTable As XmlNameTable, _ schemas As XmlSchemaSet, _ namespaceResolver As IXmlNamespaceResolver, _ validationFlags As XmlSchemaValidationFlags _ )
Dim nameTable As XmlNameTable Dim schemas As XmlSchemaSet Dim namespaceResolver As IXmlNamespaceResolver Dim validationFlags As XmlSchemaValidationFlags Dim instance As New XmlSchemaValidator(nameTable, schemas, namespaceResolver, validationFlags)
public XmlSchemaValidator (
XmlNameTable nameTable,
XmlSchemaSet schemas,
IXmlNamespaceResolver namespaceResolver,
XmlSchemaValidationFlags validationFlags
)
public:
XmlSchemaValidator (
XmlNameTable^ nameTable,
XmlSchemaSet^ schemas,
IXmlNamespaceResolver^ namespaceResolver,
XmlSchemaValidationFlags validationFlags
)
public XmlSchemaValidator (
XmlNameTable nameTable,
XmlSchemaSet schemas,
IXmlNamespaceResolver namespaceResolver,
XmlSchemaValidationFlags validationFlags
)
public function XmlSchemaValidator ( nameTable : XmlNameTable, schemas : XmlSchemaSet, namespaceResolver : IXmlNamespaceResolver, validationFlags : XmlSchemaValidationFlags )


XmlSchemaValidator コンストラクタを使用するときに考慮する必要がある重要な注意事項を次に示します。
-
ProcessInlineSchema 検証オプションまたは ProcessSchemaLocation 検証オプションが設定されていると、XmlSchemaSet パラメータの内容が内部 XmlSchemaSet オブジェクトにコピーされます。このため、検証中に入力 XmlSchemaSet オブジェクトに対して行われた変更は、検証の結果に反映されません。
-
指定された XmlSchemaSet パラメータがコンパイルされていない場合、その Compile メソッドが呼び出されます。
-
xs:QName 型の検証に対しては IXmlNamespaceResolver パラメータが特に重要です。XmlSchemaValidator クラスは、IXmlNamespaceResolver オブジェクトからスコープ内の名前空間をコピーしないで、代わりにそれへの参照を保持します。このため、検証の処理中に新しい名前空間を IXmlNamespaceResolver オブジェクトに追加できます。
![]() |
---|
既定では、XmlSchemaValidator オブジェクトの ProcessInlineSchema 検証フラグおよび ProcessSchemaLocation 検証フラグは設定されません。また既定では、XmlSchemaValidator オブジェクトの XmlResolver プロパティは、null 参照 (Visual Basic では Nothing) に設定されます。このため、インクルード要素、インポート要素、または再定義要素で参照される外部スキーマは既定では解決されません。 |


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


XmlSchemaValidator プロパティ

名前 | 説明 | |
---|---|---|
![]() | XmlResolver | xs:import 要素と xs:include 要素および xsi:schemaLocation 属性と xsi:noNamespaceSchemaLocation 属性の解決に使用する XmlResolver オブジェクトを設定します。 |

XmlSchemaValidator メソッド


名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |

XmlSchemaValidator メンバ
XML スキーマ定義言語 (XSD: XML Schema Definition Language) スキーマ検証エンジンを表します。XmlSchemaValidator クラスは継承できません。
XmlSchemaValidator データ型で公開されるメンバを以下の表に示します。


名前 | 説明 | |
---|---|---|
![]() | XmlResolver | xs:import 要素と xs:include 要素および xsi:schemaLocation 属性と xsi:noNamespaceSchemaLocation 属性の解決に使用する XmlResolver オブジェクトを設定します。 |


名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |


- XmlSchemaValidatorのページへのリンク