Está en la página 1de 4

EJERCICIO de DOM (ejemplo “Clínica.

xml”)

Se trata de una clínica médica privada. Esta clínica tiene almacenada en un fichero XML
información sobre el personal sanitario que trabaja en la clínica y las consultas de sus pacientes.
La clínica sólo ofrece servicios de ciertas especialidades: medicina interna, cardiología,
dental y traumatología. De cada médico que trabaja en la clínica tendremos que guardar su
nombre y especialidad.
Los médicos trabajan por turnos. De cada turno habrá que conocer la fecha a la que
corresponde, su hora de comienzo y fin, y el enfermero o enfermera que ayudará a cada médico
de ese turno durante el mismo.
Los médicos pasan sus consultas en estos turnos. Cada consulta, de la que tendremos que
conocer su motivo, tiene una hora asignada y en ella se atiende a un paciente, del que
guardaremos su número de seguridad social y nombre.
Lo normal es que cada consulta también lleve asociado un coste para el cliente, pero también
hay veces en que dependiendo del motivo de la consulta, se la podemos hacer de forma gratuita.
De igual forma, también es posible que en una consulta se le receten al paciente uno o más
medicamentos con su correspondiente importe y normas de aplicación, o que por el contrario no
sea necesario recetarle nada.
A continuación se da como ejemplo el fichero “clínica.xml” que almacena información que
se ajusta a las características que acabamos de describir.

Documento “clínica.xml”
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE clinica SYSTEM "clinica.dtd">
<clinica>
<medico especialidad="dental">
<nombre>Pepe</nombre>
<turno>
<fecha>03/03/2005</fecha>
<hora_ini>08:00:00</hora_ini>
<hora_fin>15:00:00</hora_fin>
<enfermero>Juan</enfermero>
<consulta motivo="revision">
<hora_cons>9:15:00</hora_cons>
<paciente>
<nss>0088996987</nss>
<nombre>Maria</nombre>
</paciente>
</consulta>
<consulta motivo="empaste">
<hora_cons>11:00:00</hora_cons>
<paciente>
<nss>0115660000</nss>
<nombre>Rosa</nombre>
</paciente>
<receta>
<medicamento>penicilina</medicamento>
<posologia>cada 8 horas</posologia>
<importe>25</importe>
</receta>
<importe>60</importe>
</consulta>
</turno>
<turno>
<fecha>04/03/2005</fecha>
<hora_ini>16:00:00</hora_ini>
<hora_fin>17:00:00</hora_fin>
<enfermero>Maria</enfermero>
<consulta motivo="muela">
<hora_cons>16:20</hora_cons>
<paciente>

1/4
<nss>0088996987</nss>
<nombre>Maria</nombre>
</paciente>
<receta>
<medicamento>vademecum</medicamento>
<posologia>cada 8 horas</posologia>
<importe>25</importe>
</receta>
<receta>
<medicamento>estreptop</medicamento>
<posologia>cada 3 horas</posologia>
<importe>43</importe>
</receta>
<importe>50</importe>
</consulta>
</turno>
</medico>
<medico especialidad="cardiologia">
<nombre>Nuria</nombre>
<turno>
<fecha>03/03/2005</fecha>
<hora_ini>08:00:00</hora_ini>
<hora_fin>15:00:00</hora_fin>
<enfermero>Esteban</enfermero>
<consulta motivo="revision">
<hora_cons>12:00:00</hora_cons>
<paciente>
<nss>0088996987</nss>
<nombre>Maria</nombre>
</paciente>
<importe>100</importe>
</consulta>
<consulta motivo="bypass">
<hora_cons>13:00:00</hora_cons>
<paciente>
<nss>9087654654</nss>
<nombre>Jorge</nombre>
</paciente>
<receta>
<medicamento>adiro</medicamento>
<posologia>uno al dia</posologia>
<importe>13</importe>
</receta>
<importe>600</importe>
</consulta>
</turno>
<turno>
<fecha>10/03/2005</fecha>
<hora_ini>16:00:00</hora_ini>
<hora_fin>17:00:00</hora_fin>
<enfermero>Maria</enfermero>
<consulta motivo="electrocardiograma">
<hora_cons>17:10:00</hora_cons>
<paciente>
<nss>0088996987</nss>
<nombre>Maria</nombre>
</paciente>
<receta>
<medicamento>rodogil</medicamento>
<posologia>uno al dia</posologia>
<importe>323</importe>
</receta>
<importe>50</importe>
</consulta>
</turno>
</medico>
</clinica>

Con esta información se pide:


a) Mostrar por pantalla utilizando el árbol DOM, información sobre cada médico referida
a sus turnos. Concretamente para cada médico se mostrará su nombre y los datos de los
turnos que atiende, tal que por cada turno debe aparecer la fecha y hora, el enfermero
que asiste al médico y los nombres de los pacientes que serán atendidos en dicho turno.

2/4
b) Implementar utilizando el árbol DOM, el programa que nos permita obtener a partir del
documento XML del ejemplo, otro documento de salida con información de las
consultas por cada paciente, organizado con un formato distinto al del documento de
entrada.
Por cada paciente habrá que especificar su número de seguridad social, su nombre y el
detalle de sus consultas. Por cada consulta del paciente este detalle contendrá el nombre
del médico, fecha y hora de la consulta.

El DTD (“cons_pac.dtd”) que deberían cumplir los documentos de salida de este


programa sería:
<!ELEMENT cons_pac ((paciente)+)>
<!ELEMENT paciente (nss, nombre, (consulta)*)>
<!ELEMENT consulta (medico, fecha, hora)>
<!ELEMENT nss (#PCDATA)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT medico (#PCDATA)>
<!ELEMENT fecha (#PCDATA)>
<!ELEMENT hora (#PCDATA)>

Al ejecutar el programa utilizando nuestro documento del ejemplo como entrada, como
resultado obtendríamos otro documento XML que seguiría el DTD que se acaba de
describir, y que contendría la siguiente información:
<?xml version = '1.0'?>
<!DOCTYPE cons_pac SYSTEM "cons_pac.dtd">
<cons_pac>
<paciente>
<nss>0088996987</nss>
<nombre>Maria</nombre>
<consulta>
<medico>Pepe</medico>
<fecha>03/03/2005</fecha>
<hora>09:15:00</hora>
</consulta>
<consulta>
<medico>Pepe</medico>
<fecha>04/03/2005</fecha>
<hora>16:20:00</hora>
</consulta>
<consulta>
<medico>Nuria</medico>
<fecha>03/03/2005</fecha>
<hora>12:00:00</hora>
</consulta>
<consulta>
<medico>Nuria</medico>
<fecha>10/03/2005</fecha>
<hora>17:10:00</hora>
</consulta>
</paciente>
<paciente>
<nss>0115660000</nss>
<nombre>Rosa</nombre>
<consulta>
<medico>Pepe</medico>
<fecha>03/03/2005</fecha>
<hora>11:00:00</hora>
</consulta>
</paciente>
<paciente>
<nss>9087654654</nss>
<nombre>Jorge</nombre>
<consulta>
<medico>Nuria</medico>
<fecha>03/03/2005</fecha>
<hora>13:00:00</hora>
</consulta>
</paciente>
</cons_pac>

3/4
NOTA: Si se necesita usar arrays que almacenen un determinado tipo de estructura u objeto de
clase, por ejemplo para almacenar como elementos del array los datos con los que luego hemos
de crear el documento XML de salida, en Java esta estructura de datos se gestionan con la clase
“Vector()”. Los tres métodos principales de esta clase que vamos a necesitar de esta clase son
“int size()”, que nos devuelve el número de elementos del vector, “addElement(Object)”, para
añadir un nuevo elemento al final del vector, y “Object elementAt(int)”, que devuelve el
elemento del vector que ocupa la posición que se le pasa como parámetro.
También es importante conocer, por si se necesitan comparar cadenas de caracteres, que la
función booleana “boolean contentEquals(string)” de la clase “String”, permite comparar dos
cadenas, la que invoca al método, con la que se le pasa como parámetro, y devuelve verdadero o
falso, según que sean o no iguales.

4/4

También podría gustarte