Extensions.Validate メソッド

定義

XDocumentXElement、または XAttribute が、XmlSchemaSet の XSD に準拠しているかどうかを検証します。Validates that an XDocument, an XElement, or an XAttribute conforms to an XSD in an XmlSchemaSet.

オーバーロード

Validate(XDocument, XmlSchemaSet, ValidationEventHandler)

このメソッドは、XDocumentXmlSchemaSet の XSD に準拠しているかどうかを検証します。This method validates that an XDocument conforms to an XSD in an XmlSchemaSet.

Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler)

このメソッドは、XAttribute が指定した XmlSchemaObject および XmlSchemaSet に準拠しているかどうかを検証します。This method validates that an XAttribute conforms to a specified XmlSchemaObject and an XmlSchemaSet.

Validate(XDocument, XmlSchemaSet, ValidationEventHandler, Boolean)

XDocumentXmlSchemaSet の XSD に準拠しているかどうかを検証します。オプションで、スキーマ検証後の infoset (PSVI) を XML ツリーに設定できます。Validates that an XDocument conforms to an XSD in an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler)

このメソッドは、XElement サブツリーが指定した XmlSchemaObject および XmlSchemaSet に準拠しているかどうかを検証します。This method validates that an XElement sub-tree conforms to a specified XmlSchemaObject and an XmlSchemaSet.

Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean)

XAttribute が、指定した XmlSchemaObject および XmlSchemaSet に準拠しているかどうかを検証します。必要に応じて、スキーマ検証後の infoset (PSVI) を XML ツリーに設定できます。Validates that an XAttribute conforms to a specified XmlSchemaObject and an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean)

XElement サブツリーが、指定した XmlSchemaObject および XmlSchemaSet に準拠しているかどうかを検証します。必要に応じて、スキーマ検証後の infoset (PSVI) を XML ツリーに設定できます。Validates that an XElement sub-tree conforms to a specified XmlSchemaObject and an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

注釈

これらのメソッドは、 XmlReader基になるを使用して、XML ツリーを XSD に対して検証します。These methods use an underlying XmlReader to validate the XML tree against an XSD.

検証エラーと警告メッセージは、 ValidationEventHandlerデリゲートを使用して処理されます。Validation error and warning messages are handled using the ValidationEventHandler delegate. これらのメソッドにイベントハンドラーが提供されていない場合、検証XmlSchemaValidationExceptionエラーはとして公開されます。If no event handler is provided to these methods, validation errors are exposed as an XmlSchemaValidationException. 検証の警告によってXmlSchemaValidationException 、がスローされることはありません。Validation warnings do not cause an XmlSchemaValidationException to be thrown.

これらの拡張メソッドの一部では、必要に応じて、スキーマ検証後の infoset (PSVI) の作成を許可します。Some of these extension methods optionally allow population of the post-schema-validation infoset (PSVI).

Validate(XDocument, XmlSchemaSet, ValidationEventHandler)

このメソッドは、XDocumentXmlSchemaSet の XSD に準拠しているかどうかを検証します。This method validates that an XDocument conforms to an XSD in an XmlSchemaSet.

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XDocument ^ source, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler);
public static void Validate (this System.Xml.Linq.XDocument source, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler);
static member Validate : System.Xml.Linq.XDocument * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler -> unit

パラメーター

source
XDocument

検証対象の XDocumentThe XDocument to validate.

schemas
XmlSchemaSet

検証時に照合する XmlSchemaSetAn XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

リーダーが検証エラーを検出した場合に発生するイベントの ValidationEventHandlerA ValidationEventHandler for an event that occurs when the reader encounters validation errors. null の場合、検証エラーに基づいて例外がスローされます。If null, throws an exception upon validation errors.

例外

XML スキーマ定義言語 (XSD) の検証エラーが原因でスローされます。Thrown for XML Schema Definition Language (XSD) validation errors.

次の例では、XmlSchemaSet を作成し、このスキーマ セットに対して 2 つの XDocument オブジェクトを検証します。The following example creates an XmlSchemaSet, then validates two XDocument objects against the schema set. ドキュメントの 1 つは有効ですが、その他のドキュメントは無効です。One of the documents is valid, the other is not.

  
                string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:sequence>  
          <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
          <xsd:element name='Child2' minOccurs='1' maxOccurs='1'/>  
         </xsd:sequence>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  
XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  
  
XDocument doc1 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "content1"),  
        new XElement("Child2", "content1")  
    )  
);  
  
XDocument doc2 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "content1"),  
        new XElement("Child3", "content1")  
    )  
);  
  
Console.WriteLine("Validating doc1");  
bool errors = false;  
doc1.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     });  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
  
Console.WriteLine();  
Console.WriteLine("Validating doc2");  
errors = false;  
doc2.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     });  
Console.WriteLine("doc2 {0}", errors ? "did not validate" : "validated");  
  
                Dim errors As Boolean = False  
  
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  
  
Sub Main()  
    Dim xsdMarkup As XDocument = _  
    <?xml version='1.0'?>  
    <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
        <xsd:element name='Root'>  
            <xsd:complexType>  
                <xsd:sequence>  
                    <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
                    <xsd:element name='Child2' minOccurs='1' maxOccurs='1'/>  
                </xsd:sequence>  
            </xsd:complexType>  
        </xsd:element>  
    </xsd:schema>  
  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  
  
    Dim doc1 As XDocument = _  
    <?xml version='1.0'?>  
    <Root>  
        <Child1>content1</Child1>  
        <Child2>content2</Child2>  
    </Root>  
  
    Dim doc2 As XDocument = _  
    <?xml version='1.0'?>  
    <Root>  
        <Child1>content1</Child1>  
        <Child3>content1</Child3>  
    </Root>  
  
    Console.WriteLine("Validating doc1")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
  
    Console.WriteLine()  
    Console.WriteLine("Validating doc2")  
    errors = False  
    doc2.Validate(schemas, AddressOf XSDErrors)  
    Console.WriteLine("doc2 {0}", IIf(errors, "did not validate", "validated"))  
End Sub  

この例を実行すると、次の出力が生成されます。This example produces the following output:

Validating doc1  
doc1 validated  
  
Validating doc2  
The element 'Root' has invalid child element 'Child3'. List of possible elements expected: 'Child2'.  
doc2 did not validate  

注釈

この拡張メソッドは、がXDocumentXmlSchemaSetスキーマコンテンツモデルに準拠しているかどうかを検証します。This extension method validates that the XDocument conforms to the schema content model in XmlSchemaSet.

Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler)

このメソッドは、XAttribute が指定した XmlSchemaObject および XmlSchemaSet に準拠しているかどうかを検証します。This method validates that an XAttribute conforms to a specified XmlSchemaObject and an XmlSchemaSet.

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XAttribute ^ source, System::Xml::Schema::XmlSchemaObject ^ partialValidationType, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler);
public static void Validate (this System.Xml.Linq.XAttribute source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler);
static member Validate : System.Xml.Linq.XAttribute * System.Xml.Schema.XmlSchemaObject * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler -> unit

パラメーター

source
XAttribute

検証対象の XAttributeThe XAttribute to validate.

partialValidationType
XmlSchemaObject

検証対象のサブツリーを指定する XmlSchemaObjectAn XmlSchemaObject that specifies the sub-tree to validate.

schemas
XmlSchemaSet

検証時に照合する XmlSchemaSetAn XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

リーダーが検証エラーを検出した場合に発生するイベントの ValidationEventHandlerA ValidationEventHandler for an event that occurs when the reader encounters validation errors. null の場合、検証エラーに基づいて例外がスローされます。If null, throws an exception upon validation errors.

例外

XML スキーマ定義言語 (XSD) の検証エラーが原因でスローされます。Thrown for XML Schema Definition Language (XSD) validation errors.

  
                string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:simpleContent>  
          <xsd:extension base='xsd:string'>  
           <xsd:attribute name='Lang' use='required'>  
            <xsd:simpleType>  
             <xsd:restriction base='xsd:token'>  
              <xsd:enumeration value='C#'/>  
              <xsd:enumeration value='VB'/>  
             </xsd:restriction>  
            </xsd:simpleType>  
           </xsd:attribute>  
          </xsd:extension>  
         </xsd:simpleContent>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  
  
XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  
  
XDocument doc1 = new XDocument(  
    new XElement("Root",  
        new XAttribute("Lang", "C#")  
    )  
);  
  
Console.WriteLine("Validating doc1 ...");  
bool errors = false;  
doc1.Validate(schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
  
Console.WriteLine();  
Console.WriteLine("Validating Lang attribute ...");  
XAttribute lang = doc1.Root.Attribute("Lang");  
  
errors = false;  
lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    });  
Console.WriteLine("lang {0}", errors ? "did not validate" : "validated");  
  
// the following makes the Lang attribute invalid according to the schema  
lang.Value = "VC";  
  
Console.WriteLine();  
Console.WriteLine("Validating Lang attribute ...");  
  
errors = false;  
lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    });  
Console.WriteLine("lang {0}", errors ? "did not validate" : "validated");  
  
                Dim errors As Boolean = False  
  
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  
  
Sub Main()  
    Dim xsdMarkup As XDocument = _  
      <?xml version='1.0'?>  
      <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
          <xsd:element name='Root'>  
              <xsd:complexType>  
                  <xsd:simpleContent>  
                      <xsd:extension base='xsd:string'>  
                          <xsd:attribute name='Lang' use='required'>  
                              <xsd:simpleType>  
                                  <xsd:restriction base='xsd:token'>  
                                      <xsd:enumeration value='C#'/>  
                                      <xsd:enumeration value='VB'/>  
                                  </xsd:restriction>  
                              </xsd:simpleType>  
                          </xsd:attribute>  
                      </xsd:extension>  
                  </xsd:simpleContent>  
              </xsd:complexType>  
          </xsd:element>  
      </xsd:schema>  
  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  
  
    Dim doc1 As XDocument = <?xml version='1.0'?>  
                            <Root Lang='C#'/>  
  
    Console.WriteLine("Validating doc1 ...")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
  
    Console.WriteLine()  
    Console.WriteLine("Validating Lang attribute ...")  
    Dim lang As XAttribute = doc1.Root.Attribute("Lang")  
  
    errors = False  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, AddressOf XSDErrors)  
    Console.WriteLine("lang {0}", IIf(errors, "did not validate", "validated"))  
  
    ' the following makes the Lang attribute invalid according to the schema  
    lang.Value = "VC"  
  
    Console.WriteLine()  
    Console.WriteLine("Validating Lang attribute ...")  
  
    errors = False  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, AddressOf XSDErrors)  
    Console.WriteLine("lang {0}", IIf(errors, "did not validate", "validated"))  
End Sub  

この例を実行すると、次の出力が生成されます。This example produces the following output:

Validating doc1 ...  
doc1 validated  
  
Validating Lang attribute ...  
lang validated  
  
Validating Lang attribute ...  
The 'Lang' attribute is invalid - The value 'VC' is invalid according to its datatype 'Token' - The Enumeration constraint failed.  
lang did not validate  

注釈

このメソッドを使用すると、がXAttributeスキーマに準拠しているかどうかを検証できます。You can use this method to validate that an XAttribute conforms to a schema. 通常、このメソッドは、属性を変更し、スキーマに準拠しているかどうかを確認するときに使用します。You typically use this method when you have modified an attribute, and you want to make sure that it still conforms to its schema. ドキュメント全体を検証することもできますが、属性だけを検証する処理時間は短くなります。You could validate the entire document, but it takes less processing time to validate just the attribute.

にをnull validationEventHandler渡した場合、このメソッドは検証エラーの発生時に例外を発生させます。If you pass null for validationEventHandler, this method raises an exception upon validation errors. 検証の警告によって例外が発生することはありません。Validation warnings will not raise an exception.

属性を検証するには、のXmlSchemaObjectインスタンスを使用します。To validate an attribute, you use an instance of XmlSchemaObject. このインスタンスは、さまざまな方法で取得できます。You can obtain this instance in various ways. 簡単な方法は次のとおりです。An easy way is as follows:

  1. ドキュメントがスキーマに準拠していることを検証します。Validate that a document conforms to a schema.

  2. Validate拡張メソッドを呼び出して、スキーマ検証後の infoset (PSVI) を追加します。Add the post-schema-validation infoset (PSVI) by calling the Validate extension method.

  3. を実装GetSchemaInfo IXmlSchemaInfoするオブジェクトを取得するには、拡張メソッドを呼び出します。Call the GetSchemaInfo extension method to retrieve an object that implements IXmlSchemaInfo. 取得XmlSchemaObjectしたオブジェクトから、を取得できます。From the retrieved object, you can get an XmlSchemaObject.

のインスタンスを作成した後XmlSchemaObjectは、このメソッドを使用して属性を検証できます。After you have an instance of an XmlSchemaObject, you can use this method to validate an attribute.

Validate(XDocument, XmlSchemaSet, ValidationEventHandler, Boolean)

XDocumentXmlSchemaSet の XSD に準拠しているかどうかを検証します。オプションで、スキーマ検証後の infoset (PSVI) を XML ツリーに設定できます。Validates that an XDocument conforms to an XSD in an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XDocument ^ source, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler, bool addSchemaInfo);
public static void Validate (this System.Xml.Linq.XDocument source, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler, bool addSchemaInfo);
static member Validate : System.Xml.Linq.XDocument * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler * bool -> unit

パラメーター

source
XDocument

検証対象の XDocumentThe XDocument to validate.

schemas
XmlSchemaSet

検証時に照合する XmlSchemaSetAn XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

リーダーが検証エラーを検出した場合に発生するイベントの ValidationEventHandlerA ValidationEventHandler for an event that occurs when the reader encounters validation errors. null の場合、検証エラーに基づいて例外がスローされます。If null, throws an exception upon validation errors.

addSchemaInfo
Boolean

スキーマ検証後の infoset (PSVI) を設定するかどうかを示す BooleanA Boolean indicating whether to populate the post-schema-validation infoset (PSVI).

例外

XML スキーマ定義言語 (XSD) の検証エラーが原因でスローされます。Thrown for XML Schema Definition Language (XSD) validation errors.

次の例には、既定値をChild2持つAtt1属性を持つ要素を定義する XSD が含まれています。The following example contains an XSD that defines the Child2 element with an Att1 attribute with a default value. ドキュメントが正常に検証されると、既定値の属性が XML ツリーに追加されます。After successfully validating the document, the attribute with the default value is added to the XML tree. 既定の属性はにdoc2追加されないことに注意してください。これは、スキーマに対して検証されません。Note that the default attribute is not added to doc2, which does not validate against the schema.

  
                string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:sequence>  
          <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
          <xsd:element name='Child2' minOccurs='1' maxOccurs='1'>  
           <xsd:complexType>  
            <xsd:simpleContent>  
             <xsd:extension base='xsd:string'>  
              <xsd:attribute name='Att1' default='Att1 Default Value'/>  
             </xsd:extension>  
            </xsd:simpleContent>  
           </xsd:complexType>  
          </xsd:element>  
         </xsd:sequence>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  
XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  
  
XDocument doc1 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "c1"),  
        new XElement("Child2", "c2")  
    )  
);  
  
XDocument doc2 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "content1"),  
        new XElement("Child3", "content1")  
    )  
);  
  
Console.WriteLine("Validating doc1");  
bool errors = false;  
doc1.Validate(schemas, (o, e) =>  
                           {  
                               Console.WriteLine("{0}", e.Message);  
                               errors = true;  
                           }, true);  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
  
Console.WriteLine();  
Console.WriteLine("Validating doc2");  
errors = false;  
doc2.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     }, true);  
Console.WriteLine("doc2 {0}", errors ? "did not validate" : "validated");  
  
Console.WriteLine();  
Console.WriteLine("Contents of doc1:");  
Console.WriteLine(doc1);  
  
Console.WriteLine();  
Console.WriteLine("Contents of doc2:");  
Console.WriteLine(doc2);  
  
                Dim errors As Boolean = False  
  
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  
  
Sub Main()  
    Dim xsdMarkup As XDocument = _  
    <?xml version='1.0'?>  
    <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
        <xsd:element name='Root'>  
            <xsd:complexType>  
                <xsd:sequence>  
                    <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
                    <xsd:element name='Child2' minOccurs='1' maxOccurs='1'>  
                        <xsd:complexType>  
                            <xsd:simpleContent>  
                                <xsd:extension base='xsd:string'>  
                                    <xsd:attribute name='Att1' default='Att1 Default Value'/>  
                                </xsd:extension>  
                            </xsd:simpleContent>  
                        </xsd:complexType>  
                    </xsd:element>  
                </xsd:sequence>  
            </xsd:complexType>  
        </xsd:element>  
    </xsd:schema>  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  
  
    Dim doc1 As XDocument = <?xml version='1.0'?>  
                            <Root>  
                                <Child1>c1</Child1>  
                                <Child2>c2</Child2>  
                            </Root>  
    Dim doc2 As XDocument = <?xml version='1.0'?>  
                            <Root>  
                                <Child1>content1</Child1>  
                                <Child3>content1</Child3>  
                            </Root>  
  
    Console.WriteLine("Validating doc1")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
  
    Console.WriteLine()  
    Console.WriteLine("Validating doc2")  
    errors = False  
    doc2.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc2 {0}", IIf(errors, "did not validate", "validated"))  
  
    Console.WriteLine()  
    Console.WriteLine("Contents of doc1:")  
    Console.WriteLine(doc1)  
  
    Console.WriteLine()  
    Console.WriteLine("Contents of doc2:")  
    Console.WriteLine(doc2)  
End Sub  

この例を実行すると、次の出力が生成されます。This example produces the following output:

Validating doc1  
doc1 validated  
  
Validating doc2  
The element 'Root' has invalid child element 'Child3'. List of possible elements expected: 'Child2'.  
doc2 did not validate  
  
Contents of doc1:  
<Root>  
  <Child1>c1</Child1>  
  <Child2 Att1="Att1 Default Value">c2</Child2>  
</Root>  
  
Contents of doc2:  
<Root>  
  <Child1>content1</Child1>  
  <Child3>content1</Child3>  
</Root>  

次の例では、ツリーに PSVI を設定します。The following example populates the tree with PSVI. 検証後は、PSVI に従って無効なすべての要素と属性がツリーに出力されます。After validation, it prints all elements and attributes in the tree that are invalid according to the PSVI.

  
                static void DumpInvalidNodes(XElement el)  
{  
    if (el.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
        Console.WriteLine("Invalid Element {0}",  
            el.AncestorsAndSelf()  
            .InDocumentOrder()  
            .Aggregate("", (s, i) => s + "/" + i.Name.ToString()));  
    foreach (XAttribute att in el.Attributes())  
        if (att.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
            Console.WriteLine("Invalid Attribute {0}",  
                att  
                .Parent  
                .AncestorsAndSelf()  
                .InDocumentOrder()  
                .Aggregate("",  
                    (s, i) => s + "/" + i.Name.ToString()) + "/@" + att.Name.ToString()  
                );  
    foreach (XElement child in el.Elements())  
        DumpInvalidNodes(child);  
}  
  
static void Main(string[] args)  
{  
   string xsdMarkup =  
        @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
           <xsd:simpleType name='GCType'>  
            <xsd:restriction base='xsd:token'>  
             <xsd:enumeration value='AAA'/>  
             <xsd:enumeration value='BBB'/>  
            </xsd:restriction>  
           </xsd:simpleType>  
           <xsd:element name='Root'>  
            <xsd:complexType>  
             <xsd:sequence>  
              <xsd:element name='Child1' minOccurs='1' maxOccurs='1'>  
               <xsd:complexType>  
                <xsd:sequence>  
                 <xsd:element name='GrandChild1' type='GCType'/>  
                 <xsd:element name='GrandChild2' type='GCType'/>  
                 <xsd:element name='GrandChild3' type='GCType'/>  
                </xsd:sequence>  
               </xsd:complexType>  
              </xsd:element>  
             </xsd:sequence>  
            </xsd:complexType>  
           </xsd:element>  
          </xsd:schema>";  
  
    XmlSchemaSet schemas = new XmlSchemaSet();  
    schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  
  
    XDocument doc1 = new XDocument(  
        new XElement("Root",  
            new XElement("Child1",  
                new XElement("GrandChild1", "AAA"),  
                new XElement("GrandChild2", "ZZZ"),  
                new XElement("GrandChild3", "ZZZ")  
            )  
        )  
    );  
  
    Console.WriteLine("Validating doc1 ...");  
    bool errors = false;  
    doc1.Validate(schemas, (sender, e) =>  
        {  
            Console.WriteLine(e.Message);  
            errors = true;  
        }, true);  
    Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  
}  
  
                Private Sub DumpInvalidNodes(ByVal el As XElement)  
    If el.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then  
        Console.WriteLine("Invalid Element {0}", _  
            el _  
            .AncestorsAndSelf _  
            .InDocumentOrder() _  
            .Aggregate("", _  
                Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()))  
    End If  
    For Each att As XAttribute In el.Attributes()  
        If att.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then  
            Console.WriteLine("Invalid Attribute {0}", _  
                att _  
                .Parent _  
                .AncestorsAndSelf() _  
                .InDocumentOrder() _  
                .Aggregate("", _  
                    Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()) + _  
                    "/@" + att.Name.ToString())  
        End If  
    Next  
    For Each child As XElement In el.Elements()  
        DumpInvalidNodes(child)  
    Next  
End Sub  
  
Dim errors As Boolean = False  
  
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  
  
Sub Main()  
    Dim xsdMarkup As XDocument = _  
        <?xml version='1.0'?>  
        <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
            <xsd:simpleType name='GCType'>  
                <xsd:restriction base='xsd:token'>  
                    <xsd:enumeration value='AAA'/>  
                    <xsd:enumeration value='BBB'/>  
                </xsd:restriction>  
            </xsd:simpleType>  
            <xsd:element name='Root'>  
                <xsd:complexType>  
                    <xsd:sequence>  
                        <xsd:element name='Child1' minOccurs='1' maxOccurs='1'>  
                            <xsd:complexType>  
                                <xsd:sequence>  
                                    <xsd:element name='GrandChild1' type='GCType'/>  
                                    <xsd:element name='GrandChild2' type='GCType'/>  
                                    <xsd:element name='GrandChild3' type='GCType'/>  
                                </xsd:sequence>  
                            </xsd:complexType>  
                        </xsd:element>  
                    </xsd:sequence>  
                </xsd:complexType>  
            </xsd:element>  
        </xsd:schema>  
  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  
  
    Dim doc1 As XDocument = _  
        <?xml version='1.0'?>  
        <Root>  
            <Child1>  
                <GrandChild1>AAA</GrandChild1>  
                <GrandChild2>ZZZ</GrandChild2>  
                <GrandChild3>ZZZ</GrandChild3>  
            </Child1>  
        </Root>  
  
    Console.WriteLine("Validating doc1 ...")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
    DumpInvalidNodes(doc1.Root)  
End Sub  

この例を実行すると、次の出力が生成されます。This example produces the following output:

Validating doc1 ...  
The 'GrandChild2' element is invalid - The value 'ZZZ' is invalid according to its datatype 'GCType' - The Enumeration constraint failed.  
The 'GrandChild3' element is invalid - The value 'ZZZ' is invalid according to its datatype 'GCType' - The Enumeration constraint failed.  
doc1 did not validate  
Invalid Element /Root  
Invalid Element /Root/Child1  
Invalid Element /Root/Child1/GrandChild2  
Invalid Element /Root/Child1/GrandChild3  

注釈

この拡張メソッドは、がXDocumentXmlSchemaSetスキーマコンテンツモデルに準拠しているかどうかを検証します。This extension method validates that the XDocument conforms to the schema content model in XmlSchemaSet.

addSchemaInfotrueの場合、このメソッドはスキーマ検証後の infoset (PSVI) を XML ツリーに追加します。If addSchemaInfo is true, this method populates the XML tree with the post-schema-validation infoset (PSVI).

XML ツリーに PSVI を設定するには、次の2つの手順を実行します。There are two steps to populating the XML tree with the PSVI.

  1. まず、ツリー内のすべてのノードに注釈を追加して、ツリー内Extensions.GetSchemaInfoExtensions.GetSchemaInfo要素または属性に対してまたはを呼び出せるようにします。First, an annotation is added to all nodes in the tree to enable you to call Extensions.GetSchemaInfo or Extensions.GetSchemaInfo on an element or attribute in the tree.

  2. 次に、XSD で定義されている既定の要素と属性が XML ツリーに追加されます。Second, default elements and attributes defined in the XSD are added to the XML tree. GetSchemaInfoメソッドの1つを呼び出すことにより、特定の要素または属性が XSD から既定の要素または属性として追加されたかどうかを確認できます。By calling one of the GetSchemaInfo methods, you can determine if a specific element or attribute was added from the XSD as a default element or attribute.

Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler)

このメソッドは、XElement サブツリーが指定した XmlSchemaObject および XmlSchemaSet に準拠しているかどうかを検証します。This method validates that an XElement sub-tree conforms to a specified XmlSchemaObject and an XmlSchemaSet.

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XElement ^ source, System::Xml::Schema::XmlSchemaObject ^ partialValidationType, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler);
public static void Validate (this System.Xml.Linq.XElement source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler);
static member Validate : System.Xml.Linq.XElement * System.Xml.Schema.XmlSchemaObject * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler -> unit

パラメーター

source
XElement

検証対象の XElementThe XElement to validate.

partialValidationType
XmlSchemaObject

検証対象のサブツリーを指定する XmlSchemaObjectAn XmlSchemaObject that specifies the sub-tree to validate.

schemas
XmlSchemaSet

検証時に照合する XmlSchemaSetAn XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

リーダーが検証エラーを検出した場合に発生するイベントの ValidationEventHandlerA ValidationEventHandler for an event that occurs when the reader encounters validation errors. null の場合、検証エラーに基づいて例外がスローされます。If null, throws an exception upon validation errors.

例外

XML スキーマ定義言語 (XSD) の検証エラーが原因でスローされます。Thrown for XML Schema Definition Language (XSD) validation errors.

  
                string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:sequence>  
          <xsd:element name='Child1' minOccurs='1' maxOccurs='1'>  
           <xsd:complexType>  
            <xsd:sequence>  
             <xsd:element name='GrandChild1' minOccurs='1' maxOccurs='1'/>  
             <xsd:element name='GrandChild2' minOccurs='1' maxOccurs='2'/>  
            </xsd:sequence>  
           </xsd:complexType>  
          </xsd:element>  
         </xsd:sequence>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  
  
XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  
  
XDocument doc1 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1",  
            new XElement("GrandChild1", "gc"),  
            new XElement("GrandChild2", "gc")  
        )  
    )  
);  
  
Console.WriteLine("Validating doc1 ...");  
bool errors = false;  
doc1.Validate(schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
  
Console.WriteLine();  
Console.WriteLine("Validating Child1 after first edit ...");  
XElement child1 = doc1.Element("Root").Element("Child1");  
child1.Add(new XElement("GrandChild2", "gc"));  
errors = false;  
child1.Validate(child1.GetSchemaInfo().SchemaElement, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    });  
Console.WriteLine("child1 {0}", errors ? "did not validate" : "validated");  
  
// the following makes the Child1 element invalid according to the schema  
child1.Add(new XElement("GrandChild3", "gc"));  
Console.WriteLine();  
Console.WriteLine("Validating Child1 after second edit ...");  
child1.Validate(child1.GetSchemaInfo().SchemaElement, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    });  
Console.WriteLine("child1 {0}", errors ? "did not validate" : "validated");  
  
                Dim errors As Boolean = False  
  
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  
  
Sub Main()  
  
    Dim xsdMarkup As XDocument = _  
        <?xml version='1.0'?>  
        <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
            <xsd:element name='Root'>  
                <xsd:complexType>  
                    <xsd:sequence>  
                        <xsd:element name='Child1' minOccurs='1' maxOccurs='1'>  
                            <xsd:complexType>  
                                <xsd:sequence>  
                                    <xsd:element name='GrandChild1' minOccurs='1' maxOccurs='1'/>  
                                    <xsd:element name='GrandChild2' minOccurs='1' maxOccurs='2'/>  
                                </xsd:sequence>  
                            </xsd:complexType>  
                        </xsd:element>  
                    </xsd:sequence>  
                </xsd:complexType>  
            </xsd:element>  
        </xsd:schema>  
  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  
  
    Dim doc1 As XDocument = _  
        <?xml version='1.0'?>  
        <Root>  
            <Child1>  
                <GrandChild1>gc</GrandChild1>  
                <GrandChild2>gc</GrandChild2>  
            </Child1>  
        </Root>  
  
    Console.WriteLine("Validating doc1 ...")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
  
    Console.WriteLine()  
    Console.WriteLine("Validating Child1 after first edit ...")  
    Dim child1 As XElement = doc1.Element("Root").Element("Child1")  
    child1.Add(<GrandChild2>gc</GrandChild2>)  
    errors = False  
    child1.Validate(child1.GetSchemaInfo().SchemaElement, schemas, AddressOf XSDErrors)  
    Console.WriteLine("child1 {0}", IIf(errors, "did not validate", "validated"))  
  
    ' the following makes the Child1 element invalid according to the schema  
    child1.Add(<GrandChild3>gc</GrandChild3>)  
    Console.WriteLine()  
    Console.WriteLine("Validating Child1 after second edit ...")  
    child1.Validate(child1.GetSchemaInfo().SchemaElement, schemas, AddressOf XSDErrors)  
    Console.WriteLine("child1 {0}", IIf(errors, "did not validate", "validated"))  
End Sub  

この例を実行すると、次の出力が生成されます。This example produces the following output:

Validating doc1 ...  
doc1 validated  
  
Validating Child1 after first edit ...  
child1 validated  
  
Validating Child1 after second edit ...  
The element 'Child1' has invalid child element 'GrandChild3'.  
child1 did not validate  

注釈

このメソッドを使用すると、サブツリー (ルートにがXElementある) がスキーマに準拠しているかどうかを検証できます。You can use this method to validate that a sub-tree (with an XElement at its root) conforms to a schema. 通常、この方法は、サブツリーを変更し、その後もスキーマに準拠していることを確認する場合に使用します。You typically use this method when you have modified a sub-tree, and you want to make sure that it still conforms to its schema. ドキュメント全体を検証することもできますが、サブツリーだけを検証する処理時間は短くなります。You could validate the entire document, but it takes less processing time to validate a just a sub-tree.

にを渡すnullvalidationEventHandler、このメソッドは検証エラーの発生時に例外を発生させます。If you pass null for validationEventHandler, then this method raises an exception upon validation errors. 検証の警告によって例外が発生することはありません。Validation warnings will not raise an exception.

サブツリーを検証するには、のXmlSchemaObjectインスタンスを使用します。To validate a sub-tree, you use an instance of XmlSchemaObject. このインスタンスは、さまざまな方法で取得できます。You can obtain this instance in various ways. 簡単な方法は次のとおりです。An easy way is as follows:

  1. ドキュメントがスキーマに準拠していることを検証します。Validate that a document conforms to a schema.

  2. Validate拡張メソッドを呼び出して、スキーマ検証後の infoset (PSVI) を追加します。Add the post-schema-validation infoset (PSVI) by calling the Validate extension method.

  3. を実装GetSchemaInfo IXmlSchemaInfoするオブジェクトを取得するには、拡張メソッドを呼び出します。Call the GetSchemaInfo extension method to retrieve an object that implements IXmlSchemaInfo. 取得XmlSchemaObjectしたオブジェクトから、を取得できます。From the retrieved object, you can get an XmlSchemaObject.

XmlSchemaObjectインスタンスを作成した後、このメソッドを使用してサブツリーを検証できます。After you have an instance of an XmlSchemaObject, you can use this method to validate an sub-tree.

Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean)

XAttribute が、指定した XmlSchemaObject および XmlSchemaSet に準拠しているかどうかを検証します。必要に応じて、スキーマ検証後の infoset (PSVI) を XML ツリーに設定できます。Validates that an XAttribute conforms to a specified XmlSchemaObject and an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XAttribute ^ source, System::Xml::Schema::XmlSchemaObject ^ partialValidationType, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler, bool addSchemaInfo);
public static void Validate (this System.Xml.Linq.XAttribute source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler, bool addSchemaInfo);
static member Validate : System.Xml.Linq.XAttribute * System.Xml.Schema.XmlSchemaObject * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler * bool -> unit

パラメーター

source
XAttribute

検証対象の XAttributeThe XAttribute to validate.

partialValidationType
XmlSchemaObject

検証対象のサブツリーを指定する XmlSchemaObjectAn XmlSchemaObject that specifies the sub-tree to validate.

schemas
XmlSchemaSet

検証時に照合する XmlSchemaSetAn XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

リーダーが検証エラーを検出した場合に発生するイベントの ValidationEventHandlerA ValidationEventHandler for an event that occurs when the reader encounters validation errors. null の場合、検証エラーに基づいて例外がスローされます。If null, throws an exception upon validation errors.

addSchemaInfo
Boolean

スキーマ検証後の infoset (PSVI) を設定するかどうかを示す BooleanA Boolean indicating whether to populate the post-schema-validation infoset (PSVI).

例外

XML スキーマ定義言語 (XSD) の検証エラーが原因でスローされます。Thrown for XML Schema Definition Language (XSD) validation errors.

  
                static void DumpInvalidNodes(XElement el)  
{  
    if (el.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
        Console.WriteLine("Invalid Element {0}",  
            el.AncestorsAndSelf()  
            .InDocumentOrder()  
            .Aggregate("", (s, i) => s + "/" + i.Name.ToString()));  
    foreach (XAttribute att in el.Attributes())  
        if (att.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
            Console.WriteLine("Invalid Attribute {0}",  
                att  
                .Parent  
                .AncestorsAndSelf()  
                .InDocumentOrder()  
                .Aggregate("",  
                    (s, i) => s + "/" + i.Name.ToString()) + "/@" + att.Name.ToString()  
                );  
    foreach (XElement child in el.Elements())  
        DumpInvalidNodes(child);  
}  
  
static void Main(string[] args)  
{  
    string xsdMarkup =  
        @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:simpleContent>  
          <xsd:extension base='xsd:string'>  
           <xsd:attribute name='Lang' use='required'>  
            <xsd:simpleType>  
             <xsd:restriction base='xsd:token'>  
              <xsd:enumeration value='C#'/>  
              <xsd:enumeration value='VB'/>  
             </xsd:restriction>  
            </xsd:simpleType>  
           </xsd:attribute>  
          </xsd:extension>  
         </xsd:simpleContent>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  
  
    XmlSchemaSet schemas = new XmlSchemaSet();  
    schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  
  
    XDocument doc1 = new XDocument(  
        new XElement("Root",  
            new XAttribute("Lang", "C#")  
        )  
    );  
  
    Console.WriteLine("Validating doc1 ...");  
    bool errors = false;  
    doc1.Validate(schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
    Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  
  
    Console.WriteLine();  
    Console.WriteLine("Validating Lang attribute ...");  
    XAttribute lang = doc1.Element("Root").Attribute("Lang");  
  
    errors = false;  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
    Console.WriteLine("lang {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  
  
    // the following makes the Lang attribute invalid according to the schema  
    lang.Value = "VC";  
  
    Console.WriteLine();  
    Console.WriteLine("Validating Lang attribute ...");  
  
    errors = false;  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
    Console.WriteLine("lang {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  
}  
  
                Private Sub DumpInvalidNodes(ByVal el As XElement)  
    If el.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then  
        Console.WriteLine("Invalid Element {0}", _  
            el _  
            .AncestorsAndSelf _  
            .InDocumentOrder() _  
            .Aggregate("", _  
                Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()))  
    End If  
    For Each att As XAttribute In el.Attributes()  
        If att.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then  
            Console.WriteLine("Invalid Attribute {0}", _  
                att _  
                .Parent _  
                .AncestorsAndSelf() _  
                .InDocumentOrder() _  
                .Aggregate("", _  
                    Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()) + _  
                    "/@" + att.Name.ToString())  
        End If  
    Next  
    For Each child As XElement In el.Elements()  
        DumpInvalidNodes(child)  
    Next  
End Sub  
  
Dim errors As Boolean = False  
  
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  
  
Sub Main()  
  
    Dim xsdMarkup As XDocument = _  
        <?xml version='1.0'?>  
        <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
            <xsd:element name='Root'>  
                <xsd:complexType>  
                    <xsd:simpleContent>  
                        <xsd:extension base='xsd:string'>  
                            <xsd:attribute name='Lang' use='required'>  
                                <xsd:simpleType>  
                                    <xsd:restriction base='xsd:token'>  
                                        <xsd:enumeration value='C#'/>  
                                        <xsd:enumeration value='VB'/>  
                                    </xsd:restriction>  
                                </xsd:simpleType>  
                            </xsd:attribute>  
                        </xsd:extension>  
                    </xsd:simpleContent>  
                </xsd:complexType>  
            </xsd:element>  
        </xsd:schema>  
  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  
  
    Dim doc1 As XDocument = <?xml version='1.0'?>  
                            <Root Lang='C#'/>  
  
    Console.WriteLine("Validating doc1 ...")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
    DumpInvalidNodes(doc1.Root)  
  
    Console.WriteLine()  
    Console.WriteLine("Validating Lang attribute ...")  
    Dim lang As XAttribute = doc1.Element("Root").Attribute("Lang")  
  
    errors = False  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("lang {0}", IIf(errors, "did not validate", "validated"))  
    DumpInvalidNodes(doc1.Root)  
  
    ' the following makes the Lang attribute invalid according to the schema  
    lang.Value = "VC"  
  
    Console.WriteLine()  
    Console.WriteLine("Validating Lang attribute ...")  
  
    errors = False  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("lang {0}", IIf(errors, "did not validate", "validated"))  
    DumpInvalidNodes(doc1.Root)  
End Sub  

この例を実行すると、次の出力が生成されます。This example produces the following output:

Validating doc1 ...  
doc1 validated  
  
Validating Lang attribute ...  
lang validated  
  
Validating Lang attribute ...  
The 'Lang' attribute is invalid - The value 'VC' is invalid according to its datatype 'Token' - The Enumeration constraint failed.  
lang did not validate  
Invalid Attribute /Root/@Lang  

注釈

このメソッドを使用すると、がXAttributeスキーマに準拠しているかどうかを検証できます。You can use this method to validate that an XAttribute conforms to a schema. 通常、このメソッドは、属性を変更し、スキーマに準拠しているかどうかを確認するときに使用します。You typically use this method when you have modified an attribute, and you want to make sure that it still conforms to its schema. ドキュメント全体を検証することもできますが、属性だけを検証する処理時間は短くなります。You could validate the entire document, but it takes less processing time to validate just the attribute.

addSchemaInfotrueの場合、このメソッドはスキーマ検証後の infoset (PSVI) を属性に設定します。If addSchemaInfo is true, this method populates the attribute with the post-schema-validation infoset (PSVI). XML ツリーに PSVI を設定した後、検証されたExtensions.GetSchemaInfo属性に対してを呼び出すことができます。After you have populated the XML tree with the PSVI, you can call Extensions.GetSchemaInfo on the validated attribute. これは、によってGetSchemaInfo返されるデータに依存するコードを記述する場合に便利です。This is useful if you are writing code that relies on data returned by GetSchemaInfo.

にを渡すnullvalidationEventHandler、このメソッドは検証エラーの発生時に例外を発生させます。If you pass null for validationEventHandler, then this method raises an exception upon validation errors. 検証の警告によって例外が発生することはありません。Validation warnings will not raise an exception.

属性を検証するには、のXmlSchemaObjectインスタンスを使用します。To validate an attribute, you use an instance of XmlSchemaObject. このインスタンスは、さまざまな方法で取得できます。You can obtain this instance in various ways. 簡単な方法は次のとおりです。An easy way is as follows:

  1. ドキュメントがスキーマに準拠していることを検証します。Validate that a document conforms to a schema.

  2. Validate拡張メソッドを呼び出して、スキーマ検証後の infoset (PSVI) を追加します。Add the post-schema-validation infoset (PSVI) by calling the Validate extension method.

  3. を実装GetSchemaInfo IXmlSchemaInfoするオブジェクトを取得するには、拡張メソッドを呼び出します。Call the GetSchemaInfo extension method to retrieve an object that implements IXmlSchemaInfo. 取得XmlSchemaObjectしたオブジェクトから、を取得できます。From the retrieved object, you can get an XmlSchemaObject.

のインスタンスを作成した後XmlSchemaObjectは、このメソッドを使用して属性を検証できます。After you have an instance of an XmlSchemaObject, you can use this method to validate an attribute.

Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean)

XElement サブツリーが、指定した XmlSchemaObject および XmlSchemaSet に準拠しているかどうかを検証します。必要に応じて、スキーマ検証後の infoset (PSVI) を XML ツリーに設定できます。Validates that an XElement sub-tree conforms to a specified XmlSchemaObject and an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XElement ^ source, System::Xml::Schema::XmlSchemaObject ^ partialValidationType, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler, bool addSchemaInfo);
public static void Validate (this System.Xml.Linq.XElement source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler, bool addSchemaInfo);
static member Validate : System.Xml.Linq.XElement * System.Xml.Schema.XmlSchemaObject * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler * bool -> unit

パラメーター

source
XElement

検証対象の XElementThe XElement to validate.

partialValidationType
XmlSchemaObject

検証対象のサブツリーを指定する XmlSchemaObjectAn XmlSchemaObject that specifies the sub-tree to validate.

schemas
XmlSchemaSet

検証時に照合する XmlSchemaSetAn XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

リーダーが検証エラーを検出した場合に発生するイベントの ValidationEventHandlerA ValidationEventHandler for an event that occurs when the reader encounters validation errors. null の場合、検証エラーに基づいて例外がスローされます。If null, throws an exception upon validation errors.

addSchemaInfo
Boolean

スキーマ検証後の infoset (PSVI) を設定するかどうかを示す BooleanA Boolean indicating whether to populate the post-schema-validation infoset (PSVI).

例外

XML スキーマ定義言語 (XSD) の検証エラーが原因でスローされます。Thrown for XML Schema Definition Language (XSD) validation errors.

  
                string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:sequence>  
          <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
          <xsd:element name='Child2' minOccurs='1' maxOccurs='1'>  
           <xsd:complexType>  
            <xsd:simpleContent>  
             <xsd:extension base='xsd:string'>  
              <xsd:attribute name='Att1' default='Att1 Default Value'/>  
             </xsd:extension>  
            </xsd:simpleContent>  
           </xsd:complexType>  
          </xsd:element>  
         </xsd:sequence>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  
XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  
  
XDocument doc1 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "c1"),  
        new XElement("Child2", "c2")  
    )  
);  
  
XDocument doc2 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "content1"),  
        new XElement("Child3", "content1")  
    )  
);  
  
Console.WriteLine("Validating doc1");  
bool errors = false;  
doc1.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     }, true);  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
  
Console.WriteLine();  
Console.WriteLine("Validating doc2");  
errors = false;  
doc2.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     }, true);  
Console.WriteLine("doc2 {0}", errors ? "did not validate" : "validated");  
  
Console.WriteLine();  
Console.WriteLine("Contents of doc1:");  
Console.WriteLine(doc1);  
  
Console.WriteLine();  
Console.WriteLine("Contents of doc2:");  
Console.WriteLine(doc2);  
  
                Dim errors As Boolean = False  
  
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  
  
Sub Main()  
    Dim xsdMarkup As XDocument = _  
        <?xml version='1.0'?>  
        <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
            <xsd:element name='Root'>  
                <xsd:complexType>  
                    <xsd:sequence>  
                        <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
                        <xsd:element name='Child2' minOccurs='1' maxOccurs='1'>  
                            <xsd:complexType>  
                                <xsd:simpleContent>  
                                    <xsd:extension base='xsd:string'>  
                                        <xsd:attribute name='Att1' default='Att1 Default Value'/>  
                                    </xsd:extension>  
                                </xsd:simpleContent>  
                            </xsd:complexType>  
                        </xsd:element>  
                    </xsd:sequence>  
                </xsd:complexType>  
            </xsd:element>  
        </xsd:schema>  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  
  
    Dim doc1 As XDocument = _  
        <?xml version='1.0'?>  
        <Root>  
            <Child1>c1</Child1>  
            <Child2>c2</Child2>  
        </Root>  
  
    Dim doc2 As XDocument = _  
        <?xml version='1.0'?>  
        <Root>  
            <Child1>content1</Child1>  
            <Child3>content1</Child3>  
        </Root>  
  
    Console.WriteLine("Validating doc1")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
  
    Console.WriteLine()  
    Console.WriteLine("Validating doc2")  
    errors = False  
    doc2.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc2 {0}", IIf(errors, "did not validate", "validated"))  
  
    Console.WriteLine()  
    Console.WriteLine("Contents of doc1:")  
    Console.WriteLine(doc1)  
  
    Console.WriteLine()  
    Console.WriteLine("Contents of doc2:")  
    Console.WriteLine(doc2)  
End Sub  

この例を実行すると、次の出力が生成されます。This example produces the following output:

Validating doc1  
doc1 validated  
  
Validating doc2  
The element 'Root' has invalid child element 'Child3'. List of possible elements expected: 'Child2'.  
doc2 did not validate  
  
Contents of doc1:  
<Root>  
  <Child1>c1</Child1>  
  <Child2 Att1="Att1 Default Value">c2</Child2>  
</Root>  
  
Contents of doc2:  
<Root>  
  <Child1>content1</Child1>  
  <Child3>content1</Child3>  
</Root>  

注釈

このメソッドを使用すると、サブツリー ( XElementサブツリーのルートにある) がスキーマに準拠しているかどうかを検証できます。You can use this method to validate that a sub-tree (with an XElement at the root of the sub-tree) conforms to a schema. 通常、この方法は、サブツリーを変更し、その後もスキーマに準拠していることを確認する場合に使用します。You typically use this method when you have modified a sub-tree, and you want to make sure that it still conforms to its schema. ドキュメント全体を検証することもできますが、サブツリーだけを検証する処理時間は短くなります。You could validate the entire document, but it takes less processing time to validate a just a sub-tree.

addSchemaInfotrueの場合、このメソッドはスキーマ検証後の infoset (PSVI) を XML ツリーに設定します。If addSchemaInfo is true, then this method populates the XML tree with the post-schema-validation infoset (PSVI).

XML ツリーに PSVI を設定することには、2つの側面があります。There are two aspects of populating the XML tree with the PSVI.

最初に、ツリー内のすべてのノードに注釈が追加されます。これGetSchemaInfoにより、ツリー内の要素または属性に対してを呼び出すことができるようになります。First, an annotation is added to all nodes in the tree such that you can now call GetSchemaInfo on an element or attribute in the tree.

次に、XSD で定義されている既定の要素と属性が XML ツリーに追加されます。Second, default elements and attributes defined in the XSD are added to the XML tree. GetSchemaInfoメソッドの1つを呼び出すことにより、特定の要素または属性が XSD から既定の要素または属性として追加されたかどうかを確認できます。By calling one of the GetSchemaInfo methods, you can determine if a specific element or attribute was added from the XSD as a default element or attribute.

にを渡すnullvalidationEventHandler、このメソッドは検証エラーの発生時に例外を発生させます。If you pass null for validationEventHandler, then this method raises an exception upon validation errors. 検証の警告によって例外が発生することはありません。Validation warnings will not raise an exception.

サブツリーを検証するには、のXmlSchemaObjectインスタンスを使用します。To validate a sub-tree, you use an instance of XmlSchemaObject. このインスタンスは、さまざまな方法で取得できます。You can obtain this instance in various ways. 簡単な方法は次のとおりです。An easy way is as follows:

  1. ドキュメントがスキーマに準拠していることを検証します。Validate that a document conforms to a schema.

  2. Validate拡張メソッドを呼び出して、スキーマ検証後の infoset (PSVI) を追加します。Add the post-schema-validation infoset (PSVI) by calling the Validate extension method.

  3. を実装GetSchemaInfo IXmlSchemaInfoするオブジェクトを取得するには、拡張メソッドを呼び出します。Call the GetSchemaInfo extension method to retrieve an object that implements IXmlSchemaInfo. 取得XmlSchemaObjectしたオブジェクトから、を取得できます。From the retrieved object, you can get an XmlSchemaObject.

XmlSchemaObjectインスタンスを作成した後は、このメソッドを使用してサブツリーを検証できます。After you have an instance of an XmlSchemaObject, you can use this method to validate a sub-tree..

適用対象