Capture de données composite

Nous avons vu précédemment qu'il est possible de capturer des relations dans IEG. La combinaison de l'entité Relationship et de l'entité RelationshipPage permet de capturer les relations entre les membres d'un foyer. La relation entre les membres d'un foyer est uniquement une forme de relation. IEG prend en charge d'autres types de relation. IEG et le magasin de données permettent d'imbriquer des entités en créant une relation parent-enfant. Vous pouvez observer cette opération dans l'exemple nécessitant de capturer les revenus des membres d'un foyer. L'entité Income est définie de la même manière que toute autre entité. Elle est imbriquée dans l'entité Person en la référençant dans une séquence, comme l'illustre l'exemple de fragment de code suivant :

Figure 1. Schéma parent/enfant
<xsd:element name="Person">
  <xsd:complexType>
    <xsd:sequence minOccurs="0">
      <xsd:element ref="Income" minOccurs="0"
        maxOccurs="unbounded"/>
    </xsd:sequence>
    ...
    <xsd:attribute name="hasIncome" type="IEG_BOOLEAN"
      default="false"/>
  </xsd:complexType>
  ...
</xsd:element>
<xsd:element name="Income">
  <xsd:complexType>
    <xsd:attribute name="type" type="IEG_STRING" />
    <xsd:attribute name="amount" type="IEG_MONEY" />
  </xsd:complexType>
</xsd:element>

Les informations relatives aux revenus peuvent ensuite être regroupées dans un foyer en mettant en boucle chaque membre possédant un revenu. Le critères de boucle vont utiliser une question booléenne "hasIncome" qui sera posée lors du regroupement des informations de chaque personne. Une page dans la boucle peut être mappée sur l'entité Income. La relation imbriquée est ainsi créée, comme illustré ci-dessous :

Figure 2. Création d'entités imbriquées
<loop loop-type="for-each" entity="Person"
        criteria="hasIncome==true">
  <loop loop-type="while" loop-expression="hasMoreIncome" 
          entity="Income">
    <question-page id="IncomePage" entity="Income"
    ...