Bonjour à tous,

Je tente de réaliser un schéma aussi contraignant que possible pour des mesures de laboratoire et butte sur un point.

Mes mesures doivent être datées et affublées d'une heure de mesure. Ces informations sont parfois données sur un set de mesure (heure de début et heure de fin) et parfois sur chaque mesure individuellement.

Je détaille un peu : ma balise "mfile" représente virtuellement un fichier de prise de mesures. Elle possède l'élément "filename" qui donne le "vrai" fichier d'où viennent les infos, parfois "une date, une heure de début, une heure de fin" (si ce n'est pas donné dans les mesures par la suite), suivi d'un set de mesures (en nombre quelconque) représentées chacune par la balise "m".

Ces mesures "m" peuvent contenir : une date et un temps (si pas donné avant), une série de mesures de température, résistance, pression etc...

Voici ce que ça donne (qui fonctionne) pour le moment (je vous ai extrait l'élément mfile, lui-même fils de quelques éléments mais je vous épargne le reste en bonne âme que je suis!)

Code :
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
 
      <xs:element name="mfile" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="filename" type="xs:string" minOccurs="1" maxOccurs="1"/>
            <xs:element name="date" type="xs:date" minOccurs="0" maxOccurs="1"/>
            <xs:element name="time" type="limittime" minOccurs="0" maxOccurs="2"/>
            <xs:element name="m" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:choice minOccurs="1" maxOccurs="unbounded">
                        <xs:element name="date" type="xs:date"/>
                        <xs:element name="time" type="xs:time"/>
                        <xs:element name="r" type="measurement"/>
                        <xs:element name="t" type="measurement"/>
                        <xs:element name="rh" type="measurement"/>
                        <xs:element name="p" type="measurement"/>
                        <xs:element name="v" type="measurement"/>
                    </xs:choice>
                </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="type" type="xs:string" use="required"/>
          <xs:attribute name="device" type="xs:string" use="required"/>
        </xs:complexType>
      </xs:element>
J'aimerais maintenant être plus contraignant sur les histoires de temps. Je veux que si on donne une date à un endroit (soit avant le set de mesures soit dans les mesures), on donne obligatoirement une heure. J'ai pensé utiliser un type "dateTime", je tenterai d'implémenter ça comme ça.

Mais j'aimerais surtout pouvoir faire en sorte que si les indications de temps ont été données en tant que "date début et fin" elles ne puissent plus l'être dans les mesures et réciproquement!

Mes habitudes de programmateurs voudraient utiliser une sorte de booléen et du "if/else" mais je doute que ce soit possible... Une idée?