WSDAPI XML Type Bytecodes

Ces bytecodes sont utilisés par WSDAPI pour analyser et générer du code XML à l’aide de tables bytecode qui décrivent des types complexes.

La table bytecode d’un type exprime à la fois les représentations binaires (en mémoire) et XML (on-the-wire) du type. Une table bytecode se compose d’une liste d’opérations terminées par une opération spéciale, à savoir OpEndOfTable. Une opération se compose d’un code d’opération sur un octet suivi de zéro ou plusieurs octets de données d’argument.

Bytecode Description
OpNone Ne correspond à rien.
OpEndOfTable Indique la fin d’une table bytecode.
OpBeginElement (nom) Correspond à un jeton de début d’élément avec le nom indiqué. Le nom apparaît dans la table sous forme codée sur 4 octets. OnBeginElement démarre une clause qui se termine par un OpEndElement correspondant. Des clauses nulles ou plus complètes doivent apparaître entre OpBeginElement et son OpEndElement correspondant.
OpBeginAnyElement Correspond à un jeton de début d’élément avec n’importe quel nom. OnBeginAnyElement démarre une clause qui se termine par un OpEndElement correspondant. Des clauses nulles ou plus complètes doivent apparaître entre OpBeginAnyElement et son OpEndElement correspondant.
OpEndElement Termine une clause démarrée par OpBeginElement ou OpBeginAnyElement.
OpElement (nom) Correspond à un élément entier avec le nom indiqué. Le nom apparaît dans la table sous forme codée sur 4 octets.
OpAnyElement Correspond à un élément entier avec n’importe quel nom.
OpAnyElements Correspond à n’importe quel nombre d’éléments avec n’importe quel nom.
OpAnyText Correspond à un jeton de texte.
OpAttribute (nom) Correspond au jeton d’étiquette d’un attribut avec le nom indiqué. OpAttribute démarre une clause qui inclut la clause suivante dans la table. La clause suivante est utilisée pour faire correspondre la partie valeur de l’attribut. Les clauses OpAttribute apparaissent toujours après les opérations OpBeginElement ou OpBeginAnyElement ou après une autre clause OpAttribute.
OpBeginChoice OpBeginChoice démarre une clause qui se termine par un OpEndChoice correspondant. Des clauses nulles ou plus complètes doivent apparaître entre OpBeginChoice et son OpEndChoice correspondant. La clause externe correspond aux jetons correspondant à l’une des clauses internes. Toutes les clauses internes doivent commencer par OpBeginElement, sauf que la dernière peut être OpAnything. Cette construction correspond à la particule de choix XSD.
OpEndChoice Termine une clause démarrée par OpBeginChoice.
OpBeginSequence OpBeginSequence démarre une clause qui se termine par un OpEndSequence correspondant. Des clauses nulles ou plus complètes doivent apparaître entre OpBeginSequence et OpEndSequence. La clause externe correspond aux jetons correspondants par toutes les clauses internes dans l’ordre. Cette construction correspond à la particule de séquence XSD.
OpEndSequence Termine une clause démarrée par OpBeginSequence.
OpBeginAll OpBeginAll démarre une clause qui se termine par un OpEndAll correspondant. Des clauses nulles ou plus complètes doivent apparaître entre OpBeginAll et OpEndAll. La clause externe correspond aux jetons correspondants par les clauses internes dans n’importe quelle séquence. Les opérateurs d’occurrence relatifs à chaque clause interne indiquent combien de fois les jetons de chaque clause peuvent se produire. La valeur par défaut est une fois. Plusieurs occurrences d’une clause spécifiée peuvent être mélangées avec des occurrences d’autres clauses internes. Toutes les clauses internes doivent commencer par OpBeginElement, sauf que la dernière peut être OpAnything. Cette construction correspond à la particule XSD toutes.
OpEndAll Termine une clause démarrée par OpBeginAll.
OpAnything Correspond à un nombre quelconque d’éléments et de jetons de texte.
OpAnyNumber Indique que la clause suivante peut se produire n’importe quel nombre de fois. OpAnyNumber démarre une clause qui se termine à la fin de la clause suivante.
OpOneOrMore Indique que la clause suivante peut se produire une ou plusieurs fois. OpOneOrMore démarre une clause qui se termine à la fin de la clause suivante.
OpOptional Indique que la clause suivante peut se produire zéro ou une fois. OpOptional démarre une clause qui se termine à la fin de la clause suivante.
OpFormatInt8 (type,champ) Correspond à un entier signé 8 bits dans un jeton de texte. Un argument décalage de 4 octets indique le décalage de la représentation binaire dans le contexte binaire actuel. La macro OpFormatInt8 calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage comme argument.
OpFormatInt16 (type,champ) Correspond à un entier signé 16 bits. Un argument décalage de 4 octets indique le décalage de la représentation binaire dans le contexte binaire actuel. La macro OpFormatInt16 calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage comme argument.
OpFormatInt32 (type,champ) Correspond à un entier signé 32 bits dans un jeton de texte. Un argument décalage de 4 octets indique le décalage de la représentation binaire dans le contexte binaire actuel. La macro OpFormatInt32 calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage comme argument.
OpFormatInt64 (type,champ) Correspond à un entier signé 64 bits dans un jeton de texte. Un argument décalage de 4 octets indique le décalage de la représentation binaire dans le contexte binaire actuel. La macro OpFormatInt64 calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage comme argument.
OpFormatUInt8 (type,champ) Correspond à un entier 8 bits non signé dans un jeton de texte. Un argument décalage de 4 octets indique le décalage de la représentation binaire dans le contexte binaire actuel. La macro OpFormatUInt8 calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage comme argument.
OpFormatUInt16 (type,champ) Correspond à un entier non signé 16 bits dans un jeton de texte. Un argument décalage de 4 octets indique le décalage de la représentation binaire dans le contexte binaire actuel. La macro OpFormatUInt16 calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage comme argument.
OpFormatUInt32 (type,champ) Correspond à un entier non signé 32 bits dans un jeton de texte. Un argument de décalage de 4 octets indique le décalage de la représentation binaire dans le contexte binaire actuel. La macro OpFormatUInt32 calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage comme argument.
OpFormatUInt64 (type,champ) Correspond à un entier non signé 64 bits dans un jeton de texte. Un argument de décalage de 4 octets indique le décalage de la représentation binaire dans le contexte binaire actuel. La macro OpFormatUInt64 calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage comme argument.
OpFormatUnicodeString (type,champ) Correspond à une chaîne composée de la valeur entière d’un jeton de texte. Un argument de décalage de 4 octets indique le décalage où un pointeur vers la chaîne apparaît dans le contexte binaire actuel. La macro OpFormatUnicodeString calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage comme argument.
OpFormatDom (type,champ) Indique que tout le code XML correspondant à la clause suivante est représenté sous forme binaire en tant que DOM (liste de structures WSDXML_NODE). OpFormatDom démarre une clause qui se termine à la fin de la clause suivante. Un argument de décalage de 4 octets indique le décalage où un pointeur vers le premier WSDXML_NODE apparaît dans le contexte binaire actuel. La macro OpFormatDom calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage en tant qu’argument.
OpFormatStruct (structType,type,field) Indique que le contexte binaire de la clause suivante est une structure référencée par le contexte binaire actuel. OpFormatStruct démarre une clause qui se termine à la fin de la clause suivante. Le premier des deux arguments de 4 octets indique la taille de la structure. Le deuxième argument indique le décalage où un pointeur vers la structure apparaît dans le contexte binaire actuel. La macro OpFormatStruct calcule la taille du type de structure indiqué (structType) et fournit la taille comme premier argument. La macro calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage comme deuxième argument.
OpFormatUri (type,champ) Correspond à un URI dans un jeton de texte. Un argument de décalage de 4 octets indique le décalage où un pointeur vers la chaîne d’URI apparaît dans le contexte binaire actuel. La macro OpFormatUri calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage en tant qu’argument.
OpFormatUuidUri (type,champ) Correspond à un URI de protocole UUID dans un jeton de texte. Un argument décalage de 4 octets indique le décalage où l’URI sous forme de structure GUID apparaît dans le contexte binaire actuel. La macro OpFormatUuidUri calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage comme argument.
OpFormatName (type,champ) Correspond à un nom qualifié dans un jeton de texte. Un argument de décalage de 4 octets indique le décalage où un pointeur vers le nom qualifié (structure WSDXML_NAME) apparaît dans le contexte binaire actuel. La macro OpFormatName calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage en tant qu’argument.
OpFormatListInsertTail (nodeType,type,field) Indique que les contextes binaires de toutes les occurrences de la clause suivante sont des structures dans une liste liée séparément référencée par le contexte binaire actuel. OpFormatListInsertTail démarre une clause qui se termine à la fin de la clause suivante. Le premier des deux arguments de 4 octets indique la taille des structures. Le deuxième argument indique le décalage où un pointeur vers la structure apparaît dans le contexte binaire actuel. Le pointeur « suivant » qui lie les structures dans une liste est toujours le premier champ des structures. La macro OpFormatListInsertTail calcule la taille du type de structure indiqué (nodeType) et fournit la taille comme premier argument. La macro calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage comme deuxième argument.
OpFormatType (typetable,type,champ) Correspond aux jetons mis en correspondance par la table de type indiquée et indique que le contexte binaire de cette table est incorporé dans le contexte binaire actuel à un décalage indiqué. Le premier des deux arguments de 4 octets est la référence encodée à la table de type. Le deuxième argument est le décalage. La macro OpFormatType calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage comme argument.
OpFormatDynamicType (name,type,field) Correspond aux jetons mis en correspondance par une table de type obtenue dynamiquement à l’aide du nom indiqué et indique que le contexte binaire de cette table est incorporé dans le contexte binaire actuel à un décalage indiqué. Le premier des deux arguments de 4 octets est le nom qui identifie la table de type. En règle générale, ce nom est spécifié sous la forme d’une chaîne entre guillemets simples, telle que « 'body' », qui produit une valeur de 4 octets. Le deuxième argument est le décalage. La macro OpFormatDynamicType calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage comme argument.
OpFormatLookupType (urifield,type,field) Correspond aux jetons correspondant à la table de type identifiée par l’URI à un décalage indiqué dans le contexte binaire actuel et indique que le contexte binaire de cette table est incorporé dans le contexte binaire actuel à un décalage indiqué. Le premier des deux arguments de 4 octets est le décalage de l’URI de type dans le contexte binaire actuel. Le deuxième argument est le décalage du nouveau contexte binaire. La macro OpFormatLookupType calcule le décalage du champ indiqué dans le type indiqué et fournit ce décalage comme argument.
OpProcess(type,field) Signale le champ référencé comme nécessitant un traitement supplémentaire pendant les phases de génération et d’analyse. Il est utilisé pour les champs complexes qui ne peuvent pas être traités automatiquement.