XmlReaderSettings.Schemas Właściwość

Definicja

Pobiera lub ustawia XmlSchemaSet do użycia podczas sprawdzania poprawności schematu.Gets or sets the XmlSchemaSet to use when performing schema validation.

public:
 property System::Xml::Schema::XmlSchemaSet ^ Schemas { System::Xml::Schema::XmlSchemaSet ^ get(); void set(System::Xml::Schema::XmlSchemaSet ^ value); };
public System.Xml.Schema.XmlSchemaSet Schemas { get; set; }
member this.Schemas : System.Xml.Schema.XmlSchemaSet with get, set
Public Property Schemas As XmlSchemaSet

Wartość właściwości

XmlSchemaSet

XmlSchemaSet, który ma być używany podczas wykonywania walidacji schematu.The XmlSchemaSet to use when performing schema validation. Wartość domyślna to pusty obiekt XmlSchemaSet.The default is an empty XmlSchemaSet object.

Przykłady

W poniższym przykładzie zastosowano obiekt XmlReaderSettings i metodę XmlReader.Create, aby skojarzyć schemat z dokumentem XML.The example below uses the XmlReaderSettings object and the XmlReader.Create method to associate a schema with an XML document. Schemat zostanie dodany do właściwości Schemas obiektu XmlReaderSettings.The schema is added to the Schemas property of the XmlReaderSettings object. Wartość właściwości Schemas jest obiektem XmlSchemaSet.The value of the Schemas property is an XmlSchemaSet object. Schemat jest używany do sprawdzania, czy dokument XML jest zgodny ze schematem modelu zawartości.The schema is used to validate that the XML document conforms to the schema content model. Błędy i ostrzeżenia walidacji schematu są obsługiwane przez ValidationEventHandler zdefiniowane w obiekcie XmlReaderSettings.Schema validation errors and warnings are handled by the ValidationEventHandler defined in the XmlReaderSettings object.

#using <System.Xml.dll>

using namespace System;
using namespace System::Xml;
using namespace System::Xml::Schema;

static void booksSettingsValidationEventHandler( Object^ /*sender*/, ValidationEventArgs^ e )
{
   if ( e->Severity == XmlSeverityType::Warning )
   {
      Console::Write( L"WARNING: " );
      Console::WriteLine( e->Message );
   }
   else
   if ( e->Severity == XmlSeverityType::Error )
   {
      Console::Write( L"ERROR: " );
      Console::WriteLine( e->Message );
   }
}

int main()
{
   XmlReaderSettings^ booksSettings = gcnew XmlReaderSettings;
   booksSettings->Schemas->Add( L"http://www.contoso.com/books", L"books.xsd" );
   booksSettings->ValidationType = ValidationType::Schema;
   booksSettings->ValidationEventHandler += gcnew ValidationEventHandler( booksSettingsValidationEventHandler );
   XmlReader^ books = XmlReader::Create( L"books.xml", booksSettings );
   while ( books->Read() )
   {}

   return 0;
}

using System;
using System.Xml;
using System.Xml.Schema;

class XmlSchemaSetExample
{
    static void Main()
    {
        XmlReaderSettings booksSettings = new XmlReaderSettings();
        booksSettings.Schemas.Add("http://www.contoso.com/books", "books.xsd");
        booksSettings.ValidationType = ValidationType.Schema;
        booksSettings.ValidationEventHandler += new ValidationEventHandler(booksSettingsValidationEventHandler);

        XmlReader books = XmlReader.Create("books.xml", booksSettings);

        while (books.Read()) { }
    }

    static void booksSettingsValidationEventHandler(object sender, ValidationEventArgs e)
    {
        if (e.Severity == XmlSeverityType.Warning)
        {
            Console.Write("WARNING: ");
            Console.WriteLine(e.Message);
        }
        else if (e.Severity == XmlSeverityType.Error)
        {
            Console.Write("ERROR: ");
            Console.WriteLine(e.Message);
        }
    }
}
Imports System.Xml
Imports System.Xml.Schema

Class XmlSchemaSetExample

    Shared Sub Main()

        Dim booksSettings As XmlReaderSettings = New XmlReaderSettings()
        booksSettings.Schemas.Add("http://www.contoso.com/books", "books.xsd")
        booksSettings.ValidationType = ValidationType.Schema
        AddHandler booksSettings.ValidationEventHandler, New ValidationEventHandler(AddressOf booksSettingsValidationEventHandler)

        Dim books As XmlReader = XmlReader.Create("books.xml", booksSettings)

        While books.Read()

        End While

    End Sub

    Shared Sub booksSettingsValidationEventHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)

        If e.Severity = XmlSeverityType.Warning Then
            Console.Write("WARNING: ")
            Console.WriteLine(e.Message)

        ElseIf e.Severity = XmlSeverityType.Error Then
            Console.Write("ERROR: ")
            Console.WriteLine(e.Message)
        End If

    End Sub

End Class

W przykładzie zastosowano plik Books. XML jako dane wejściowe.The example uses the books.xml file as input.

<bookstore xmlns="http://www.contoso.com/books">
  <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
    <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" publicationdate="1991" ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

W przykładzie jest użyty plik Books. xsd jako dane wejściowe.The example uses the books.xsd file as an input.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="bookstore">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="book">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="title" type="xs:string" />
                            <xs:element name="author">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element minOccurs="0" name="name" type="xs:string" />
                                        <xs:element minOccurs="0" name="first-name" type="xs:string" />
                                        <xs:element minOccurs="0" name="last-name" type="xs:string" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="price" type="xs:decimal" />
                        </xs:sequence>
                        <xs:attribute name="genre" type="xs:string" use="required" />
                        <xs:attribute name="publicationdate" type="xs:unsignedShort" use="required" />
                        <xs:attribute name="ISBN" type="xs:string" use="required" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Uwagi

Ważne

  • Nie używaj schematów z nieznanych lub niezaufanych źródeł lub lokalizacji.Do not use schemas from unknown or untrusted sources or locations. Takie działanie spowoduje naruszenie zabezpieczeń kodu.Doing so will compromise the security of your code.
  • Schematy XML (w tym schematy wbudowane) są podatne na ataki typu "odmowa usługi"; nie Akceptuj ich w scenariuszach niezaufanych.XML schemas (including inline schemas) are inherently vulnerable to denial of service attacks; do not accept them in untrusted scenarios.
  • Komunikaty o błędach i wyjątki dotyczące sprawdzania poprawności schematu mogą ujawniać poufne informacje o modelu zawartości lub ścieżkach URI do pliku schematu.Schema validation error messages and exceptions may expose sensitive information about the content model or URI paths to the schema file. Należy zachować ostrożność, aby nie ujawniać tych informacji osobom niezaufanym wywołującym.Be careful not to expose this information to untrusted callers.
  • Aby uzyskać dodatkowe informacje, zobacz sekcję "zagadnienia dotyczące zabezpieczeń".For additional information, see the "Security considerations" section.

Klasa XmlSchemaSet obsługuje tylko schematy języka definicji schematu XML (XSD).The XmlSchemaSet class only supports XML Schema definition language (XSD) schemas. nie można skonfigurować wystąpień XmlReader utworzonych za pomocą metody Create w celu włączenia walidacji schematu danych XML (XDR).XmlReader instances created by the Create method cannot be configured to enable XML-Data Reduced (XDR) schema validation.

Zagadnienia związane z zabezpieczeniamiSecurity considerations

  • Nie używaj schematów z nieznanych lub niezaufanych źródeł.Do not use schemas from unknown or untrusted sources. Takie działanie spowoduje naruszenie zabezpieczeń kodu.Doing so will compromise the security of your code. Klasa XmlUrlResolver jest używana do rozpoznawania schematów zewnętrznych domyślnie.The XmlUrlResolver class is used to resolve external schemas by default. Aby wyłączyć rozwiązanie dołączania, importowania i ponownego definiowania elementów schematu, ustaw właściwość XmlSchemaSet.XmlResolver na null.To disable resolution of include, import, and redefine elements of a schema, set the XmlSchemaSet.XmlResolver property to null.

  • Wyjątki wywoływane w wyniku użycia klasy XmlSchemaSet, takie jak Klasa XmlSchemaException, mogą zawierać poufne informacje, które nie powinny być ujawnione w scenariuszach niezaufanych.Exceptions raised as a result of using the XmlSchemaSet class, such as the XmlSchemaException class may contain sensitive information that should not be exposed in untrusted scenarios. Na przykład właściwość SourceUri XmlSchemaException zwraca ścieżkę identyfikatora URI do pliku schematu, który spowodował wyjątek.For example, the SourceUri property of an XmlSchemaException returns the URI path to the schema file that caused the exception. Właściwości SourceUri nie należy ujawniać w scenariuszach niezaufanych.The SourceUri property should not be exposed in untrusted scenarios. Wyjątki powinny być prawidłowo obsługiwane, aby te informacje poufne nie były ujawniane w scenariuszach niezaufanych.Exceptions should be properly handled so that this sensitive information is not exposed in untrusted scenarios.

Dotyczy

Zobacz też