Bonjour,
Je souhaiterais créer un fichier dtd ou xsd pour des fichiers xml qui contiennent plusieurs balises au nom identique mais avec des parents différents. J'ai eu beau chercher, je n'ai rien trouvé qui traite de ce cas particulier. J'ai bien trouvé un post qui posait le même problème mais pas vraiment de réponse.
Voici un exemple de xml :
Dans ce magnifique exemple (que j'ai copié aussi et adapté à mon cas), on peut voir que <paragraphe> peut avoir <contenu> ou <encadre> comme parents. Mon souci est qu'il s'agit bien de 2 balises différentes (l'une a un attribut, l'autre pas)
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 <chapitre> <titre_chapitre>Titre du chapitre</titre_chapitre> <contenu> <titre>Titre du chapitre</titre> <paragraphe>Lorem ipsum dolor si...</paragraphe> <paragraphe>Lorem ipsum dolor si...</paragraphe> <paragraphe>Lorem ipsum dolor si...</paragraphe> ... <encadre titre="Titre de l'encadre"> <paragraphe id="1">Lorem ipsum dolor si...</paragraphe> <paragraphe id="2">Lorem ipsum dolor si...</paragraphe> .... </encadre> </contenu> </chapitre>
De même, <titre> peut être une balise ou un attribut.
Je ne sais absolument pas comment représenter ça sous forme de schéma dtd ou xsd.
Pour résumer, j'aimerais prendre en compte :
- l'existence de deux balises différentes mais de nom identique
- l'existence de deux objets de type différents (élément/attribut) mais de nom identique
Avec un dtd :
J'aurais mis ça, mais ça m'imbrique des paragraphes dans d'autres paragraphes...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <!ELEMENT chapitre (titre_chapitre,contenu)> <!ELEMENT titre_chapitre (#PCDATA)> <!ELEMENT contenu (titre,paragraphe*,encadre)> <!ELEMENT titre (#PCDATA)> <!ELEMENT paragraphe (#PCDATA)> <!ELEMENT encadre (paragraphe)> <!ATTLIST paragraphe id CDATA #IMPLIED > <!ATTLIST encadre titre CDATA #IMPLIED >
Pour le XSD, je viens de commencer, mais dès que j'essaie de nommer deux fois le même élément, la validation renvoie une erreur, même si je les type différemment :
Il paraît que c'est possible, quelqu'un sait comment?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <xs:element name="paragraphe" type="xs:string"/> <xs:element name="paragraphe" type="ct_paragraphe"/> <xs:complexType name="ct_paragraphe"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="id" type="xs:integer"/> </xs:extension> </xs:simpleContent> </xs:complexType>
merci
Partager