Поделиться через


Байт-коды типа 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 запускает предложение, которое завершается в конце последующего предложения. Первый из двух 4-байтовых аргументов указывает размер структуры. Второй аргумент указывает смещение, где в текущем двоичном контексте отображается указатель на структуру. Макрос OpFormatStruct вычисляет размер указанного типа структуры (structType) и предоставляет его в качестве первого аргумента. Макрос вычисляет смещение указанного поля в указанном типе и предоставляет это смещение в качестве второго аргумента.
OpFormatUri (тип, поле) Соответствует универсальному коду ресурса (URI) в текстовом токене. Аргумент смещения в 4 байта указывает смещение, в котором в текущем двоичном контексте отображается указатель на строку URI. Макрос OpFormatUri вычисляет смещение указанного поля в указанном типе и предоставляет это смещение в качестве аргумента .
OpFormatUuidUri (тип, поле) Соответствует URI протокола UUID в текстовом маркере. Аргумент смещения в 4 байта обозначает смещение, где URI в форме структуры GUID отображается в текущем двоичном контексте. Макрос OpFormatUuidUri вычисляет смещение указанного поля в указанном типе и предоставляет это смещение в качестве аргумента .
OpFormatName (тип,поле) Соответствует полному имени в текстовом маркере. Аргумент смещения в 4 байта обозначает смещение, в котором в текущем двоичном контексте отображается указатель на полное имя (структура WSDXML_NAME). Макрос OpFormatName вычисляет смещение указанного поля в указанном типе и предоставляет это смещение в качестве аргумента .
OpFormatListInsertTail (nodeType, type, field) Указывает, что двоичные контексты для всех вхождений последующего предложения являются структурами в отдельном списке, на который ссылается текущий двоичный контекст. OpFormatListInsertTail запускает предложение, которое завершается в конце последующего предложения. Первый из двух 4-байтовых аргументов указывает размер структур. Второй аргумент указывает смещение, где в текущем двоичном контексте отображается указатель на структуру. Указатель next, который связывает структуры с списком, всегда является первым полем в структурах. Макрос OpFormatListInsertTail вычисляет размер указанного типа структуры (nodeType) и предоставляет его в качестве первого аргумента. Макрос вычисляет смещение указанного поля в указанном типе и предоставляет это смещение в качестве второго аргумента.
OpFormatType (typetable, type, field) Соответствует маркерам, соответствующим указанной таблице типов, и указывает, что двоичный контекст для этой таблицы внедряется в текущий двоичный контекст с указанным смещением. Первый из двух 4-байтовых аргументов является закодированной ссылкой на таблицу типов. Второй аргумент — смещение. Макрос OpFormatType вычисляет смещение указанного поля в указанном типе и предоставляет это смещение в качестве аргумента .
OpFormatDynamicType (имя, тип, поле) Соответствует маркерам, сопоставленным таблицей типов, полученной динамически с помощью указанного имени, и указывает, что двоичный контекст для этой таблицы внедрен в текущий двоичный контекст с указанным смещением. Первый из двух 4-байтовых аргументов — это имя, определяющее таблицу типов. Как правило, это имя указывается в виде строки с одной кавычками, например "body", которая создает 4-байтовое значение. Второй аргумент — смещение. Макрос OpFormatDynamicType вычисляет смещение указанного поля в указанном типе и предоставляет это смещение в качестве аргумента .
OpFormatLookupType (urifield,type,field) Соответствует маркерам, соответствующим таблице типов, определяемой URI по указанному смещению в текущем двоичном контексте, и указывает, что двоичный контекст для этой таблицы внедрен в текущий двоичный контекст с указанным смещением. Первый из двух 4-байтовых аргументов является смещением URI типа в текущем двоичном контексте. Второй аргумент — смещение для нового двоичного контекста. Макрос OpFormatLookupType вычисляет смещение указанного поля в указанном типе и предоставляет это смещение в качестве аргумента .
OpProcess(type;field) Помечает поле, на которое указывает ссылка, как требующее дополнительной обработки на этапах создания и анализа. Используется для сложных полей, которые не могут быть обработаны автоматически.