| 
  Universidad de Costa Rica  | 
 | 
| ![[<=]](../../../img/back.gif)  ![[home]](../../../img/home.gif)  | ![[<>]](../../../img/index.gif)  | ![[\/]](../../../img/bottom.gif)  ![[=>]](../../../img/next.gif)  | 
     
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 un archivo XML y le extraiga los datos para luego almacenarlos en una tabla de una base de datos relacional. Use la gramática XML que le fue entregada en clase para escribir el programa C++.
| 
<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" VAL="">
            <attrib ATTRIB="5000003" VAL="20051302" />
        </record>
    </record>
</entity>
 | 
     
Si su programa recibe este documento XML de arriba, 
producirá una tabla de para la relación 
"ERAV" vista en clase, cuyos valores están el 
la hoja de cáculo "ERAV.xls". Asegúrese 
de que su programa es capaz de reconocer cualquier documento XML, 
aunque los únicos que transforme a formato tabular son los 
que tienen una estructura similar a la del documento de este 
ejemplo.
|   | 
Entregue su tarea por correo electrónico, como lo hizo anteriormente.
| 
 | 
![[mailto:]](../../../img/mailbox.gif) Adolfo Di Mare <adolfo@di-mare.com>.
  Adolfo Di Mare <adolfo@di-mare.com>.
| ![[home]](../../../img/home.gif)  |   | ![[/\]](../../../img/top.gif)  |