Поделиться через


XmlSchemaSet.Add Метод

Определение

Добавляет заданную схему языка определения схем XML (XSD) в XmlSchemaSet.

Перегрузки

Add(XmlSchema)

Добавляет указанную XmlSchema в XmlSchemaSet.

Add(XmlSchemaSet)

Добавляет все схемы языка определения схем XML (XSD), содержащиеся в заданном XmlSchemaSet, в XmlSchemaSet.

Add(String, String)

Добавляет схему языка определения схем XML (XSD), расположенную по указанному URL-адресу, в XmlSchemaSet.

Add(String, XmlReader)

Добавляет схему языка определения схем XML (XSD), содержащуюся в XmlReader, в XmlSchemaSet.

Add(XmlSchema)

Исходный код:
XmlSchemaSet.cs
Исходный код:
XmlSchemaSet.cs
Исходный код:
XmlSchemaSet.cs

Добавляет указанную XmlSchema в XmlSchemaSet.

public:
 System::Xml::Schema::XmlSchema ^ Add(System::Xml::Schema::XmlSchema ^ schema);
public System.Xml.Schema.XmlSchema? Add (System.Xml.Schema.XmlSchema schema);
public System.Xml.Schema.XmlSchema Add (System.Xml.Schema.XmlSchema schema);
member this.Add : System.Xml.Schema.XmlSchema -> System.Xml.Schema.XmlSchema
Public Function Add (schema As XmlSchema) As XmlSchema

Параметры

schema
XmlSchema

Объект XmlSchema, добавляемый в коллекцию XmlSchemaSet.

Возвращаемое значение

Объект XmlSchema, если схема успешно прошла проверку. Если схема не прошла проверку и задан ValidationEventHandler, тогда возвращается null и возникает соответствующее событие проверки. В противном случае возникает исключение XmlSchemaException.

Исключения

Схема не прошла проверку.

Объект XmlSchema, переданный в качестве параметра, является null.

Комментарии

XmlSchema Если объект уже существует в XmlSchemaSet, Add метод ничего не делает.

Функциональные возможности этого метода идентичны Add функциям метода .

Применяется к

Add(XmlSchemaSet)

Исходный код:
XmlSchemaSet.cs
Исходный код:
XmlSchemaSet.cs
Исходный код:
XmlSchemaSet.cs

Добавляет все схемы языка определения схем XML (XSD), содержащиеся в заданном XmlSchemaSet, в XmlSchemaSet.

public:
 void Add(System::Xml::Schema::XmlSchemaSet ^ schemas);
public void Add (System.Xml.Schema.XmlSchemaSet schemas);
member this.Add : System.Xml.Schema.XmlSchemaSet -> unit
Public Sub Add (schemas As XmlSchemaSet)

Параметры

schemas
XmlSchemaSet

Объект XmlSchemaSet.

Исключения

Схема в XmlSchemaSet недействительна.

Объект XmlSchemaSet, переданный в качестве параметра, является null.

Примеры

В следующем примере кода показано добавление схем в XmlSchemaSet, а затем добавление в XmlSchemaSet новый XmlSchemaSet с помощью Add метода .

Dim schemaSet1 As XmlSchemaSet = New XmlSchemaSet
schemaSet1.Add("http://www.contoso.com/retail", "http://www.contoso.com/retail.xsd")
schemaSet1.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd")
schemaSet1.Add("http://www.contoso.com/music", "http://www.contoso.com/music.xsd")

Dim schemaSet2 As XmlSchemaSet = New XmlSchemaSet
schemaSet2.Add(schemaSet1)
XmlSchemaSet schemaSet1 = new XmlSchemaSet();
schemaSet1.Add("http://www.contoso.com/retail", "http://www.contoso.com/retail.xsd");
schemaSet1.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd");
schemaSet1.Add("http://www.contoso.com/music", "http://www.contoso.com/music.xsd");

XmlSchemaSet schemaSet2 = new XmlSchemaSet();
schemaSet2.Add(schemaSet1);

Комментарии

Прежде чем можно будет добавить схему в XmlSchemaSet, она должна быть успешно обработана. Предварительная обработка выполняет следующие основные задачи.

  1. Схема проверяется на структурную достоверность в соответствии с правилами схемы W3C XML, но схема не полностью проверена.

  2. Ссылки на внутренние и внешние компоненты схемы разрешаются. Все импортированные или включенные схемы, которые успешно получены, также добавляются в XmlSchemaSet. Импортированные схемы добавляются в виде отдельных XmlSchema объектов, а включенные схемы являются частью включающего XmlSchema.

IsCompiled Если свойство добавляемого XmlSchemaSet объекта равно true, все схемы в добавляемом XmlSchemaSet объекте добавляются в XmlSchemaSet. IsCompiled Если свойство добавляемого XmlSchemaSet объекта имеет значение false, каждая добавленная схема предварительно обрабатывается перед добавлением. Если какая-либо из схем в добавленном XmlSchemaSet объекте не может быть предварительно обработана, схемы не добавляются; вместо этого создается исключение XmlSchemaException . В результате приведенные ниже два примера кода не эквивалентны.

' First example
schemaSet.Add(schemaSet1)

' Second example
Dim schema As XmlSchema

For Each schema in schemaSet.Schemas()

    schemaSet.Add(schema)

Next
// First example
schemaSet.Add(schemaSet1);

// Second example
foreach(XmlSchema schema in schemaSet.Schemas())
{
    schemaSet.Add(schema);
}

Предыдущие два примера кода не эквивалентны. В первом примере, если в schemaSet1 существует недопустимая схема и ее IsCompiled свойству falseприсвоено значение , схемы не добавляются в schemaSet. Во втором примере несколько схем можно добавить в schemaSet , прежде чем обнаруживается недопустимая схема и возникает исключение.

Применяется к

Add(String, String)

Исходный код:
XmlSchemaSet.cs
Исходный код:
XmlSchemaSet.cs
Исходный код:
XmlSchemaSet.cs

Добавляет схему языка определения схем XML (XSD), расположенную по указанному URL-адресу, в XmlSchemaSet.

public:
 System::Xml::Schema::XmlSchema ^ Add(System::String ^ targetNamespace, System::String ^ schemaUri);
public System.Xml.Schema.XmlSchema? Add (string? targetNamespace, string schemaUri);
public System.Xml.Schema.XmlSchema Add (string targetNamespace, string schemaUri);
member this.Add : string * string -> System.Xml.Schema.XmlSchema
Public Function Add (targetNamespace As String, schemaUri As String) As XmlSchema

Параметры

targetNamespace
String

Свойство схемы targetNamespace или null, чтобы использовалось пространство имен targetNamespace, определенное в схеме.

schemaUri
String

URL-адрес, ссылающийся на схему, которую необходимо загрузить.

Возвращаемое значение

Объект XmlSchema, если схема успешно прошла проверку. Если схема не прошла проверку и задан ValidationEventHandler, тогда возвращается null и возникает соответствующее событие проверки. В противном случае возникает исключение XmlSchemaException.

Исключения

Схема не прошла проверку.

URL-адрес, переданный в качестве параметра, равен null или Empty.

Примеры

В следующем примере кода схема с целевым пространством http://www.contoso.com/books имен добавляется http://www.contoso.com/books.xsd в XmlSchemaSet.

Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()
schemaSet.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd")
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd");

В примере в качестве входных данных используется файл books.xsd.

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

Комментарии

Прежде чем можно будет добавить схему в XmlSchemaSet, она должна быть успешно обработана. Предварительная обработка выполняет следующие основные задачи.

  1. Схема проверяется на структурную достоверность в соответствии с правилами схемы W3C XML, но схема не полностью проверена.

  2. Ссылки на внутренние и внешние компоненты схемы разрешаются. Все импортированные или включенные схемы, которые успешно получены, также добавляются в XmlSchemaSet. Импортированные схемы добавляются в виде отдельных XmlSchema объектов, а включенные схемы являются частью включающего XmlSchema.

Ниже приведены важные примечания, которые следует учитывать при использовании Add метода .

  • Добавление схемы в объект XmlSchemaSet с тем же целевым пространством имен и URL-адресом расположения схемы, что и схема, уже содержащаяся в XmlSchemaSet , вернет исходный объект схемы.

  • При успешном добавлении новой схемы в XmlSchemaSetIsCompiled свойство XmlSchemaSet задается значение false.

  • Все элементы включения или импорта, встречающиеся в XML-схеме, разрешаются при вызове Add метода . Сбой при разрешении элементов включения и импорта приводит к предупреждению о проверке схемы, и если для XmlSchemaSet объекта не ValidationEventHandler указано, это предупреждение не будет сообщено.

  • Если схема с тем же целевым пространством имен, что и схема, которая уже существует в , добавляется в XmlSchemaSetXmlSchemaSet, добавляются обе схемы.

    Примечание

    Это поведение отличается от устаревшего XmlSchemaCollection объекта.

  • Метод AddXmlSchemaSet объекта имеет возможность использовать целевое пространство имен, определенное в схеме, а не требовать, чтобы целевое пространство имен указывалось в качестве параметра при вызове Add метода. Указание null в параметре targetNamespaceAdd метода указывает XmlSchemaSet , что следует использовать целевое пространство имен, определенное в схеме, как показано в следующем примере кода.

Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()
schemaSet.Add(Nothing, "books.xsd")

Dim schema As XmlSchema
For Each schema In schemaSet.Schemas("http://www.contoso.com/books")
    schema.Write(Console.Out)
Next
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add(null, "books.xsd");

foreach(XmlSchema schema in schemaSet.Schemas("http://www.contoso.com/books"))
{
    schema.Write(Console.Out);
}

В приведенном выше null примере кода указывается в targetNamespace качестве параметра метода Add . В результате используется targetNamespace объект , определенный в файле books.xml. В этом случае результат вызова метода будет идентичным Add , если http://www.contoso.com/books бы он был указан в targetNamespace качестве параметра .

  • Xml-схема W3C позволяет включать схемы без целевого пространства имен в схемы с определенным целевым пространством имен. В этом случае схема без определенного целевого пространства имен принудается к целевому пространству имен включаемой схемы. Включенная схема обрабатывается так, как если бы в ней было определено целевое пространство имен. Аналогичным образом схемы без целевого пространства имен можно добавить в XmlSchemaSet и принудить к целевому пространству имен, указанному Add методом , как показано в следующем примере.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="A" type="xs:string" />
</xs:schema>

Если приведенная выше схема добавляется XmlSchemaSet в с целевым пространством http://www.contoso.com/new/targetnamespace имен (как показано в приведенном ниже коде), она обрабатывается так, как если бы целевое пространство имен, объявленное в схеме, было http://www.contoso.com/new/targetnamespace.

Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()
schemaSet.Add("http://www.contoso.com/new/targetnamespace", "http://www.contoso.com/targetnamespace.xsd")

Dim schema As XmlSchema

For Each schema in schemaSet.Schemas()

    Console.WriteLine(schema.TargetNamespace)

Next
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add("http://www.contoso.com/new/targetnamespace", "http://www.contoso.com/targetnamespace.xsd");
foreach(XmlSchema schema in schemaSet.Schemas())
{
    Console.WriteLine(schema.TargetNamespace);
}

Применяется к

Add(String, XmlReader)

Исходный код:
XmlSchemaSet.cs
Исходный код:
XmlSchemaSet.cs
Исходный код:
XmlSchemaSet.cs

Добавляет схему языка определения схем XML (XSD), содержащуюся в XmlReader, в XmlSchemaSet.

public:
 System::Xml::Schema::XmlSchema ^ Add(System::String ^ targetNamespace, System::Xml::XmlReader ^ schemaDocument);
public System.Xml.Schema.XmlSchema? Add (string? targetNamespace, System.Xml.XmlReader schemaDocument);
public System.Xml.Schema.XmlSchema Add (string targetNamespace, System.Xml.XmlReader schemaDocument);
member this.Add : string * System.Xml.XmlReader -> System.Xml.Schema.XmlSchema
Public Function Add (targetNamespace As String, schemaDocument As XmlReader) As XmlSchema

Параметры

targetNamespace
String

Свойство схемы targetNamespace или null, чтобы использовалось пространство имен targetNamespace, определенное в схеме.

schemaDocument
XmlReader

Объект XmlReader.

Возвращаемое значение

Объект XmlSchema, если схема успешно прошла проверку. Если схема не прошла проверку и задан ValidationEventHandler, тогда возвращается null и возникает соответствующее событие проверки. В противном случае возникает исключение XmlSchemaException.

Исключения

Схема не прошла проверку.

Объект XmlReader, переданный в качестве параметра, является null.

Примеры

В следующем примере кода схема books.xsd, содержащаяся в , с целевым пространством имен добавляется в XmlTextReaderXmlSchemaSet.http://www.contoso.com/books

Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()
schemaSet.Add("http://www.contoso.com/books", New XmlTextReader("books.xsd")
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add("http://www.contoso.com/books", new XmlTextReader("books.xsd");

Комментарии

Прежде чем можно будет добавить схему в XmlSchemaSet, она должна быть успешно обработана. Предварительная обработка выполняет следующие основные задачи.

  1. Схема проверяется на структурную достоверность в соответствии с правилами схемы W3C XML, но схема не полностью проверена.

  2. Ссылки на внутренние и внешние компоненты схемы разрешаются. Все импортированные или включенные схемы, которые успешно получены, также добавляются в XmlSchemaSet. Импортированные схемы добавляются в виде отдельных XmlSchema объектов, а включенные схемы являются частью включающего XmlSchema.

Ниже приведены важные примечания, которые следует учитывать при использовании Add метода .

  • Успешно извлеченные схемы, импортированные или включенные в схемы, содержащиеся в XmlReader , также добавляются в XmlSchemaSet.

  • XmlReader Если объект не расположен в корневом элементе, создается исключение , XmlSchemaException если текущий элемент не является элементом . Если текущий элемент является элементом xs:schema , документ схемы считывается в ; в XmlSchemaSetпротивном случае создается исключение , XmlSchemaException так как схема недопустима.

  • XmlReader Если объект расположен над последовательностью УЗЛОВ XML, добавляется только первый узел в последовательности.

  • Если схема была создана из XmlReader.Create вызова метода, значение ProcessInlineSchema свойства игнорируется, так как встроенная обработка схемы не применяется к документам схемы W3C XML.

  • Свойство XmlResolverXmlReader объекта не используется для разрешения ссылок на пространства имен или расположения схемы во включаемых и импортируемых элементах. Вместо этого используется XmlResolver свойство объекта XmlSchemaSet .

  • Метод AddXmlSchemaSet объекта имеет возможность использовать целевое пространство имен, определенное в схеме, а не требовать, чтобы целевое пространство имен указывалось в качестве параметра при вызове Add метода. Указание null или String.EmptyAdd для метода указывает XmlSchemaSet , чтобы использовать целевое пространство имен, определенное в схеме. Пример такого поведения см. в методе Add .

Остальные функциональные возможности этого метода идентичны Add функциям метода .

Применяется к