Bonjour,
J'ai fait un xsd afin de valider des configurations xml. Mon problème est que l'une de mes balises est obligatoire dans la globalité du fichier xml mais elle ne se trouve pas toujours au même niveau.
En gros, je peux avoir 2 types de configuration.
1er type : (Import est dans le niveau "Conf / Partner / Directory " (on va dire niveau 4). D'autres balises peuvent apparaître aussi à ce niveau. Exemple ici : Download)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
<?xml version="1.0" encoding="UTF-8" ?>
<Conf xmlns:xs="import.xsd">
<Partner id="18557172">
<Directory ...>
<Download ... />
<Import>
<Import_File ...>...</Import_File>
</Import>
</Directory>
</Partner>
</Conf> |
2nd type : (Import est dans le niveau "Conf / Partner " (on va dire niveau 3). Des balises Directory peuvent aussi apparaître à ce niveau.)
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="UTF-8" ?>
<Conf xmlns:xs="import.xsd">
<Partner id="14354047">
<Directory ...>
<Download ... />
</Directory>
<Import>
<Directory ...>
<Import_File ...>...</Import_File>
</Directory>
<Directory ...>
<Import_File ...>...</Import_File>
</Directory>
</Import>
</Partner>
</Conf> |
Voici ma xsd complète :
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- Définition des attributs -->
<xs:attribute name="files">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[^\*].*"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<!-- Définition des Actions -->
<xs:element name="Decompress">
<xs:complexType >
<xs:attribute name="type" type="xs:string" use="optional" />
<xs:attribute ref="files" use="required" />
</xs:complexType >
</xs:element>
<xs:element name="Download" >
<xs:complexType >
<xs:attribute name="url" use="required" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="(http.*)|(www.*)"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="file_name" type="xs:string" use="required" />
<xs:attribute name="frequency" type="xs:integer" use="required" />
</xs:complexType >
</xs:element>
<xs:element name="Import_File">
<xs:complexType mixed="true">
<xs:attribute ref="files" use="required" />
</xs:complexType>
</xs:element>
<xs:element name="Copy">
<xs:complexType >
<xs:attribute ref="files" use="required" />
<xs:attribute name="target" type="xs:string" use="required" />
</xs:complexType >
</xs:element>
<xs:element name="Move">
<xs:complexType >
<xs:attribute ref="files" use="required" />
<xs:attribute name="target" type="xs:string" use="required" />
</xs:complexType >
</xs:element>
<xs:element name="Conf">
<xs:complexType>
<xs:sequence>
<xs:element name="Partner">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:sequence>
<xs:element name="Directory" maxOccurs="unbounded" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element ref="Decompress" maxOccurs="unbounded" minOccurs="0"/>
<xs:element ref="Download" maxOccurs="unbounded" minOccurs="0"/>
<xs:element ref="Copy" maxOccurs="unbounded" minOccurs="0"/>
<xs:element name="Import" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:sequence>
<xs:element name="Directory" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element ref="Import_File" maxOccurs="unbounded" minOccurs="1" />
</xs:sequence>
<xs:attribute name="path" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:sequence>
<xs:element name="Import_File" maxOccurs="unbounded" minOccurs="1" />
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element ref="Move" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="path" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:sequence>
<xs:element name="Import" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Directory" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element ref="Decompress" maxOccurs="unbounded" minOccurs="0"/>
<xs:element ref="Copy" maxOccurs="unbounded" minOccurs="0"/>
<xs:element ref="Download" maxOccurs="unbounded" minOccurs="0" />
<xs:element ref="Import_File" maxOccurs="unbounded" minOccurs="1"/>
<xs:element ref="Move" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="path" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Directory" maxOccurs="unbounded" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element ref="Decompress" maxOccurs="unbounded" minOccurs="0"/>
<xs:element ref="Download" maxOccurs="unbounded" minOccurs="0"/>
<xs:element ref="Copy" maxOccurs="unbounded" minOccurs="0"/>
<xs:element ref="Move" maxOccurs="unbounded" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="path" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:choice>
</xs:sequence>
<xs:attribute name="id" type="xs:integer" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema> |
Lorsque j'essaie de valider ma xsd (avec w3c), j'ai l'erreur suivante :
file:///usr/local/XSV/xsvlog/tmpCpQUSfuploaded:175:7: Invalid: illegal redeclaration of {None}:Directory
J'espère que mon explication a été claire
Savez-vous, comment je pourrais modifier ma xsd pour que ça fonctionne ?
Merci.
Partager