Auteur : Ma Xiaoning
XML (Extensible Markup Language) peut ressembler à une sorte de standard du W3C - il n'a aucun impact pratique pour le moment, et même s'il s'avère utile dans le futur, ce le sera longtemps plus tard. Mais en fait, il est déjà utilisé. N'attendez donc pas que XML soit ajouté à votre éditeur HTML préféré pour commencer à l'utiliser. Il peut désormais résoudre divers problèmes internes et problèmes du système b2b.
Chez sparks.com, nous utilisons XML pour standardiser la représentation des données entre différents systèmes, des objets Java aux affichages de données HTML.
En particulier, nous avons constaté que les données peuvent être partagées et manipulées plus facilement lorsqu'elles sont standardisées dans une structure XML très basique. Au cours de ce processus, nous avons découvert de nombreuses façons efficaces d’utiliser XML. Ce qui suit décrit en détail notre application actuelle.
Standardiser Avant d'utiliser XML, créez un format de données XML différent des informations que vous souhaitez utiliser.
Générer du XML dynamique
Générer du HTML à partir d'une base de données n'est pas nouveau, mais générer du XML l'est. Nous introduisons ici les étapes de génération spécifiques.
Utiliser XML comme langage de modèle
XSL (Extensible Stylesheet Language) est un bon moyen de définir le format d'affichage des données XML, et il sera plus efficace s'il est écrit sous forme de plusieurs modèles statiques.
Générer du HTML
xml plus xsl équivaut à html. Cela peut ne pas sembler correct, mais notre page HTML que les utilisateurs voient est en fait le résultat de XML et XSL.
1.
La capacité de standardiser XML vient de sa flexibilité. Mais malheureusement, il est parfois si flexible que vous vous retrouvez avec une page blanche à vous demander comment résoudre le problème.
Dans tout projet XML, la première étape consiste à créer un format de données standard. Pour ce faire, vous devrez prendre les décisions suivantes :
• Quelles données seront impliquées ?
• S'il faut utiliser dtd (définition du type de fichier)
• Que vous souhaitiez utiliser DOM (Document Object Model) ou SAX (Simplified API for XML) pour analyser
et déterminer les données :
Puisqu’il n’existe pas de format XML standard, les développeurs sont libres de développer leurs propres formats. Toutefois, si votre format n'est reconnu que par une seule application, vous ne pouvez exécuter que cette application pour utiliser le format. Il serait évidemment plus utile s'il existait d'autres programmes capables également de lire votre format XML. Si un format XML est modifié, le système qui l'utilise devra peut-être également être modifié. Vous devez donc créer un format aussi complet que possible. Étant donné que la plupart des systèmes ignorent les balises qu'ils ne reconnaissent pas, le moyen le plus sûr de modifier le format d'un XML consiste à ajouter des balises plutôt que de les modifier.
Cliquez ici pour voir un exemple de format de données XML.
Sur sparks.com, nous avons examiné toutes les données produit requises pour différentes présentations de produits. Bien que toutes les pages n'utilisent pas toutes les données, nous avons développé un format de données XML très complet adapté à toutes les données. Par exemple, notre page de détails du produit affiche plus de données que notre page de navigation des produits. Cependant, nous utilisons toujours le même format de données dans les deux cas car le modèle XML de chaque page n'utilise que les champs dont il a besoin.
S'il faut utiliser dtd
Sur sparks.com, nous utilisons du XML bien organisé plutôt que du XML correct, car le premier ne nécessite pas de dtd. DTD ajoute une couche de traitement entre le clic de l'utilisateur et la visualisation de la page. Nous avons constaté que cette couche nécessitait trop de traitement. Bien sûr, il est toujours agréable d'utiliser des DTD pour communiquer avec d'autres entreprises au format XML. Parce que dtd peut garantir que la structure des données est correcte lors de l'envoi et de la réception.
Choisir un moteur d'analyse Il existe désormais plusieurs moteurs d'analyse qui peuvent être utilisés. Le choix que vous choisirez dépend presque entièrement des besoins de votre application. Si vous décidez d'utiliser DTD, le moteur d'analyse doit être capable de permettre à votre XML d'être vérifié par DTD. Vous pouvez placer la validation dans un processus distinct, mais cela aurait un impact sur les performances.
Sax et dom sont deux modèles d'analyse de base. SAX est basé sur les événements, donc lorsque le XML est analysé, les événements sont envoyés au moteur. Ensuite, les événements sont synchronisés avec le fichier de sortie. Le moteur d'analyse DOM établit une structure arborescente hiérarchique pour les données XML dynamiques et les feuilles de style XSL. En accédant de manière aléatoire à l'arborescence DOM, les données XML peuvent être fournies comme si elles étaient déterminées par une feuille de style XSL. Le débat sur le modèle SAX porte principalement sur la réduction excessive de la mémoire de la structure DOM et l'accélération du temps d'analyse de la feuille de style XSL.
Cependant, nous avons constaté que de nombreux systèmes utilisant Sax ne l'utilisaient pas au maximum de ses capacités. Ces systèmes l'utilisent pour créer des structures DOM et envoyer des événements via des structures DOM. Avec cette approche, le DOM doit être construit à partir de la feuille de style avant tout traitement XML, les performances en souffriront donc.
2. Générer du XML dynamique
Une fois le format XML établi, nous avons besoin d'une méthode pour le transplanter dynamiquement à partir de la base de données.
La génération de documents XML est relativement simple car elle nécessite uniquement un système capable de gérer des chaînes. Nous avons construit un système utilisant un servlet Java, un serveur Javabean d'entreprise, jdbc et rdbms (système de gestion de base de données relationnelle).
• Le servlet gère les demandes d'informations sur les produits en déchargeant la tâche de génération de documents XML vers le javabean d'entreprise (ejb).
• ejb utilise jdbc pour interroger les détails du produit requis dans la base de données.
• ejb génère le fichier XML et le transmet au servlet.
La servlet appelle le moteur d'analyse pour créer une sortie HTML à partir de fichiers XML et de feuilles de style XML statiques.
(Pour plus d'informations sur l'application de XSL, voir Utilisation de XSL comme langage de modèle.)
Exemple de génération de XML Le code réel permettant de créer une chaîne de document XML en Java peut être divisé en plusieurs méthodes et classes.
Le code qui démarre le processus de génération XML est placé dans la méthode ejb. Cette instance créera immédiatement un stringbuffer pour stocker la chaîne XML générée.
stringbuffer xml = nouveau stringbuffer();
xml.append(xmlutils.begindocument("/browse_find/browse.xsl", "browse", request));
xml.append(product.toxml());
xml.append(xmlutils.enddocument("parcourir");
out.print(xml.tostring());
Les trois variables xml.append() suivantes sont elles-mêmes des appels à d'autres méthodes.
Générer l'en-tête du fichier La première méthode supplémentaire appelle la classe xmlutils pour générer l'en-tête du fichier XML. Le code de notre servlet Java est le suivant :
chaîne statique publique begindocument (feuille de style de chaîne, page de chaîne)
{
stringbuffer xml = nouveau stringbuffer();
xml.append("<?xml version="1.0"?>n")
.append("<?xml-stylesheet href="")
.append(feuille de style).append(""")
.append(" type ="text/xsl"?>n");
xml.append("<").append(page).append(">n");
return xml.tostring();
}
Ce code génère l'en-tête du fichier XML. La balise <?xml> définit ce fichier comme un fichier XML prenant en charge la version 1.0. La deuxième ligne de code pointe vers l'emplacement de la feuille de style correcte pour afficher les données. La dernière chose incluse est la balise au niveau de l'élément (<browse> dans cet exemple). A la fin du fichier, seule la balise <browse> doit être fermée.
<?xml version="1.0"?> <?xml-stylesheet href="/browse_find/browse.xsl" type="text/xsl"?> <browse>
Après avoir renseigné les informations sur le produit et complété l'en-tête du fichier, le La méthode de contrôle appellera l'objet Java pour générer son XML. Dans cet exemple, l'objet produit est appelé. L'objet produit utilise deux méthodes pour générer sa représentation XML. La première méthode toxml() crée le nœud produit en générant les balises <product> et </product>. Il appelle ensuite internalxml(), qui fournit le contenu requis pour le fichier XML du produit. internalxml() est une série d'appels stringbuffer.append(). Le stringbuffer est également converti en chaîne et renvoyé à la méthode de contrôle.
chaîne publique toxml()
{
stringbuffer xml = new stringbuffer("<produit>n");
xml.append(internalxml());
xml.append("</product>n");
return xml.tostring();
}
chaîne publique internalxml()
{
stringbuffer xml = nouveau
tampon de chaîne("t")
.append(producttype).append("n");
xml.append("t").append(idvalue.trim())
.append("n");
xml.append("t").append(idname.trim())
.append("n");
xml.append("t").append(page.trim())
.append("n");
Serrement?
xml.append("t").append(montant).append("n");
xml.append("t").append(vendor).append("n");
xml.append("tn");
xml.append("t").append(pubdesc).append("n");
xml.append("t").append(vendesc).append("n";
Serrement?
return xml.tostring();
}
Enfin, la méthode xmlutils.enddocument() est appelée après la fermeture du fichier. Cet appel ferme la balise XML (dans ce cas) et complète enfin le fichier XML structuré. L'intégralité du tampon de chaîne de la méthode de contrôle est également convertie en chaîne et renvoyée au servlet qui a traité la requête http d'origine.
3. Utilisez XSL comme langage de modèle
. Afin d'obtenir une sortie HTML, nous combinons le fichier XML généré avec le modèle XSL qui contrôle la façon dont les données XML sont représentées. Nos modèles XML sont constitués de balises XSL et HTML soigneusement organisées.
Commencez à créer le modèle Le début de notre modèle XML est similaire au code ci-dessous. La première ligne de code est obligatoire et définit ce fichier comme une feuille de style XML. L'attribut xmlns:xsl= fait référence à l'espace de noms XML utilisé par ce fichier, et l'attribut version= définit le numéro de version de l'espace de noms. A la fin du fichier, nous fermons la balise.
La deuxième ligne de code commençant par <xsl:template> détermine le mode du modèle XSL. L'attribut match est obligatoire et pointe ici vers la balise XML <basketpage>. Dans notre système, la balise <basketpage> contient la balise <product>, qui permet au modèle xsl d'accéder aux informations sur le produit intégrées dans la balise <product>. Encore une fois, nous devons fermer la balise <xsl:template> à la fin du fichier.
Examinons ensuite le HTML bien organisé. Puisqu'il sera traité par le moteur d'analyse XML, il doit respecter toutes les règles d'un XML bien organisé. Essentiellement, cela signifie que toutes les balises d'ouverture doivent avoir une balise de fermeture correspondante. Par exemple, une balise <p> qui n'est normalement pas fermée doit être fermée avec </p>.
<xsl:stylesheet xmlns:xsl=" http://www.w3.org/1999/xsl/transform "
version="1.0">
<xsl:template match="basketpage">
<html>
<tête>
<title>panier / ajuster la quantité</title>
</tête>
<body bgcolor="#cccc99" bgproperties="fixed" link="#990000" vlink="#990000">
<br>
?br> </xsl:template>
</xsl:feuille de style>
Dans le corps du modèle, de nombreuses balises XML sont utilisées pour fournir une logique de présentation des données. Deux balises couramment utilisées sont expliquées ci-dessous.
choisir
La balise <xsl:choose> est similaire au début d'une structure if-then-else dans les langages de programmation traditionnels. En XSL, la balise Choose indique que dans la partie où entre le code, l'affectation déclenchera l'action. La balise <xsl:when> avec les attributs attribués suit la balise Choose. Si l'affectation est correcte, le contenu entre les balises d'ouverture et de fermeture de <xsl:when> sera utilisé. Si l'affectation est erronée, le contenu entre les balises d'ouverture et de fermeture de <xsl:otherwise> est utilisé. La section entière se termine par </xsl:choose>.
Dans cet exemple, la balise when vérifie le XML pour la balise de quantité. Si l'étiquette de quantité contient un attribut d'erreur avec une valeur true, l'étiquette de quantité affichera les cellules du tableau répertoriées ci-dessous. Si la valeur de l'attribut n'est pas vraie, xsl affichera le contenu entre les balises sinon. Dans l'exemple ci-dessous, si l'attribut d'erreur n'est pas vrai, rien ne sera affiché.
<xsl:choisir>
<xsl:when test="quantity[@error='true']">
<td bgcolor="#ffffff"><img height="1" width="1" src="