Extensions.GetSchemaInfo Methode

Definitie

Hiermee haalt u de post-schemavalidatie-infoset (PSVI) van een gevalideerd knooppunt op.

Overloads

Name Description
GetSchemaInfo(XAttribute)

Hiermee haalt u de post-schemavalidatie-infoset (PSVI) van een gevalideerd kenmerk op.

GetSchemaInfo(XElement)

Hiermee haalt u de post-schemavalidatie-infoset (PSVI) van een gevalideerd element op.

Opmerkingen

Nadat u een XDocumentvalidatie hebt uitgevoerd, kunt u de informatieset na schemavalidatie ophalen voor een XElement of XAttribute die in het document is opgenomen.

Nadat u het IXmlSchemaInfo object hebt opgehaald, kunt u de SchemaAttribute of SchemaElement eigenschappen gebruiken om een gedeeltelijk validatietype (XmlSchemaElement of XmlSchemaAttribute) op te halen. U kunt de gedeeltelijke validatietypen gebruiken om een kenmerk of substructuur te valideren.

GetSchemaInfo(XAttribute)

Bron:
XNodeValidator.cs
Bron:
XNodeValidator.cs
Bron:
XNodeValidator.cs
Bron:
XNodeValidator.cs
Bron:
XNodeValidator.cs

Hiermee haalt u de post-schemavalidatie-infoset (PSVI) van een gevalideerd kenmerk op.

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

Parameters

source
XAttribute

Een XAttribute die eerder is gevalideerd.

Retouren

Een IXmlSchemaInfo met de infoset na schemavalidatie voor een XAttribute.

Opmerkingen

U kunt de IXmlSchemaInfo geretourneerde methode gebruiken om bepaalde kenmerken van een gevalideerd kenmerk te bepalen. U kunt bijvoorbeeld bepalen of het kenmerk afkomstig is van een standaardkenmerkwaarde in een XSD.

U gebruikt de SchemaAttribute eigenschap om een gedeeltelijk validatietype (XmlSchemaAttribute) op te halen. U kunt het gebruiken om een kenmerk opnieuw te valideren zonder een heel document te valideren.

Zie voor een voorbeeld van deze eigenschap Validate.

Van toepassing op

GetSchemaInfo(XElement)

Bron:
XNodeValidator.cs
Bron:
XNodeValidator.cs
Bron:
XNodeValidator.cs
Bron:
XNodeValidator.cs
Bron:
XNodeValidator.cs

Hiermee haalt u de post-schemavalidatie-infoset (PSVI) van een gevalideerd element op.

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

Parameters

source
XElement

Een XElement die eerder is gevalideerd.

Retouren

Een IXmlSchemaInfo met de post-schemavalidatie-infoset (PSVI) voor een XElement.

Voorbeelden

In het volgende voorbeeld wordt de structuur gevuld met een PSVI. Na validatie worden alle elementen en kenmerken in de structuur afgedrukt die ongeldig zijn volgens de 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

In dit voorbeeld wordt de volgende uitvoer gegenereerd:

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

Opmerkingen

U kunt de IXmlSchemaInfo geretourneerde methode gebruiken om bepaalde kenmerken van een gevalideerd element te bepalen. U kunt bijvoorbeeld het dynamische schematype van het element bepalen.

U gebruikt de SchemaElement eigenschap om een gedeeltelijk validatietype (XmlSchemaElement) op te halen. U kunt deze gebruiken om een substructuur opnieuw te valideren met een element in de hoofdmap zonder een heel document te valideren.

Zie voor een voorbeeld van deze eigenschap Validate.

Van toepassing op