[DTD] Passer d'un modele Entité/Association à une DTD

Passer d'un modele Entité/Association à une DTD [DTD] - HTML/CSS - Programmation

Marsh Posté le 14-03-2003 à 19:25:02    

Bonjour a tous :)
 
Je vais sans doute poser une question ridicule pour beaucoup d'entre vous mais en fait j'ai cherché sur pas mal de sites des cas d'école ressemblant à la situation que je vais vous présenter mais je n'ai rien trouvé de vraiment intéressant...
Je fais donc appel aux gourous du XML de ce forum ;)
 
Pour un DM, je dois a partir d'un schéma entité/association créer la DTD associée. Jusque là, ça n'a rien d'insurmontable mais mon problème se pose sur la manière de transcrire les associations (1,N-1,N) avec une DTD :??:  
 
Supposons que je dispose de deux entités Logement et Client reliées par une association Intéresse, on a aussi une entité Immeuble qui regroupe plusieurs logements, on a donc :

Code :
  1. Immeuble -1,N-- Regroupe --1,1- Logement -0,N-- Intéresse --1,N- Client


 
J'avais pensé a ça :
 

Code :
  1. <!ELEMENT Logement (Surface, Prix) >
  2. <!ATTLIST Logement ID CDATA #REQUIRED>
  3. <!ELEMENT Surface (#PCDATA) >
  4. <!ELEMENT Prix (#PCDATA) >
  5. <!ELEMENT Client (Nom, Prenom, Adresse_courante) >
  6. <!ATTLIST Client ID CDATA #REQUIRED>
  7. <!ELEMENT Nom (#PCDATA) >
  8. <!ELEMENT Prenom (#PCDATA) >
  9. <!ELEMENT Adresse_courante (#PCDATA) >
  10. <!ELEMENT Immeuble (Adresse, Logement+) >
  11. <!ATTLIST Immeuble ID CDATA #REQUIRED>
  12. <!ELEMENT Adresse (#PCDATA) >
  13. <!ELEMENT Vente (Client, Logement+, Date) >
  14. <!ATTLIST Vente ID CDATA #REQUIRED>
  15. <!ELEMENT Date (#PCDATA) >
  16. <!ELEMENT Ventes (Vente+) >


 
Mais en fait, on s'aperçoit vite qu'avec un document XML respectant cette DTD, il y aura beaucoup de redondances concernant les informations des Logements qui peuvent être à la fois dans la structure Immeuble et Vente... une idée pour m'aider ? :)


Message édité par Wonder le 14-03-2003 à 19:26:36
Reply

Marsh Posté le 14-03-2003 à 19:25:02   

Reply

Marsh Posté le 14-03-2003 à 19:27:58    

Pour un élément donné tu peux faire les choses suivantes:
 
Un élément A a un et un seul sous élément B
<!ELEMENT A(B)>
 
Un élément A peut avoir un élément B mais maximum un élément
<!ELEMENT A(B?)>
 
Un élément A peut avoir de 0 à N élément(s) B
<!ELEMENT A(B*)>
 
Un élément A peut avoir de 1 à N éléments B
<!ELEMENT A(B+)>
 
voilà en gros c'est ca. Ca t'aide ou pas?
 
Edit: donc en gros si un immeuble à de 1 à N logements tu peux faire
 
<!ELEMENT immeuble(logement+)>
<!ELEMENT logement(....)>


Message édité par darklord le 14-03-2003 à 19:29:12

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 14-03-2003 à 19:35:37    

Merci pour ta réponse DarkLord mais en fait c'est pas la que se situe mon probleme, pour mieux expliquer la situation, voici un exemple du document XML que cette DTD décrit :
 

Code :
  1. <Immeuble ID="1">
  2.   <Adresse>1, rue de la paix</Adresse>
  3.   <Logement ID="1">
  4.     <Surface>80</Surface>
  5.     <Prix>20000</Prix>
  6.   </Logement>
  7. </Immeuble>
  8. <Ventes>
  9.   <Vente ID="1">
  10.     <Date>749876</Date>
  11.     <Client ID="1">
  12.       <Nom>Toto</Nom>
  13.     </Client>
  14.     <Logement ID="1">
  15.       <Surface>80</Surface>
  16.       <Prix>20000</Prix>
  17.     </Logement>
  18.   </Vente>
  19. </Ventes>


 
En fait, mon problème vient du fait de la redondance des informations en gras... y a-t-il moyen d'éviter cette redondance grâce à un autre choix de DTD ?

Reply

Marsh Posté le 14-03-2003 à 20:06:39    

tu cherches dans la mauvaise direction. Le DTD ne fait jamais "que" valider ton document XML. Si tu as un problème de redondance, c'est du coté de ton document XML que tu dois chercher.
 
Tu pourrais par exemple décrire les logements séparément et leur donner un ID et n'utiliser que l'id dans tes autre éléments pour éviter de redonner les infos.
 
Bon c'est un peu tricky mais en l'occurence je ne vois pas mieux


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 14-03-2003 à 20:12:44    

ha vi j'avais pas pensé a ça, très bonne idée même si c'est vrai que ça fait un peu "artisanal" ;)
 
Merci :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed