Поддержка привязки элемента Schema

Этот раздел посвящен технологии прежних версий. Веб-службы XML и клиенты веб-служб XML должны создаваться с использованием Windows Communication Foundation.

Платформа .NET Framework обеспечивает поддержку привязки для элемента <schema>.

Элемент <schema> является корневым элементом документа схемы XML.

Объяснение

Элемент <schema> является корневым элементом документа схемы XML.

Атрибуты blockDefault, finalDefault, id и version элемента <schema> не имеют привязки к сущностям кода .NET Framework. Атрибут targetNamespace распознается; атрибуты attributeFormDefault и elementFormDefault распознаются частично. См. приведенную ниже таблицу. Подробные сведения см. в разделах, посвященных отдельным атрибутам.

Атрибут TargetNamespace

Атрибут targetNamespace корневого элемента <schema> задает пространство имен схемы в виде универсального кода ресурса (URI). Программа Xsd.exe связывает значение атрибута targetNamespace элемента <schema> со свойствами Namespace различных атрибутов, связанных с XML.

При создании исходного кода из документа схемы XML программа Xsd.exe использует значение атрибута targetNamespace указанным ниже образом.

  • Для каждого созданного типа, соответствующего типу данных в схеме, программа Xsd.exe присваивает свойству System.Xml.Serialization.XmlTypeAttribute.Namespace значение targetNamespace.

  • Для каждого созданного типа, соответствующего типу данных, который может присутствовать в качестве корневого элемента документа XML, совместимого со схемой, программа Xsd.exe присваивает свойству System.Xml.Serialization.XmlRootAttribute.Namespace значение targetNamespace. Тип данных может присутствовать как корневой элемент документа, если он используется элементом <element>, объявленным глобально (как дочерний элемент корневого элемента <schema>).

При создании документа схемы XML из набора классов в сборке программа Xsd.exe создает документ схемы XML с уникальным атрибутом targetNamespace для каждого уникального значения, обнаруженного в свойстве Namespace определенных классов атрибутов, относящихся к XML. Это свойство выглядит следующим образом:

Атрибут AttributeFormDefault

Программа Xsd.exe создает схемы XML, в которых глобальный атрибут attributeFormDefault остается не заданным. Когда этот атрибут встречается в существующей схеме, программа соответствующим образом задает свойство Form атрибута XmlAttributeAttribute каждого непереопределенного поля.

Объяснение: атрибут AttributeFormDefault

Схема XML требует, чтобы все глобально объявленные элементы и атрибуты (например, дочерние элементы элемента <schema>) указывались в документе экземпляра вместе с пространством имен. Для элементов и атрибутов, объявленных локально (в рамках определения <complexType>), указание пространства имен необязательно.

Для управления заданием пространства имен для всех локальных элементов и атрибутов, объявленных в документе схемы XML, используйте соответственно атрибуты elementFormDefault и attributeFormDefault корневого элемента <schema>. Оба могут принимать значения qualified и unqualified, со значением по умолчанию unqualified.

Кроме того, атрибут form может использоваться в локальном объявлении элемента <element> или <attribute> для переопределения принятого в схеме значения по умолчанию для определенного элемента или атрибута.

В следующей таблице описывается, как программа Xsd.exe обрабатывает три возможных значения для атрибута attributeFormDefault: qualified, unqualified, не указано. (Помните, что при создании исходного кода из документа схемы XML программа Xsd.exe создает открытое поле для каждого атрибута XML и применяет к этому полю атрибут платформы .NET Framework XmlAttributeAttribute.)

Возможные значения атрибута attributeFormDefault

Исходный код, создаваемый программой Xsd.exe из XSD

XSD, создаваемый программой Xsd.exe из сборки, скомпилированной из того же исходного кода

attributeFormDefault="unqualified"

Для классов и полей, соответствующих атрибутам, значение атрибута form не задано.

Не задано, восстанавливается значение по умолчанию attributeFormDefault="unqualified".

Unspecified

Для классов и полей, соответствующих атрибутам, значение атрибута form не задано.

Не задано, восстанавливается значение по умолчанию attributeFormDefault="unqualified".

attributeFormDefault="qualified"

Поля, соответствующие как локально объявленным атрибутам, так и указанным в ссылках глобально объявленным атрибутам, указываются с атрибутом XmlAttribute, которому передано значение Form=XmlSchemaForm.Qualified.

Не задано, восстанавливается значение по умолчанию attributeFormDefault="unqualified".

Кроме того, в объявлении каждого атрибута указывается form="qualified". Сюда входят указанные в ссылках глобально объявленные атрибуты.

Параметр, переданный объявлению XmlAttribute, задает свойство Form, возможные значения которого берутся из перечисления XmlSchemaForm:

  • XmlSchemaForm.Qualified

  • XmlSchemaForm.Unqualified

  • XmlSchemaForm.None: по умолчанию

Одним из результатов использования параметра XmlAttribute является то, что глобальные параметры из исходного документа XSD задаются в исходном коде и в сгенерированном XSD отдельно для каждого атрибута XML. Глобальный атрибут attributeFormDefault всегда считается не заданным, и для него восстанавливается значение по умолчанию unqualified.

Пример. Атрибут AttributeFormDefault

Входной документ схемы XML, в котором attributeFormDefault="qualified":

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified"
            xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="qualified">
  <xsd:attribute name="version" type="xsd:string"/>
  <xsd:complexType name="keyInfo">
    <xsd:attribute ref="version" />
    <xsd:attribute name="public" type="xsd:boolean" use="required"/>
  </xsd:complexType>
  <xsd:element name="key" type="keyInfo"/>
</xsd:schema>

Класс C#, созданный на основе приведенного выше документа схемы XML:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("key", Namespace="http://example.org/", IsNullable=false)]
public class keyInfo {
    [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)]
    public string version;
        
    System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)]
    public bool @public;
}

Корневой элемент <schema> схемы XML, созданный из сборки, скомпилированной из предыдущего исходного кода C# (объявления атрибутов также не содержат атрибут form):

<xs:schema xmlns:tns="http://example.org/" elementFormDefault="qualified" targetNamespace="http://example.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   ...
</xs:schema>

Атрибут ElementFormDefault

Программа Xsd.exe создает схемы XML, в которых глобальный атрибут elementFormDefault принимает значение "qualified". Когда этот атрибут встречается в существующей схеме, программа соответствующим образом задает свойство Form атрибута XmlElementAttribute каждого непереопределенного поля.

Объяснение: атрибут ElementFormDefault

Схема XML требует, чтобы все глобально объявленные элементы и атрибуты (например, дочерние элементы элемента <schema>) указывались в документе экземпляра вместе с пространством имен. Для элементов и атрибутов, объявленных локально (в рамках определения <complexType>), указание пространства имен необязательно.

Для управления указанием пространства имен для всех локальных элементов и атрибутов, объявленных в документе схемы XML, используйте соответственно атрибуты elementFormDefault и attributeFormDefault корневого элемента <schema>. Оба могут принимать значения qualified и unqualified, со значением по умолчанию unqualified.

Кроме того, атрибут form может использоваться в локальном объявлении элемента <element> или <attribute> для переопределения принятого в схеме значения по умолчанию для определенного элемента или атрибута.

Хотя по умолчанию атрибут elementFormDefault принимает значение unqualified, платформа .NET Framework фактически рассматривает значение по умолчанию как qualified, учитывая при этом использование значения unqualified. В следующей таблице описывается, как программа Xsd.exe обрабатывает три возможных значения для атрибута elementFormDefault: qualified, unqualified, не указано. (Помните, что при создании исходного кода из документа схемы XML программа Xsd.exe создает открытое поле для каждого элемента XML.)

Возможные значения атрибута elementFormDefault

Исходный код, создаваемый программой Xsd.exe из XSD

XSD, создаваемый программой Xsd.exe из сборки, скомпилированной из того же исходного кода

elementFormDefault="qualified"

Для классов и полей, соответствующих элементам, значение атрибута form не задано.

elementFormDefault="qualified"

Unspecified

Для классов и полей, соответствующих элементам, значение атрибута form не задано.

elementFormDefault="qualified"

elementFormDefault="unqualified"

Поля, соответствующие локально объявленным элементам, указываются с атрибутом XmlElement, которому передано значение Form=XmlSchemaForm.Unqualified. Для полей, соответствующих глобально объявленным элементам, указанным в ссылках, значение атрибута form не задано.

elementFormDefault="qualified"

Кроме того, для каждого элемента, который изначально был объявлен локально, используется значение form="unqualified". Элементы, которые изначально были объявлены глобально, указываются локально без атрибута form.

Параметр, переданный объявлению XmlElement, задает свойство Form, возможные значения которого берутся из перечисления XmlSchemaForm:

  • XmlSchemaForm.Qualified

  • XmlSchemaForm.Unqualified

  • XmlSchemaForm.None: по умолчанию

Одним из результатов использования параметра XmlElement является то, что глобальные параметры из исходного документа XSD задаются в исходном коде и в сгенерированном XSD отдельно для каждого элемента XML. Для глобального атрибута elementFormDefault всегда принимается значение qualified.

Пример. Атрибут ElementFormDefault

Входной документ схемы XML, в котором elementFormDefault="unqualified":

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="unqualified">
  <xsd:element name="version" type="xsd:string"/>
  <xsd:complexType name="keyInfo">
      <xsd:sequence>
      <xsd:element ref="version" />
      <xsd:element name="public" type="xsd:boolean" />
    </xsd:sequence>
  </xsd:complexType>
  <xsd:element name="key" type="keyInfo"/>
</xsd:schema>

Класс C#, созданный на основе приведенного выше документа схемы XML:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("key", Namespace="http://example.org/", IsNullable=false)]
 public class keyInfo {
        
     public string version;
        
    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public bool @public;
}

Документ схемы XML, созданный из сборки, скомпилированной на основе предыдущего исходного кода C#:

<xs:schema xmlns:tns="http://example.org/" elementFormDefault="qualified" targetNamespace="http://example.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="key" type="tns:keyInfo" />
  <xs:complexType name="keyInfo">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="version" type="xs:string" />
      <xs:element minOccurs="1" maxOccurs="1" form="unqualified" name="public" type="xs:boolean" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Возможные атрибуты Поддержка привязки

attributeFormDefault

Платформа .NET Framework распознает значение по умолчанию: unqualified. Инструмент Xsd.exe преобразует значение qualified отдельно для каждого поля, соответствующим образом задавая свойство Form атрибута XmlAttributeAttribute непереопределенного поля.

См. предшествующий раздел «Атрибут AttributeFormDefault».

blockDefault

Атрибут blockDefault элемента <schema> предоставляет значение по умолчанию для атрибутов block элементов <complexType> и <element>.

Программа Xsd.exe не обрабатывает атрибут blockDefault элемента <schema>, а также атрибут block в соответствующих элементах.

elementFormDefault

Платформа .NET Framework фактически использует другое значение по умолчанию: qualified. Программа Xsd.exe всегда создает элемент <schema> с elementFormDefault="qualified". Инструмент преобразует значение unqualified отдельно для каждого поля, соответствующим образом задавая свойство Form атрибута XmlElementAttribute непереопределенного поля.

См. предшествующий раздел «Атрибут ElementFormDefault».

finalDefault

Атрибут finalDefault элемента <schema> предоставляет значение по умолчанию для атрибутов final определенных элементов.

Программа Xsd.exe не обрабатывает атрибут finalDefault элемента <schema>, а также атрибут final в соответствующих элементах.

id

Программа Xsd.exe игнорирует атрибут id, который предназначен для обеспечения уникального идентификатора.

xml:lang

Программа Xsd.exe не обрабатывает атрибут lang из пространства имен http://www.w3.org/XML/1198, когда он используется в корневом элементе <schema>.

targetNamespace

Программа Xsd.exe связывает значение атрибута targetNamespace элемента <schema> со свойствами Namespace различных атрибутов, связанных с XML. Используемые атрибуты зависят от направления преобразования.

См. предшествующий раздел "Атрибут TargetNamespace".

version

Атрибут version доступен для документирования. Инструмент Xsd.exe игнорирует этот атрибут.

Возможные родительские элементы: нет (корневой элемент)

Возможные дочерние элементы: <annotation>, <attribute>, <attributeGroup>, <complexType>, <element>, <group>, <import>, <include>, <notation>, <redefine>, <simpleType>

См. также

Справочник

XmlSchema