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

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

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

При создании исходного кода из документа схемы XML программа Xsd.exe преобразует элемент <anyAttribute> в поле типа XmlAttribute с атрибутом XmlAnyAttributeAttribute.

Объяснение

Подстановочный элемент <anyAttribute> позволяет любому атрибуту (с любым именем или простым типом) присутствовать в определенном элементе в XML-документе экземпляра с некоторыми ограничениями.

При создании исходного кода из документа схемы XML программа Xsd.exe преобразует элемент <anyAttribute> в поле типа XmlAttribute с атрибутом XmlAnyAttributeAttribute. Этот атрибут позволяет классу представлять произвольные атрибуты XML, не привязывая их к типам, не являющимся типами XML и идентифицированным другими возможными полями или свойствами класса.

При создании документа схемы XML из набора классов в сборке программа Xsd.exe выполняет обратное преобразование: поле или свойство типа System.Xml.XmlAttribute с атрибутом XmlAnyAttributeAttribute преобразуется в элемент <anyAttribute>.

Атрибуты namespace и processContents

В процессе создания определений или классов схемы XML атрибуты namespace и processContents не учитываются. Это значит что, какими бы ни были значения этих атрибутов в исходном определении схемы XML, после того как Xsd.exe создаст классы из определения, а затем создаст другую схему XML из этих классов, в новой созданной схеме XML у элемента <anyAttribute> уже не будет этих атрибутов. Поэтому последняя схема возвращается к следующим значениям по умолчанию:

  • namespace="##any". Атрибут namespace задает пространства имен, в которых должен быть определен атрибут. Значение ##any разрешает любое пространство имен.

  • processContents="strict". При проверке экземпляра документа XML на соответствие заданной схеме XML убедитесь, что все типы элементов проверены в соответствии с заданными пространствами имен. Если тип элемента не распознан, проверка завершается с ошибкой.

Аналогично, при десериализации из документов XML в объекты атрибуты namespace и processContents игнорируются. Вместо этого класс XmlSerializer предполагает, что эти два атрибута имеют следующие значения:

  • namespace="##any". Это значение по умолчанию.

  • processContents="lax". При проверке документа экземпляра XML на соответствие заданной схеме XML следует проверять атрибут только в том случае, если можно получить его пространство имен. В противном случае убедитесь, что нераспознанный атрибут содержит корректный XML.

bts9x74y.note(ru-ru,VS.100).gifПримечание
Несмотря на то что во время выполнения .NET Framework предполагает, что processContents="lax", во время развертывания .NET Framework генерирует определения схемы XML, где неявно задано значение по умолчанию processContents="strict".

Программа Xsd.exe и класс XmlSerializer предоставляют одинаковые привязки для атрибутов namespace и processContents, когда они присутствуют в элементе <any>.

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

id

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

namespace

См. подраздел "Атрибуты namespace и processContents" в этом разделе.

processContents

См. подраздел «Атрибуты namespace и processContents» в этом разделе.

Возможные родительские элементы: <attributeGroup>, <complexType>, <extension>, <restriction>

Возможные дочерние элементы: <annotation>

См. также

Справочник

XmlAnyAttributeAttribute