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


Набор сведений о компиляции после схемы

Рекомендация по схеме XML World Wide Web Consortium (W3C) описывает набор сведений (infoset), который должен быть предоставлен для предварительной проверки схемы и компиляции после схемы. Объектная модель XML-схемы (SOM) просматривает эту экспозицию до и после Compile вызова метода XmlSchemaSet .

Во время редактирования схемы создается набор сведений о проверке предварительной схемы. Набор сведений о компиляции после схемы создается после Compile вызова метода XmlSchemaSet во время компиляции схемы и предоставляется в виде свойств.

SOM — это объектная модель, представляющая наборы сведений о компиляции предварительной схемы и после схемы; он состоит из классов в System.Xml.Schema пространстве имен. Все свойства классов чтения и записи в System.Xml.Schema пространстве имен относятся к набору сведений о проверке предварительной схемы, а все свойства классов, доступных только для чтения в System.Xml.Schema пространстве имен, относятся к набору сведений о компиляции после схемы. Исключением из этого правила являются следующие свойства, которые являются как набором сведений о предварительной проверке схемы, так и свойствами набора сведений о компиляции после схемы.

Класс Недвижимость
XmlSchemaObject Parent
XmlSchema AttributeFormDefault, , BlockDefaultElementFormDefault, FinalDefaultTargetNamespace
XmlSchemaExternal Schema
XmlSchemaAttributeGroup AnyAttribute
XmlSchemaParticle MaxOccurs, MinOccurs
XmlSchemaComplexType AnyAttribute

Например, классы XmlSchemaElement имеют XmlSchemaComplexType и BlockResolvedFinalResolved свойства. Эти свойства используются для хранения значений и BlockFinal свойств после компиляции и проверки схемы. BlockResolved и FinalResolved являются свойствами только для чтения, которые являются частью набора сведений о компиляции после схемы.

В следующем примере показано ElementSchemaType свойство XmlSchemaElement набора классов после проверки схемы. Перед проверкой null свойство содержит ссылку, а SchemaTypeName для свойства задано имя заданного типа. После проверки SchemaTypeName разрешается допустимый тип, а объект типа доступен через ElementSchemaType свойство.

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

public class PsciSample
{
    public static void Main(string[] args)
    {
        XmlSchema schema = new XmlSchema();

        // Create an element of type integer and add it to the schema.
        XmlSchemaElement priceElem = new XmlSchemaElement();
        priceElem.Name = "Price";
        priceElem.SchemaTypeName = new XmlQualifiedName("integer", "http://www.w3.org/2001/XMLSchema");
        schema.Items.Add(priceElem);

        // Print the pre-compilation value of the ElementSchemaType property
        // of the XmlSchemaElement which is a PSCI property.
        Console.WriteLine("Before compilation the ElementSchemaType of Price is " + priceElem.ElementSchemaType);

        //Compile the schema which validates the schema and
        // if valid will place the PSCI values in certain properties.
        XmlSchemaSet schemaSet = new XmlSchemaSet();
        schemaSet.ValidationEventHandler += ValidationCallbackOne;
        schemaSet.Add(schema);
        schemaSet.Compile();

        foreach (XmlSchema compiledSchema in schemaSet.Schemas())
        {
            schema = compiledSchema;
        }

        // After compilation of the schema, the ElementSchemaType property of the
        // XmlSchemaElement will contain a reference to a valid object because the
        // SchemaTypeName referred to a valid type.
        Console.WriteLine("After compilation the ElementSchemaType of Price is "
           + priceElem.ElementSchemaType);
    }

    private static void ValidationCallbackOne(object sender, ValidationEventArgs args)
    {
        Console.WriteLine(args.Message);
    }
}
Imports System.Xml
Imports System.Xml.Schema

Public Class PsciSample

    Public Shared Sub Main()

        Dim schema As New XmlSchema()

        ' Create an element of type integer and add it to the schema.
        Dim priceElem As New XmlSchemaElement()
        priceElem.Name = "Price"
        priceElem.SchemaTypeName = New XmlQualifiedName("integer", "http://www.w3.org/2001/XMLSchema")
        schema.Items.Add(priceElem)

        ' Print the pre-compilation value of the ElementSchemaType property
        ' of the XmlSchemaElement which is a PSCI property.
        Console.WriteLine("Before compilation the ElementSchemaType of Price is {0}", priceElem.ElementSchemaType)

        ' Compile the schema which validates the schema and
        ' if valid will place the PSCI values in certain properties.
        Dim schemaSet As New XmlSchemaSet()
        AddHandler schemaSet.ValidationEventHandler, AddressOf ValidationCallbackOne
        schemaSet.Add(schema)
        schemaSet.Compile()

        For Each compiledSchema As XmlSchema In schemaSet.Schemas()
            schema = compiledSchema
        Next

        ' After compilation of the schema, the ElementSchemaType property of the
        ' XmlSchemaElement will contain a reference to a valid object because the
        ' SchemaTypeName referred to a valid type.
        Console.WriteLine("After compilation the ElementSchemaType of Price is {0}", _
                priceElem.ElementSchemaType)

    End Sub

    Private Shared Sub ValidationCallbackOne(ByVal sender As Object, ByVal args As ValidationEventArgs)
        Console.WriteLine(args.Message)
    End Sub

End Class

См. также