Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1201
I Semestre 2009
[<=] [home] [<>] [\/] [=>]
CI-1201 Programación II

Tarea #4 [solución]

Transformación de una tabla relacional a un documento XML

      XML es estándard internacional para el intercambio de datos entre aplicaciones. Los documentos XML contienen etiquetas que abren y cierran un bloque de datos, con la ventaja de que también pueden estar anidadas. La etiquetas se encierran entre paréntesis angulares, y la etiqueta que cierra un bloque de datos tiene el mismo nombre que la que lo abre, con la diferencia de incluye el caracter "/".

      Su trabajo consiste en hacer un programa que lea los datos de una tabla de una base de datos relacional para luego almacenarlos en un documento XML.

      Si su programa recibe los datos de esta tabla de arriba, cuyos valores están el la hoja de cáculo "ERAV.xls", producirá un documento XML similar al que se muestra abajo. Note que para producir el documento XML es necesario ordenar la lista de acuerdo a este criterio: [ID_ENT] [REL_ID] [REL_SUB] . Además, la llave para la tabla "ERAV", es la concatenación de estos campos: [ID_ENT]+[REL_ID]+[REL_SUB]+[ATTRIB].

<list>
    <entity ID_ENT="1110111">
        <record REL_ID="0000" REL_SUB="0000" REL_TYPE="e" ATTRIB="1110111" VAL="">
            <attrib REL_TYPE="s" ATTRIB="2220000" VAL="7700002" />
            <attrib REL_TYPE="i" ATTRIB="0001234" VAL="2" />
            <attrib REL_TYPE="a" ATTRIB="1110111" VAL="1110123" />

            <record REL_ID="0101" REL_SUB="0000" REL_TYPE="e" ATTRIB="2220021" VAL="">
                <attrib REL_TYPE="s" ATTRIB="5000002" VAL="7700021" />
                <attrib REL_TYPE="i" ATTRIB="2220011" VAL="88887753" />
                <attrib REL_TYPE="s" ATTRIB="5000005" VAL="7700022" />
        
                <record REL_ID="0201" REL_SUB="0101" REL_TYPE="e" ATTRIB="2220022" VAL="">
                    <attrib REL_TYPE="d" ATTRIB="5000003" VAL="20080923" />
                    <attrib REL_TYPE="f" ATTRIB="5000004" VAL="250.55" />
                </record>

                <record REL_ID="0202" REL_SUB="0101" REL_TYPE="e" ATTRIB="2220022" VAL="">
                    <attrib REL_TYPE="d" ATTRIB="5000003" VAL="20081025" />
                    <attrib REL_TYPE="f" ATTRIB="2220024" VAL="386.12" />
                    <attrib REL_TYPE="f" ATTRIB="5000004" VAL="256.55" />
                </record>

                <record REL_ID="0203" REL_SUB="0101" REL_TYPE="e" ATTRIB="2220022" VAL="">
                    <attrib REL_TYPE="d" ATTRIB="5000003" VAL="20081112" />
                    <attrib REL_TYPE="f" ATTRIB="5000004" VAL="260.33" />
                </record>

                <record REL_ID="0301" REL_SUB="0101" REL_TYPE="e" ATTRIB="2220023" VAL="">
                    <attrib REL_TYPE="d" ATTRIB="5000003" VAL="20051231" />
                    <attrib REL_TYPE="e" ATTRIB="2220023" VAL="" />
                    <attrib REL_TYPE="d" ATTRIB="5000003" VAL="20061101" />
                </record>
            </record>

            <record REL_ID="0102" REL_SUB="0000" REL_TYPE="e" ATTRIB="2220021" VAL="">
                <attrib REL_TYPE="s" ATTRIB="5000002" VAL="7700024" />
                <attrib REL_TYPE="i" ATTRIB="2220011" VAL="77538888" />
                <attrib REL_TYPE="s" ATTRIB="5000005" VAL="7700025" />

                <record REL_ID="0205" REL_SUB="0102" REL_TYPE="e" ATTRIB="2220022" VAL="">
                    <attrib REL_TYPE="d" ATTRIB="5000003" VAL="20090615" />
                    <attrib REL_TYPE="f" ATTRIB="5000004" VAL="325.15" />
                </record>

                <record REL_ID="0301" REL_SUB="0000" REL_TYPE="e" ATTRIB="2220023" VAL="">
                    <attrib REL_TYPE="d" ATTRIB="5000003" VAL="20051231" />
                </record>

                <record REL_ID="0302" REL_SUB="0000" REL_TYPE="e" ATTRIB="2220023" VAL="">
                    <attrib REL_TYPE="d" ATTRIB="5000003" VAL="20061101" />
                </record>
            </record>

        </record>
    </entity>

    <entity ID_ENT="2220222">
        <record REL_ID="0000" REL_SUB="0000" REL_TYPE="e" ATTRIB="0001111" VAL="">
            <attrib REL_TYPE="s" ATTRIB="2220000" VAL="7700001" />

            <record REL_ID="0101" REL_SUB="0000" REL_TYPE="e" ATTRIB="2220023" VAL="">
                <attrib REL_TYPE="s" ATTRIB="5000002" VAL="7700024" />
                <attrib REL_TYPE="i" ATTRIB="2220011" VAL="77538888" />
                <attrib REL_TYPE="s" ATTRIB="5000005" VAL="7700025" />
            </record>

            <record REL_ID="0201" REL_SUB="0000" REL_TYPE="e" ATTRIB="2220024" VAL="">
                <attrib REL_TYPE="d" ATTRIB="5000003" VAL="20051302" />
            </record>
        </record>
    </entity>

</list>

      Incluir en el documento XML los valores para "[REL_ID]" y "[REL_SUB]" es innecesario, pues la estructura jerárquica del documento XML indica claramente la dependencia entre sub-registros, por lo que esos campos pueden omitirse. También puede omitirse el indicador REL_TYPE="e" para cada descriptor de sub-registro junto con el valor nulo VAL="". Por eso no es ambiguo re-escribir algunos de los renglones del documento XML como se muestra en la siguiente figura.

<entity ID_ENT="2220222">
    <record ATTRIB="1110111">
        <attrib REL_TYPE="s" ATTRIB="2220000" VAL="7700001" />

        <record ATTRIB="2220023">
            <attrib REL_TYPE="s" ATTRIB="5000002" VAL="7700024" />
            <attrib REL_TYPE="i" ATTRIB="2220011" VAL="77538888" />
            <attrib REL_TYPE="s" ATTRIB="5000005" VAL="7700025" />
        </record>

        <record REL_TYPE="e" ATTRIB="2220024">
            <attrib ATTRIB="5000003" VAL="20051302" />
        </record>

    </record>
</entity>

      Entregue su tarea por correo electrónico, como lo hizo anteriormente.

[mailto:] Entrega de Tareas

Tiempo de entrega: 1 semana
Modalidad: En parejas

Soluciones

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2009
Derechos de autor reservados © 2009
[home] <> [/\]