Поддержка привязки элемента 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.
Примечание |
---|
Несмотря на то что во время выполнения .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>