IEG permite que se creen relaciones de asociación entre entidades. Esto es útil porque una restricción se aplica a entidades anidadas y listas anidadas que sólo pueden estar anidadas en dos niveles. El uso de relaciones asociadas proporciona una alternativa efectiva a la anidación de entidades en tres niveles.
Por ejemplo, suponga que es necesario registrar información de empleo para las personas de una unidad familiar. Se puede recopilar información de empleo independientemente de la información de ingresos ya que pueden haber varios ingresos para un determinado empleo.
Una vez que se ha recopilado la información de ingresos y empleo y se han creado las entidades, se puede realizar la asociación entre las entidades. La asociación se realiza creando una entidad de "relación". La entidad de relación es normalmente "propiedad" de una de las entidades que participan en la relación y se representa como una secuencia igual que con otros tipos de relaciones.
La definición de una entidad de relación necesita poder identificar la entidad relacionada por lo tanto se debe definir una clave en la entidad relacionada. Para aplicar esto en el ejemplo de ingresos y empleo, el tipo de entidad Empleo tendrá una clave, se definirá un tipo de entidad EmploymentRelationship y la entidad de ingresos será propietaria de una secuencia de EmploymentRelationships, como se indica a continuación:
<xsd:element name="Employment"> <xsd:complexType> <xsd:attribute name="employmentID" type="d:SVR_KEY" /> <xsd:attribute name="employer" type="IEG_STRING" /> <xsd:attribute name="employmentType" type="IEG_STRING" /> </xsd:complexType> <xsd:key name="Employment_Key"> <xsd:selector xpath="./Employment" /> <xsd:field xpath="@employmentID" /> </xsd:key> </xsd:element> <xsd:element name="Income"> <xsd:complexType> <xsd:sequence minOccurs="0"> <xsd:element ref="EmploymentRelationship" minOccurs="0" maxOccurs="unbounded" /> </xsd:sequence> <xsd:attribute name="type" type="IEG_STRING" /> <xsd:attribute name="amount" type="IEG_MONEY" /> </xsd:complexType> </xsd:element> <xsd:element name="EmploymentRelationship"> <xsd:complexType> <xsd:attribute name="employmentID" type="d:SVR_KEY" /> </xsd:complexType> </xsd:element>
Entonces la asociación se puede capturar en el script definiendo una lista de preguntas y especificando un atributo de entidad de enlace que hace referencia a la clave de la entidad relacionada. Siguiendo en el ejemplo, en una página correlacionada con la entidad de ingresos se puede definir una lista de preguntas especificando la clave de la EmploymentRelationship utilizada para identificar la entidad de empleo.
Las preguntas de lista son construcciones que permiten al usuario elegir en una lista de entidades. Para obtener más detalles, consulte Preguntas de lista.
<question-page id="IncomePage" entity="Income" ... <cluster> <layout> <label-width>0</label-width> </layout> <list-question link-entity="EmploymentRelationship.employmentID" entity="Employment" single-select="true"> <label id="SelectEmployer.Label"> <![CDATA[Seleccionar empleador]]> </label> <item-label> <label-element attribute-id="employer" /> </item-label> </list-question> </cluster> </question-page>