Strcture dynamique à traiter avec XSD

Strcture dynamique à traiter avec XSD - XML/XSL - Programmation

Marsh Posté le 24-09-2006 à 11:31:35    

Bonjour,
 
Afin de pouvoir valider certains fichiers XML avant de les envoyer à un parseur, j'ai besoin d'écrire un fichier XSD.
Voila mon problème :
 
XML:

Code :
  1. <root>
  2. <structure>
  3.    <id>
  4.     <type>int</type>
  5.    <required>1</required>
  6.    </id>
  7.    <fils>...</fils>
  8.    <autre>...</autre>
  9. </structure>
  10.   <element>
  11.    <id>1</id>
  12.    <fils>...</fils>
  13.    <autre>...</autre>
  14. </element>
  15. </root>


Donc le principe du XSD doit être que <structure> peut contenir des elements quelconques, 1 de chaque type (j'entend par la, 1 seul element id par exemple), ceux-ci devant contenir obligatoirement les elements <type> et <required>. Et pour finir, que les elements contenu dans <element> doivent être les mêmes que ceux de structure...
 
Pour le moment j'ai écris un "embryon" de fichier mais je me trouve déjà confronté à plusieurs problèmes (par exemple qu'il est interdit de mettre un tag <element> dans <any>, ou que je sais pas comment lui dire que confronter les fils de "element" et ceux de "structure" )
 
Merci d'avance pour votre aide :jap:


Message édité par esox_ch le 24-09-2006 à 11:32:00

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 24-09-2006 à 11:31:35   

Reply

Marsh Posté le 06-10-2006 à 15:34:24    

Je pense qu'il faut passer par la création d'un type complexe
 
En général j'ai ça au début de mes XSD ; tu adapteras en fonction de tes propres déclarations.
 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 
voici ce que je te propose
<xsd:complexType name="elt_struct_type">
 <xsd:sequence>
  <xsd:element name="id" type="idType" minOccurs="1" maxOccurs="1" />
  <xsd:element name="fils" type="filsType" minOccurs="1" maxOccurs="1" />
  <xsd:element name="autre" type="autreType" minOccurs="1" maxOccurs="1" />
 </xsd:sequence>
</xsd:complexType>
 
Il faut déclarer idType, filsType et autreType, en tant que nouveaux complexType.  
 
Avec ensuite une déclaration des éléments <structure> et <element> (celui-là je te conseille de trouver un autre nom, parcequ'entre ton <element> et le <xsd:element> servant à la déclaration xsd, je pense que tu vas te paumer)
 
<xsd:element name="structure" type="elt_struct_type" minOccurs="1" maxOccurs="1" />
<xsd:element name="element" type="elt_struct_type" minOccurs="1" maxOccurs="1" />
 
Bien évidemment il faut remettre ça dans le contexte de ton schema global.
 
J'ai fait ça rapidos ; j'espère que ça va t'aider un peu.

Reply

Marsh Posté le 11-11-2006 à 19:33:12    

Merci bien, je viens de voir ton message avec un certain retard :D Je vais tenter d'implémenter tout ça :)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Sujets relatifs:

Leave a Replay

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