XmlSchemaSet Класс

Определение

Содержит кэш схем определения схемы XML (XSD).

public ref class XmlSchemaSet
public class XmlSchemaSet
type XmlSchemaSet = class
Public Class XmlSchemaSet
Наследование
XmlSchemaSet

Примеры

В следующем примере выполняется проверка XML-файла с помощью схем, хранящихся в файле XmlSchemaSet. Пространство имен в XML-файле urn:bookstore-schema определяет, какую схему использовать XmlSchemaSet для валидации. Выходные данные из примера показывают, что XML-файл имеет два нарушения схемы:

  • Первый <book> элемент содержит <author> элемент, но не содержит <title> или <price> элемента.

  • В последнем элементе <author> отсутствуют элементы <book> и <first-name>, а вместо них присутствует недопустимый элемент <last-name>.

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

В примере используются следующие два входных файла.

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>

Комментарии

Important

  • Не используйте схемы из неизвестных или ненадежных источников или расположений. Это приведет к компрометации безопасности кода.
  • XML-схемы (включая встроенные схемы) по сути уязвимы для атак типа "отказ в обслуживании"; Не принимать их в ненадежных сценариях.
  • Сообщения об ошибках проверки схемы и исключения могут предоставлять конфиденциальные сведения о модели содержимого или пути URI к файлу схемы. Будьте осторожны, чтобы не предоставлять эту информацию ненадежным вызывающим абонентам.
  • Дополнительные вопросы безопасности рассматриваются в разделе "Вопросы безопасности".

XmlSchemaSet — это кэш или библиотека, в которой можно хранить схемы языка определения XML-схемы (XSD). XmlSchemaSet повышает производительность путем кэширования схем в памяти вместо доступа к ним из файла или URL-адреса. Каждая схема определяется URI пространства имен и расположением, указанными при добавлении схемы в набор. Вы используете свойство XmlReaderSettings.Schemas, чтобы назначить объект XmlSchemaSet, который средство чтения XML должно использовать для проверки данных.

Вопросы безопасности

  • Не используйте схемы из неизвестных или ненадежных источников. Это приведет к компрометации безопасности кода. Внешние пространства имен или расположения, на которые ссылаются включаемые, импорт и переопределенные элементы схемы, разрешаются в отношении базового URI схемы, которая включает или импортирует их. Например, если базовый URI включающей или импортирующей схемы пуст или null, внешние расположения разрешаются относительно текущего каталога. Класс XmlUrlResolver используется для разрешения внешних схем по умолчанию. Чтобы отключить разрешение включения, импорта и переопределения элементов схемы, задайте для свойства XmlSchemaSet.XmlResolver значение null.

  • Класс XmlSchemaSet использует System.Text.RegularExpressions.Regex класс для синтаксического анализа и сопоставления регулярных выражений в схеме XML. Проверка аспектов шаблона с регулярными выражениями в схеме XML может включать увеличение использования ЦП и следует избегать в сценариях высокой доступности.

  • Исключения, возникающие в результате использования XmlSchemaSet класса, например XmlSchemaException класса, могут содержать конфиденциальную информацию, которая не должна предоставляться в ненадежных сценариях. Например, свойство SourceUri объекта XmlSchemaException возвращает URI, указывающий путь к файлу схемы, который вызвал исключение. Свойство SourceUri не должно быть предоставлено в ненадежных сценариях. Исключения должны обрабатываться должным образом, чтобы эта конфиденциальная информация не предоставлялась в ненадежных сценариях.

Конструкторы

Имя Описание
XmlSchemaSet()

Инициализирует новый экземпляр класса XmlSchemaSet.

XmlSchemaSet(XmlNameTable)

Инициализирует новый экземпляр XmlSchemaSet класса с указанным XmlNameTable.

Свойства

Имя Описание
CompilationSettings

Возвращает или задает XmlSchemaCompilationSettings значение для XmlSchemaSetпараметра .

Count

Возвращает количество схем определения логической схемы XML (XSD) в объекте XmlSchemaSet.

GlobalAttributes

Возвращает все глобальные атрибуты во всех схемах языка определения XML-схемы (XSD) в схеме XmlSchemaSet.

GlobalElements

Возвращает все глобальные элементы во всех схемах языка определения XML-схемы (XSD) в списке XmlSchemaSet.

GlobalTypes

Возвращает все глобальные простые и сложные типы во всех схемах языка определения схемы XML (XSD) в списке XmlSchemaSet.

IsCompiled

Возвращает значение, указывающее, были ли скомпилированы схемы языка определения XML-схемы XmlSchemaSet (XSD).

NameTable

Возвращает значение по умолчанию XmlNameTable , используемое XmlSchemaSet при загрузке новых схем языка определения схемы XML (XSD).

XmlResolver

XmlResolver Задает используемые для разрешения пространств имен или расположений, на которые ссылается включение и импорт элементов схемы.

Методы

Имя Описание
Add(String, String)

Добавляет схему определения XML-схемы (XSD) по URL-адресу, указанному в поле XmlSchemaSet.

Add(String, XmlReader)

Добавляет схему языка определения XML-схемы (XSD), содержащуюся в XmlReader объекте XmlSchemaSet.

Add(XmlSchema)

Добавляет заданный XmlSchemaXmlSchemaSetобъект.

Add(XmlSchemaSet)

Добавляет все схемы языка определения XML-схемы (XSD) в заданный объект XmlSchemaSetXmlSchemaSet.

Compile()

Компилирует схемы языка определения XML-схемы (XSD), добавленные в одну логическую схему XmlSchemaSet .

Contains(String)

Указывает, находится XmlSchemaSetли схема языка определения xml-схемы (XSD) с указанным URI целевого пространства имен.

Contains(XmlSchema)

Указывает, находится ли указанный объект языка определения схемы XML (XSD) XmlSchema в объекте XmlSchemaSet.

CopyTo(XmlSchema[], Int32)

Копирует все XmlSchema объекты из заданного XmlSchemaSet массива, начиная с заданного индекса.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
Remove(XmlSchema)

Удаляет указанную схему языка определения схемы XML (XSD) из .XmlSchemaSet

RemoveRecursive(XmlSchema)

Удаляет указанную схему определения схемы XML (XSD) и все схемы, импортируемые из него XmlSchemaSet.

Reprocess(XmlSchema)

Повторно обрабатывает схему языка определения XML-схемы (XSD), которая уже существует в .XmlSchemaSet

Schemas()

Возвращает коллекцию всех схем языка определения XML-схемы (XSD) в .XmlSchemaSet

Schemas(String)

Возвращает коллекцию всех схем языка определения XML-схемы (XSD) в XmlSchemaSet заданном пространстве имен.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

События

Имя Описание
ValidationEventHandler

Задает обработчик событий для получения сведений об ошибках проверки схемы XSD.

Применяется к