Bonjour
existe-t-il un outil permettant de générer dynamiquement un formulaire de saisie XML à partir du xsd ?
Merci d'avance
Version imprimable
Bonjour
existe-t-il un outil permettant de générer dynamiquement un formulaire de saisie XML à partir du xsd ?
Merci d'avance
une feuille de style xslt devrait faire l'affaire.
As tu un exemple xsd et ce que tu souhaites obtenir
Je n'ai pas d'exemple précis, la demande ne vient pas de moi (un chef) et n'est pas plus explicite que ça ...
Si nous prenons l'exemple ci-dessous, trouvé sur le net, comment puis-je faire ?
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xsd:element name="bookstore" type="bookstoreType"/> <xsd:complexType name="bookstoreType"> <xsd:sequence maxOccurs="unbounded"> <xsd:element name="book" type="bookType"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="bookType"> <xsd:sequence> <xsd:element name="title" type="xsd:string"/> <xsd:element name="author" type="authorName"/> <xsd:element name="price" type="xsd:decimal"/> </xsd:sequence> <xsd:attribute name="genre" type="xsd:string"/> </xsd:complexType> <xsd:complexType name="authorName"> <xsd:sequence> <xsd:element name="first-name" type="xsd:string"/> <xsd:element name="last-name" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
un xsl d'exemple
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsl:output encoding="ISO-8859-15" method="xml" indent="yes" /> <xsl:template match="/xsd:schema"> <html><body> <xsl:apply-templates select="./xsd:element"/> </body></html> </xsl:template> <xsl:template match="xsd:element"> <xsl:variable name="type" select="./@type"/> <xsl:choose > <xsl:when test="count(//xsd:complexType[@name=$type])=1"> <xsl:apply-templates select="//xsd:complexType[@name=$type]"/> </xsl:when> <xsl:when test="count(//xsd:complexType[@name=$type])=0"> <h2><xsl:value-of select="./@name"/></h2> <input type="text"/> </xsl:when> </xsl:choose> </xsl:template> <xsl:template match="xsd:complexType"> <h1><xsl:value-of select="./@name"/></h1> <xsl:apply-templates select=".//xsd:element"/> </xsl:template> </xsl:stylesheet>
je suis navré mais étant néophyte dans le domaine, je ne sais comment exploiter ce xsl.
Pouvez-vous m'en dire plus ?
merci d'avance
tu installes un parser et un transformateur xslt (xalan, xsltproc, ...)
et tu lances la commande
avec xalan cela donne
si tu télécharges l'outil xmlcopyeditor il suffira d'ouvrir ton fichier xsd puis de faire un F8 et d'indiquer ton fichier xslCode:
1
2 xalan -in essai.xsd -xsl essai.xsl
Merci beaucoup !!!
Ca fonctionne, sauf que je n'ai aps trouvé l'exe de xalan et que j'ai du lancer une commande du type "java org.apache.xalan.xslt.Process...."
Mais j'ai bien ma page html.
Maintenant, puis-je abuser et vous demander comment faire pour faire en sorte que l'on puisse valider ce formulaire et l'enregistrer au format xml ?
bon la il va faloir ce mettre dans le xslt.
En gros pour votre question il faut modifier ce bout de code
parCode:
1
2
3
4
5
6 <xsl:template match="/xsd:schema"> <html><body> <xsl:apply-templates select="./xsd:element"/> </body></html> </xsl:template>
Code:
1
2
3
4
5
6
7
8
9 <xsl:template match="/xsd:schema"> <html><body> <form action="query.html" method="POST" > <xsl:apply-templates select="./xsd:element"/> <input value="valid" type="submit"/> </form> </body></html> </xsl:template>
query.html ?
J'ai essayé différentes choses pour créer ce query.html, destiné j'imagine, à traiter les valeurs de la page.
j'ai essayé en javascript, d'enregistrer le formulaire en xml mais n'y suis pas parvenu..
Est-on obligé de passer par du php ou similaire ?
En général le client envoie les données au serveur et celui-ci les stoque.
Le javascript travaillera toujours coté client et la plupart du temps ses accès au disque client sont restreint par sécurité.
Donc oui, coté serveur il faut qu'il y ait une application en écoute comprenant les requettes HTTP POST et traitant ton cas spécifique à l'aide de PHP, Java ou autres.
sinon imaginons que tu as ton schema sous le nom : query.xml.
Tu peux transformer ce fichier via query.xsl pour donner query.html
si tu rajoutes dans l'entête du fichier query.xml
et que dans le fichier xsl tu remplace method="POST" par method="get"Code:
1
2<?xml-stylesheet type="text/xsl" href="query.xsl"?>
le client ouvre via son navigateur le fichier query.xml.
Par la suite l'envoi des valeurs pourra être traité par le serveur.
la question est que souhaites faire des données émis par le formulaire?
moi, je ne souhaite rien en faire de ce xml et c'est là mon drame ;-)
En fait, comme je n'ai rien à faire mon boss m'a sollicité.
Ce qu'il veut c'est stocker des paramètres d'une appli dans un xml (pour remplacer un .ini)
Il veut pouvoir modifier ce xml dynamiquement ; d'où ma question initiale que je résume :
transformer un xsd en formulaire html
-> valider le formulaire pour obtenir un xml
- "transformer un xsd en formulaire html" : c'est ce que fraoustin t'a expliqué.
- "valider le formulaire pour obtenir un xml" : ça depend de tes contraintes techniques, as tu un serveur, es tu obligé d'utiliser que le HTML et le JS? etc...
que ce qui va y avoir dans ce xml final? que des données issus du formulaire Html? est ce tu dois valider l'integrité des données saisi dans le formulaire Html? et comment (connection à une BD?) ...bref il ya mille et une façon de faire et ça depend de beaucoup de chose, donc essaye de nous donner plus d'info ou des les obtenir de ton chef si tu les a pas encore ;)
Pour l'enregistrement du formulaire :
- il n'y aura que des données du fiormulaire dans le xml final
- pas de validation des données
- je n'ai pas de serveur, donc ça limite (pas de php et Cie)
Dernière tentative, après j'arrête.
Je ne vais pas faire ch... les membres du forum pour répondre à une demande à la c...
Il n'a qu'à trouver un mec qui connait les technos, mon chef
je suis loin d'être un spécialiste mais je pense que javascript pour résoudre ton problème