Байт-коды типа 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) | Помечает поле, на которое указывает ссылка, как требующее дополнительной обработки на этапах создания и анализа. Используется для сложных полей, которые не могут быть обработаны автоматически. |