Bonjour tout le monde,
Mon titre est un peu confus, mais j'ai du mal à trouver en peu de mots ce que je veux . Je précise cependant que je ne suis pas un fort en XML (je viens de commencer) et que j'ai déjà fait des recherches sur internet.
Donc voilà, mon fichier XSD accepte actuellement un fichier XML possédant ce genre de structure :
Tout ce qui n'est pas du namespace préfixé par 'mw' est du xHTML. Avec importation du bon XSD, j'ai réussi à lui faire valider le xHTML sans avoir à la réécrire, et j'ai présenté la balise racine '<master>' comme une extension de type 'Block' (comme l'est (<body> dans le XSD par exemple)) et je lui ai ajouté mon élement '<contentplace>' pour pouvoir faire ce genre de XML.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <mw:master> <div><em>coucou</em></div> <contentplace name="test" /> <mw:master>
Mon XSD :
L'ennui, avec cette façon de faire, c'est que je n'ai pas trouvé comment lui demander d'accepter n'importe quel ordre et occurence de ma balise '<contentplace>' et de balises xHTML, de cette manière :
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 <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.me3w.fr/Namespace" xmlns="http://www.me3w.fr/Namespace" elementFormDefault="qualified" > <!-- Import xHTML 1 Strict tags into code without redefining them --> <xs:import namespace="http://www.w3.org/1999/xhtml" schemaLocation="xhtml1-strict.xsd"/> <xs:complexType name="contentplaceType"> <xs:attribute name="id" type="xs:string" /> </xs:complexType> <!-- Only 'content' tags can be used has direct children elements of 'page' root element --> <xs:complexType name="rootType" xmlns="http://www.w3.org/1999/xhtml"> <xs:complexContent> <xs:extension base="Block"> <xs:sequence> <xs:element name="contentplace" type="contentplaceType" xmlns="http://www.me3w.fr/Namespace" /> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> <xs:element name="master" type="rootType" /> </xs:schema>
Actuellement, mon XSD n'accepte qu'une seule occurence de chaque type ('<contentplace>' ou une balise block xHTML). Je peux mettre maxOccurs à '<contentplace>' en 'unbounded'. Mais c'est pas suffisant, il faudrait que je mette maxOccurs aux balises xHTML, mais ce n'est pas moi qui l'a définit, et je l'appelle comme une extension. De plus, même en ayant fait ça, il faudrait que je redemande un maxOccurs à "unbounded" pour ce qu'il y a globalement dans la racine je suppose.
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 <?xml version="1.0" encoding="ISO-8859-1"?> <mw:master xmlns:mw="http://www.me3w.fr/Namespace" xmlns="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.me3w.fr/Namespace.php page.xsd"> <div style="background-color:green">My name is : </div> <mw:contentplace id="foo1" /> <mw:contentplace id="foo2" /> <ul> <li>toto</li> <li>toto2</li> </ul> <div><strong>Todd</strong></div> </mw:master>
Bref quelqun aurait-til déjà travaillé sur l'occurence d'une combinaison de balises perso et de balises importées ?
Merci à tous ceux qui tenteront de m'aider .
Bonne journée,
Oragon Efreet.
Partager