Comment les caractères d’espacement sont-ils gérés dans le modèle objet XML ?
Parfois, le modèle objet XML affichera les nœuds TEXT contenant des espaces. Lorsque les caractères d'espacement sont tronqués, cela risque de créer une certaine confusion. Par exemple, l'exemple XML suivant :
]>
Forgeron
John
L'arborescence suivante est générée :
Instruction de traitement : xml
Type de document : personne
ÉLÉMENT : personne
TEXTE:
ÉLÉMENT : nom de famille
TEXTE:
ÉLÉMENT : prénom
TEXTE:
Le prénom et le nom sont entourés de nœuds TEXT contenant uniquement des caractères d'espacement car le modèle de contenu de l'élément "person" est MIXED et contient le mot-clé #PCDATA. Le modèle de contenu MIXED spécifie que du texte peut exister entre les éléments. Par conséquent, ce qui suit est également correct :
Mon nom de famille est Smith et mon prénom est
John
Le résultat est un arbre semblable au suivant :
ÉLÉMENT : personne
TEXTE : Mon nom de famille est
ÉLÉMENT : nom de famille
TEXTE : et mon prénom est
ÉLÉMENT : prénom
TEXTE:
Sans les caractères d'espacement après et avant le mot « est » et les caractères d'espacement après et avant le mot « et », la phrase serait inintelligible. Par conséquent, pour le modèle de contenu MIXED, les combinaisons de texte, les caractères d’espacement et les éléments sont tous pertinents. Ce n'est pas le cas pour les modèles de contenu non MIXTE.
Pour faire disparaître les nœuds TEXT contenant uniquement des espaces, supprimez le mot-clé #PCDATA de la déclaration de l'élément "person":
le résultat est l'arborescence claire suivante :
Instruction de traitement : xml
Type de document : personne
ÉLÉMENT : personne
ÉLÉMENT : nom de famille
ELEMENT : prénom
A quoi sert la déclaration XML ?
La déclaration XML doit être listée en haut du document XML :
elle précise les éléments suivants :
Le document est un document XML. Les détecteurs MIME peuvent l'utiliser pour détecter si un fichier est de type text/xml lorsque le type MIME est manquant ou n'a pas été spécifié.
Le document est conforme à la spécification XML 1.0. Cela sera important à l'avenir lorsqu'il y aura d'autres versions de XML.
Encodage des caractères du document. L'attribut d'encodage est facultatif et la valeur par défaut est UTF-8.
Remarque : La déclaration XML doit figurer sur la première ligne du document XML, donc le fichier XML suivant :
produit l'erreur d'analyse suivante :
Déclaration XML non valide.
Ligne 0000002 :
Emplacement 0000007 : ------^
Remarque : La déclaration XML est facultative. Si vous devez spécifier des commentaires ou des instructions de traitement en haut, ne mettez pas de déclaration XML. Cependant, l'encodage par défaut sera UTF-8.
Comment imprimer mon document XML dans un format lisible ?
Lors de la construction d'un document à partir de zéro à l'aide du DOM pour produire un fichier XML, tout se trouve sur une seule ligne, sans espace entre eux. Il s'agit du comportement par défaut.
Construit la feuille de style XSL par défaut dans Internet Explorer 5 pour afficher et imprimer les documents XML dans un format lisible. Par exemple, si IE5 est déjà installé, essayez de consulter le fichier nospace.xml. L'arborescence suivante devrait apparaître dans le navigateur :
-
-
XYZ
12.56
Aucun caractère d'espacement n'est inséré dans XML.
L'impression de XML lisible est très intéressante, surtout lorsqu'il existe des DTD qui définissent différents types de modèles de contenu. Par exemple, dans le modèle de contenu mixte (#PCDATA), vous ne pouvez pas insérer d'espaces car cela pourrait modifier la signification du contenu. Par exemple, considérons le XML suivant :
Elephant
Il est préférable de ne pas afficher cela sous la forme :
E
léphant
Parce que les limites des mots ne sont plus correctes.
Tout cela rend l’impression automatisée problématique. Si vous n'avez pas besoin d'imprimer du XML lisible, vous pouvez utiliser le DOM pour insérer des caractères d'espacement en tant que nœuds de texte aux emplacements appropriés.
Comment utiliser les espaces de noms dans DTD ? Pour utiliser un espace de noms dans une DTD, déclarez-le dans la déclaration ATTLIST de l'élément qui l'utilise, comme suit :
Le type d'espace de noms doit être #FIXED. Il en va de même pour les espaces de noms d'attributs :
les espaces de noms et les schémas XML. Les DTD et les schémas XML ne peuvent pas être mélangés. Par exemple, ce qui suit
xmlns:x CDATA #FIXED "x-schema:monschéma.xml"
N’entraînera pas l’utilisation de la définition de schéma définie dans myschema.xml. L'utilisation des schémas DTD et XML s'excluent mutuellement.
Comment utiliser XMLDSO en Visual Basic ?
Utilisez le XML suivant comme exemple :
Marc Hanson
206 765 4583
Jeanne Smith
425 808 1111
Vous pouvez vous lier à un jeu d'enregistrements ADO comme suit :
Créez un nouveau projet VB 6.0.
Ajoutez des références à Microsoft ActiveX Data Objects 2.1 ou version ultérieure, à la bibliothèque Microsoft Data Adapter et à Microsoft XML version 2.0.
Utilisez le code suivant pour charger des données XML dans le contrôle XML DSO :
Dim dso comme nouveau XMLDSOControl
Dim doc As IXMLDOMDocument
Définir doc = dso.XMLDocument
doc.Load ("d:test.xml")
utilise le code suivant pour mapper le DSO dans un nouvel objet recordset à l'aide du DataAdapter :
Dim da comme nouveau DataAdapter
Définir da.Object = dso
Dim rs comme nouveau ADODB.Recordset
Définir rs.DataSource = da
Accéder aux données :
MsgBox rs.Fields("name").Value
donne la chaîne "Mark Hanson"
Comment utiliser XML DOM en Java ?
La version IE5 de MSXML.DLL doit être installée. Dans Visual J++ 6.0, sélectionnez Ajouter COM Wrapper dans le menu Projet, puis sélectionnez « Microsoft XML 1.0 » dans la liste des objets COM. Cela construira le wrapper Java requis dans un nouveau package appelé "msxml". Ces wrappers Java prédéfinis sont également disponibles en téléchargement. Les cours peuvent être utilisés comme suit :
importer com.ms.com.* ;
importer msxml.*;
classe publique Classe1
{
public static void main (String[] arguments)
{
DOMDocument doc = new DOMDocument();
doc.load(new Variant(" file://d:/samples/ot.xml "));
System.out.println("Loaded " + doc.getDocumentElement().getNodeName());
}
}
L'exemple de code chargera le fichier de test de 3,8 Mo "ot.xml" de l'exemple de religion solaire. La classe Variant encapsule le type de base Win32 VARIANT.
Étant donné que vous obtenez un nouveau wrapper à chaque fois que vous récupérez un nœud, vous ne pouvez pas utiliser de comparaisons de pointeurs sur les nœuds. Alors n'utilisez pas le code ci-dessous,
IXMLDOMNode root1 = doc.getDocumentElement();
IXMLDOMNode root2 = doc.getDocumentElement();
si (root1 == root2)...
Utilisez plutôt le code suivant :
si (ComLib.isEqualUnknown(root1, root2)) ....
La taille totale du wrapper .class est d’environ 160 Ko. Cependant, pour une conformité totale avec la spécification W3C, seuls les wrappers IXMLDOM* doivent être utilisés. Les classes suivantes sont d'anciennes interfaces XML IE 4.0 et peuvent être supprimées du dossier msxml :
IXMLAttribute*,
IXMLDocument*, XMLDocument*
IXMLElement*,
IXMLErreur*,
IXMLElementCollection*,
baliseXMLEMEM_TYPE*
_xml_erreur*
Cela réduit la taille à 147 Ko. Vous pouvez également supprimer les éléments suivants :
DOMFreeThreadedDocument
Accédez aux documents XML à partir de plusieurs threads dans les applications Java.
XMLHttpRequête
Utilisez l'extension HTTP XML DAV pour communiquer avec le serveur.
IXTLRuntime
Définissez l'objet de script de feuille de style XSL.
XMLDSOContrôle
Se lie aux données XML dans une page HTML.
XMLDOMDocumentEvents
Renvoyer un rappel pendant l'analyse.
Cela réduit la taille à 116 Ko. Pour le rendre encore plus petit, considérez le fait que le DOM lui-même comporte deux couches : la couche centrale se compose de :
Document DOM, IXMLDOMDocument
IXMLDOMNoeud*
IXMLDOMNodeList*
IXMLDOMNamedNodeMap*
IXMLDOMDocumentFragment*
IXMLDOMImplémentation
IXMLDOMParseErreur
Et les informations DTD que les utilisateurs peuvent avoir besoin de conserver :
IXMLDOMDocumentType
IXMLDOMEntité
Notation IXMLDOM
Tous les types de nœuds dans un document XML sont des IXMLDOMNodes, qui fournissent toutes les fonctionnalités, mais il existe des wrappers de niveau supérieur pour chaque type de nœud. Par conséquent, si vous modifiez le wrapper DOMDocument et changez ces types spécifiques pour utiliser IXMLDOMNode, toutes les interfaces suivantes peuvent être supprimées :
IXMLDOMAttribut
Section IXMLDOMCDATA
IXMLDOMCharacterData
IXMLDOMCommentaire
IXMLDOMÉlément
IXMLDOMInstruction de traitement
IXMLDOMEntityRéférence
IXMLDOMTexte
Les supprimer réduira la taille à 61 Ko. Cependant, pour IXMLDOMElement, les méthodes getAttribute et setAttribute sont utiles. Sinon il faut utiliser :
IXMLDOMNode.getAttributes().setNamedItem(...)