XmlSchemaSet Classe

Definição

Contém uma cache de esquemas XML Schema Definition Language (XSD).

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

Exemplos

O exemplo a seguir valida um ficheiro XML usando esquemas armazenados no XmlSchemaSet. O namespace no arquivo XML, urn:bookstore-schema, identifica qual esquema no XmlSchemaSet a ser usado 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 nenhum <title> elemento ou <price> elemento.

  • No elemento <author> do último elemento <book>, falta um elemento <first-name> e <last-name> e tem um elemento <name> inválido em vez disso.

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>

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

Observações

Importante

  • Não use esquemas de fontes ou locais desconhecidos ou não confiáveis. Isso comprometerá a segurança do seu código.
  • Os esquemas XML (incluindo esquemas embutidos) são inerentemente vulneráveis a ataques de negação de serviço; Não os aceite em cenários não confiáveis.
  • Mensagens de erro e exceções de validação de esquema 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 onde você pode armazenar esquemas XSD (XML Schema Definition Language). XmlSchemaSet melhora o desempenho armazenando esquemas em cache na memória em vez de acessá-los a partir de um arquivo ou URL. Cada esquema é identificado pelo URI do namespace e pelo local especificado quando o esquema foi adicionado ao conjunto. Use a XmlReaderSettings.Schemas propriedade para atribuir o XmlSchemaSet objeto 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. Os namespaces externos ou locais referenciados em incluir, importar e redefinir elementos 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 serã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 de padrão com expressões regulares em um esquema XML pode envolver maior 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 propriedade SourceUri de XmlSchemaException retorna o caminho 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 adequadamente para que essas informações confidenciais não sejam expostas em cenários não confiáveis.

Construtores

Name Descrição
XmlSchemaSet()

Inicializa uma nova instância da XmlSchemaSet classe.

XmlSchemaSet(XmlNameTable)

Inicializa uma nova instância da XmlSchemaSet classe com o especificado XmlNameTable.

Propriedades

Name Descrição
CompilationSettings

Obtém ou define para XmlSchemaCompilationSettings o XmlSchemaSet.

Count

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

GlobalAttributes

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

GlobalElements

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

GlobalTypes

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

IsCompiled

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

NameTable

Obtém o padrão XmlNameTable usado ao XmlSchemaSet carregar novos esquemas da linguagem de definição de esquemas XML (XSD).

XmlResolver

Os conjuntos usados XmlResolver para resolver namespaces ou locais referenciados incluem e importam elementos de um esquema.

Métodos

Name Descrição
Add(String, String)

Adiciona o esquema XML Schema Definition Language (XSD) na URL especificada ao XmlSchemaSet.

Add(String, XmlReader)

Adiciona o esquema XML Schema Definition Language (XSD) contido no XmlReaderXmlSchemaSet.

Add(XmlSchema)

Adiciona o dado XmlSchema ao XmlSchemaSet.

Add(XmlSchemaSet)

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

Compile()

Compila os esquemas da XML Schema Definition Language (XSD) adicionados XmlSchemaSet a um único esquema lógico.

Contains(String)

Indica se um esquema XML Schema Definition Language (XSD) com o URI do namespace alvo especificado está no XmlSchemaSet.

Contains(XmlSchema)

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

CopyTo(XmlSchema[], Int32)

Copia todos os XmlSchema objetos do XmlSchemaSet para o array dado, começando no índice indicado.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
Remove(XmlSchema)

Remove a linguagem de definição de esquema XML (XSD) especificada do XmlSchemaSetesquema .

RemoveRecursive(XmlSchema)

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

Reprocess(XmlSchema)

Reprocessa um esquema XML Schema Definition Language (XSD) que já existe no XmlSchemaSet.

Schemas()

Devolve uma coleção de todos os esquemas da linguagem de definição XML Schema (XSD) no XmlSchemaSet.

Schemas(String)

Devolve uma coleção de todos os esquemas da linguagem de definição de esquemas XML (XSD) que XmlSchemaSet pertencem ao namespace dado.

ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Eventos

Name Descrição
ValidationEventHandler

Especifica um gestor de eventos para receber informações sobre erros de validação de esquema da XML Schema Definition Language (XSD).

Aplica-se a