XmlSchemaSet Osztály

Definíció

Xml-sémadefiníciós (XSD-) sémák gyorsítótárát tartalmazza.

public ref class XmlSchemaSet
public class XmlSchemaSet
type XmlSchemaSet = class
Public Class XmlSchemaSet
Öröklődés
XmlSchemaSet

Példák

Az alábbi példa egy XML-fájlt ellenőriz a XmlSchemaSetfájlban tárolt sémák használatával. Az XML-fájlban található névtér azonosítja, hogy melyik sémát a urn:bookstore-schema-ben használjuk az érvényesítéshez. A példa kimenete azt mutatja, hogy az XML-fájlnak két sémasértése van:

  • Az első <book> elem tartalmaz egy <author> elemet, de nem <title> vagy <price> elemet.

  • Az utolsó <author> elem <book> elemében hiányzik egy <first-name> és egy <last-name> elem, helyette egy érvénytelen <name> elem található.

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

A minta a következő két bemeneti fájlt használja.

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>

Megjegyzések

Important

  • Ne használjon ismeretlen vagy nem megbízható forrásokból vagy helyekről származó sémákat. Ha így tesz, azzal veszélyezteti a kód biztonságát.
  • Az XML-sémák (beleértve a beágyazott sémákat) eredendően ki vannak téve a szolgáltatásmegtagadási támadásoknak; nem fogadják el őket nem megbízható helyzetekben.
  • A sémaérvényesítési hibaüzenetek és kivételek bizalmas információkat tehetnek közzé a tartalommodellről vagy a sémafájl URI-elérési útjairól. Ügyeljen arra, hogy ne tegye közzé ezeket az információkat nem megbízható hívóknak.
  • A további biztonsági szempontokat a "Biztonsági szempontok" szakasz ismerteti.

XmlSchemaSet egy gyorsítótár vagy tár, ahol XML-sémadefiníciós (XSD-) sémákat tárolhat. XmlSchemaSet javítja a teljesítményt azáltal, hogy a sémákat a memóriában gyorsítótárazza, ahelyett hogy fájlból vagy URL-címről érné el azokat. Minden sémát a névtér URI-ja és a séma készlethez való hozzáadásakor megadott hely azonosít. A XmlReaderSettings.Schemas tulajdonság segítségével kijelölheti azt az XmlSchemaSet objektumot, amelyet egy XML-olvasónak kell használnia az adatérvényesítéshez.

Biztonsági megfontolások

  • Ne használjon ismeretlen vagy nem megbízható forrásokból származó sémákat. Ha így tesz, azzal veszélyezteti a kód biztonságát. A séma elemek include, import, és redefine elemeiben hivatkozott külső névterek vagy helyek feloldhatók a séma alap URI-ja alapján, amely azokat tartalmazza vagy importálja. Ha például a belevetendő vagy importáló séma alap URI-ja üres, vagy null, akkor a külső helyek az aktuális könyvtárhoz viszonyítva kerülnek feloldásra. Az XmlUrlResolver osztály alapértelmezés szerint a külső sémák feloldására szolgál. A séma belefoglalási, importálási és újradefiniálási elemeinek feloldásának letiltásához állítsa be a XmlSchemaSet.XmlResolver tulajdonságot null értékre.

  • Az XmlSchemaSet osztály az System.Text.RegularExpressions.Regex osztály használatával elemzi és egyezteti az XML-sémában lévő reguláris kifejezéseket. Az XML-sémákban lévő reguláris kifejezésekkel rendelkező minta aspektusainak ellenőrzése megnövelheti a processzorhasználatot, és a magas rendelkezésre állási forgatókönyvekben kerülni kell.

  • Az osztály használatából XmlSchemaSet eredő kivételek, például az XmlSchemaException osztály olyan bizalmas információkat tartalmazhatnak, amelyeket nem megbízható helyzetekben nem szabad közzétenni. Egy tulajdonság SourceUri például a XmlSchemaException kivételt okozó sémafájl URI-elérési útját adja vissza. Nem megbízható helyzetekben a SourceUri tulajdonságot nem szabad kitenni. A kivételeket megfelelően kell kezelni, hogy ezek a bizalmas információk ne legyenek közzétéve nem megbízható helyzetekben.

Konstruktorok

Name Description
XmlSchemaSet()

Inicializálja a XmlSchemaSet osztály új példányát.

XmlSchemaSet(XmlNameTable)

Inicializálja az osztály új példányát XmlSchemaSet a megadott XmlNameTable.

Tulajdonságok

Name Description
CompilationSettings

Lekéri vagy beállítja a XmlSchemaCompilationSettingsXmlSchemaSet.

Count

A logikai XML-sémadefiníciós nyelv (XSD) sémáinak számát adja meg a XmlSchemaSet.

GlobalAttributes

Lekéri az összes globális attribútumot az XML-sémadefiníciós nyelv (XSD) sémáiban a XmlSchemaSet.

GlobalElements

Lekéri az összes globális elemet az XML-sémadefiníciós nyelv (XSD) sémáiban a XmlSchemaSet.

GlobalTypes

Lekéri a globális egyszerű és összetett típusokat az XML-sémadefiníciós nyelv (XSD) összes sémájában a XmlSchemaSet.

IsCompiled

Olyan értéket kap, amely jelzi, hogy az XML-sémadefiníciós nyelv (XSD) sémái XmlSchemaSet lefordítva lettek-e.

NameTable

Az új XML-sémadefiníciós (XSD) sémák betöltésekor használt XmlNameTable alapértelmezett XmlSchemaSet érték.

XmlResolver

Beállítja a XmlResolver séma belefoglalási és importálási elemeiben hivatkozott névterek vagy helyek feloldásához használt értékeket.

Metódusok

Name Description
Add(String, String)

Hozzáadja az XML-sémadefiníciós (XSD) sémát a megadott URL-címen.XmlSchemaSet

Add(String, XmlReader)

Hozzáadja az XML-sémadefiníciós nyelvet (XSD) tartalmazó sémát a XmlReaderXmlSchemaSetfájlhoz.

Add(XmlSchema)

Hozzáadja a megadottt XmlSchema a XmlSchemaSet.

Add(XmlSchemaSet)

Hozzáadja az xml-sémadefiníciós nyelv (XSD) összes sémáját a XmlSchemaSetmegadotthozXmlSchemaSet.

Compile()

Az XML-sémadefiníciós nyelv (XSD) sémáit egyetlen logikai sémába XmlSchemaSet állítja össze.

Contains(String)

Azt jelzi, hogy a megadott célnévtér URI-jával rendelkező XML-sémadefiníciós (XSD) séma szerepel-e a XmlSchemaSet.

Contains(XmlSchema)

Azt jelzi, hogy a megadott XML-sémadefiníciós nyelv (XSD) XmlSchema objektum szerepel-e a XmlSchemaSet.

CopyTo(XmlSchema[], Int32)

Másolja az XmlSchema összes objektumot az XmlSchemaSet adott tömbbe az adott indextől kezdve.

Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
Remove(XmlSchema)

Eltávolítja a megadott XML-sémadefiníciós (XSD) sémát a XmlSchemaSet.

RemoveRecursive(XmlSchema)

Eltávolítja a megadott XML-sémadefiníciós (XSD) sémát és az összes olyan sémát, amelyből importálja a XmlSchemaSetfájlt.

Reprocess(XmlSchema)

Újra feldolgoz egy OLYAN XML-sémadefiníciós nyelvet (XSD) tartalmazó sémát, amely már létezik a XmlSchemaSet.

Schemas()

Az XML-sémadefiníciós nyelv (XSD) összes sémájának gyűjteményét adja vissza a XmlSchemaSet.

Schemas(String)

A megadott névtérhez tartozó összes XML-sémadefiníciós XmlSchemaSet nyelv (XSD) sémájának gyűjteményét adja vissza.

ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

esemény

Name Description
ValidationEventHandler

Egy eseménykezelőt ad meg az XML-sémadefiníciós nyelv (XSD) sémaérvényesítési hibáival kapcsolatos információk fogadásához.

A következőre érvényes: