Байтовые коды типа WSDAPI XML

Эти байт-коды используются WSDAPI для анализа и создания XML с помощью таблиц байт-кода, описывающих сложные типы.

Таблица байт-кода для типа выражает как двоичные (в памяти), так и XML-представления типа. Таблица байт-кода состоит из списка операций, завершаемых специальной операцией, а именно OpEndOfTable. Операция состоит из кода однобайтовой операции, за которым следует нулевая или более байт данных аргумента.

Байт-код Описание
OpNone Ничего не соответствует.
OpEndOfTable Указывает конец таблицы байтового кода.
OpBeginElement (имя) Соответствует маркеру запуска элемента с указанным именем. Имя отображается в таблице в 4-байтовой форме. OnBeginElement запускает предложение, которое заканчивается соответствующим opEndElement. Ноль или более полные предложения должны отображаться между OpBeginElement и соответствующими предложениями OpEndElement.
OpBeginAnyElement Соответствует маркеру запуска элемента с любым именем. OnBeginAnyElement запускает предложение, которое заканчивается соответствующим opEndElement. Ноль или более полные предложения должны отображаться между OpBeginAnyElement и соответствующими предложениями OpEndElement.
OpEndElement Заканчивает предложение, начатое с OpBeginElement или OpBeginAnyElement.
OpElement (имя) Соответствует всему элементу с указанным именем. Имя отображается в таблице в 4-байтовой форме.
OpAnyElement Соответствует всему элементу с любым именем.
OpAnyElements Соответствует любому количеству элементов с любыми именами.
OpAnyText Соответствует текстовому маркеру.
OpAttribute (имя) Соответствует маркеру метки атрибута с указанным именем. OpAttribute запускает предложение, которое включает в себя последующее предложение в таблице. Последующее предложение используется для сопоставления значения части атрибута. Предложения OpAttribute всегда отображаются после операций OpBeginElement или OpBeginAnyElement или после другого предложения OpAttribute.
OpBeginChoice OpBeginChoice запускает предложение, которое заканчивается соответствующим OpEndChoice. Ноль или более полные предложения должны отображаться между OpBeginChoice и соответствующими предложениями OpEndChoice. Внешнее предложение соответствует маркерам, соответствующим любому из внутренних предложений. Все внутренние предложения должны начинаться с OpBeginElement, за исключением того, что последний может быть OpAnything. Эта конструкция соответствует частице выбора XSD.
OpEndChoice Заканчивает предложение, начатое с OpBeginChoice.
OpBeginSequence OpBeginSequence запускает предложение, которое заканчивается соответствующим opEndSequence. Между OpBeginSequence и OpEndSequence должны отображаться ноль или более полные предложения. Внешнее предложение соответствует маркерам, соответствующим всем внутренним предложениям в последовательности. Эта конструкция соответствует частице последовательности XSD.
OpEndSequence Заканчивает предложение, начатое с OpBeginSequence.
OpBeginAll OpBeginAll запускает предложение, которое заканчивается соответствующим OpEndAll. Между OpBeginAll и OpEndAll должны отображаться ноль или более полные предложения. Внешнее предложение соответствует маркерам, соответствующим внутренним предложениям в любой последовательности. Операторы вхождения, относящиеся к каждому внутреннему предложению, указывают, сколько раз могут возникать маркеры для каждого предложения. Значение по умолчанию — один раз. Несколько вхождений указанного предложения могут быть перемечены с вхождениями других внутренних предложений. Все внутренние предложения должны начинаться с OpBeginElement, за исключением того, что последний может быть OpAnything. Эта конструкция соответствует XSD всех частиц.
OpEndAll Заканчивает предложение, начатое с OpBeginAll.
OpAnything Соответствует любому количеству элементов и текстовых маркеров.
OpAnyNumber Указывает, что последующее предложение может возникать любое количество раз. OpAnyNumber запускает предложение, завершающееся в конце последующего предложения.
OpOneOrMore Указывает, что последующее предложение может произойти один или несколько раз. OpOneOrMore запускает предложение, завершающееся в конце последующего предложения.
OpOptional Указывает, что последующее предложение может произойти ноль или один раз. OpOptional запускает предложение, завершающееся в конце последующего предложения.
OpFormatInt8 (тип, поле) Соответствует 8-разрядному целочислению со знаком в текстовом токене. Аргумент смещения 4-байтов указывает смещение двоичного представления в текущем двоичном контексте. Макрос OpFormatInt8 вычисляет смещение указанного поля в указанном типе и предоставляет смещение в качестве аргумента.
OpFormatInt16 (тип, поле) Соответствует 16-разрядному целочислению со знаком. Аргумент смещения 4-байтов указывает смещение двоичного представления в текущем двоичном контексте. Макрос OpFormatInt16 вычисляет смещение указанного поля в указанном типе и предоставляет смещение в качестве аргумента.
OpFormatInt32 (тип, поле) Соответствует 32-разрядному целочислению со знаком в текстовом токене. Аргумент смещения 4-байтов указывает смещение двоичного представления в текущем двоичном контексте. Макрос OpFormatInt32 вычисляет смещение указанного поля в указанном типе и предоставляет это смещение в качестве аргумента.
OpFormatInt64 (тип, поле) Соответствует 64-разрядному целочислению со знаком в текстовом токене. Аргумент смещения 4-байтов указывает смещение двоичного представления в текущем двоичном контексте. Макрос OpFormatInt64 вычисляет смещение указанного поля в указанном типе и предоставляет смещение в качестве аргумента.
OpFormatUInt8 (тип, поле) Соответствует 8-разрядному целому значению без знака в текстовом маркере. Аргумент смещения 4-байтов указывает смещение двоичного представления в текущем двоичном контексте. Макрос OpFormatUInt8 вычисляет смещение указанного поля в указанном типе и предоставляет смещение в качестве аргумента.
OpFormatUInt16 (тип, поле) Соответствует 16-разрядному целому числом без знака в текстовом токене. Аргумент смещения 4-байтов указывает смещение двоичного представления в текущем двоичном контексте. Макрос OpFormatUInt16 вычисляет смещение указанного поля в указанном типе и предоставляет это смещение в качестве аргумента.
OpFormatUInt32 (тип, поле) Соответствует 32-разрядному целому значению без знака в текстовом токене. Аргумент смещения 4-байтов указывает смещение двоичного представления в текущем двоичном контексте. Макрос OpFormatUInt32 вычисляет смещение указанного поля в указанном типе и предоставляет смещение в качестве аргумента.
OpFormatUInt64 (тип, поле) Соответствует 64-разрядному целому селу без знака в текстовом токене. Аргумент смещения 4-байтов указывает смещение двоичного представления в текущем двоичном контексте. Макрос OpFormatUInt64 вычисляет смещение указанного поля в указанном типе и предоставляет это смещение в качестве аргумента.
OpFormatUnicodeString (тип, поле) Соответствует строке, состоящей из всего значения текстового маркера. Аргумент смещения 4-байтов указывает смещение, в котором указатель на строку отображается в текущем двоичном контексте. Макрос OpFormatUnicodeString вычисляет смещение указанного поля в указанном типе и предоставляет смещение в качестве аргумента.
OpFormatDom (тип, поле) Указывает, что весь XML-код, соответствующий последующему предложению, представлен в двоичной форме как DOM (список WSDXML_NODE структур). OpFormatDom запускает предложение, завершающееся в конце последующего предложения. Аргумент смещения 4-байтов указывает смещение, в котором указатель на первый WSDXML_NODE отображается в текущем двоичном контексте. Макрос OpFormatDom вычисляет смещение указанного поля в указанном типе и предоставляет смещение в качестве аргумента.
OpFormatStruct (structType,type,field) Указывает, что двоичный контекст для последующего предложения является структурой, на которую ссылается текущий двоичный контекст. OpFormatStruct запускает предложение, завершающееся в конце последующего предложения. Первый из двух байтовых аргументов указывает размер структуры. Второй аргумент указывает смещение, где указатель на структуру отображается в текущем двоичном контексте. Макрос OpFormatStruct вычисляет размер указанного типа структуры (structType) и предоставляет размер в качестве первого аргумента. Макрос вычисляет смещение указанного поля в указанном типе и предоставляет смещение в качестве второго аргумента.
OpFormatUri (тип, поле) Соответствует универсальному коду ресурса (URI) в текстовом токене. Аргумент смещения 4-байтов указывает смещение, в котором указатель на строку URI отображается в текущем двоичном контексте. Макрос OpFormatUri вычисляет смещение указанного поля в указанном типе и предоставляет смещение в качестве аргумента.
OpFormatUuidUri (тип, поле) Соответствует URI протокола UUID в текстовом токене. Аргумент смещения 4-байтов указывает смещение, в котором URI в форме структуры GUID отображается в текущем двоичном контексте. Макрос OpFormatUuidUri вычисляет смещение указанного поля в указанном типе и предоставляет смещение в качестве аргумента.
OpFormatName (тип, поле) Соответствует заданному имени в текстовом токене. Аргумент смещения 4-байтов указывает смещение, в котором указатель на полное имя (WSDXML_NAME структура) отображается в текущем двоичном контексте. Макрос OpFormatName вычисляет смещение указанного поля в указанном типе и предоставляет смещение в качестве аргумента.
OpFormatListInsertTail (nodeType,type,field) Указывает, что двоичные контексты для всех вхождения последующего предложения являются структурами в последовательно связанном списке, на который ссылается текущий двоичный контекст. OpFormatListInsertTail запускает предложение, завершающееся в конце последующего предложения. Первый из двух байтовых аргументов указывает размер структур. Второй аргумент указывает смещение, где указатель на структуру отображается в текущем двоичном контексте. Указатель "next", который связывает структуры со списком, всегда является первым полем в структурах. Макрос OpFormatListInsertTail вычисляет размер указанного типа структуры (nodeType) и предоставляет размер в качестве первого аргумента. Макрос вычисляет смещение указанного поля в указанном типе и предоставляет смещение в качестве второго аргумента.
OpFormatType (typetable,type,field) Соответствует маркерам, соответствующим указанной таблице типов, и указывает, что двоичный контекст для этой таблицы внедрен в текущий двоичный контекст в указанном смещение. Первый из двух байтовых аргументов — это закодированная ссылка на таблицу типов. Второй аргумент — смещение. Макрос OpFormatType вычисляет смещение указанного поля в указанном типе и предоставляет смещение в качестве аргумента.
OpFormatDynamicType (имя, тип, поле) Соответствует маркерам, сопоставленным таблицей типов, полученной динамически с помощью указанного имени, и указывает, что двоичный контекст для этой таблицы внедрен в текущий двоичный контекст с указанным смещением. Первым из двух байтовых аргументов является имя, определяющее таблицу типов. Как правило, это имя указывается в виде строки с одним кавычками, например "body", которая создает 4-байтовое значение. Второй аргумент — смещение. Макрос OpFormatDynamicType вычисляет смещение указанного поля в указанном типе и предоставляет смещение в качестве аргумента.
OpFormatLookupType (urifield,type,field) Соответствует маркерам, сопоставленным таблицей типов, определяемой универсальным кодом ресурса (URI) по указанному смещением в текущем двоичном контексте и указывает, что двоичный контекст для этой таблицы внедрен в текущий двоичный контекст с указанным смещением. Первым из двух байтовых аргументов является смещение URI типа в текущем двоичном контексте. Второй аргумент — смещение для нового двоичного контекста. Макрос OpFormatLookupType вычисляет смещение указанного поля в указанном типе и предоставляет смещение в качестве аргумента.
OpProcess(type,field) Помечает указанное поле как требующее дополнительной обработки во время этапов создания и анализа. Это используется для сложных полей, которые нельзя обрабатывать автоматически.