XmlSchemaSet Classe

Definição

Contém um cache de esquemas XSD (linguagem de definição de esquema XML).

public ref class XmlSchemaSet
public class XmlSchemaSet
type XmlSchemaSet = class
Public Class XmlSchemaSet
Herança
XmlSchemaSet

Exemplos

O exemplo a seguir valida um arquivo XML usando esquemas armazenados no XmlSchemaSet. O namespace no arquivo XML, urn:bookstore-schema, identifica qual esquema deve ser usado no XmlSchemaSet para validação. A saída do exemplo mostra que o arquivo XML tem duas violações de esquema:

  • O primeiro <book> elemento contém um <author> elemento, mas não <title> ou <price> elemento.

  • O elemento <author> no último elemento <book> está faltando um elemento <first-name> e <last-name>, e, em vez disso, ele tem um elemento <name> inválido.

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

O exemplo usa os dois arquivos de entrada a seguir.

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>

Comentários

Importante

  • Não use esquemas de fontes ou locais desconhecidos ou não confiáveis. Isso comprometerá a segurança do seu código.
  • Esquemas XML (incluindo esquemas embutidos) são inerentemente vulneráveis a ataques de negação de serviço; não as aceite em cenários não confiáveis.
  • Mensagens de erro de validação de esquema e exceções podem expor informações confidenciais sobre o modelo de conteúdo ou caminhos de URI para o arquivo de esquema. Tenha cuidado para não expor essas informações a chamadores não confiáveis.
  • Considerações adicionais de segurança são abordadas na seção "Considerações de segurança".

XmlSchemaSet é um cache ou biblioteca em que você pode armazenar esquemas XSD (linguagem de definição de esquema XML). XmlSchemaSet melhora o desempenho armazenando esquemas em cache na memória em vez de acessá-los de um arquivo ou de uma URL. Cada esquema é identificado pelo URI do namespace e pela localização especificada quando o esquema foi adicionado ao conjunto. Você usa a propriedade XmlReaderSettings.Schemas para atribuir ao objeto XmlSchemaSet que um leitor XML deve usar para validação de dados.

Considerações de segurança

  • Não use esquemas de fontes desconhecidas ou não confiáveis. Isso comprometerá a segurança do seu código. Namespaces externos ou locais referenciados em elementos de inclusão, importação e redefinição de um esquema são resolvidos em relação ao URI base do esquema que os inclui ou importa. Por exemplo, se o URI base do esquema de inclusão ou importação estiver vazio ou null, os locais externos são resolvidos em relação ao diretório atual. A XmlUrlResolver classe é usada para resolver esquemas externos por padrão. Para desabilitar a resolução de elementos de inclusão, importação e redefinição de um esquema, defina a XmlSchemaSet.XmlResolver propriedade como null.

  • A XmlSchemaSet classe usa a System.Text.RegularExpressions.Regex classe para analisar e corresponder expressões regulares em um esquema XML. A validação de facetas padrão com expressões regulares em um esquema XML pode envolver o aumento do uso da CPU e deve ser evitada em cenários de alta disponibilidade.

  • As exceções geradas como resultado do uso da XmlSchemaSet classe, como a XmlSchemaException classe, podem conter informações confidenciais que não devem ser expostas em cenários não confiáveis. Por exemplo, a SourceUri propriedade de um XmlSchemaException retorna o caminho de URI para o arquivo de esquema que causou a exceção. A propriedade SourceUri não deve ser exposta em cenários não confiáveis. As exceções devem ser tratadas corretamente para que essas informações confidenciais não sejam expostas em cenários não confiáveis.

Construtores

Nome Description
XmlSchemaSet()

Inicializa uma nova instância da classe XmlSchemaSet.

XmlSchemaSet(XmlNameTable)

Inicializa uma nova instância da XmlSchemaSet classe com a especificada XmlNameTable.

Propriedades

Nome Description
CompilationSettings

Obtém ou define o XmlSchemaCompilationSettings para o XmlSchemaSet.

Count

Obtém o número de esquemas XSD (linguagem de definição de esquema XML) lógicos no XmlSchemaSet.

GlobalAttributes

Obtém todos os atributos globais em todos os esquemas XSD (linguagem de definição de esquema XML) no XmlSchemaSet.

GlobalElements

Obtém todos os elementos globais em todos os esquemas XSD (linguagem de definição de esquema XML) no XmlSchemaSet.

GlobalTypes

Obtém todos os tipos globais simples e complexos em todos os esquemas XSD (linguagem de definição de esquema XML) no XmlSchemaSet.

IsCompiled

Obtém um valor que indica se os esquemas XSD (linguagem de definição de esquema XML) foram XmlSchemaSet compilados.

NameTable

Obtém o padrão XmlNameTable usado pelo carregamento de XmlSchemaSet novos esquemas XSD (linguagem de definição de esquema XML).

XmlResolver

Define o XmlResolver usado para resolver namespaces ou locais referenciados em elementos de inclusão e importação de um esquema.

Métodos

Nome Description
Add(String, String)

Adiciona o esquema XSD (linguagem de definição de esquema XML) na URL especificada ao XmlSchemaSet.

Add(String, XmlReader)

Adiciona o esquema XSD (linguagem de definição de esquema XML) contido no XmlReaderXmlSchemaSet.

Add(XmlSchema)

Adiciona o dado XmlSchema ao XmlSchemaSet.

Add(XmlSchemaSet)

Adiciona todos os esquemas XSD (linguagem de definição de esquema XML) no determinado XmlSchemaSet ao XmlSchemaSet.

Compile()

Compila os esquemas XSD (linguagem de definição de esquema XML) adicionados a XmlSchemaSet um esquema lógico.

Contains(String)

Indica se um esquema XSD (linguagem de definição de esquema XML) com o URI do namespace de destino especificado está no XmlSchemaSet.

Contains(XmlSchema)

Indica se o objeto XSD (linguagem de definição de esquema XML) XmlSchema especificado está no XmlSchemaSet.

CopyTo(XmlSchema[], Int32)

Copia todos os XmlSchema objetos da XmlSchemaSet matriz fornecida, começando no índice fornecido.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Objectatual.

(Herdado de Object)
Remove(XmlSchema)

Remove o esquema XSD (linguagem de definição de esquema XML) especificado do XmlSchemaSet.

RemoveRecursive(XmlSchema)

Remove o esquema XSD (linguagem de definição de esquema XML) especificado e todos os esquemas importados do XmlSchemaSet.

Reprocess(XmlSchema)

Reprocessa um esquema XSD (linguagem de definição de esquema XML) que já existe no XmlSchemaSet.

Schemas()

Retorna uma coleção de todos os esquemas XSD (linguagem de definição de esquema XML) no XmlSchemaSet.

Schemas(String)

Retorna uma coleção de todos os esquemas XSD (linguagem de definição de esquema XML) que XmlSchemaSet pertencem ao namespace fornecido.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Eventos

Nome Description
ValidationEventHandler

Especifica um manipulador de eventos para receber informações sobre erros de validação de esquema XSD (linguagem de definição de esquema XML).

Aplica-se a