Cliquez ici.
Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.Les listes de discussions XMLfr sont à votre disposition pour réagir sur nos articles ou simplement poser une question.Si vous ètes passionnée(e) par XML, pourquoi ne pas en faire votre métier ?XMLfr n'est heureusement pas le seul site où l'on parle de XML. Découvrez les autres grâce à XMLfr et à l'ODP.Les partenaires grâce auxquels XMLfr peut se développer.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.
 Commentaires et questions non techniques.Commentaires et questions techniques.

 
Cliquez ici.

From: Gregoor, Van Der Eyken (geyken@esual.com)
Date: 20/09/2001 - 10:09


Un autre exercice interressant, depuis un Schema ( utilisant des
xsd:element locaux etou globaux j'aimerais construire l'interface HTML
correspondante, pour cela j'utilise un élement racine nommé.
Le problème est le suivant :

Le elements ( ou attributs ) ne possedant pas de type, c'est à dire
conteneurs, crée une <table>, les autres suivant leurs types et la
cardinalité creent soit un input ou un select...

J'arrive à parser de manière locale ( et encore qd le dernier element
il y a une erreur pour aller au parent suivant ) et j'aimerais
appliquer ce raisonement aussi avec des éléments appelés.

exemple Schéma

<?xml-stylesheet type="text/xsl" href="E:\services\htm.xsl"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
elementFormDefault="qualified">
        <xsd:element name="racine">
                <xsd:complexType>
                        <xsd:sequence>
                                <xsd:element name="patient"
maxOccurs="unbounded">
                                        <xsd:complexType>
                                                <xsd:sequence>
                                                        <xsd:element
name="name" type="xsd:string"/>
                                                        <xsd:element
name="address">
        
<xsd:complexType>
        
<xsd:sequence>
        
<xsd:element name="street" type="xsd:string"/>
        
<xsd:element name="apt">
        
<xsd:complexType/>
        
</xsd:element>
        
<xsd:element name="city" type="xsd:string"/>
        
<xsd:element name="state" type="xsd:string"/>
        
<xsd:element name="zip" type="xsd:string"/>
        
<xsd:element ref="phone"/>
        
</xsd:sequence>
        
</xsd:complexType>
                                                        </xsd:element>
                                                        <xsd:element
name="birthdate" type="xsd:string"/>
                                                </xsd:sequence>
                                                <xsd:attribute
name="patientID" use="required" type="xsd:string"/>
                                        </xsd:complexType>
                                </xsd:element>
                        </xsd:sequence>
                </xsd:complexType>
        </xsd:element>
        <xsd:element name="phone">
                <xsd:complexType>
                        <xsd:sequence>
                                <xsd:element name="mobile"
type="xsd:string"/>
                                <xsd:element name="home"
type="xsd:string"/>
                        </xsd:sequence>
                </xsd:complexType>
        </xsd:element>
</xsd:schema>

exemple XSL

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema">
        <xsl:output method="html"/>
        <xsl:param name="page" select="'racine'"/>
        <xsl:template match="/">
                <xsl:text
disable-output-escaping="yes"><![CDATA[<html><body>]]></xsl:text>
                <xsl:apply-templates select="descendant::node()[ (
name()='xsd:element') and @name=$page] " mode="conteneur"/>
                <xsl:text
disable-output-escaping="yes"><![CDATA[</body></html>]]></xsl:text>
        </xsl:template>
        <xsl:template match="node()" mode="conteneur">
                <xsl:if test="name()='xsd:attribute'">
                        <xsl:apply-templates mode="simple" select="."/>
                </xsl:if>
                <xsl:if test="name()='xsd:element'">
                        <xsl:choose>
                                <xsl:when test="not(@type)">
                                        <xsl:text
disable-output-escaping="yes"><![CDATA[<table datasrc='#xmldso'
border='1' width="100%" name="]]></xsl:text>
                                        <xsl:value-of select="@name"/>
                                        <xsl:text
disable-output-escaping="yes"><![CDATA["><tr><td>]]></xsl:text>
                                        <xsl:value-of select="@name"/>
                                </xsl:when>
                                <xsl:when test="@type">
                                        <xsl:apply-templates
mode="simple" select="."/>
                                </xsl:when>
                                <xsl:when test="@ref"/>
                        </xsl:choose>
                </xsl:if>
                <xsl:if test="child::node()">
                        <xsl:apply-templates mode="conteneur"
select="child::node()"/>
                </xsl:if>
                <xsl:if test="not(child::node())">
                        <xsl:if test="following-sibling::node()">
                                <xsl:apply-templates mode="conteneur"
select="following-sibling[1]"/>
                        </xsl:if>
                        <xsl:if
test="position()=last()[name()='xsd:element' or
name()='xsd:attribute']">
                                <xsl:text
disable-output-escaping="yes"><![CDATA[</td></tr></table>]]></xsl:text>
                                <xsl:apply-templates mode="conteneur"
select="following-sibling[1]/parent::node()"/>
                        </xsl:if>
                </xsl:if>
        </xsl:template>
        <xsl:template match="node()" mode="simple">
                <xsl:text
disable-output-escaping="yes"><![CDATA[<tr><td>]]></xsl:text>
                <xsl:value-of select="@name"/>
                <xsl:text disable-output-escaping="yes"><![CDATA[:
<input type=text datafld="]]></xsl:text>
                <xsl:value-of select="@name"/>
                <xsl:text disable-output-escaping="yes"><![CDATA["
name="]]></xsl:text>
                <xsl:value-of select="@name"/>
                <xsl:text
disable-output-escaping="yes"><![CDATA["></td></tr>]]></xsl:text>
        </xsl:template>
        <xsl:template match="node()" mode="list">
                <xsl:text
disable-output-escaping="yes"><![CDATA[<tr><td>]]></xsl:text>
                <xsl:value-of select="@name"/>
                <xsl:text disable-output-escaping="yes"><![CDATA[:
<select type=text datafld="]]></xsl:text>
                <xsl:value-of select="@name"/>
                <xsl:text disable-output-escaping="yes"><![CDATA["
name="]]></xsl:text>
                <xsl:value-of select="@name"/>
                <xsl:text
disable-output-escaping="yes"><![CDATA["></td></tr>]]></xsl:text>
        </xsl:template>
</xsl:stylesheet>

--
Devenez redacteur <XML>fr et contribuez au developpement du
xml francophone (http://xmlfr.org/infos/redacteurs/) !

Liste de diffusion "xml-tech@xmlfr.org" (http://xmlfr.org).

Cette liste est a votre disposition pour discuter en francais de tout sujet technique lie a XML.

Pour resilier votre abonnement, envoyez un message contenant la commande "unsubscribe" a xml-tech-request@xmlfr.org (mailto:xml-tech-request@xmlfr.org?Subject=unsubscribe)



Archive générée par hypermail 2.1.3 le 28/06/2004 - 11:06 UTC

webmaster@xmlfr.org

 

xml tech

Discussions techniques au sujet de XML.

Cette liste est à votre disposition pour discuter en français de tout sujet technique lié à XML.



Devenez rédacteur <XML>fr et contribuez au développement du xml francophone !
Les documents publiés sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot@online.fr  

Conception, réalisation et hébergement