Captura de datos compuestos

Hemos visto anteriormente que es posible capturar relaciones en IEG. La combinación de la entidad de relación y la página de relaciones proporcionan un mecanismo adecuado para capturar las relaciones entre las personas de una unidad familiar. La relación entre las personas de una unidad familiar es sólo una forma de relación. IEG soporta otros tipos de relaciones. IEG y el DS permiten que las entidades se aniden creando una relación de padre e hijo. Esto puede verse en el ejemplo donde hay un requisito para capturar los ingresos de las personas de una unidad familiar. Una entidad Ingresos se define igual que cualquier otra entidad. Se anida en la entidad de Persona haciendo referencia a la misma en una secuencia, como se muestra en el siguiente fragmento de código de ejemplo:

Figura 1. Esquema de padre/hijo
<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>

A continuación, se puede recopilar información de ingresos para las personas de una unidad familiar poniendo en un bucle cada persona que tiene ingresos. Los criterios de bucle utilizarán una pregunta booleana "hasIncome" que se formulará al recopilar los detalles de cada persona. Una página dentro del bucle se puede correlacionar con la entidad de ingresos creando así la relación anidada, como se muestra a continuación:

Figura 2. Creación de entidades anidadas
<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"
    ...