4D inclut un ensemble de commandes permettant d'écrire et d’analyser des objets contenant des données XML (eXtensible Markup Language).
Note à propos du mode préemptif : Les références XML créées par un process préemptif peuvent être utilisées dans ce process uniquement. A l'inverse, les références XML créées par des process coopératifs peuvent être utilisées par tout autre process coopératif, mais ne peuvent pas être utilisées par un process préemptif.
Le langage XML est une norme d’échange de données. Il est basé sur l’emploi de balises permettant de décrire de manière précise les données échangées ainsi que leur structure. Les fichiers XML sont des fichiers au format Texte, leur contenu est analysé (parsing) par les applications qui importent les données. Aujourd’hui, de nombreuses applications prennent en charge ce format.
Pour plus d’informations sur le XML, reportez-vous, par exemple, au site http://xmlfr.org.
Pour la prise en charge du XML, 4D utilise une librairie nommée Xerces.dll développée par la société Apache Foundation. 4D prend en charge XML version 1.0.
Note : 4D permet également d’importer et d’exporter directement des données au format XML à l’aide de l’éditeur d’import/export standard.
Les commandes de ce thème sont préfixées DOM. En effet, 4D propose deux ensembles distincts de commandes XML: les commandes DOM (Document Object Model) et SAX (Simple API XML), qui constituent deux modes d’analyse différents des documents XML.
- Le mode DOM effectue l’analyse d’une source XML et construit sa structure (son “arbre”) en mémoire. De ce fait, l’accès à chaque élément de la source est extrêmement rapide. Cependant, la totalité de l’arbre étant contenu dans la mémoire, le traitement de gros documents XML peut dépasser la capacité de la mémoire et provoquer des erreurs.
- Le mode SAX ne construit pas d’arbre en mémoire. Dans ce mode, des “événements” (tels que le début et la fin d’un élément) sont générés lors de l’analyse de la source. Ce mode autorise l’analyse de documents XML de toute taille, quelle que soit la quantité de mémoire disponible. Les commandes SAX sont regroupées dans le thème "XML SAX". Pour plus d'informations, reportez-vous à la section Présentation des commandes XML SAX.
Pour plus d’informations sur les standards XML, vous pouvez consulter les sites
http://www.saxproject.org/?selected=event et
http://www.w3schools.com/xml/.
Les objets créés, modifiés ou analysés par les commandes DOM de 4D peuvent être des textes, des URLs, des documents ou des BLOBs. Les commandes DOM utilisées pour l'ouverture des objets XML dans 4D sont DOM Parse XML source et DOM Parse XML variable.
De nombreuses commandes permettent ensuite de lire, d'analyser et d'écrire les éléments et les attributs. La récupération des erreurs s'effectue via la commande DOM Parse XML variable (commune aux deux standards XML).
La commande XML GET ERROR permet de finalement refermer la source.
Note sur l'usage de paramètres BLOBs XML : Les structures XML sont basées sur des données de type texte, il est recommandé de les manipuler via des variables ou des champs de type Texte. Pour des raisons historiques, les commandes XML de 4D (par exemple DOM Parse XML variable) acceptent des paramètres de type BLOBs. En effet, dans les versions précédentes de 4D, la taille des variables de type Texte était limitée à 32 Ko. Depuis la version 11 de 4D, les variables et champs texte peuvent contenir jusqu’à 2 Go de données. La limitation d'origine étant supprimée, il est désormais fortement déconseillé de stocker des textes dans des BLOBs. L’usage de BLOBs est à réserver au traitement de données binaires. Par conformité aux spécifications du XML, à compter de 4D v12 les données binaires sont automatiquement encodées en Base64, même si le BLOB contient du texte.
Plusieurs commandes XML DOM (DOM Create XML element, DOM Find XML element, DOM Create XML element arrays et DOM SET XML ELEMENT VALUE) prennent en charge certaines expressions XPath pour l’accès aux éléments XML.
La notation XPath est issue du langage XPath, consacré à la navigation à l'intérieur des structures XML. Elle permet de désigner directement des éléments au sein d’une structure XML via une syntaxe du type "chemin d'accès", sans devoir nécessairement indiquer le chemin complet pour y parvenir.
Soit par exemple la structure suivante :
<RootElement>
<Elem1>
<Elem2>
<Elem3 Font=Verdana Size=10> </Elem3>
</Elem2>
</Elem1>
</RootElement>
La notation XPath permet d’accéder à l’élément 3 via la syntaxe /RootElement/Elem1/Elem2/Elem3.
4D accepte également les éléments XPath indexés, avec la syntaxe Elément[NumElément]. Soit par exemple la structure suivante :
<RootElement>
<Elem1>
<Elem2>aaa</Elem2>
<Elem2>bbb</Elem2>
<Elem2>ccc</Elem2>
</Elem1>
</RootElement>
La notation XPath permet d’accéder à la valeur “ccc” via la syntaxe /RootElement/Elem1/Elem2[3].
Pour une liste complète des expressions XPath, reportez-vous à la description de la commande DOM Find XML element
Note de compatibilité : A compter de v18 R3, l'implémentation de XPath dans 4D a été modifiée pour renforcer le niveau de conformité et pour la prise en charge d'un plus vaste ensemble d'expressions. Pour des raisons de compatibilité, l'implémentation antérieure non standard est maintenue par défaut dans les bases converties. Si vous souhaitez obtenir les fonctionnalités avancées dans vos bases converties, vous devez cocher l'option de compatibilité Utiliser XPath standard de la Page Compatibilité.
Note : La version XPath utilisée est la v1. Pour plus d'informations, veuillez consulter la spécification XPath .
Les jeux de caractères suivants sont pris en charge par les commandes XML DOM et XML SAX de 4D :
- ASCII
- UTF-8
- UTF-16 (Big/Small Endian)
- UCS4 (Big/Small Endian)
- EBCDIC code pages IBM037, IBM1047 and IBM1140 encodings,
- ISO-8859-1 (ou Latin1)
- Windows-1252.
Le langage XML utilise de nombreux termes et acronymes spécifiques. Cette liste non exhaustive explicite les principales notions XML utilisées par les commandes et fonctions de 4D.
Attribut : Sous-balise XML associée à un élément. Un attribut comporte toujours un nom et une valeur (cf. schéma ci-dessous).
Bien formé : Un document XML est déclaré “bien formé” par l’analyseur XML lorsqu’il est conforme aux spécifications XML génériques. Voir aussi Validation.
DTD : Document Type Declaration (Déclaration de type de document). La DTD recense l’ensemble des règles et des propriétés spécifiques que doit suivre un document XML. Ces règles définissent notamment le nom et le contenu de chaque balise ainsi que leur contexte. Cette formalisation des éléments permet de vérifier qu’un document XML est conforme (dans ce cas il est déclaré “valide”).
La DTD peut être incluse dans le document XML (DTD interne) ou dans un document tiers (DTD externe). A noter que la DTD n’est pas obligatoire.
Elément : Balise XML. Un élément comporte toujours un nom et une valeur. Facultativement, un élément peut contenir des attributs (cf. schéma).

Enfant : Dans une structure XML, élément d’un niveau directement inférieur à un autre.
Frère : Dans une structure XML, élément du même niveau qu'un autre.
Parent : Dans une structure XML, élément d’un niveau directement supérieur à un autre.
Parsing, parser (Analyser, analyseur) : Action d’analyser le contenu d’un objet structuré afin d’en extraire les informations utiles. Les commandes du thème “XML” permettent d’analyser le contenu de tout objet XML.
Racine (Root) : Elément situé au premier niveau d’une structure XML.
RefElément : Référence XML utilisée par les commandes XML de 4D pour désigner une structure XML (documents ou élément). Cette référence est constituée de 8 caractères codés sous forme hexadécimale, ce qui signifie que sa longueur est de 32 caractères dans un système 64 bits. Il est conseillé de déclarer les références XML à l'aide de la directive C_TEXT.
Structure XML : objet XML structuré. Cet objet peut être un document, une variable, un élément.
Validation : Un document XML est “validé” par l’analyseur XML lorsqu’il est “bien formé” et conforme aux spécifications de la DTD. Voir aussi Bien formé.
XML : eXtensible Markup Language (Langage balisé évolutif). Norme d’échange de données informatisées permettant de transférer des données ainsi que leur structure. Le langage XML est basé sur l’emploi de balises et d’une syntaxe spécifiques, à l’instar du langage HTML. Toutefois, à la différence de ce dernier, le langage XML permet de définir des balises personnalisées.
XSL : eXtensible Stylesheet Language (Langage des feuilles de style évolutif). Langage permettant de définir des feuilles de style utilisables pour traiter et afficher le contenu d’un document XSL.
De nombreuses fonctions de ce thème retournent une référence d'élément XML. Si une erreur se produit durant l'exécution d'une fonction (par exemple si la référence de l’élément racine est invalide), la variable OK prend la valeur 0 et une erreur est générée.
De plus, la référence retournée dans ce cas est une suite de 32 caractères "0".