XmlSchemaSet Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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 comonull.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). |