XmlSchemaCollection を使用した XML スキーマ (XSD) 検証
XmlSchemaCollection を使用して、XML スキーマ定義言語 (XSD) スキーマを基準として XML ドキュメントを検証できます。 XmlSchemaCollection は、検証を行うたびにスキーマをメモリに読み込まなくてもいいように、スキーマをコレクションに格納することによってパフォーマンスの向上を図ります。 スキーマがスキーマ コレクション内にある場合、コレクション内のスキーマの位置を特定するには schemaLocation
属性を使用します。
重要
XmlSchemaCollection クラスは廃止されており、XmlSchemaSet クラスに置き換えられています。 XmlSchemaSet クラスの詳細については、「スキーマをコンパイルするための XmlSchemaSet」を参照してください。
データ ファイルのルート要素の例を次に示します。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="urn:bookstore-schema"
elementFormDefault="qualified"
targetNamespace="urn:bookstore-schema">
この例では、targetNamespace
属性の値として、スキーマを urn:bookstore-schema
に追加するときに使用される名前空間と同じ XmlSchemaCollection が指定されています。
XML スキーマを XmlSchemaCollection に追加するコード サンプルを次に示します。
Dim xsc As New XmlSchemaCollection()
' XML Schema.
xsc.Add("urn:bookstore-schema", schema)
reader = New XmlTextReader(filename)
vreader = New XmlValidatingReader(reader)
vreader.Schemas.Add(xsc)
XmlSchemaCollection xsc = new XmlSchemaCollection();
// XML Schema.
xsc.Add("urn:bookstore-schema", schema);
reader = new XmlTextReader (filename);
vreader = new XmlValidatingReader (reader);
vreader.Schemas.Add(xsc);
targetNamespace
の namespaceURI
メソッドで Add プロパティを追加する場合、一般的に、XmlSchemaCollection 属性が使用されます。 スキーマを XmlSchemaCollection に追加する前に、null 参照を指定することもできます。 名前空間が関連付けられていないスキーマに対しては、空の文字列 ("") を使用する必要があります。 XmlSchemaCollection には、名前空間が関連付けられていないスキーマを 1 つだけ含めることができます。
XML スキーマ HeadCount.xsd を XmlSchemaCollection に追加し、HeadCount.xml を検証するコード サンプルを次に示します。
Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema
Namespace ValidationSample
Class Sample
Public Shared Sub Main()
Dim tr As New XmlTextReader("HeadCount.xml")
Dim vr As New XmlValidatingReader(tr)
vr.Schemas.Add("xsdHeadCount", "HeadCount.xsd")
vr.ValidationType = ValidationType.Schema
AddHandler vr.ValidationEventHandler, AddressOf ValidationHandler
While vr.Read()
End While
Console.WriteLine("Validation finished")
End Sub
' Main
Public Shared Sub ValidationHandler(sender As Object, args As ValidationEventArgs)
Console.WriteLine("***Validation error")
Console.WriteLine("Severity:{0}", args.Severity)
Console.WriteLine("Message:{0}", args.Message)
End Sub
' ValidationHandler
End Class
' Sample
End Namespace
' ValidationSample
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
namespace ValidationSample
{
class Sample
{
public static void Main()
{
XmlTextReader tr = new XmlTextReader("HeadCount.xml");
XmlValidatingReader vr = new XmlValidatingReader(tr);
vr.Schemas.Add("xsdHeadCount", "HeadCount.xsd");
vr.ValidationType = ValidationType.Schema;
vr.ValidationEventHandler += new ValidationEventHandler (ValidationHandler);
while(vr.Read());
Console.WriteLine("Validation finished");
}
public static void ValidationHandler(object sender, ValidationEventArgs args)
{
Console.WriteLine("***Validation error");
Console.WriteLine("\tSeverity:{0}", args.Severity);
Console.WriteLine("\tMessage :{0}", args.Message);
}
}
}
検証対象の入力ファイル HeadCount.xml の内容について、次に概略を示します。
<!--Load HeadCount.xsd in SchemaCollection for Validation-->
<hc:HeadCount xmlns:hc='xsdHeadCount'>
<Name>Waldo Pepper</Name>
<Name>Red Pepper</Name>
</hc:HeadCount>
検証の基準とする XML スキーマ ファイル HeadCount.xsd の内容について、次に概略を示します。
<xs:schema xmlns="xsdHeadCount" targetNamespace="xsdHeadCount" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name='HeadCount' type="HEADCOUNT"/>
<xs:complexType name="HEADCOUNT">
<xs:sequence>
<xs:element name='Name' type='xs:string' maxOccurs='unbounded'/>
</xs:sequence>
<xs:attribute name='division' type='xs:int' use='optional' default='8'/>
</xs:complexType>
</xs:schema>
XmlValidatingReader を受け取る XmlTextReader を作成するコード サンプルを次に示します。 XML スキーマ sample4.xsd を基準として、入力ファイル sample4.xml を検証します。
Dim tr As New XmlTextReader("sample4.xml")
Dim vr As New XmlValidatingReader(tr)
vr.ValidationType = ValidationType.Schema
vr.Schemas.Add("datatypesTest", "sample4.xsd")
AddHandler vr.ValidationEventHandler, AddressOf ValidationCallBack
While vr.Read()
Console.WriteLine("NodeType: {0} NodeName: {1}", vr.NodeType, vr.Name)
End While
XmlTextReader tr = new XmlTextReader("sample4.xml");
XmlValidatingReader vr = new XmlValidatingReader(tr);
vr.ValidationType = ValidationType.Schema;
vr.Schemas.Add("datatypesTest", "sample4.xsd");
vr.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
while(vr.Read()) {
Console.WriteLine("NodeType: {0} NodeName: {1}", vr.NodeType, vr.Name);
}
検証対象とする入力ファイル sample4.xml の内容について、次に概略を示します。
<datatypes xmlns="datatypesTest">
<number>
<number_1>123</number_1>
</number>
</datatypes>
検証の基準とする XML スキーマ ファイル sample4.xsd の内容について、次に概略を示します。
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="datatypesTest"
targetNamespace="datatypesTest"
elementFormDefault="qualified">
<xs:element name = "datatypes">
<xs:complexType>
<xs:all>
<xs:element name="number">
<xs:complexType>
<xs:sequence>
<xs:element name="number_1" type="xs:decimal" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
関連項目
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示