XmlSchemaSet Klass

Definition

Innehåller en cache med XSD-scheman (XML Schema Definition Language).

public ref class XmlSchemaSet
public class XmlSchemaSet
type XmlSchemaSet = class
Public Class XmlSchemaSet
Arv
XmlSchemaSet

Exempel

I följande exempel verifieras en XML-fil med hjälp av scheman XmlSchemaSetsom lagras i . Namnområdet i XML-filen , urn:bookstore-schemaidentifierar vilket schema som XmlSchemaSet ska användas för validering. Utdata från exemplet visar att XML-filen har två schemaöverträdelser:

  • Det första <book> elementet innehåller ett <author> element men inget <title> eller <price> element.

  • Elementet <author> i det sista <book> elementet saknar ett <first-name> och-element <last-name> och har i stället ett ogiltigt <name> element.

using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;

public class Sample
{
  public static void Main() {

    // Create the XmlSchemaSet class.
    XmlSchemaSet sc = new XmlSchemaSet();

    // Add the schema to the collection.
    sc.Add("urn:bookstore-schema", "books.xsd");

    // Set the validation settings.
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.Schema;
    settings.Schemas = sc;
    settings.ValidationEventHandler += ValidationCallBack;

    // Create the XmlReader object.
    XmlReader reader = XmlReader.Create("booksSchemaFail.xml", settings);

    // Parse the file.
    while (reader.Read());
  }

  // Display any validation errors.
  private static void ValidationCallBack(object sender, ValidationEventArgs e) {
    Console.WriteLine($"Validation Error:\n   {e.Message}\n");
  }
}
// The example displays output like the following:
//   Validation Error:
//        The element 'book' in namespace 'urn:bookstore-schema' has invalid child element 'author'
//        in namespace 'urn:bookstore-schema'. List of possible elements expected: 'title' in
//        namespace 'urn:bookstore-schema'.
//
//    Validation Error:
//       The element 'author' in namespace 'urn:bookstore-schema' has invalid child element 'name'
//       in namespace 'urn:bookstore-schema'. List of possible elements expected: 'first-name' in
//       namespace 'urn:bookstore-schema'.
Imports System.Xml
Imports System.Xml.Schema
Imports System.IO

Public Module Sample 
  Public Sub Main() 

    ' Create the XmlSchemaSet class.
    Dim sc as XmlSchemaSet = new XmlSchemaSet()

    ' Add the schema to the collection.
    sc.Add("urn:bookstore-schema", "books.xsd")

    ' Set the validation settings.
    Dim settings as XmlReaderSettings = new XmlReaderSettings()
    settings.ValidationType = ValidationType.Schema
    settings.Schemas = sc
    AddHandler settings.ValidationEventHandler, AddressOf ValidationCallBack
 
    ' Create the XmlReader object.
    Dim reader as XmlReader = XmlReader.Create("booksSchemaFail.xml", settings)

    ' Parse the file. 
    While reader.Read()
    End While
    
  End Sub

  ' Display any validation errors.
  Private Sub ValidationCallBack(sender as object, e as ValidationEventArgs) 
    Console.WriteLine($"Validation Error:{vbCrLf}   {e.Message}")
    Console.WriteLine()
  End Sub
End Module
' The example displays output like the following:
'   Validation Error: 
'        The element 'book' in namespace 'urn:bookstore-schema' has invalid child element 'author' 
'        in namespace 'urn:bookstore-schema'. List of possible elements expected: 'title' in 
'        namespace 'urn:bookstore-schema'.
'
'    Validation Error: 
'       The element 'author' in namespace 'urn:bookstore-schema' has invalid child element 'name' 
'       in namespace 'urn:bookstore-schema'. List of possible elements expected: 'first-name' in 
'       namespace 'urn:bookstore-schema'.

Input

Exemplet använder följande två indatafiler.

booksSchemaFail.xml:

<?xml version='1.0'?>
<bookstore xmlns="urn:bookstore-schema">
  <book>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
  </book>
  <book genre="novel">
    <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">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

books.xsd:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="urn:bookstore-schema"
    elementFormDefault="qualified"
    targetNamespace="urn:bookstore-schema">

 <xsd:element name="bookstore" type="bookstoreType"/>

 <xsd:complexType name="bookstoreType">
  <xsd:sequence maxOccurs="unbounded">
   <xsd:element name="book"  type="bookType"/>
  </xsd:sequence>
 </xsd:complexType>

 <xsd:complexType name="bookType">
  <xsd:sequence>
   <xsd:element name="title" type="xsd:string"/>
   <xsd:element name="author" type="authorName"/>
   <xsd:element name="price"  type="xsd:decimal"/>
  </xsd:sequence>
  <xsd:attribute name="genre" type="xsd:string"/>
 </xsd:complexType>

 <xsd:complexType name="authorName">
  <xsd:sequence>
   <xsd:element name="first-name"  type="xsd:string"/>
   <xsd:element name="last-name" type="xsd:string"/>
  </xsd:sequence>
 </xsd:complexType>

</xsd:schema>

Kommentarer

Important

  • Använd inte scheman från okända eller ej betrodda källor eller platser. Om du gör det äventyras säkerheten för koden.
  • XML-scheman (inklusive infogade scheman) är i sig sårbara för överbelastningsattacker. acceptera dem inte i ej betrodda scenarier.
  • Felmeddelanden och undantag för schemavalidering kan exponera känslig information om innehållsmodellen eller URI-sökvägar till schemafilen. Var noga med att inte exponera den här informationen för ej betrodda uppringare.
  • Ytterligare säkerhetsöverväganden beskrivs i avsnittet "Säkerhetsöverväganden".

XmlSchemaSet är en cache eller ett bibliotek där du kan lagra XSD-scheman (XML Schema Definition Language). XmlSchemaSet förbättrar prestanda genom att cachelagra scheman i minnet i stället för att komma åt dem från en fil eller en URL. Varje schema identifieras av den namnområdes-URI och plats som angavs när schemat lades till i uppsättningen. Du använder XmlReaderSettings.Schemas egenskapen för att tilldela det XmlSchemaSet objekt som en XML-läsare ska använda för dataverifiering.

Säkerhetsfrågor

  • Använd inte scheman från okända eller ej betrodda källor. Om du gör det äventyras säkerheten för koden. Externa namnrymder eller platser som refereras till i inkluderade, importerade och omdefinierade element i ett schema löses i förhållande till bas-URI:n för det schema som innehåller eller importerar dem. Om till exempel bas-URI:n för inkluderande eller importerande schema är tom eller null, löses de externa platserna med hänsyn till den aktuella katalogen. Klassen XmlUrlResolver används för att matcha externa scheman som standard. Om du vill inaktivera upplösningen för inkludera, importera och omdefiniera element i XmlSchemaSet.XmlResolver ett schema anger du egenskapen till null.

  • Klassen XmlSchemaSet använder System.Text.RegularExpressions.Regex klassen för att parsa och matcha reguljära uttryck i ett XML-schema. Validering av mönsterfasetter med reguljära uttryck i ett XML-schema kan innebära ökad CPU-användning och bör undvikas i scenarier med hög tillgänglighet.

  • Undantag som uppstår till följd av att klassen används XmlSchemaSet , till exempel XmlSchemaException klassen, kan innehålla känslig information som inte ska exponeras i obetrodda scenarier. Till exempel returnerar SourceUri-egenskapen hos en XmlSchemaException URI-sökvägen till schemafilen som orsakade undantaget. Egenskapen SourceUri ska inte exponeras i ej betrodda scenarier. Undantag bör hanteras korrekt så att den här känsliga informationen inte exponeras i obetrodda scenarier.

Konstruktorer

Name Description
XmlSchemaSet()

Initierar en ny instans av XmlSchemaSet klassen.

XmlSchemaSet(XmlNameTable)

Initierar en ny instans av XmlSchemaSet klassen med angiven XmlNameTable.

Egenskaper

Name Description
CompilationSettings

Hämtar eller anger XmlSchemaCompilationSettings för XmlSchemaSet.

Count

Hämtar antalet XSD-schemascheman (logical XML Schema definition language) i XmlSchemaSet.

GlobalAttributes

Hämtar alla globala attribut i alla XSD-scheman (XML Schema Definition Language) i XmlSchemaSet.

GlobalElements

Hämtar alla globala element i alla XSD-scheman (XML Schema Definition Language) i XmlSchemaSet.

GlobalTypes

Hämtar alla globala enkla och komplexa typer i alla XSD-scheman (XML Schema Definition Language) i XmlSchemaSet.

IsCompiled

Hämtar ett värde som anger om XSD-scheman (XML Schema Definition Language) i XmlSchemaSet har kompilerats.

NameTable

Hämtar standardvärdet XmlNameTable som används vid XmlSchemaSet inläsning av nya XSD-scheman (XML Schema Definition Language).

XmlResolver

Anger vilka XmlResolver som används för att matcha namnområden eller platser som refereras i inkludera och importera element i ett schema.

Metoder

Name Description
Add(String, String)

Lägger till schemat för XML-schemadefinitionsspråk (XSD) vid den URL som anges i XmlSchemaSet.

Add(String, XmlReader)

Lägger till schemat xml-schemadefinitionsspråk (XSD) som finns i XmlReader till XmlSchemaSet.

Add(XmlSchema)

Lägger till den angivna XmlSchema i XmlSchemaSet.

Add(XmlSchemaSet)

Lägger till alla XSD-scheman (XML Schema Definition Language) i angivet XmlSchemaSet till XmlSchemaSet.

Compile()

Kompilerar scheman för XML-schemadefinitionsspråk (XSD) som lagts till i ett XmlSchemaSet logiskt schema.

Contains(String)

Anger om ett XSD-schema (XML Schema Definition Language) med angiven målnamnområdes-URI finns i XmlSchemaSet.

Contains(XmlSchema)

Anger om det angivna XSD-objektet (XML Schema Definition Language) XmlSchema finns i XmlSchemaSet.

CopyTo(XmlSchema[], Int32)

Kopierar alla XmlSchema objekt från XmlSchemaSet till den angivna matrisen med början vid det angivna indexet.

Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
Remove(XmlSchema)

Tar bort det angivna XSD-schemat (XML Schema Definition Language) från XmlSchemaSet.

RemoveRecursive(XmlSchema)

Tar bort det angivna XSD-schemat (XML Schema Definition Language) och alla scheman som det importerar från XmlSchemaSet.

Reprocess(XmlSchema)

Omarbetar ett XSD-schema (XML Schema Definition Language) som redan finns i XmlSchemaSet.

Schemas()

Returnerar en samling med alla XSD-scheman (XML Schema Definition Language) i XmlSchemaSet.

Schemas(String)

Returnerar en samling av alla XSD-scheman (XML Schema Definition Language) i XmlSchemaSet det som tillhör det angivna namnområdet.

ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)

Händelser

Name Description
ValidationEventHandler

Anger en händelsehanterare för att ta emot information om XSD-schemavalideringsfel (XML Schema Definition Language).

Gäller för