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. |