IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Valider XML Discussion :

[DTD] Tags Html dans XML ---> Etendre la dtd du Xhtml


Sujet :

Valider XML

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 30
    Points : 18
    Points
    18
    Par défaut [DTD] Tags Html dans XML ---> Etendre la dtd du Xhtml
    Bonjour a tous.

    Voila, j'ecris une dtd pour mon arbre xml. Jusque la rien de special ..

    Mais j'ai cependant un petit probleme que je n'arrive pas a resoudre :

    j'ai un tag loop.

    Et dedans je voudrais dire que j'accepte tous les tags xhtml.

    Est ce que quelqun sait comment on fait ?

    ou alors de dire que j'accepte n'importe quoi comme tag .

    Voila, si des ptis gourous pouvaient m'aider ça serait cool !

    Merci d'avance



    Rien ne vaut un petit exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <Loop>
    				<tr>
    					<td>
    						<Field id="2">name</Field>
    					</td>
    					<td>
    						<Field id="2">salary</Field>
    					</td>
    				</tr>
    			</Loop>
    Voila, en fait Field peut se trouver la, plus de la mise en forme Xhtml,, donc dans ma dtd j'ai une ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <!ELEMENT Loop ((Field?)*)>
    Mais derriere Field, je voudrais dire que je peux avoir n'importe quel tag de Xhtml. et je sais pas comment on fait ça ...

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    y aurais sinon la solution de mettre tout le html dans une nouvelle structure html :

    C'est a dire :

    au lieu d'avoir ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <Loop>
    				<tr>
    					<td>
    						<Field id="2">name</Field>
    					</td>
    					<td>
    						<Field id="2">salary</Field>
    					</td>
    				</tr>
    			</Loop>

    On pourrait faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    <Loop>
     
          <html>
    		<tr>
    		<td>
          </html>
     
         <Field id="2">name</Field>
     
         <html> </td><td> </html>
         <Field id="2">salary</Field>
         <html> </td> </tr>  </html>
    </Loop>
    Mais ça en rajoute trop des tags html non ?

    ça serait mieux l'autre solution !

    Ou on peut prendre le probleme a l'envers, c'est a dire extendre la dtd du xhtml pour y rajouter ces tags, mais ça semble plus chaud !

    HELP HELP !!



  3. #3
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    pour autoriser n'importe quel modèle de données pour la balise Loop, il suffit d'écrire :

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Merci beaucoup GrandFather !! c'etait si simple que je trouvais pas !!

    Merci !!!

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Aie, y a un petit probleme :

    c'est que dans Loop, je vais utiliser des <tr>, <td> et autre tag html, et il me met une erreur comme quoi y sont pas déclarés.

    Parce que dans ma dtd, je n'ai pas de <!ELEMENT tr blablabla>

    Je l'ai dans l'os la ?





    je vous donne l'exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE Tool SYSTEM "structure.dtd">
    <Tool Output="PHP">
    		<Connection  id = "FIRST">
    			<Setup>
    				<Driver>org.gjt.mm.mysql.Driver</Driver>
    				<LocationURL>jdbc:mysql://33306/saiealdb</LocationURL>
    				<User> toto </User>
    				<Password> titi </Password>
    		</Setup>
    		<Resultset>
    			<Sql>select * from Table</Sql>
    			<Loop>
    				<tr>
    					<td><Field id="2">name</Field></td>
    					<td><Field id="2">salary</Field></td>
    				</tr>
    			</Loop>
    		</Resultset>
    	</Connection>
    </Tool>



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!ELEMENT Tool (Connection*)>
    <!ATTLIST Tool Output (PHP | ASP | JSP) #REQUIRED>
     
    <!ELEMENT Connection (Setup, Resultset)>
    <!ATTLIST Connection id ID #REQUIRED>
     
    <!ELEMENT Setup (Driver, LocationURL, User, Password)>
    <!ELEMENT Driver (#PCDATA)>
    <!ELEMENT LocationURL (#PCDATA)>
    <!ELEMENT User (#PCDATA)>
    <!ELEMENT Password (#PCDATA)>
    <!ELEMENT Resultset (Sql, (Loop?), ((Field)?)*) >
    <!ELEMENT Sql (#PCDATA)>
    <!ELEMENT Loop ANY >
    <!ELEMENT Field  (#PCDATA)>
    <!ATTLIST Field id ID #REQUIRED>
    je galere dur la ...

  6. #6
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Tu peux inclure la DTD XHTML dans ta DTD, en utilisant une entité paramètre externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?xml version="1.0" encoding="ISO-8859-1"?> 
    <!ELEMENT Tool (Connection*)> 
    <!ATTLIST Tool Output (PHP | ASP | JSP) #REQUIRED> 
     
    <!ELEMENT Connection (Setup, Resultset)> 
    <!ATTLIST Connection id ID #REQUIRED> 
     
    <!ELEMENT Setup (Driver, LocationURL, User, Password)> 
    <!ELEMENT Driver (#PCDATA)> 
    <!ELEMENT LocationURL (#PCDATA)> 
    <!ELEMENT User (#PCDATA)> 
    <!ELEMENT Password (#PCDATA)> 
    <!ELEMENT Resultset (Sql, (Loop?), ((Field)?)*) > 
    <!ELEMENT Sql (#PCDATA)> 
    <!ELEMENT Loop ANY > 
    <!ELEMENT Field  (#PCDATA)> 
    <!ATTLIST Field id ID #REQUIRED> 
     
    <!ENTITY % DTDXHTML SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    %DTDXHTML;

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Super Grand FAther, ça marche niquel !!!!


    Le probleme de ça c'est que je ne peux pas tout inserer ...

    J'explique :

    ça ça marche : je peux valider ça avec la dtd du dessus.
    J'ai une structure Tool et dans Display, je peux mettre des tags Html.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    <Tool Output="PHP">
    				<Connection id="C1">
    					<Setup>
    						<Driver>org...</Driver>
    						<LocationURL>jdbc:mysql://33306/saiealdb</LocationURL>
    						<User> toto </User>
    						<Password> titi </Password>
    					</Setup>
    					<Resultset>
    						<Sql>select * from Table</Sql>
    						<Display>
    							<table width="75%" border="1">
    								<Loop>
    									<tr>
    										<td>
    											<Field id="F1">name</Field>
    										</td>
    										<td>
    											<Field id="F2">salary</Field>
    										</td>
    									</tr>
    								</Loop>
    							</table>
    						</Display>
    					</Resultset>
    				</Connection>
    			</Tool>
    Le probleme de ceci au dessus est que c'est déja pas mal, mais que j'aimerai inclure ça directement dans un grand fichier Xhtml.
    J'ai donc deux solutions :
    -Mettre tout le html dans les tags display
    - ou inclure la structure dans un fichier normal, dans les tags body par exemple.

    Et c'est celle la qui me plait bien :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html SYSTEM "xhtml_dtds\xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    	<head>
    		<title>Example XHTML document</title>
    	</head>
    	<body>
    		<p align="center">Example of Xhtml, static page</p>
    		<br/>
    		<br/>
    		<br/>
    		<div align="center">
    			<Tool Output="PHP">
    				<Connection id="C1">
    					<Setup>
    						<Driver>org...</Driver>
    						<LocationURL>jdbc:mysql://33306/saiealdb</LocationURL>
    						<User> toto </User>
    						<Password> titi </Password>
    					</Setup>
    					<Resultset>
    						<Sql>select * from Table</Sql>
    						<Display>
    							<table width="75%" border="1">
    								<Loop>
    									<tr>
    										<td>
    											<Field id="F1">name</Field>
    										</td>
    										<td>
    											<Field id="F2">salary</Field>
    										</td>
    									</tr>
    								</Loop>
    							</table>
    						</Display>
    					</Resultset>
    				</Connection>
    			</Tool>
    		</div>
    		<p align="center">&nbsp;</p>
    		<p>&nbsp;</p>
    	</body>
    </html>

    Et en fait c'est ça que j'aimerai faire marcher.
    Pour les deux solutions , on doit modifier la dtd du xhtml parce que dans body, j'aurai de toute façon la structure tool pour la premiere solution.
    les champs Field pour la deuxieme.

    parce que la, y va dire que dans body, il veut pas de structure Tool, parce qu'elle n'est pas déclarée dans la dtd du xhtml.

    /************** What I need ***************/

    Finalement; j'aurai besoin d'etendre le xhtml, c'est a dire de modifier la dtd de celui ci pour rajouter une structure tool dans le body.

    J'ai donc téléchargé les dtd du xhtml, dedans j'ai fait un mien vers ma dtd externe tool comme ceci comme suggéré par GrandFA:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
         <!ENTITY % Tool SYSTEM "../structure.dtd">
         %Tool;

    Puis j'ai regardé le fichier :

    1er essai : inclure tool dans html, c'est facile la ligne est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
        <!ELEMENT html (head, body)>

    Donc la c'est facile, on rajoute tool et on est tranquille.

    Mais moi je veux a l'interieur de body, et la declaration de body est incomprehensible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <!ELEMENT body %Flow;>
    Flow c'est une entité déclaréé=e comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
         ...
         <!ENTITY % heading "h1|h2|h3|h4|h5|h6">
         <!ENTITY % lists "ul | ol | dl | menu | dir">
         <!ENTITY % blocktext "pre | hr | blockquote | address | center | noframes">
         <!ENTITY % block "p | %heading; | div | %lists; | %blocktext; | isindex |fieldset | table">
         <!ENTITY % Block "(%block; | form | %misc;)*">
     
         <!-- %Flow; mixes Block and Inline and is used for list items etc. -->
         <!ENTITY % Flow "(#PCDATA | %block; | form | %inline; | %misc;)*">


    En gros ça regroupe des trucs. Le probleme c'est que je trouve pas la syntaxe pour rajouter ma structutre tool derriere.

    J'utilise XmlSpy pour verifier la syntaxe et j'ai des erreurs si je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
         <!ELEMENT body (%Flow; %Tool)>
         ou  
     
         <!ELEMENT body %Flow; Tool>

    Avec ou sans parentheses ...

    Si quelqun pouvait m'aider, ça serait sympa parce que je vois pas comment attaquer le probleme !

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    En relisant le truc, je me demande si quelqun va reussir a me comprendre !


    C'est sur que c'est pas un problème de pacotille pour un non expert Xml .

    Enfin merci a ceux qui m'aide !!

    Ps : promis je ferai un super résumé a la fin !

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    La syntaxe n'est simplement pas bonne, mais ce n'est pas le seul problème. Tool n'es pas un élément de Body,

    Tool n'est pas directement dans votre exemple, c'est un élément de div. Donc, il faudrait préciser dans la déclaration de div, que la division peut contenir une balise tool. Mais je suppose que vous ne vous ne souhaitez pas non plus n'être limité qu'aux divisions.

    Il faut alors identifier :

    • Tool va être insété inline (comme <b>, <a>, etc.) ?
    • Tool va être affiché comme un bloc (<div>, <ul>, etc.) ?
    • Tool ne peut être inclut que dans balises très larges telles que <body> ou <iframe>.


    Je n'en sais à peu près rien pour vous, mais je vais supposer que ca peut correspondre à un bloc, donc ne peut être contenu que par des blocs ou des éléments plus larges, mais ne pourra pas être inclu inline.

    Vous devrez alors modifier la ligne correspondante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <!ENTITY % block "p | %heading; | div | %lists; | %blocktext; | isindex |fieldset | table | Tool">

  10. #10
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Merci beaucoup de ton aide !!

    Je vais regarder ça de plus près et te dirait si ça marche.

    merci en tout cas de m'aider, je savais pas que cette dtd marchait par block, inline ...

    Je vais tricoter donc et voir ce que je peux faire avec

    Merci, Merci !!

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    D'accord j'ai compris un peu comment ça marche.

    pour l'inclusion de Tool, pas de problème.

    mais ensuite a l'interieiur de tool,j'ai cette structure la:
    En gros dans Display, je peux avoir n'importe quel tag Xhtml.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <Display>
    	<table width="75%" border="1">
    	<Loop>
    		<tr>
    			<td>
    			      <Field id="F1">name</Field>
    			</td>
    			<td>
    				<Field id="F2">salary</Field>
    			</td>
    		</tr>
    	</Loop>
    	</table>
    </Display>

    Il faudrait donc que je dise apres pour chaque tag Xhtml (Table, td, <p> ...) , que il peut contenit Loop et Field basiquement.

    Je veux pas trop t'embeter avec ça, connais tu un site internet ou cette dtd est expliquée un peu ?

    Comme ça je pourrai essayer de resoudre ça moi meme sans t'embeter quoi.

    Si tu penses que c'est pas possible, je peux toujours separer la structure tool et la prser separement avec la methode grand fa qui marche.
    mais c'est sue que si j'arrivais a faire ça, ça serait la grande classe quand meme


    j'avais une idée aussi, c'etait de faire :

    DTDXHTML modifiée a un lien sur DTD structure qui elle a un lin sur la dtd vraie de Xhtml.

    Comme ça, quand ça parse : Html ok, tiens y a tool, hop on analyse tool, et on sait que dans diplay je peux avoir any de la vraie Xhtml.

    mais ça braille parce que tout est déclaré 2 fois ... logique en fait, la recursivité dtdienne reste a inventer .


    Merci de ton aide en tout cas, ça me permet d'avancer !


  12. #12
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Plutôt que de modifier la DTD XHTML, ce qui n'est pas recommandable au vu de sa complexité et du cauchemar de maintenance que ça représente, il vaut mieux utiliser une propriété des entités paramètres qui est qu'en cas de déclarations multiples de la même entité, seule la première est valable et les autres sont ignorées.

    Pour redéfinir les entités paramètres de la DTD XHTML, il suffit de le faire dans la DTD où elle est appelée, et avant son inclusion. Il faut prendre soin par contre qu'aucune entité paramètre ne soit utilisée avant d'être déclarée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?xml version="1.0" encoding="ISO-8859-1"?> 
    <!ELEMENT Tool (Connection*)> 
    <!ATTLIST Tool Output (PHP | ASP | JSP) #REQUIRED> 
     
    <!ELEMENT Connection (Setup, Resultset)> 
    <!ATTLIST Connection id ID #REQUIRED> 
     
    <!ELEMENT Setup (Driver, LocationURL, User, Password)> 
    <!ELEMENT Driver (#PCDATA)> 
    <!ELEMENT LocationURL (#PCDATA)> 
    <!ELEMENT User (#PCDATA)> 
    <!ELEMENT Password (#PCDATA)> 
    <!ELEMENT Resultset (Sql, (Loop?), ((Field)?)*) > 
    <!ELEMENT Sql (#PCDATA)> 
    <!ELEMENT Loop ANY > 
    <!ELEMENT Field  (#PCDATA)> 
    <!ATTLIST Field id ID #REQUIRED> 
     
    <!-- on place ici les entités paramètres de la DTD XHTML qu'on veut redéfinir -->
    <!-- Ne pas oublier de placer ici également la déclaration de lists, blocktext et heading --> 
    <!ENTITY % block "p | %heading; | div | %lists; | %blocktext; | isindex |fieldset | table | Tool"> 
     
    <!ENTITY % DTDXHTML SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    %DTDXHTML;
    C'est le même mécanisme qui est mis en oeuvre pour pouvoir modifier et personnaliser les DTD de Docbook, ce qui évite de mettre son nez dans les milliers de lignes qui les composent...

  13. #13
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    You take point !!!

    mais ou est ce que je pourrai trouver un document expliquant comment ça marche cette dtd pour savoir quelle ligne je dois modifié ?

    ca existe peut etre pas

  14. #14
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut un autre problem comme ca - HTML dans XML
    (en anglais I'm exporting user references and portfolio into XML format, but some of the XML tags can contain HTML tags (I'm using escape expressions ..)
    Un example: http://refsbook.com/xml/fbernard

    Your suggestion seems to be a good solution of the problem in general, but my problem is that some HTML tags can be invalid - not closed (for example <br>). Can the m18n method be used even in such case??

    Thanks!

Discussions similaires

  1. probleme tags html dans un xml
    Par outhman83 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 25/02/2009, 17h32
  2. [XSLT] inclure des balises html dans xml
    Par paty03 dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 25/02/2008, 14h13
  3. html dans Xml
    Par Tukan dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 23/06/2007, 12h58
  4. Réponses: 2
    Dernier message: 20/09/2006, 21h37
  5. Réponses: 7
    Dernier message: 21/02/2006, 17h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo