XmlSchemaSet Sınıf

Tanım

XML Şema tanım dili (XSD) şemalarının önbelleğini içerir.

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

Örnekler

Aşağıdaki örnek, içinde XmlSchemaSetdepolanan şemaları kullanarak bir XML dosyasını doğrular. XML dosyasındaki ad alanı, urn:bookstore-schemaiçinde doğrulama için kullanılacak şemayı XmlSchemaSet tanımlar. Örnekten alınan çıktı, XML dosyasının iki şema ihlali olduğunu gösterir:

  • İlk <book> öğe bir <author> öğesi içeriyor, ancak <title> veya <price> öğesi yok.

  • <author> Son <book> öğedeki öğesinde bir <first-name> ve <last-name> öğesi eksik ve bunun yerine geçersiz <name> bir öğesi var.

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

Örnek aşağıdaki iki giriş dosyasını kullanır.

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>

Açıklamalar

Important

  • Bilinmeyen veya güvenilmeyen kaynaklardan veya konumlardan şemaları kullanmayın. Bunu yaptığınızda kodunuzun güvenliği tehlikeye girer.
  • XML şemaları (satır içi şemalar dahil) hizmet reddi saldırılarına karşı doğal olarak savunmasızdır; güvenilmeyen senaryolarda bunları kabul etmeyin.
  • Şema doğrulama hata iletileri ve özel durumlar, şema dosyasının içerik modeli veya URI yolları hakkında hassas bilgileri kullanıma sunabilir. Bu bilgileri güvenilmeyen arayanlara göstermemeye dikkat edin.
  • Ek güvenlik konuları "GüvenlikLe İlgili Önemli Noktalar" bölümünde ele alınmıştır.

XmlSchemaSet , XML Şema tanım dili (XSD) şemalarını depolayabileceğiniz bir önbellek veya kitaplıktır. XmlSchemaSet şemalara bir dosyadan veya URL'den erişmek yerine bellekte önbelleğe alarak performansı artırır. Her şema, ad alanı URI'sine ve şema kümeye eklendiğinde belirtilen konuma göre tanımlanır. Bir XML okuyucusunun XmlReaderSettings.SchemasXmlSchemaSet veri doğrulaması için kullanması gereken nesneyi atamak için özelliğini kullanırsınız.

Güvenlik konuları

  • Bilinmeyen veya güvenilmeyen kaynaklardan gelen şemaları kullanmayın. Bunu yaptığınızda kodunuzun güvenliği tehlikeye girer. Bir şemanın öğelerini dahil etme, içeri aktarma ve yeniden tanımlama konusunda başvuruda bulunulan dış ad alanları veya konumlar, bunları içeren veya içeri aktaran şemanın temel URI'sine göre çözümlenir. Örneğin, dahil edilen veya içeri aktarılan şemanın temel URI'si boşsa veya null dış konumlar geçerli dizine göre çözümlenir. XmlUrlResolver sınıfı, dış şemaları varsayılan olarak çözümlemek için kullanılır. Bir şemanın dahil etme, içe aktarma ve yeniden tanımlama öğelerini çözümlemeyi devre dışı bırakmak için XmlSchemaSet.XmlResolver özelliğini null olarak ayarlayın.

  • Bu XmlSchemaSet sınıfı, XML şemasındaki normal ifadeleri ayrıştırmak ve eşleştirmek için System.Text.RegularExpressions.Regex sınıfını kullanır. Xml şemasında normal ifadelerle desen modellerinin doğrulanması daha fazla CPU kullanımı içerebilir ve yüksek kullanılabilirlik senaryolarında kaçınılmalıdır.

  • Sınıfın kullanılması XmlSchemaSet sonucunda ortaya çıkan özel durumlar, örneğin XmlSchemaException sınıfı güvenilmeyen senaryolarda kullanıma sunulmaması gereken hassas bilgiler içerebilir. Örneğin, SourceUri özelliği XmlSchemaException özel duruma neden olan şema dosyasının URI yolunu döndürür. SourceUri özelliği güvenilmeyen senaryolarda kullanıma sunulmamalıdır. Bu hassas bilgilerin güvenilmeyen senaryolarda kullanıma sunulmaması için özel durumlar düzgün bir şekilde işlenmelidir.

Oluşturucular

Name Description
XmlSchemaSet()

XmlSchemaSet sınıfının yeni bir örneğini başlatır.

XmlSchemaSet(XmlNameTable)

belirtilen XmlSchemaSetile sınıfının yeni bir örneğini XmlNameTable başlatır.

Özellikler

Name Description
CompilationSettings

için XmlSchemaCompilationSettingsöğesini XmlSchemaSet alır veya ayarlar.

Count

içindeki mantıksal XML Şema tanım dili (XSD) şemalarının XmlSchemaSetsayısını alır.

GlobalAttributes

içindeki tüm XML Şeması tanım dili (XSD) şemalarındaki tüm genel öznitelikleri XmlSchemaSetalır.

GlobalElements

içindeki tüm XML Şeması tanım dili (XSD) şemalarındaki XmlSchemaSettüm genel öğeleri alır.

GlobalTypes

içindeki tüm XML Şeması tanım dili (XSD) şemalarındaki XmlSchemaSettüm genel basit ve karmaşık türleri alır.

IsCompiled

içindeki XML Şema tanım dilinin (XSD) XmlSchemaSet derlenip derlenmemiş olduğunu gösteren bir değer alır.

NameTable

Yeni XML Şeması tanım dili (XSD) şemaları yüklenirken tarafından XmlNameTable kullanılan varsayılan XmlSchemaSet değeri alır.

XmlResolver

Bir şemanın XmlResolver öğelerini dahil etme ve içeri aktarma bölümünde başvuruda bulunılan ad alanlarını veya konumları çözümlemek için kullanılan öğesini ayarlar.

Yöntemler

Name Description
Add(String, String)

BELIRTILEN URL'ye XML Şema tanım dili (XSD) şemasını XmlSchemaSetekler.

Add(String, XmlReader)

içinde yer alan XML Şema tanım dili (XSD) şemasını XmlReaderXmlSchemaSetöğesine ekler.

Add(XmlSchema)

verilen XmlSchema değerini öğesine XmlSchemaSetekler.

Add(XmlSchemaSet)

verilen XmlSchemaSet içindeki tüm XML Şema tanım dili (XSD) şemalarını öğesine XmlSchemaSetekler.

Compile()

öğesine eklenen XmlSchemaSet XML Şema tanım dili (XSD) şemalarını tek bir mantıksal şemaya derler.

Contains(String)

Belirtilen hedef ad alanı URI'sine sahip bir XML Şema tanım dili (XSD) şemasının XmlSchemaSetiçinde olup olmadığını gösterir.

Contains(XmlSchema)

Belirtilen XML Şeması tanım dilinin (XSD) XmlSchema nesnesinin XmlSchemaSetiçinde olup olmadığını gösterir.

CopyTo(XmlSchema[], Int32)

Verilen dizinden XmlSchema başlayarak içindeki tüm XmlSchemaSet nesneleri verilen diziye kopyalar.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Geçerli örneğin Type alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectbasit bir kopyasını oluşturur.

(Devralındığı yer: Object)
Remove(XmlSchema)

Belirtilen XML Şeması tanım dili (XSD) şemasını dosyasından XmlSchemaSetkaldırır.

RemoveRecursive(XmlSchema)

Belirtilen XML Şeması tanım dili (XSD) şemasını ve öğesinden XmlSchemaSetiçeri aktarmış olduğu tüm şemaları kaldırır.

Reprocess(XmlSchema)

içinde zaten var olan bir XML Şema tanım dili (XSD) şemasını yeniden işler XmlSchemaSet.

Schemas()

içindeki tüm XML Şema tanım dili (XSD) şemalarından XmlSchemaSetoluşan bir koleksiyon döndürür.

Schemas(String)

Verilen ad alanına ait olan içindeki tüm XML Şeması tanım dili (XSD) şemalarından XmlSchemaSet oluşan bir koleksiyon döndürür.

ToString()

Geçerli nesneyi temsil eden bir dize döndürür.

(Devralındığı yer: Object)

Ekinlikler

Name Description
ValidationEventHandler

XML Şema tanım dili (XSD) şema doğrulama hataları hakkında bilgi almak için bir olay işleyicisi belirtir.

Şunlara uygulanır