Language

Extensions.GetSchemaInfo メソッド

定義

検証済みノードのスキーマ検証後情報セット (PSVI) を取得します。

オーバーロード

名前 説明
GetSchemaInfo(XAttribute)

検証済み属性のスキーマ検証後情報セット (PSVI) を取得します。

GetSchemaInfo(XElement)

検証済み要素のスキーマ検証後情報セット (PSVI) を取得します。

注釈

XDocumentを検証したら、ドキュメントに含まれるXElementまたはXAttributeのスキーマ検証後の情報セットを取得できます。

IXmlSchemaInfo オブジェクトを取得した後、SchemaAttributeプロパティまたはSchemaElementプロパティを使用して、部分的な検証の種類 (XmlSchemaElementまたはXmlSchemaAttribute) を取得できます。 部分検証の種類を使用して、属性またはサブツリーを検証できます。

GetSchemaInfo(XAttribute)

ソース:
XNodeValidator.cs
ソース:
XNodeValidator.cs
ソース:
XNodeValidator.cs
ソース:
XNodeValidator.cs
ソース:
XNodeValidator.cs

検証済み属性のスキーマ検証後情報セット (PSVI) を取得します。

public:
[System::Runtime::CompilerServices::Extension]
 static System::Xml::Schema::IXmlSchemaInfo ^ GetSchemaInfo(System::Xml::Linq::XAttribute ^ source);
public static System.Xml.Schema.IXmlSchemaInfo? GetSchemaInfo(this System.Xml.Linq.XAttribute source);
public static System.Xml.Schema.IXmlSchemaInfo GetSchemaInfo(this System.Xml.Linq.XAttribute source);
static member GetSchemaInfo : System.Xml.Linq.XAttribute -> System.Xml.Schema.IXmlSchemaInfo
<Extension()>
Public Function GetSchemaInfo (source As XAttribute) As IXmlSchemaInfo

パラメーター

source
XAttribute

以前に検証された XAttribute 。

返品

IXmlSchemaInfoのスキーマ検証後の情報セットを含むXAttribute。

注釈

このメソッドによって返される IXmlSchemaInfo を使用して、検証済み属性の特定の特性を判断できます。 たとえば、属性が XSD の既定の属性値から取得されたかどうかを判断できます。

SchemaAttribute プロパティを使用して、部分的な検証の種類 (XmlSchemaAttribute) を取得します。 これを使用すると、ドキュメント全体を検証せずに属性を再検証できます。

このプロパティの例については、「 Validate」を参照してください。

適用対象

GetSchemaInfo(XElement)

ソース:
XNodeValidator.cs
ソース:
XNodeValidator.cs
ソース:
XNodeValidator.cs
ソース:
XNodeValidator.cs
ソース:
XNodeValidator.cs

検証済み要素のスキーマ検証後情報セット (PSVI) を取得します。

public:
[System::Runtime::CompilerServices::Extension]
 static System::Xml::Schema::IXmlSchemaInfo ^ GetSchemaInfo(System::Xml::Linq::XElement ^ source);
public static System.Xml.Schema.IXmlSchemaInfo? GetSchemaInfo(this System.Xml.Linq.XElement source);
public static System.Xml.Schema.IXmlSchemaInfo GetSchemaInfo(this System.Xml.Linq.XElement source);
static member GetSchemaInfo : System.Xml.Linq.XElement -> System.Xml.Schema.IXmlSchemaInfo
<Extension()>
Public Function GetSchemaInfo (source As XElement) As IXmlSchemaInfo

パラメーター

source
XElement

以前に検証された XElement 。

返品

IXmlSchemaInfoのスキーマ検証後情報セット (PSVI) を含むXElement。

例

次の例では、ツリーに PSVI を設定します。 検証後、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

この例を実行すると、次の出力が生成されます。

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

注釈

このメソッドによって返される IXmlSchemaInfo を使用して、検証された要素の特定の特性を判断できます。 たとえば、要素の動的スキーマ型を決定できます。

SchemaElement プロパティを使用して、部分的な検証の種類 (XmlSchemaElement) を取得します。 これを使用すると、ドキュメント全体を検証せずに、ルートにある要素を持つサブツリーを再検証できます。

このプロパティの例については、「 Validate」を参照してください。

適用対象