Поддержка привязки элемента 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. Это свойство выглядит следующим образом:
System.Xml.Serialization.XmlRootAttribute.Namespace
System.Xml.Serialization.XmlTypeAttribute.Namespace
Атрибут 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 из сборки, скомпилированной из того же исходного кода |
|
Для классов и полей, соответствующих атрибутам, значение атрибута form не задано. |
Не задано, восстанавливается значение по умолчанию |
|
Для классов и полей, соответствующих атрибутам, значение атрибута form не задано. |
Не задано, восстанавливается значение по умолчанию |
|
Поля, соответствующие как локально объявленным атрибутам, так и указанным в ссылках глобально объявленным атрибутам, указываются с атрибутом XmlAttribute, которому передано значение |
Не задано, восстанавливается значение по умолчанию Кроме того, в объявлении каждого атрибута указывается |
Параметр, переданный объявлению 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 из сборки, скомпилированной из того же исходного кода |
|
Для классов и полей, соответствующих элементам, значение атрибута form не задано. |
|
|
Для классов и полей, соответствующих элементам, значение атрибута form не задано. |
|
|
Поля, соответствующие локально объявленным элементам, указываются с атрибутом XmlElement, которому передано значение |
Кроме того, для каждого элемента, который изначально был объявлен локально, используется значение |
Параметр, переданный объявлению 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 распознает значение по умолчанию: См. предшествующий раздел «Атрибут AttributeFormDefault». |
blockDefault |
Атрибут blockDefault элемента <schema> предоставляет значение по умолчанию для атрибутов block элементов <complexType> и <element>. Программа Xsd.exe не обрабатывает атрибут blockDefault элемента <schema>, а также атрибут block в соответствующих элементах. |
elementFormDefault |
Платформа .NET Framework фактически использует другое значение по умолчанию: См. предшествующий раздел «Атрибут 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>